Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 7-11-23 - 2 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Vamos a ver, pues aquí lo de siempre, le hemos enunciado, tratamos de entender exactamente lo que tiene que hacer, pues aquí ya vemos rápidamente, un bucle gordo, un bucle gordo que está todo el rato, le cadena, le número, le cadena, le número, y al final habrá que mostrar un resultado, pero un bucle gordo que le cadena, le número, le cadena, le número, tiene que haber un bucle gordo.
00:00:00
Ahora, la siguiente pregunta que me hago, una vez que ya vemos claro que es un bucle gordo que dentro le cadena, le número, la siguiente pregunta que nos hacemos, ¿ese bucle gordo que le pega? ¿un FOR o un WHILE?
00:00:27
Pues le pega un WHILE, porque yo de partida no sé cuantas veces se va a ejecutar eso, dependerá de lo que tarde el tío en darme una cadena cuyo tamaño es igual al número introducido, de partida no lo sé, entonces no le pega un FOR a ese bucle gordo, le pega un WHILE.
00:00:39
Pues entonces nuestro programa será algo como esto, un WHILE que está todo el rato, introduzca cadena y leyéndola, vamos a crear el escáner para poder leer del teclado,
00:00:55
vale, estará todo el rato, introduzca cadena, el escáner lo pongo por aquí, por ejemplo, introduzca cadena, vamos a guardar la cadena, aquí por ejemplo, me da igual,
00:01:25
el tema de la implicación de declararlo fuera y dentro ya lo veremos más adelante, vale, entonces ahora yo en principio declaro donde necesito, que luego si voy construyendo el programa me doy cuenta de que, uy, pues lo tengo que declarar fuera, pues ya lo voy sacando,
00:01:52
pero yo por ahora mi pauta de trabajo es, en el momento en el que necesito una variable, la declaro, la declaro donde necesito, que luego cuando voy construyendo el programa me doy cuenta de que, ah, pues voy a tener que declararla antes porque la uso antes, pues ya la declaro antes,
00:02:06
vale, pero yo voy construyendo por partes, entonces por partes es, hemos identificado que es un bucle gordo que le cadena el número, le cadena el número, eso es lo primero que hemos identificado, la primera estructura de la que yo parto y ya hemos dado un paso más,
00:02:20
así es, ese bucle gordo le pega un while, no le pega un for, porque yo no se cuanto se va a ejecutar, vale, pues planto ahí el while y planto ya las dos cosas que se que se van a hacer, introduzca cadena, introduzca número, y ahora como aquí es donde yo necesito el número, ahora mismo lo declaro ahí,
00:02:35
otra cosa es que luego cuando vaya refinando el programa no tenga que cambiar la declaración, pero yo lo necesito ahí ahora mismo, pues venga a la, vale, bueno, pues ya he hecho parte del programa, vale, que me falta aquí, pues me falta poner ahí primero las sentencias resultantes para que cuando el while termine me pueda decir el resultado final,
00:03:02
sí, vale, entonces me falta ahí pues la concatenación es la que sea, ups, y la suma es la que sea,
00:03:32
esto es lo que me falta, pero bueno, ya tengo hecho parte del programa para arrancar con él, bueno, pues nada, un bucle gordo que está todo el tiempo, le cadena, le número, le cadena, le número, ahora tendremos que ver que hace con esa cadena y ese número,
00:04:01
que es lo que hace ahí para darme los resultados, y también me falta la condición, bueno, vamos a atacar por partes, la condición para que esto termine cual es, que la longitud de esta cadena que yo he leído sea igual que el número que tengo aquí,
00:04:15
esa es la condición que me han dicho, pues yo en principio voy y la casco ahí, vale, mientras la condición, mientras la longitud de la cadena, la longitud de la cadena sea distinta que el numerito num, entra, porque cuando sea igual es cuando ya no lo haces más, cuando sea igual es cuando ya no lo haces, vale, pues ya planto ahí la condición, esa condición ya la tengo,
00:04:42
mientras la longitud de la cadena no sea igual que el número pedido, entra, vale, entonces esto es un while, porque esto no es un for que se ejecuta un número exacto de veces que me pueda aprovechar de la sintaxis de i desde i igual a cero hasta i sea igual a no sé cuantos, pues no le pega, esto es mucho más claro y más natural, vale, entonces ahora ya es cuando ya empiezan a surgirme cosas, digo, ah, vale, cuando el programa venga por aquí, va a necesitar ya tener declarada cad y tener declarada num, porque si no, no sabe dónde están, va a necesitarlo,
00:05:06
entonces digo, ah, vale, no pasa nada, cambio la declaración de sitio, la quito de aquí, que la había puesto yo ahí abajo, porque ahí es donde había identificado que la, por primera vez, que la necesitaba, la voy a quitar de aquí y la pongo aquí arriba, porque tengo que ponerla antes del primer uso, vale, cuando el primer uso era este, pues yo la puse ahí, pero al poner la condición, ahora el primer uso está arriba,
00:05:36
bueno, pues nada, pues entonces la tenemos que declarar más arriba, vale, siempre hay que declararla una variable antes del primer uso, siempre, antes del primer uso, vale, bueno, pues si nosotros seguimos aquí, lo que pasa es que aquí, como tengo errores de compilación anidados, no me detecta el error de, como tengo aquí todo esto en interrogaciones, pues yo el compilador está tonto y no me sacaba eso,
00:06:04
vale, ya le he quitado eso, vale, pues ya está, sigo construyendo y la condición me sigue dando guerra, digo, aclaro, me sigue dando guerra, ya sé por qué, mil veces ya lo hemos visto, me sigue dando guerra, porque la primera vez que entramos en el bucle, num y cat tienen que tener un valor, porque si no lo tienen, es imposible hacer esa primera evaluación, es imposible, por eso me da guerra, vale, pues voy a inicializarlo,
00:06:34
entonces ahora pienso, ¿y cómo inicializo?, pues a ver, ¿qué efecto quiero conseguir?, quiero conseguir que la primera vez entre sí o sí, y me da igual los valores que les ponga, porque como luego los voy a pisar con estos, me da exactamente igual, quiero conseguir que entre sí o sí, pues inicializo cat a lo que me dé la gana, como si pongo aquí esto, e inicializo num a lo que me dé la gana, siempre y cuando, siempre y cuando no sea igual,
00:06:58
la longitud de esta a este número, porque si lo fuera es que no entraría ya ni una vez, no entraría ya ni una vez, entonces lo inicializo a lo que yo quiera, si lo dejo vacío también, ya está inicializado y su cat length ahora será cero, que como es diferente de uno, estupendo, vale, entonces ya lo he inicializado, unos valores que ya me garantizan que entro esa primera vez sin ningún problema, y ahora ya según entro, leo y ahora es cuando ya me tengo que plantear hacer el resto,
00:07:25
vamos a ver, y que hago yo, como consigo la suma de todos estos números y la concatenación de todas las cadenas, el problema que hemos hecho mil veces, una suma acumulativa de estos números que me van llegando en el bucle, el problema de toda la vida, pues nada, una variable entera suma, que es la que va a hacer la suma acumulativa, que empieza valiendo cero, y aquí ya si pongo suma más igual en num, ya está,
00:07:55
ya tengo la suma acumulativa de los números hecha, ya está hecha, si, efectivamente, podemos hacer ese cambio ahora, vale, y entonces si lo inicializo como scan, ya hago una primera lectura y ahora ya entra en el bucle o no en función de si la primera lectura ya de partida fue que no, vale,
00:08:25
entonces la suma ya la tengo, la suma acumulativa ya la tengo, la concatenación, bueno ya la hemos visto, yo tengo que ir concatenando cad sobre cad y sobre la siguiente cad que me llega y sobre la siguiente que me llega y sobre la siguiente, pues ya hemos visto eso como hacerlo, pues voy a partir de una cadena que va a guardar el resultado, concatenación como la queráis llamar,
00:08:52
que la inicializo al vacío y sobre ella concateno lo que me está llegando, vale, pues ya tengo en estas dos operaciones el efecto de la suma acumulativa de los números que me van llegando y el efecto concatenación acumulativa de las cadenas que me van llegando,
00:09:18
cuando el bucle termine, cuando el bucle termine ya está, muestro el resultado, suma es suma, ya está, vale, entonces a veces ejecutando vemos si ya hemos hecho más de alguna cosa,
00:09:42
que no nos damos cuenta de buenas a primeras, entonces caso de prueba primero, introducir que coincida, efectivamente termina, la concatenación es esa, la suma es dos, vale, uno hace otro caso de prueba, ahora, hola y tres, vale, uy en este caso de prueba ya detecto un error, que error, anda que no se ha quedado a esperar la cadena, ya he detectado un error en este caso de prueba,
00:10:09
vale, esto automáticamente ya no suena, porque nos ha pasado mil veces, ya no suena, a claro, cuidado que estoy haciendo la lectura de un número, cuando hago la lectura de un número se me queda un salto de línea en el teclado, si luego hago un next line se lo va a tragar el next line y efectivamente cuando hay una segunda iteración pasa eso, en la primera ejecución no me ha pasado porque yo leía next line, next number y fuera,
00:10:39
pero en la siguiente prueba leía cadena, número y volvía a leer cadena otra vez, con lo cual esa segunda cadena se quedaba con el salto de línea del número, entonces digo, ah, vale, ya sé, no pasa nada, ya sé cómo arreglar eso, lo arreglo después de la lectura del número quitándolo, ya sé cómo arreglarlo, porque ya lo hemos arreglado muchas veces y el problema viene asociado a eso,
00:11:02
leo un numerito, next line, next double, me da igual y luego después leo una cadena, vale, seguimos haciendo pruebas a ver si, vale, pues efectivamente ese error ya lo hemos quitado, me sigue pidiendo la cadena y 2,
00:11:29
efectivamente ha terminado, ha concatenado todo lo que le hemos pedido y ha sumado todos los números que le hemos dicho, vale, vale, bueno, pues entonces, por enésima vez, ir construyendo el programa de forma estructurada,
00:11:55
que es, a ver, mi programa que tiene que hacer, pues un montón de veces esto, pues un bucle, primero perfilo ese bucle, ahora me voy ya subproblema por subproblema, voy por partes, con las destrezas que más o menos hemos dicho, pues sumar, contar, si algo ocurre o no ocurre, pues un boolean que lo cambio cuando encuentre un contraejemplo, ya uno va combinando esas destrezas para ir a partir de su arquitectura inicial de programa, pues va rellenando, vale, y luego ya al hacer las pruebas seguramente se dé cuenta de que tiene algo que refinar,
00:12:25
vale, daos cuenta de estas cosas que vamos haciendo, cuando yo voy construyendo, declaro la variable cuando la necesito, según voy añadiendo cosas, puede que me haga falta, ah no, que la necesitaba antes, pues subo la declaración arriba, vale, ese tipo de cosas que hacemos todo el rato, vale, lo que decías tú, vale, que es interesante, bueno, aquí hemos hecho esta inicialización,
00:12:54
de cat y de num1, la que nos ha dado la gana, con la única restricción, el único requisito de que esta condición fuera true la primera vez, fuera true la primera vez, vale, para entrar, entonces, lo que decía él que tiene sentido es, vale, pues voy a inicializar cat y num ya haciendo una primera lectura,
00:13:17
entonces, si esa lectura, si esa lectura ya coincide el tamaño con el número, no te entra en el while, vale, podríamos hacer esta otra inicialización, vale, vamos a poner, esto lo voy a poner, por ejemplo,
00:13:41
en lugar de esta inicialización de aquí, imaginaos que hacemos esta, en lugar de esta que la he comentado hacemos, la cadena hago una primera lectura, vale, hago una primera lectura, lo puedo inicializar, lo que pasa es que, hombre, tendría que ponerle aquí el mensajito,
00:14:07
entonces, hombre, ya empieza a añadir líneas de código que lo hace un poco feo, vale, pero podríamos hacerlo así, le añadimos el mensajito, introduzca cadena, vale, entonces, inicializa con la primera lectura y ahora el numerito que lo lea,
00:14:29
pero, claro, tendría que poner aquí ese otro System.out.println e introduzca número para que el usuario no se lie y no sepa y entienda por qué, vale, introduzca número, vale, entonces, así directamente en el bucle no entra,
00:14:50
si ya de partida este es igual a este, pero, claro, la concatenación del final no incluiría esta cadena y este número lo incluiría, entonces, si quieres que lo incluya tendrías que ponerlo aquí, entonces, vale, se empieza a engrosar el código desde arriba solo para que no entre una primera vez, tampoco, quizá es más claro, meterlo todo en el bucle, meterlo todo en el bucle y así está todo recogido juntito,
00:15:17
mostrar mensaje, leer y evaluar, mostrar mensaje, leer y evaluar, vale, entonces, voy a dejar esto comentado, pues, yo qué sé, para que lo tengáis presente, si lo veis que se puede inicializar leyendo el teclado o lo que sea y vamos a dejar esto, vale, pues, siguiente cosa, venga, ahora vais a hacer esto, para recordar lo de los switch case, lo tengo muy olvidado,
00:15:43
recordad cuando teníamos el switch case, dijimos, vale, fenomenal, vale, entonces, vamos a aprovechar en este menú el A y el B, el A y el C son dos ejercicios de los que no hemos corregido de la hoja, el de hacer dado A y B, hacer A elevado a B, pues, lo vamos a hacer como una opción de ese menú,
00:16:13
la B factorial, le decimos lo que es y la C, mostrar árbol, pues, sería el ejercicio del arbolito que hay en la hoja, dado un numerito N, mostrar un árbol con esas filas, sería el ejercicio este de aquí, sí, este primero, la primera versión, este, dado un numerito N, un número de filas, mostrar el arbolito con esas filas, vale, entonces, vamos a meter este y este,
00:16:36
que dije que lo dejábamos aparcado, este y este que dije que lo dejábamos aparcado, vamos a meterlo en un programa que lo hace a través de un menú de opciones que tú seleccionas, que me faltaría la opción salir, vale, os acordáis cuando vimos el switch case, dijimos, el switch case es una sentencia de decisión que la plantamos cuando las ramas por las que yo tiro dependen del valor de una variable,
00:17:05
si dependen del valor de una variable, entonces, mejor que poner un if variable igual a tal, el if variable igual a tal, el if variable igual a tal, pues, queda más bonito y más claro, poniendo switch case, switch variable, case valor 1, case valor 2, no, es lo que dijimos, que el switch case es una sentencia de decisión con varias ramas que queda muy bonita y pega muy bien cuando esas ramas dependen del valor de una variable, vale, y dijimos en su momento, un menú es el caso de un menú,
00:17:34
un menú ideal en el que eso funciona, porque a ver, este programa, mostrar de forma repetida un menú, vamos a hacerlo juntos y luego completáis las opciones, ejercicio con menú, vale, vale, pues, el programa que va a hacer, mostrar menú, leer opción y en función de la opción irse por una rama por otra, pues, en función de la opción irse por una rama por otra, eso es un switch case y luego volvemos arriba otra vez,
00:18:04
luego la estructura de menú sería esta, siempre lo hacemos así, un menú por consola, es ese, hacer, mostrar menú, mostrar menú, leer opción y hacer un switch case de opción,
00:18:32
vale, y esto sería mientras opción distinta de salir, verdad, esta sería la estructura de mi programa con menú, un do while que está todo el rato, muestra menú, solicito opción y un switch case en función de la opción, si la opción es A hago esto, si es B hago esto, si es C hago esto, y todo esto mientras la opción sea distinta,
00:19:02
de salir, esa es mi estructura ideal para hacer un menú, usar un do while y un switch case con la opción, es la estructura ideal, que uno puede plantearlo con otras sintaxis de bucles y de, claro que puede, pero va a quedar el programa mucho más feo y menos claro, vale, bueno, pues, en nuestro caso mostrar menú será hacer los system out,
00:19:33
por ejemplo, 1, la opción 1 va a ser, hemos dicho, potencia, la opción 2 va a ser factorial, ahora decimos lo que es,
00:19:56
y la opción 3, árbol de n líneas, n se supone que se solicita por teclado, vale, ahora vamos a leer la opción, bueno, pues, la opción tendremos que tener un scanner para leerla,
00:20:16
venga, pues, no pasa nada, copiamos un scanner de ahí arriba, otro ejercicio, vale, pues, esto no vais a poder hacer copia y pega en el examen, así que esta línea aprenderosla, que tampoco tiene mucho que aprender, vale, entonces, ahora, leemos la opción, pues, venga, vamos a leer la opción,
00:20:46
ah, bueno, me faltaría la opción salir, perdón, que podría ser la 4, vale, ya he hecho la primera parte, mostrar menú, leer la opción, bueno, pues, leer la opción necesito, la opción la puedo guardar en un string donde yo decida,
00:21:11
vamos a guardarla en un número entero, porque como va a meter el tío 1, 2, 3 o 4, pues, un número entero, pues, la opción la leo con scan.next int, y ahora tendría que hacer el switch case con la opción, que para eso me venía muy bien el switch case,
00:21:36
en el caso de que la variable opción sea, aquí tendré mis diferentes keys, en el caso de que sea que valor? 1, pues, blabla bla, todo lo que quiera hacer yo con la opción 1, en el caso de que sea la opción 2, blabla bla todo lo que quiera hacer yo con la opción 2, en el caso de que sea la opción 3, blabla bla y todo lo que quiera hacer yo con la 3
00:21:58
en el caso de que sea la opción 4, no quiero hacer nada, quiero decir ala dios, porque en ese caso ya quiero salir del menú, bueno, pues, y recordad que el switch keys tenía un default, que era si la variable opción no era ninguna de estas, ni 1, ni 2, ni 3, ni 4
00:22:28
entonces en el default, bueno, me falta el break después de ese, para que no las haga todas una tras otra, y en el default es cuando el no ha introducido ni 1, ni 2, ni 3, ni 4, en ese caso querríamos ponerle opción incorrecta, vale, pues entonces, esta es mi estructura del programa, verdad, un bucle, un do que hace
00:22:53
muestra menú, lee opción y en función de la opción hace lo que sea, que ahora ya sería esto de aquí, la potencia, pedir los datos a la potencia, factorial, muestra árbol, etc, vale, y ahora, mientras que, mientras la opción sea distinta de 4, que es la de salir, entonces yo aquí pondría, mientras opción distinta de 4
00:23:21
claro, entonces ahora es cuando el compilador me dice, uy, opción, opción aquí fuera, aquí fuera yo no la veo, porque opción la has declarado dentro de estas llaves de aquí, dentro de estas llaves, esto cuando tenemos el do igual, vale, no pasa nada, declaramos opción fuera y se acabó
00:23:49
a la opción declarada fuera y aquí dentro no, vale, esto ya lo vimos cuando vimos el switch case, vale, pues ahora ya tengo mi estructura de programa entera, verdad, y los programas con menú, esta es la estructura más natural, un do while, do while que está todo el rato, muestra menú, lee opción y en función de la opción opera
00:24:07
opera, de nuevo, muestra menú, lee opción y en función de la opción opera, que la condición no era, que la opción no era salir, otra vez arriba, muestra menú, vale, entonces yo ejecuto esto, ahora mismo no me va a hacer nada en ninguna opción, porque están todas vacías, pero por lo menos voy a ver el funcionamiento del menú, vale, vale, me salga acá el menú, le pongo el 1, no hace nada porque no tengo nada, me vuelvo a sacar el menú, le pongo el 2, no hace nada porque no tengo nada para la 2
00:24:35
le pongo la 6, opción incorrecta, vale, me lo vuelve a sacar, le pongo la 4, termina, vale, bueno, pues esta es mi estructura natural de programa que se comunica con menú, esta es mi estructura natural, siempre es esto, un do while, muestro menú, lee opción y en función de la opción decido
00:25:05
y ahora aquí es lo que habría que completar con el 1, 2 y 3, con esto de aquí, vale, pues venga, empezáis vosotros a hacer aquí la potencia, que habrá que hacer, aquí hay que poner ya un chorizo de líneas, otra cosa es que luego lo queramos sacar a una función para no poner un chorizo de líneas, pero si nos olvidamos de la función, si nos olvidamos
00:25:25
en el caso 1 que habrá que hacer, introduzca base, leer base, introduzca exponente, leer exponente y ahora hay que hacer las operaciones para conseguir este resultado, A por A por A por A, B veces, que es lo que pedía ese ejercicio y eso os digo como avance para que no lo haya hecho, que es igual que una suma acumulativa, igual, pero es una multiplicación acumulativa, es lo mismo
00:25:52
pero en lugar de ir sumando acumulativamente, vamos multiplicando acumulativamente, con lo cual la multiplicación acumulativa la iniciaremos a 1, inicialmente será 1 para que cuando vaya multiplicando, inicialmente multiplicar por 1 no afecta, igual que sumar por 0 no afecta
00:26:17
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:26:47
Vale
00:27:17
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:27:47
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:28:17
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:28:28
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:28:38
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:28:49
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:28:59
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:29:10
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:29:20
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:29:31
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:29:41
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:29:52
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:30:02
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:30:13
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:30:32
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:31:02
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:31:13
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:31:23
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:31:34
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:31:44
Venga, pues opción A quien no lo haya hecho, opción 3 y luego la 2 factorial que es como la 1
00:31:55
Gracias
00:32:05
La variable global A que está siempre presente
00:32:35
Esta variable solo existe en 2 casos
00:32:40
Gracias
00:34:05
Gracias
00:34:35
Sí, es verdad, no os lo he dicho
00:35:05
Factorial es una operación que se hace con un número
00:35:14
Entonces si ahí te dan un número n, pues el factorial es esta multiplicación
00:35:20
n, n-1, n-2, así hasta 1
00:35:28
Entonces en realidad lo vais a hacer igual que la potencia porque es una multiplicación acumulativa
00:35:32
Solamente va a cambiar lo que le vais multiplicando
00:35:39
Y la potencia obviamente todo el mundo lo sabe, elevado a es a por a por a
00:35:44
Pues b veces, claro
00:35:52
Pero son dos operaciones muy parecidas
00:35:55
A ver
00:36:03
Uy, yo seguía grabando así, que desastre
00:36:10
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 11
- Fecha:
- 7 de noviembre de 2023 - 13:41
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 689.85 MBytes