1 00:00:00,370 --> 00:00:18,559 La estructura es la de siempre, ¿está claro? El tema es, la estructura es la de siempre, la duda es, ¿qué le asigno yo a mensaje? 2 00:00:18,559 --> 00:00:40,560 Pues, si actuamos organizadamente, en función de una condición, o bien yo le asigno sí es la mayúscula, o bien yo le asigno no la mayúscula sería, 3 00:00:40,560 --> 00:00:50,000 y aquí la mayúscula sería, a este texto, 4 00:00:50,659 --> 00:00:55,399 le tengo que concatenar ese valor mayúscula del primer car 1 5 00:00:55,399 --> 00:00:58,659 que yo se supone que tengo que obtener, ¿vale? 6 00:00:58,799 --> 00:01:00,659 O sea, los dos mensajes a mostrar son, 7 00:01:00,899 --> 00:01:05,200 uno, sí, es la mayúscula, o no, la mayúscula sería 8 00:01:05,200 --> 00:01:08,540 y lo que tengo que poner a continuación es un valor calculado, 9 00:01:08,799 --> 00:01:11,519 un valor calculado, con lo cual al ser un valor calculado 10 00:01:11,519 --> 00:01:14,719 tendrá que estar una variable y yo la concatenaré, 11 00:01:14,760 --> 00:01:25,799 La mayúscula sería, bueno, vamos a crearnos ahí una variable char para poner esa mayúscula calculada, cuando la calculemos. 12 00:01:26,319 --> 00:01:29,099 Entonces nos faltan aquí dos cosas para completar este programa. 13 00:01:30,420 --> 00:01:35,400 La condición que me dice a mí si la segunda es la mayúscula de la primera. 14 00:01:36,420 --> 00:01:40,040 Y luego, ¿qué valor le doy a este char? 15 00:01:40,480 --> 00:01:43,299 Para que sea exactamente la mayúscula de la primera. 16 00:01:43,299 --> 00:01:46,040 esas dos cosas son las que me faltan 17 00:01:46,040 --> 00:01:46,840 cuando las tenga 18 00:01:46,840 --> 00:01:49,620 pues ya tengo mi programa hecho 19 00:01:49,620 --> 00:01:52,439 ¿vale? me falta la condición 20 00:01:52,439 --> 00:01:54,319 que me dice 21 00:01:54,319 --> 00:01:55,879 si la primera es mayúscula de la segunda 22 00:01:55,879 --> 00:01:58,319 y me falta este valor 23 00:01:58,319 --> 00:02:00,120 calculado que yo 24 00:02:00,120 --> 00:02:01,920 concatenaré al mensaje de salida 25 00:02:01,920 --> 00:02:04,340 que me dirá 26 00:02:04,340 --> 00:02:05,739 cuál es esa mayúscula 27 00:02:05,739 --> 00:02:07,280 la condición 28 00:02:07,280 --> 00:02:10,080 pues viendo la tabla 29 00:02:10,080 --> 00:02:10,900 así está claro 30 00:02:10,900 --> 00:02:16,039 la minúscula está, si hacemos la resta de 97, 65 31 00:02:16,039 --> 00:02:18,939 nos da 32, pues la mayúscula está 32 00:02:18,939 --> 00:02:21,620 32 posiciones por detrás 33 00:02:21,620 --> 00:02:25,240 luego, la condición de que la mayúscula 34 00:02:25,240 --> 00:02:27,580 de que la segunda sea la mayúscula de la primera 35 00:02:27,580 --> 00:02:29,919 pues la podemos poner tranquilamente 36 00:02:29,919 --> 00:02:34,060 que car2 menos car1 sea igual 37 00:02:34,060 --> 00:02:35,960 a 32, ¿verdad? 38 00:02:36,580 --> 00:02:38,740 o al revés, porque ¿cuál es la que está detrás? 39 00:02:39,340 --> 00:02:40,560 la minúscula está detrás 40 00:02:40,560 --> 00:02:42,960 Entonces la condición sería 41 00:02:42,960 --> 00:02:46,340 Si car1 está a 32 posiciones 42 00:02:46,340 --> 00:02:47,699 Por delante de car2 43 00:02:47,699 --> 00:02:49,879 Entonces es la mayúscula 44 00:02:49,879 --> 00:02:51,340 ¿Vale? 45 00:02:52,060 --> 00:02:54,360 Dos caracteres que cumplan esto 46 00:02:54,360 --> 00:02:56,500 Siempre y cuando 47 00:02:56,500 --> 00:02:58,020 El primero 48 00:02:58,020 --> 00:02:59,159 Sea 49 00:02:59,159 --> 00:03:01,879 Una letra minúscula 50 00:03:01,879 --> 00:03:04,259 Siempre y cuando el primero sea uno de estos 51 00:03:04,259 --> 00:03:06,319 Pues entonces 52 00:03:06,319 --> 00:03:07,539 El segundo 53 00:03:07,539 --> 00:03:09,800 Va a ser uno de estos, luego el mayúsculo 54 00:03:09,800 --> 00:03:12,860 lo que pasa es que claro, este programa tiene sentido 55 00:03:12,860 --> 00:03:13,819 si yo asumo 56 00:03:13,819 --> 00:03:16,560 que el usuario, el primer carácter que me va a meter 57 00:03:16,560 --> 00:03:18,659 es una letra minúscula, porque si me mete 58 00:03:18,659 --> 00:03:20,639 cualquier otra cosa, me mete el 1 59 00:03:20,639 --> 00:03:22,659 pues me dice que 60 00:03:22,659 --> 00:03:24,560 sí, que el dc1 yo que sé es su 61 00:03:24,560 --> 00:03:26,620 mayúscula, vale 62 00:03:26,620 --> 00:03:28,539 entonces podemos ahora meter luego que valide 63 00:03:28,539 --> 00:03:30,539 el dato, luego esta 64 00:03:30,539 --> 00:03:31,759 condición está clara, vale 65 00:03:31,759 --> 00:03:34,580 y ahora, ¿cómo teniendo 66 00:03:34,580 --> 00:03:36,800 yo un carácter cualquiera lo pongo en mayúscula? 67 00:03:37,379 --> 00:03:38,340 pues de nuevo operando 68 00:03:38,340 --> 00:03:40,219 si yo tengo un carácter cualquiera de estos 69 00:03:40,219 --> 00:03:41,580 y le quito 32 70 00:03:41,580 --> 00:03:43,479 me coloco en este 71 00:03:43,479 --> 00:03:46,180 luego si yo tengo 72 00:03:46,180 --> 00:03:47,560 mi carácter car1 73 00:03:47,560 --> 00:03:51,449 y le quito 32 74 00:03:51,449 --> 00:03:53,430 me coloco 75 00:03:53,430 --> 00:03:55,210 en el mayúsculo 76 00:03:55,210 --> 00:03:57,789 ¿vale? pero claro aquí nos sale este error 77 00:03:57,789 --> 00:04:00,110 de compilación que ya lo conocemos y que ya no salió 78 00:04:00,110 --> 00:04:01,689 aquí que 79 00:04:01,689 --> 00:04:07,219 aquí que 80 00:04:07,219 --> 00:04:08,039 estamos haciendo 81 00:04:08,039 --> 00:04:10,520 ¿vale? importante para que 82 00:04:10,520 --> 00:04:13,219 estamos con el operador 83 00:04:13,219 --> 00:04:14,659 aritmético de resta 84 00:04:14,659 --> 00:04:17,139 estamos mezclando dos tipos 85 00:04:17,139 --> 00:04:18,220 de datos distintos 86 00:04:18,220 --> 00:04:20,339 entonces, recordad 87 00:04:20,339 --> 00:04:25,060 recordad que con los operadores 88 00:04:25,060 --> 00:04:25,800 aritméticos 89 00:04:25,800 --> 00:04:28,759 se pueden mezclar operadores 90 00:04:28,759 --> 00:04:31,160 pero claro, hay que tener 91 00:04:31,160 --> 00:04:33,120 muy controlado que pasa cuando 92 00:04:33,120 --> 00:04:34,439 mezclamos tipos de datos 93 00:04:34,439 --> 00:04:37,339 en general cuando uno 94 00:04:37,339 --> 00:04:39,079 construye una expresión 95 00:04:39,079 --> 00:04:40,540 con operadores aritméticos 96 00:04:40,540 --> 00:04:43,000 la construye para sumar 97 00:04:43,000 --> 00:04:44,240 de estar multiplicado por operadores 98 00:04:44,240 --> 00:04:50,319 pero en determinadas ocasiones 99 00:04:50,319 --> 00:04:51,180 que hemos visto 100 00:04:51,180 --> 00:04:51,939 por una 101 00:04:51,939 --> 00:04:54,800 uno puede mezclar en expresiones 102 00:04:54,800 --> 00:04:57,100 tipos de datos distintos 103 00:04:57,100 --> 00:04:58,160 con superiores aritméticos 104 00:04:58,160 --> 00:04:59,339 este es uno de esos casos 105 00:04:59,339 --> 00:05:02,139 estamos mezclando un char 106 00:05:02,139 --> 00:05:04,060 con un int 107 00:05:04,060 --> 00:05:06,439 porque 32 lo construye Java 108 00:05:06,439 --> 00:05:07,139 como en SoundMesh 109 00:05:07,139 --> 00:05:10,800 podemos ir usando el operador 110 00:05:10,800 --> 00:05:12,240 menos en este caso 111 00:05:12,240 --> 00:05:32,000 ¿Qué es lo que hace la máquina virtual? Pues el CAR1, que es un char, lo promociona al int que lo representa. En este caso, lo promocionaría, si CAR1 fuera, por ejemplo, la letra B, lo promocionaría a 98, al entero 98. 112 00:05:32,000 --> 00:05:34,420 y ahora ya 113 00:05:34,420 --> 00:05:36,319 hace la resta 114 00:05:36,319 --> 00:05:37,600 98 menos 32 115 00:05:37,600 --> 00:05:40,339 pero el resultado lo deja como entero 116 00:05:40,339 --> 00:05:41,860 lo deja como entero 117 00:05:41,860 --> 00:05:43,639 por eso el compilador me dice aquí 118 00:05:43,639 --> 00:05:46,579 ojo, el resultado es entero 119 00:05:46,579 --> 00:05:48,740 porque yo he promocionado del más bajito 120 00:05:48,740 --> 00:05:50,240 que es char al alto que es in 121 00:05:50,240 --> 00:05:52,339 con lo cual no me lo guardes en un char 122 00:05:52,339 --> 00:05:55,779 pero nosotros lo queremos en formato char 123 00:05:55,779 --> 00:05:57,920 no lo queremos en in, lo queremos en char 124 00:05:57,920 --> 00:06:00,420 ¿cómo solucionábamos esto 125 00:06:00,420 --> 00:06:02,379 para forzar a esto, 126 00:06:02,480 --> 00:06:03,800 guardarlo como char otra vez. 127 00:06:04,959 --> 00:06:07,660 Lo forzábamos con un casting, ¿verdad? 128 00:06:08,560 --> 00:06:09,980 Así lo forzábamos. 129 00:06:11,160 --> 00:06:11,379 ¿Vale? 130 00:06:12,279 --> 00:06:14,199 Entonces, repito, desde el principio. 131 00:06:14,759 --> 00:06:16,120 Al hacer la operación matemática 132 00:06:16,120 --> 00:06:18,860 con un operador matemático, 133 00:06:19,100 --> 00:06:21,779 ¿vale? 134 00:06:22,439 --> 00:06:26,120 Pues estoy mezclando dos tipos distintos. 135 00:06:27,139 --> 00:06:29,480 El más bajito, que en este caso es char, 136 00:06:29,480 --> 00:06:31,620 porque es solo un byte 137 00:06:31,620 --> 00:06:33,600 se promociona el más alto 138 00:06:33,600 --> 00:06:35,240 que es entero, en el caso del char 139 00:06:35,240 --> 00:06:36,420 ¿qué significa promocionarse? 140 00:06:37,259 --> 00:06:38,879 convertirse en el entero que lo representa 141 00:06:38,879 --> 00:06:41,300 en la tabla hasti, el entero que sea 142 00:06:41,300 --> 00:06:43,139 se hace la resta 143 00:06:43,139 --> 00:06:45,819 y el número entero que te queda te lo da como resultado 144 00:06:45,819 --> 00:06:47,319 al ser un entero 145 00:06:47,319 --> 00:06:48,060 no puede ir a char 146 00:06:48,060 --> 00:06:51,439 él te avisa, claro, pero es que a ti no te interesa 147 00:06:51,439 --> 00:06:52,240 el formato entero 148 00:06:52,240 --> 00:06:54,480 a ti te interesa el formato char 149 00:06:54,480 --> 00:06:56,939 pues este formato entero 150 00:06:56,939 --> 00:06:59,240 lo podemos pasar a formato char 151 00:06:59,240 --> 00:07:02,100 haciendo el casting 152 00:07:02,100 --> 00:07:04,220 que habíamos dicho que en determinadas ocasiones 153 00:07:04,220 --> 00:07:06,060 y de forma controlada 154 00:07:06,060 --> 00:07:08,899 entonces 155 00:07:08,899 --> 00:07:10,899 esto 156 00:07:10,899 --> 00:07:13,639 se convertiría en esto 157 00:07:13,639 --> 00:07:27,240 ahora ya sí 158 00:07:27,240 --> 00:07:30,180 esta seguramente 159 00:07:30,180 --> 00:07:31,660 sea, si lo hemos hecho bien 160 00:07:31,660 --> 00:07:32,879 el char 161 00:07:32,879 --> 00:07:34,980 mayúsculo de car1 162 00:07:34,980 --> 00:07:36,740 que lo concateno aquí 163 00:07:36,740 --> 00:07:40,110 vale, vamos a hacer la prueba 164 00:07:40,110 --> 00:07:43,149 Primer carácter A, segundo carácter A 165 00:07:43,149 --> 00:07:43,610 Sí 166 00:07:43,610 --> 00:07:46,810 Vamos a pasarle ahora a uno que no 167 00:07:46,810 --> 00:07:49,870 Primer carácter C, segundo carácter F 168 00:07:49,870 --> 00:07:50,829 No 169 00:07:50,829 --> 00:07:52,790 La mayúscula sería C 170 00:07:52,790 --> 00:07:54,290 Vale 171 00:07:54,290 --> 00:07:57,810 ¿Entendido esto que hemos hecho aquí? 172 00:07:58,329 --> 00:08:00,370 Aquí lo más crítico de entender 173 00:08:00,370 --> 00:08:02,589 Es 174 00:08:02,589 --> 00:08:04,430 Que int y char 175 00:08:04,430 --> 00:08:06,149 Sí, son intercambiables 176 00:08:06,149 --> 00:08:06,829 Pero cuidado 177 00:08:06,829 --> 00:08:09,910 Un int no puede ir en un char 178 00:08:09,910 --> 00:08:12,310 si ese IN yo sé 179 00:08:12,310 --> 00:08:14,610 que representa un carácter de la tabla ASTI 180 00:08:14,610 --> 00:08:16,670 no pasa nada para meterlo en un char 181 00:08:16,670 --> 00:08:17,730 me hago esto 182 00:08:17,730 --> 00:08:22,660 y al hacerle esto 183 00:08:22,660 --> 00:08:23,759 ese IN 184 00:08:23,759 --> 00:08:26,120 ya lo convierto en el char 185 00:08:26,120 --> 00:08:28,519 correspondiente de la tabla ASTI para ese número 186 00:08:28,519 --> 00:08:29,560 ¿vale? 187 00:08:30,579 --> 00:08:32,740 entonces siempre que yo tenga un numerito entero 188 00:08:32,740 --> 00:08:33,840 que yo sepa 189 00:08:33,840 --> 00:08:36,860 que se refiere a una posición de la tabla ASTI 190 00:08:36,860 --> 00:08:38,120 de un char que yo quiero 191 00:08:38,120 --> 00:08:39,759 y lo quiero en char 192 00:08:39,759 --> 00:08:42,440 pues le hago eso delante y ya lo tengo 193 00:08:42,440 --> 00:08:42,779 en chat 194 00:08:42,779 --> 00:08:50,990 vale, entonces, aquí lo único es que 195 00:08:50,990 --> 00:08:51,649 efectivamente 196 00:08:51,649 --> 00:08:56,450 si yo ahora hago esto 197 00:08:56,450 --> 00:08:58,049 y le pongo cualquier cosa 198 00:08:58,049 --> 00:09:04,250 ahora lo pongo otra vez 199 00:09:04,250 --> 00:09:05,830 si yo le pongo 200 00:09:05,830 --> 00:09:08,009 cualquier cosa que no sea un carácter 201 00:09:08,009 --> 00:09:09,830 en minúscula, del rango de minúsculas 202 00:09:09,830 --> 00:09:12,029 el programa deja de tener sentido, claro 203 00:09:12,029 --> 00:09:14,250 entonces convendría 204 00:09:14,250 --> 00:09:15,330 para que sea un mínimo 205 00:09:15,330 --> 00:09:18,090 más robusto, meterle una mínima 206 00:09:18,090 --> 00:09:18,750 validación 207 00:09:18,750 --> 00:09:22,110 y es que ahora ya el programa le ampliamos 208 00:09:22,110 --> 00:09:22,690 con otra rama 209 00:09:22,690 --> 00:09:25,970 una rama, el carácter que has metido 210 00:09:25,970 --> 00:09:27,210 es válido para mí o no 211 00:09:27,210 --> 00:09:29,610 si no es válido, se acabó 212 00:09:29,610 --> 00:09:32,090 y si es válido, ahora ya te digo 213 00:09:32,090 --> 00:09:33,870 si el segundo es 214 00:09:33,870 --> 00:09:34,950 la mayúscula, no lo es 215 00:09:34,950 --> 00:09:37,429 al abrir otra rama 216 00:09:37,429 --> 00:09:39,309 tenemos una condición 217 00:09:39,309 --> 00:09:44,190 perdón 218 00:09:44,190 --> 00:09:47,779 a ver, lo que haya 219 00:09:47,779 --> 00:09:49,559 que detallaremos 220 00:09:49,559 --> 00:09:51,039 enunciado lo que tenéis que hacer. 221 00:09:51,860 --> 00:09:53,519 Lo que no esté detallado 222 00:09:53,519 --> 00:09:55,700 que hay que hacerlo, no hay por qué hacerlo. 223 00:09:56,500 --> 00:09:57,799 Vale, vamos a poner una condición 224 00:09:57,799 --> 00:09:59,879 de carácter 225 00:09:59,879 --> 00:10:03,440 válido. La condición 226 00:10:03,440 --> 00:10:05,039 de carácter válido, ¿cuál va a ser? 227 00:10:05,879 --> 00:10:07,399 Que sea un carácter minúscula, 228 00:10:07,419 --> 00:10:09,299 el primero. Pues 229 00:10:09,299 --> 00:10:11,539 ser carácter minúscula es fácil de 230 00:10:11,539 --> 00:10:13,159 programar. Que sea 231 00:10:13,159 --> 00:10:15,019 mayor o igual que 27 y 232 00:10:15,019 --> 00:10:17,379 menor o igual que 122. 233 00:10:17,919 --> 00:10:18,960 Carácter válido, entonces, 234 00:10:18,960 --> 00:10:22,350 es igual a car1 235 00:10:22,350 --> 00:10:24,730 mayor o igual que 97 236 00:10:24,730 --> 00:10:26,269 y también 237 00:10:26,269 --> 00:10:27,809 simultáneamente 238 00:10:27,809 --> 00:10:31,940 y también simultáneamente 239 00:10:31,940 --> 00:10:37,830 menor o igual 240 00:10:37,830 --> 00:10:39,049 que 122 241 00:10:39,049 --> 00:10:49,320 ¡Hala! Ya tengo otra condición 242 00:10:49,320 --> 00:10:50,659 carácter válido que me permite 243 00:10:50,659 --> 00:10:52,580 abrir en mi programa otra rama 244 00:10:52,580 --> 00:10:55,830 ¿Vale? Pues vamos a abrir esa rama 245 00:10:55,830 --> 00:10:56,990 la primera de todas 246 00:10:56,990 --> 00:11:00,129 Vamos a ver, primero nos vamos 247 00:11:00,129 --> 00:11:02,110 a preguntar, ¿el carácter es 248 00:11:02,110 --> 00:11:05,450 válido? Entonces 249 00:11:05,450 --> 00:11:08,230 para que sea más fácil 250 00:11:08,230 --> 00:11:09,330 ponemos el no delante 251 00:11:09,330 --> 00:11:11,789 ¿el carácter no es válido? 252 00:11:12,470 --> 00:11:13,450 pues mostramos 253 00:11:13,450 --> 00:11:18,379 carácter no válido 254 00:11:18,379 --> 00:11:21,450 y ahora 255 00:11:21,450 --> 00:11:24,490 vamos a asumir ahora ya 256 00:11:24,490 --> 00:11:25,710 que el carácter es válido 257 00:11:25,710 --> 00:11:27,350 ahora ya entramos en la condición 258 00:11:27,350 --> 00:11:30,129 hemos insertado 259 00:11:30,129 --> 00:11:31,809 una rama adicional al principio 260 00:11:31,809 --> 00:11:34,169 si no es válido 261 00:11:34,169 --> 00:11:35,690 carácter no válido 262 00:11:35,690 --> 00:11:37,309 si lo es 263 00:11:37,309 --> 00:11:40,289 ya me pregunto mi condición original 264 00:11:40,289 --> 00:11:40,970 y ya está 265 00:11:40,970 --> 00:11:44,309 hemos insertado una condición al principio 266 00:11:44,309 --> 00:11:45,350 para abrir una rama más 267 00:11:45,350 --> 00:11:47,990 si no 268 00:11:47,990 --> 00:11:49,250 es válido 269 00:11:49,250 --> 00:11:50,769 muestro esto 270 00:11:50,769 --> 00:11:54,149 y en el caso de que lo sea ya hago esto de aquí 271 00:11:54,149 --> 00:12:12,580 vale, vamos a probarlo 272 00:12:12,580 --> 00:12:14,759 a ver si yo meto un carácter 273 00:12:14,759 --> 00:12:16,139 que no sea una letra minúscula 274 00:12:16,139 --> 00:12:18,620 y el carácter no es válido 275 00:12:18,620 --> 00:12:34,600 si meto esto también me dice no válido hasta que no meta una letra minúscula no 276 00:12:34,600 --> 00:12:37,080 lo hace 277 00:12:37,080 --> 00:13:25,710 bueno qué pasó aquí porque no está el simbolito rojo