1 00:00:00,000 --> 00:00:04,000 Vale, pues venga, vamos a completar ya con este. 2 00:00:04,000 --> 00:00:07,000 ¿Vale? Ahora me preguntas si quieres después. 3 00:00:07,000 --> 00:00:11,000 Ah, vale. De todas maneras, luego si quieres te lo mido, de todas maneras. 4 00:00:11,000 --> 00:00:14,000 Vale, que está pausado. 5 00:00:16,000 --> 00:00:21,000 Vale, pues a ver, de nuevo le he denunciado entender exactamente lo que pide 6 00:00:21,000 --> 00:00:24,000 y luego ya ver cómo lo hago. 7 00:00:24,000 --> 00:00:27,000 Pero la primera parte de entender exactamente qué tengo que hacer, 8 00:00:28,000 --> 00:00:31,000 me pongo a programar así, a tirar líneas de código por las bordas, 9 00:00:31,000 --> 00:00:36,000 esa primera parte es mucho más importante de la que creéis. 10 00:00:36,000 --> 00:00:40,000 Aquí, estoy todo el rato viendo caracteres, un carácter, un carácter, un carácter. 11 00:00:40,000 --> 00:00:44,000 Si me introduce uno que no sea letra mayúscula, le aviso. 12 00:00:44,000 --> 00:00:47,000 No es letra mayúscula, un carácter, un carácter, un carácter. 13 00:00:47,000 --> 00:00:50,000 Cuando yo introduzco la Z mayúscula, se acabó. 14 00:00:50,000 --> 00:00:52,000 Luego ahí ya empiezo a ver, ¿vale? 15 00:00:52,000 --> 00:00:54,000 Otra vez un bucle, un bucle que está todo el rato, 16 00:00:54,000 --> 00:00:57,000 le he carácter, le he carácter, le he carácter, otra vez un bucle. 17 00:00:57,000 --> 00:00:58,000 ¿Qué tipo de bucle? 18 00:00:58,000 --> 00:01:02,000 Bueno, hombre, pues como yo no sé cuántos caracteres voy a pedir, 19 00:01:02,000 --> 00:01:05,000 porque es hasta que introduzca Z, de nuevo un guay. 20 00:01:05,000 --> 00:01:08,000 Y planto la condición que sea. 21 00:01:08,000 --> 00:01:10,000 Y ahora ya, ¿cuál es el resultado final? 22 00:01:10,000 --> 00:01:14,000 Pues de todos esos caracteres que se han introducido, 23 00:01:14,000 --> 00:01:20,000 los que sean letras mayúsculas y solo eso, mostrarlos concatenados, ¿vale? 24 00:01:20,000 --> 00:01:26,000 Entonces, aquí, la solución, la solución ideal, 25 00:01:26,000 --> 00:01:28,000 pues lo que hemos hecho siempre. 26 00:01:28,000 --> 00:01:31,000 Vale, yo sé que una concatenación de un carácter sobre otro, 27 00:01:31,000 --> 00:01:33,000 un carácter sobre otro, un carácter sobre otro, 28 00:01:33,000 --> 00:01:37,000 responde como si fuera una suma acumulativa, ¿verdad? 29 00:01:37,000 --> 00:01:42,000 Bueno, pues entonces vamos a reproducir ese ejercicio. 30 00:01:42,000 --> 00:01:44,000 Primero me hago el bucle de lectura. 31 00:01:44,000 --> 00:01:48,000 Bueno, pues el bucle de lectura, para variar, 32 00:01:48,000 --> 00:01:50,000 me lo voy a hacer con un do while. 33 00:01:50,000 --> 00:01:53,000 El bucle de lectura, ¿qué hago aquí dentro? 34 00:01:53,000 --> 00:01:55,000 ¿Qué tengo que hacer varias veces? 35 00:01:55,000 --> 00:01:57,000 Leer carácter. 36 00:01:57,000 --> 00:02:00,000 Si el carácter no es mayúscula, aviso. 37 00:02:00,000 --> 00:02:03,000 Y si es mayúscula, miro a ver qué hago con él. 38 00:02:03,000 --> 00:02:05,000 Bueno, pues leer carácter. 39 00:02:05,000 --> 00:02:08,000 Cada uno a lo mejor habréis optado. 40 00:02:08,000 --> 00:02:12,000 Yo el carácter leído, he declarado una variable char, 41 00:02:12,000 --> 00:02:15,000 pero como es un único carácter, para que se guarde en char. 42 00:02:15,000 --> 00:02:16,000 ¿Vale? 43 00:02:16,000 --> 00:02:19,000 Y ahora, para no liarnos con el escáner, 44 00:02:19,000 --> 00:02:23,000 cuando leemos texto, estamos usando next line solamente, 45 00:02:23,000 --> 00:02:26,000 para leer texto. 46 00:02:26,000 --> 00:02:29,000 Y entonces, si yo uso next line, 47 00:02:29,000 --> 00:02:33,000 esto me devuelve el carácter leído en modo string, ¿verdad? 48 00:02:33,000 --> 00:02:36,000 Me lo devuelve como string, me lo devuelve como string. 49 00:02:36,000 --> 00:02:39,000 Pero yo solo quiero el carácter en la primera posición. 50 00:02:40,000 --> 00:02:45,000 Recordad este método, que te devuelve, dado un string, 51 00:02:45,000 --> 00:02:48,000 en mi caso, este string que acabo de leer, 52 00:02:48,000 --> 00:02:51,000 dado un string, dado un string, 53 00:02:51,000 --> 00:02:55,000 ese método me devuelve el carácter en la posición que yo quiera. 54 00:02:55,000 --> 00:02:58,000 Yo quiero la primera, la primera. 55 00:02:58,000 --> 00:03:01,000 Vale, pues por eso pongo cero, cero es la primera. 56 00:03:01,000 --> 00:03:05,000 Bueno, pues ahora, esto es el carácter leído del teclado, 57 00:03:05,000 --> 00:03:08,000 que ya puedo guardar en mi variable char. 58 00:03:08,000 --> 00:03:12,000 El next line solo lo tengo que guardar en string, 59 00:03:12,000 --> 00:03:16,000 no hay otra, porque scan next line me devuelve en string. 60 00:03:16,000 --> 00:03:19,000 Pero si yo le saco el carácter en la posición cero, 61 00:03:19,000 --> 00:03:23,000 eso ya es un char, eso ya es un char y lo puedo guardar en char. 62 00:03:23,000 --> 00:03:26,000 Vale, pues eso para leer el carácter. 63 00:03:26,000 --> 00:03:30,000 Ahora, este bucle será mientras el carácter sea diferente de la Z mayúscula. 64 00:03:30,000 --> 00:03:35,000 Como recordáis que los char y los números son perfectamente intercambiables, 65 00:03:35,000 --> 00:03:38,000 según la correspondencia de la tabla ASCII, 66 00:03:38,000 --> 00:03:40,000 pues uno se busca la tabla ASCII. 67 00:03:40,000 --> 00:03:43,000 Oye, ¿y la Z mayúscula cuál es? 68 00:03:43,000 --> 00:03:52,000 Pues la Z mayúscula es la noventa. 69 00:03:52,000 --> 00:03:54,000 ¿Cómo la Z? 70 00:03:54,000 --> 00:03:56,000 ¿No lo estáis viendo? 71 00:03:56,000 --> 00:03:57,000 Ah, vale. 72 00:03:57,000 --> 00:04:00,000 La noventa, la Z mayúscula es la noventa. 73 00:04:00,000 --> 00:04:04,000 Pues ya está, tengo la condición perfectamente hecha. 74 00:04:04,000 --> 00:04:05,000 ¿Vale? 75 00:04:05,000 --> 00:04:07,000 Mientras mi carácter sea diferente de noventa. 76 00:04:07,000 --> 00:04:11,000 Entonces, leo mientras sea diferente de noventa. 77 00:04:11,000 --> 00:04:15,000 A ver, ¿qué habéis leído con next line? 78 00:04:15,000 --> 00:04:22,000 Pues entonces tendríais que guardar una variable string. 79 00:04:22,000 --> 00:04:27,000 Vamos a llamarlo char leído, para distinguir la de la otra. 80 00:04:27,000 --> 00:04:30,000 ¿Qué habéis leído con next line sin más? 81 00:04:30,000 --> 00:04:34,000 Entonces hay que guardar en variable string. 82 00:04:34,000 --> 00:04:43,000 Imaginaos que en lugar de así, estáis leyendo así. 83 00:04:43,000 --> 00:04:44,000 ¿Vale? 84 00:04:44,000 --> 00:04:46,000 Entonces esto va a una string. 85 00:04:46,000 --> 00:04:52,000 Pero entonces ya la condición, la condición esta del while, no será esta. 86 00:04:52,000 --> 00:04:56,000 La condición del while entonces ahora tendrá que ser, 87 00:04:56,000 --> 00:05:09,000 mientras mi cadena leída no sea igual a Z. 88 00:05:09,000 --> 00:05:10,000 ¿Vale? 89 00:05:10,000 --> 00:05:11,000 Me da igual una cosa que otra. 90 00:05:11,000 --> 00:05:14,000 Lo que importa es que sepáis manejarlo todo. 91 00:05:14,000 --> 00:05:18,000 El carácter es un tipo de dato, un carácter. 92 00:05:18,000 --> 00:05:22,000 Y un carácter además es intercambiable con un número entero. 93 00:05:22,000 --> 00:05:25,000 Y se compara con el igual, doble igual, como sea. 94 00:05:25,000 --> 00:05:27,000 Porque es una variable primitiva. 95 00:05:27,000 --> 00:05:33,000 Los string son cadenas de texto que se comparan con otras cadenas de texto, 96 00:05:33,000 --> 00:05:34,000 con el equals. 97 00:05:34,000 --> 00:05:36,000 No con el doble igual. 98 00:05:36,000 --> 00:05:39,000 Entonces si char leído es la cadena de texto, el string Z, 99 00:05:39,000 --> 00:05:41,000 y lo quiero comparar con el string que sea, 100 00:05:41,000 --> 00:05:43,000 y lo quiero comparar con Z, 101 00:05:43,000 --> 00:05:45,000 tendrá que ser con el igual. 102 00:05:45,000 --> 00:05:49,000 Y si es que no sea igual, el no delante. 103 00:05:49,000 --> 00:05:52,000 Que es un único char, que es un único char. 104 00:05:52,000 --> 00:05:54,000 Entonces lo comparo con igual o con doble igual. 105 00:05:54,000 --> 00:05:56,000 Pero es un único char, una variable primitiva. 106 00:05:56,000 --> 00:05:57,000 No es un string. 107 00:05:57,000 --> 00:05:59,000 Me da igual una cosa que otra. 108 00:05:59,000 --> 00:06:03,000 Esto si es string, esto si es char. 109 00:06:03,000 --> 00:06:06,000 Que también podríais haber puesto esto, que es lo mismo. 110 00:06:06,000 --> 00:06:13,000 Me da igual poner 90, que haber puesto esto otro. 111 00:06:13,000 --> 00:06:16,000 Estaría haciendo lo mismo. 112 00:06:16,000 --> 00:06:17,000 ¿Verdad? 113 00:06:17,000 --> 00:06:20,000 Me da igual decir el carácter char char diferente de Z, 114 00:06:20,000 --> 00:06:22,000 con Z entre comillas simples, 115 00:06:22,000 --> 00:06:24,000 que decir diferente de 90. 116 00:06:24,000 --> 00:06:25,000 Es lo mismo. 117 00:06:25,000 --> 00:06:27,000 Porque son perfectamente intercambiables. 118 00:06:27,000 --> 00:06:31,000 El número con el char, según me diga la tabla ASCII. 119 00:06:31,000 --> 00:06:34,000 Luego esta condición y esta condición son idénticas. 120 00:06:34,000 --> 00:06:35,000 Son la misma. 121 00:06:35,000 --> 00:06:38,000 Me da igual 90 que el char Z. 122 00:06:38,000 --> 00:06:41,000 Me da igual, porque la tabla ASCII los fija como iguales. 123 00:06:41,000 --> 00:06:42,000 ¿Vale? 124 00:06:42,000 --> 00:06:45,000 Y luego, si esto de aquí no está guardado en modo char, 125 00:06:45,000 --> 00:06:47,000 sino que está en modo string, 126 00:06:47,000 --> 00:06:49,000 no puedo compararlo así. 127 00:06:49,000 --> 00:06:51,000 Porque los string no los comparo así. 128 00:06:51,000 --> 00:06:54,000 Entonces, si está en modo string, lo comparo así. 129 00:06:54,000 --> 00:06:56,000 ¿Vale? 130 00:06:59,000 --> 00:07:00,000 ¿Vale? 131 00:07:00,000 --> 00:07:03,000 Bueno, entonces vamos a quedarnos con la opción de char, 132 00:07:03,000 --> 00:07:06,000 que es la más cómoda para luego hacer el resto del programa. 133 00:07:11,000 --> 00:07:12,000 ¿Vale? 134 00:07:15,000 --> 00:07:19,000 Voy a comentar esto, char diferente de N. 135 00:07:19,000 --> 00:07:21,000 Me falta aquí cerrar esto. 136 00:07:25,000 --> 00:07:28,000 Y aquí esto lo descomento y comento esto. 137 00:07:28,000 --> 00:07:29,000 ¿Vale? 138 00:07:29,000 --> 00:07:31,000 Entonces lo hemos leído ya directamente como char. 139 00:07:31,000 --> 00:07:34,000 He leído la cadena, me he quedado con el char en la posición 0. 140 00:07:34,000 --> 00:07:36,000 Ya está como char. 141 00:07:36,000 --> 00:07:38,000 Pues entonces, como ya está como char, 142 00:07:38,000 --> 00:07:40,000 la condición está. 143 00:07:41,000 --> 00:07:42,000 Esta. 144 00:07:42,000 --> 00:07:44,000 O esta, me da igual. 145 00:07:44,000 --> 00:07:45,000 Vale. 146 00:07:46,000 --> 00:07:49,000 Ahora, ¿qué me dice el programa? 147 00:07:49,000 --> 00:07:52,000 Si el carácter no es letra mayúscula, avisa. 148 00:07:52,000 --> 00:07:56,000 Bueno, pues, ser letra mayúscula, 149 00:07:56,000 --> 00:07:58,000 no ser letra mayúscula, perdón, 150 00:07:58,000 --> 00:08:00,000 significará, según la tabla ASCII, 151 00:08:00,000 --> 00:08:04,000 ser menor de 65 o mayor de 90. 152 00:08:04,000 --> 00:08:08,000 Porque las letras mayúsculas están todas seguidas 153 00:08:08,000 --> 00:08:10,000 entre 65 y 90. 154 00:08:10,000 --> 00:08:15,000 Entonces, la condición de no ser mayúscula será esta. 155 00:08:15,000 --> 00:08:20,000 Si el carácter es menor de 65 o es mayor que 90, 156 00:08:20,000 --> 00:08:24,000 entonces, o es menor que la A o es mayor que la Z. 157 00:08:24,000 --> 00:08:27,000 Si ocurre cualquiera de las dos cosas, no es mayúscula. 158 00:08:27,000 --> 00:08:29,000 Lo muestro. 159 00:08:29,000 --> 00:08:30,000 Vale. 160 00:08:30,000 --> 00:08:32,000 Y si sí que es letra mayúscula, 161 00:08:32,000 --> 00:08:35,000 entonces es cuando ya lo voy concatenando. 162 00:08:35,000 --> 00:08:37,000 Silencio los de atrás. 163 00:08:37,000 --> 00:08:39,000 Si es letra mayúscula, 164 00:08:39,000 --> 00:08:42,000 entonces es cuando lo voy concatenando 165 00:08:42,000 --> 00:08:44,000 a una variable string 166 00:08:44,000 --> 00:08:46,000 que va concatenado a todos esos caracteres, 167 00:08:46,000 --> 00:08:48,000 que empieza en el vacío. 168 00:08:48,000 --> 00:08:50,000 Esta es la famosa suma acumulativa 169 00:08:50,000 --> 00:08:53,000 o concatenación acumulativa que hemos hablado tanto. 170 00:08:53,000 --> 00:08:54,000 Empieza en el vacío. 171 00:08:54,000 --> 00:08:57,000 Y sobre ella, sobre ella, 172 00:08:57,000 --> 00:08:59,000 voy poniéndole todos los caracteres 173 00:08:59,000 --> 00:09:02,000 que sean mayúscula. 174 00:09:02,000 --> 00:09:03,000 Sobre ella. 175 00:09:03,000 --> 00:09:04,000 Que me llegue una mayúscula, 176 00:09:04,000 --> 00:09:06,000 se va sobre result. 177 00:09:06,000 --> 00:09:07,000 Siguiente iteración del wine. 178 00:09:07,000 --> 00:09:08,000 Que me lleve otra mayúscula, 179 00:09:08,000 --> 00:09:09,000 se va sobre result. 180 00:09:09,000 --> 00:09:11,000 Así, así todo el rato. 181 00:09:11,000 --> 00:09:12,000 Que no es mayúscula, 182 00:09:12,000 --> 00:09:14,000 muestro el mensajito. 183 00:09:14,000 --> 00:09:16,000 Luego el bucle será este. 184 00:09:16,000 --> 00:09:21,000 Un bucle que lee carácter. 185 00:09:21,000 --> 00:09:22,000 Y en función del carácter, 186 00:09:22,000 --> 00:09:25,000 o avisa o concatena. 187 00:09:25,000 --> 00:09:26,000 Vale. 188 00:09:26,000 --> 00:09:29,000 Aquí no hace falta poner tantas llaves. 189 00:09:29,000 --> 00:09:32,000 Condición está de aquí. 190 00:09:32,000 --> 00:09:33,000 Cuando ya he terminado, 191 00:09:33,000 --> 00:09:34,000 muestro el resultado. 192 00:09:34,000 --> 00:09:35,000 Y ya está. 193 00:09:38,000 --> 00:09:39,000 Mientras el carácter leído 194 00:09:39,000 --> 00:09:41,000 sea diferente de Z. 195 00:09:41,000 --> 00:09:44,000 Que el Z en ASCII es 90. 196 00:09:44,000 --> 00:09:45,000 O sea, esto. 197 00:09:45,000 --> 00:09:47,000 O puedes poner esto. 198 00:09:47,000 --> 00:09:49,000 Está lo mismo. 199 00:09:49,000 --> 00:09:51,000 O incluso podríamos poner aquí, 200 00:09:51,000 --> 00:09:52,000 que uno lo ve más claro 201 00:09:52,000 --> 00:09:54,000 si no tiene la tabla ASCII. 202 00:09:54,000 --> 00:09:57,000 Mientras sea menor que A 203 00:09:57,000 --> 00:09:59,000 y mayor que Z. 204 00:09:59,000 --> 00:10:00,000 Así a lo mejor lo ves más claro. 205 00:10:00,000 --> 00:10:02,000 Porque los caracteres y los números 206 00:10:02,000 --> 00:10:05,000 de la tabla ASCII son intercambiables. 207 00:10:05,000 --> 00:10:07,000 Car menor que A 208 00:10:07,000 --> 00:10:09,000 es que esté por delante en la tabla ASCII. 209 00:10:09,000 --> 00:10:11,000 Que sea menor que el numerito entero 210 00:10:11,000 --> 00:10:12,000 asociado a la A. 211 00:10:12,000 --> 00:10:14,000 O sea, esto y lo que he puesto antes 212 00:10:14,000 --> 00:10:15,000 es lo mismo también. 213 00:10:15,000 --> 00:10:17,000 Es lo mismo. 214 00:10:17,000 --> 00:10:19,000 Me da igual el char A 215 00:10:19,000 --> 00:10:21,000 que el número entero asociado a A 216 00:10:21,000 --> 00:10:22,000 en la tabla ASCII. 217 00:10:22,000 --> 00:10:24,000 Me da igual el char Z 218 00:10:24,000 --> 00:10:25,000 que el número entero asociado a Z 219 00:10:25,000 --> 00:10:26,000 en la tabla ASCII. 220 00:10:26,000 --> 00:10:27,000 Les puedo comparar con menor, mayor. 221 00:10:27,000 --> 00:10:29,000 Hay un orden entre ellos. 222 00:10:33,000 --> 00:10:36,000 ¿Vale? 223 00:10:36,000 --> 00:10:39,000 Aquí si yo hubiera leído como string 224 00:10:39,000 --> 00:10:42,000 el problema que para esta condición 225 00:10:42,000 --> 00:10:43,000 no tengo problema 226 00:10:43,000 --> 00:10:45,000 porque lo hacemos como hemos dicho. 227 00:10:45,000 --> 00:10:47,000 Mientras el string sea diferente del Z. 228 00:10:47,000 --> 00:10:50,000 Pero aquí sí que tendría luego 229 00:10:50,000 --> 00:10:52,000 que coger el char en la posición 0 230 00:10:52,000 --> 00:10:53,000 de char leído, 231 00:10:53,000 --> 00:10:54,000 tendría que cogerlo 232 00:10:54,000 --> 00:10:56,000 para compararlo con estos char. 233 00:10:56,000 --> 00:10:57,000 Ahí sí que tendría 234 00:10:57,000 --> 00:10:59,000 porque el string no lo puedo comparar 235 00:10:59,000 --> 00:11:01,000 con un char directamente. 236 00:11:01,000 --> 00:11:02,000 Char leído no podría poner 237 00:11:02,000 --> 00:11:03,000 char leído menor que A 238 00:11:03,000 --> 00:11:04,000 porque es un string. 239 00:11:04,000 --> 00:11:06,000 No puedo compararlo con un char. 240 00:11:06,000 --> 00:11:08,000 Pero me quedaría con el char A0 241 00:11:08,000 --> 00:11:09,000 y ya está. 242 00:11:09,000 --> 00:11:11,000 Me quedaría lo mismo. 243 00:11:11,000 --> 00:11:12,000 Bueno, más o menos entendéis 244 00:11:12,000 --> 00:11:14,000 todos los caracteres y todo eso. 245 00:11:14,000 --> 00:11:17,000 Es importante que os vaya quedando claro. 246 00:11:21,000 --> 00:11:22,000 Vale, venga. 247 00:11:22,000 --> 00:11:25,000 Pues vamos a pararlo aquí entonces.