Metodología y Tecnología de la Programación ESI-UCLM Tema 3. Estructuras de control y programación estructurada 1. ¿Cuál es el resultado de este programa? class Ejemplo { public static void main(String [] args) { int i=3; int j=4; boolean etiqueta=false; //Ejemplo de y lógico if (i==3 && j==4) { System.out.println ("La condicion se cumple"); } else { System.out.println ("La condicion no se cumple"); } //Ejemplo de o lógico if (i==1 || j==4) { System.out.println ("La condicion se cumple"); } else { System.out.println ("La condicion no se cumple"); } //Ejempo de no lógico if (!etiqueta) { System.out.println ("La condicion se cumple"); } else { System.out.println ("La condicion no se cumple"); } }//fin main }//fin clase Ejemplo 2. ¿Cuál es el error de este programa? ¿Cómo se podría subsanar? class Ejemplo { public static void main(String [] args) { char c='c'; if (c=='c' || 'd') { System.out.println ("Estoy en el if"); } else { System.out.println ("Estoy en el else "); } }//fin main }//fin clase Ejemplo 3. Suponga que r1 y r2 son dos números reales. Escriba el código necesario para determinar si son iguales suponiendo que la precisión de la representación numérica es p. Ejercicios tema 3 Página: 1 Metodología y Tecnología de la Programación ESI-UCLM 4. ¿Qué imprimiría el siguiente programa? class Alcance{ public static void main(String [] args){ int numero=100; if (numero<103){ int dentroAmbito=3; System.out.println("*Dentro del bloque"); System.out.print("dentroambito= "+dentroAmbito+ " numero= "+numero); } // Cierra el bloque del if //System.out.println("Fuera del bloque "+dentroAmbito); System.out.println("\n\n*Fuera del bloque\n"+ "Solo existe numero "+numero); } // Cierra el bloque del main } // Cierra la clase 5. Una línea de autobuses cobra un mínimo de 20 euros por persona y trayecto. Si el trayecto es mayor de 200 km el billete tiene un recargo de 3 céntimos por km adicional. Sin embargo, para trayectos de más de 400 km el billete tiene un descuento del 15 %. Por otro lado, para grupos de 3 o más personas el billete tiene un descuento del 10 %. Con las consideraciones anteriores, escriba en Java un programa estructurado que lea por teclado la distancia del viaje a realizar, así como el número de personas que viajan juntas. Con ello se debe calcular tanto el precio del billete individual como el total a pagar si viaja más de una persona. 6. )Cuál es el resultado del siguiente programa? class Ejercicio { public static void main(String [] args) { char a='g'; switch (a) { case 'g': a++; default: if (a<'g') a--; else a='m'; } System.out.println(a); }//fin main }//fin clase 7. Calcular el sumatorio ji N i' 1 Siendo N un entero que se introduce por teclado. Implemente 3 programas usando cada uno de los tipos de bucles que conoce. 8. Calcular el productorio ki N i '1 Siendo N un número entero que se introduce por teclado. Implemente un programa usando un blucle for. Ejercicios tema 3 Página: 2 Metodología y Tecnología de la Programación ESI-UCLM 9. El siguiente fragmento de programa pretende sumar los enteros de 1 a n (ambos inclusive) almacenando el resultado en la variable sum. )Es correcto el programa? Si no lo es, indique por qué y qué habría que hacer para solucionarlo. i=0; sum=0; while (i<=n) { i=i+1; sum=sum+i; } 10. ¿Qué hace este programa? import java.util.Scanner; class Ejemplo { public static void main (String [ ] args) { char caracter; Scanner lectura=new Scanner(System.in); System.out.print("Introduzca a o b\n"); caracter = (lectura.next()).charAt(0); while (caracter!='a' || caracter!='b') { System.out.print("Opcion erronea, pruebe de nuevo\n"); caracter=(lectura.next()).charAt(0); }//del while }//del main }//fin clase a) Entra en el while cuando lee una letra que no sea 'a' o 'b'; b) No entra en el while cuando lee la letra 'a' ; c) Siempre entra en el bucle while; d) No entra en el while cuando lee la letra ‘b’ 11. ¿Cuál es el resultado de este programa? ¿Y si la variable a fuera par? class Ejercicio{ public static void main (String [] args) { int a=3; int n=10; int cont=0; for (int var=0; var<n;var++) { if ((a%2==0) || (var%2) ==0) { cont++; } } System.out.println(cont); } } 12. ¿Qué imprime el siguiente programa? class Ejercicio{ public static void main (String [] args) { int var=1; int m=1; boolean x=true; do{ if (!x){ var=2; } do { m++; } while(m<3); x=false; }while(var!= 2 ); System.out.println(m); } } Ejercicios tema 3 Página: 3 Metodología y Tecnología de la Programación ESI-UCLM 13. Para una disolución de un ácido débil, HA, cuya constante de disociación sea Ka , el pH viene dado por la expresión (aproximada): pH • (1/2) ( pK a &log [ HA] ) donde pKa es el menos logaritmo decimal de Ka, log representa el logaritmo decimal y [HA] es la concentración molar (moles/litro) del ácido. Escriba un programa en Java que acepte la constante de acidez de un ácido débil y luego pregunte por la concentración de la disolución, evaluando el pH. El programa debe solicitar un valor de concentración tras cada cálculo hasta que el usuario indique que no desea calcular el pH de ninguna nueva disolución. 14. Diseñe y codifique un programa estructurado en Java que calcule el factorial de un número entero positivo cualquiera (incluido cero). El programa debe solicitar un entero para calcular el factorial, identificar el caso de un entero negativo y, en ese caso, solicitar un nuevo valor hasta que se introduzca un entero no negativo. Tras calcular el factorial el programa debe preguntar si se desea introducir un nuevo entero. Si es así, el programa debe solicitar un valor entero en las mismas condiciones que anteriormente. El proceso se repetirá hasta que el usuario indique que no desea seguir calculando factoriales. 15. Usando bucles como únicas estructuras de control y una única sentencia de impresión para el carácter o, escriba un programa en Java que imprima la siguiente salida: ooooo ooo o 16. Reestructure el siguiente fragmento de código para evitar el uso de saltos incondicionales. while (i < n) { j=Integer.parseInt(leer.readLine()); if (j==-1) break; i++; } 17. Haga un programa que dados dos números introducidos por teclado indique si son amigos o no. El programa debe ofrecer la posibilidad de continuar. Nota: Dos números amigos son dos enteros positivos (n1, n2) tales que la suma de los divisores propios de uno de ellos es igual al otro (la unidad se considera divisor propio, pero no lo es el mismo número). Por ejemplo, 220 y 284 son amigos, ya que: Suma de divisores de 284: 1 + 2 + 4 + 71 + 142 = 220 Suma de divisores de 220: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284. También son números amigos 17296 y 18416 18. Dado el siguiente programa: class Ejercicio{ public static void main (String [] args) { double x,y; x=15.0; y=10.0; int var1 =(int) ((x/4)+1); int var2 = (int) (y/4); while (var1 > 0) { var1 = var1-1; var2 = var2 * var1; System.out.print(var2 + " "); } } //fin main }//fin clase Ejercicio a) Indicar qué imprimiría; b) Escribir un bucle for que produzca el mismo resultado. Ejercicios tema 3 Página: 4 Metodología y Tecnología de la Programación ESI-UCLM 19. Complete el siguiente programa para que la salida sea suma=5 class Ejemplo { public static void main (String[] args) { int suma; ..................... for (int j=1;j<=5;j=j+3) { suma=suma+j; } System.out.print ("suma="+suma); } } 20. Dada la siguiente secuencia de sentencias if-else transfórmela en una secuencia equivalente usando una única sentencia switch if (opcion==’u’) x=x+1; else if (opcion==’d’) x=x+2; else if (opcion==’t’) x=x+3; else x=x+4; Ejercicios tema 3 Página: 5