Guía de ejemplos (Cambios de estructuras) Universidad Técnica Federico Santa María Ramo IWI-131, programación de computadores. Profesor Juan Manuel Jerez 1. Caso cambio While – For Para este caso el cambio de estructuras consiste en lo siguiente: • Primero debemos mirar un ejemplo de un ciclo While: public class ejemplowhile3 { public static void main(String[] args) { StdOut.println("Ingrese un numero"); int b = StdIn.readInt(); long e = 1; int i= 1; while (i<=10){ e=e*b; StdOut.println("El numero " + b + " elevado a la potencia " + i + " es: " + e); i++; } } } Para realizar este cambio de estructuras fijémonos en los colores de los cuales e ha pintado el código: • • • • La declaración de la variable que esta en morado debería pasar a la declaración del ciclo for. La condición del ciclo while que esta en verde pasara a ser la condición del ciclo for. El incremento del ciclo while que esta en rojo pasara a ser el incremento del ciclo for. Las sentencias que están adentro del ciclo while deberán estar esta vez dentro del ciclo for. public class ejemplofor3 { public static void main(String[] args) { StdOut.println("Ingrese un numero"); int b = StdIn.readInt(); long e = 1; for (int i= 1;i<=10;i++){ e=e*b; StdOut.println("El numero " + b + " elevado a la potencia " + i + " es: " + e); } } } 2. Caso cambio ciclo for – While. Nos daremos cuenta que este cambio de estructuras es exactamente al revés que el anterior. Miremos nuestro ciclo FOR. public class ejemplofor3 { public static void main(String[] args) { StdOut.println("Ingrese un numero"); int b = StdIn.readInt(); long e = 1; for (int i= 1;i<=10;i++){ e=e*b; StdOut.println("El numero " + b + " elevado a la potencia " + i + " es: " + e); } } } Y los pasos para convertir este ciclo for en un ciclo while serian los siguientes: • La declaración de la variable que esta en morado debería declararse antes del ciclo While. • La condición del ciclo for que esta en verde pasara a ser la condición del ciclo While. • El incremento del ciclo for que esta en rojo pasara a estar dentro del ciclo while pues este ciclo por su estructura alberga el incremento de la variable dentro del ciclo. • Las sentencias que están adentro del ciclo for deberán estar esta vez dentro del ciclo while. Miremos entonces como queda este cambio: public class ejemplowhile3 { public static void main(String[] args) { StdOut.println("Ingrese un numero"); int b = StdIn.readInt(); long e = 1; int i= 1; while (i<=10){ e=e*b; StdOut.println("El numero " + b + " elevado a la potencia " + i + " es: " + e); i++; } } } 3. Cambio if – CASE Para el caso de cambios de estructuras entre If y Case se deben seguir los siguientes pasos • • • • Las condiciones que tenga el if deben ir en cada uno de los case que se generaran después en el switch.(condiciones destacadas en amarrillo) El caso default es el caso en el cual el IF no evalúa una condición para este caso en particular el default esta destacado en verde (Else destacado en verde). Para el caso de que un if tenga dos condiciones estas se deben separar en dos casos de la estructura CASE.(caso destacado en azul). IF if(opcion == ‘F’){ StdOut.println(“File\n”) }else{ if(opcion == ‘E’){ StdOut.println (“Edit\n”); }else{ if((opcion ==’Q’) | | (opcion == ‘X’)) { StdOut.println(“Quit”); StdOut.println(“Exit”); flag = false; } Else{ StdOut.println(“Desconocido\n”); } } } Al redistribuir en la estructura del case las partes destacadas en colores serian de la siguiente manera (cada uno de los colores representa donde se fue la condición que estaba destacando: • Case switch(opcion) { case ‘F’: StdOut.println(“File\n”); break; case ‘E’: StdOut.println (“Edit\n”); break; case ‘Q’: StdOut.println(“Quit”); StdOut.println(“Exit”); flag = false; break; case ‘X’: StdOut.println(“Quit”); StdOut.println(“Exit”); flag = false; break; default: StdOut.println(“Desconocido\n”); } 4. Cambio Case – IF Para el caso de conversión de Case a IF los pasos a seguir son los siguientes: • • Primero todas los casos del case se deben transformar a condiciones dentro de un IF, todos los casos para este caso están en color azul El caso del default corresponderá a un else sin condición es decir serán las sentencias que se ejecutan en el IF sin que se cumple ninguna condición, destacado en color verde. • Case switch(opcion) { case ‘F’: StdOut.println(“File\n”); break; case ‘E’: StdOut.println (“Edit\n”); break; case ‘Q’: StdOut.println(“Quit”); StdOut.println(“Exit”); flag = false; break; case ‘X’: StdOut.println(“Quit”); StdOut.println(“Exit”); flag = false; break; default: StdOut.println(“Desconocido\n”); } Como se cambian las condiciones de un ciclo al otro se ve con los colores y la descripción siguiente: • IF if(opcion == ‘F’){ StdOut.println(“File\n”) }else{ if(opcion == ‘E’){ StdOut.println (“Edit\n”); }else{ if(opcion ==’Q’) { StdOut.println(“Quit”); StdOut.println(“Exit”); flag = false; }else { if(opcion ==’X’){ StdOut.println(“Quit”); StdOut.println(“Exit”); flag = false; }Else{ StdOut.println(“Desconocido\n”); } } } } 5. Cambio while – do while Para este cambio los pasos a seguir son los siguientes: Nota: No debemos perder de vista que la única diferencia entre estos dos ciclos es que el ciclo while siempre pregunta por la condición al contrario del do – while que la primera vez que se ejecuta el ciclo no lo hace, es este comportamiento (preguntar la primera vez de ejecución por la condición) lo que persigue hacer esta transformación. • • Se debe mirar la condición del while esta condición en el cambio ira antes del do – while en un if además de ser la condición del ciclo do – while. Las sentencias de los ciclos son las mismas no cambian en nada. Veamos un caso concreto: • While public class ejemplowhile1 { public static void main(String[] args) { StdOut.println("Ingrese un numero "); int b = StdIn.readInt(); int i= 1; while (b>0){ StdOut.println("llevo " + i + " ejecuciones"); i++; b--; } } } Al cambiar este ciclo a do-while queda de la siguiente manera: Nota: los colores representan como se cambiaron las partes del ciclo while a do-while public class ejemplodowhile1 { public static void main(String[] args) { StdOut.println("Ingrese un numero "); int b = StdIn.readInt(); int i= 1; if (b>0){ do{ StdOut.println("llevo " + i + " ejecuciones"); i++; b--; }while (b>0); }//if } } 6. Cambio do while – while Para este cambio los pasos a seguir son los siguientes: Nota: No debemos perder de vista que la única diferencia entre estos dos ciclos es que el ciclo do-while ejecuta al menos una vez las sentencias que posee dentro del ciclo, y la transformación de un do-while a while trata de reproducir este comportamiento. • • Se debe mirar la condición del do-while esta condición en el cambio ira dentro del ciclo while. Las sentencias del ciclo se escribirán dos veces una antes del ciclo while y también adentro de este ciclo. Veamos un ejemplo concreto(loa condición esta en amarillo y las sentencias en azul): public class ejemplodowhile2 { public static void main(String[] args) { int b; do{ StdOut.println("Ingrese un numero "); b = StdIn.readInt(); if (b>10){ StdOut.println("el numero es grande"); }else{ StdOut.println("el numero es pequeño"); } b--; }while (b>0); } } Al hacer el cambio las sentencias (en azul) se escriben dos veces una antes del ciclo y adentro del ciclo, y la condición del ciclo do while se escribe solo en la condición del ciclo while. public class ejemplowhile2 { public static void main(String[] args) { int b; StdOut.println("Ingrese un numero "); b = StdIn.readInt(); if (b>10){ StdOut.println("el numero es grande"); }else{ StdOut.println("el numero es pequeño"); } b--; while (b>0){ StdOut.println("Ingrese un numero "); b = StdIn.readInt(); if (b>10){ StdOut.println("el numero es grande"); }else{ StdOut.println("el numero es pequeño"); } b--; } } }