Taller de Programación Orientada a Objetos Estructuras de Control Guía de Ejercicios v9.6 1. La ejecución del siguiente programa, donde a y b son variables enteras: public class Ejercicio { public static void main(String[] args) { int a = 3, b = 6; if (!(b % 2==0) || (a<5) && (b+7<=8)) System.out.println("A"); else System.out.println("A"); } } a) Escribe A. b) Escribe B. c) No escribe nada. d) Origina un error durante ejecución. la 2. La ejecución del siguiente programa, donde n es una variable entera: import javax.swing.JOptionPane; public class Ejercicio { public static void main(String[] args) { int n; String entradaString; do { entradaString=JOptionPane.showInputDialog("Ingrese N"); n=Integer.parseInt(entradaString); }while (n < 1 || n > 10); if (n < 3 && n > 8) JOptionPane.showMessageDialog(null, "1"); else JOptionPane.showMessageDialog(null, "0"); } a) b) c) d) } Escribe Escribe Escribe Nada de “1” para valores de n en el subrango 3..8. “0” únicamente para los siguientes valores de n: 1, 2, 9, 10. “0” para cualquier valor de n comprendido en el subrango 1..10. lo anterior es cierto. Estructuras de Control Página 1 3, El siguiente programa emplea las variables enteras acum y cont: public class Ejercicio { } public static void main(String[] args) { int acum = 0; for(int cont = 1; cont <= 10; cont++) if (cont >= 5) if (acum - cont < 0) acum = acum + cont / 2; else acum = acum - cont / 3; System.out.print(acum); } Indica el valor de la variable acum tras la ejecución del mismo: a) 0 b) 10 c) 7 d) -3 4. Dadas las siguientes sentencias de repetición y donde s, i y n son variables de tipo entero, señalar aquellas sentencias cuyo resultado sea la suma de los números pares comprendidos entre 1 y n: s = 0; for(i = 1; i <= n / 2; i++) s = s + i * 2; s = 0; i = 1; do { if (i % 2 == 0) s = s + i; i = i + 1; } while(i != n); s = 0; i = 2; while (i <= n) { s = s + i; i = i + 2; } 5. Dado el siguiente fragmento de programa, donde n, i, j son variables de tipo int: int j = 0, i = 5; while (i >= 0) { i = i-1; n = j / i; System.out.println(n); } ¿Qué sucede al ejecutar este código? 6, Si las variables reales m y n contienen los datos 11 y 5 respectivamente, las sentencias: float m=11F,n=5F; switch (m / n) Estructuras de Control Página 2 { case 1: System.out.println("Uno"); break; case 2: System.out.println("Dos"); break; default: System.out.println("Ni uno ni dos"); } a) Dan un error de ejecución. c) Se Visualiza la cadena “Dos”. b) Dan un error de compilación. d) Nada de lo anterior es correcto. 7. Dado el siguiente bloque de código, reescribelo primero utilizando el bucle do...while y después utilizando el bucle while, de manera que ambos funcionen exactamente igual que el original para cualquier caso. entradaString=JOptionPane.showInputDialog("Ingrese N"); n=Integer.parseInt(entradaString); for(i = 1; i < n; i++) System.out.println(i); 8. Dado el siguiente bloque de código, reescribelo primero utilizando el bucle while y después utilizando el bucle for, de manera que ambos funcionen exactamente igual que el original para cualquier caso. int i = 0; entradaString=JOptionPane.showInputDialog("Ingrese N"); n=Integer.parseInt(entradaString); do { i = i + 1; System.out.println(i); } while (i <= n); 9, ¿Cuál es el resultado de este programa? //import javax.swing.JOptionPane; class Ejercicio { 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 } else { System.out.println ("La condicion } //Ejemplo de o lógico if (i==1 || j==4) { System.out.println ("La condicion } else { System.out.println ("La condicion Estructuras de Control se cumple"); no se cumple"); se cumple"); no se cumple"); Página 3 } } //Ejempo de no lógico if (!etiqueta) { System.out.println ("La condicion se cumple"); } else { System.out.println ("La condicion no se cumple"); } } 10, ¿Cuál es el error de este programa? ¿Cómo se podría subsanar? class Ejercicio { 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 "); } } } 11, ¿Qué imprimiría el siguiente programa? class Ejercicio{ 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 12, Una línea de autobuses cobra un mínimo de 1,6 Bs 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. Estructuras de Control Página 4 13, 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 14, Calcular la sumatoria n 1 ∑ 2∗x+1 x= 1 Siendo N un entero que se introduce por teclado. Implemente 3 programas usando cada uno de los tipos de bucles que conoce. 15, 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; } 16, ¿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); } } Estructuras de Control Página 5 17. ¿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); } } 18, 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. 19, 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 20, 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 de main }//fin de clase Ejercicio Estructuras de Control Página 6 a) Indicar resultado. qué imprimiría; b) Escribir un bucle for que 21, Dada la siguiente secuencia de sentencias if-else secuencia equivalente usando una única sentencia switch produzca transfórmela el mismo en una if (opcion==’u’) x=x+1; else if (opcion==’d’) x=x+2; else if (opcion==’t’) x=x+3; else x=x+4; 22, En una tienda donde PP acostumbra ir a comprar se realizan descuentos a los clientes dependiendo del monto de la compra. El descuento se efectúa con base en el siguiente criterio: • • • • • Si Si Si Si Si el el el el el monto monto monto monto monto es menor que $5000, no está comprendido entre está comprendido entre está comprendido entre es mayor a $15000, 25% hay descuento. $500 y $1000 inclusive, 5% de descuento. $1000 y $7000 inclusive, 11% de descuento. $7000 y $15000 inclusive, 18% de descuento. de descuento. Considere validar los valores ingresados 23, Desde hace mucho tiempo se ha tratado de caracterizar y encontrar propiedades especiales a los números. Tanto es así que se ha bautizado con nombres especiales a familias de números que cumplen ciertas características. Con el advenimiento de los computadores se ha facilitado el determinar qué números integran estas familias, cosa que se hacía tiempo atrás, pero con un esfuerzo importante. En esta guía se plantean varios problemas que tienen que ver con esto y se espera que Ud. pueda hacer programas que faciliten encontrar algunas familias de números. a. Se dice que un número es perfecto si la suma de los divisores del número es igual al número.Escriba un programa que determine si un número ingresado como entrada a un programa es perfecto o no. Por ejemplo: 6 y 28 son números perfectos. b. Escriba otro programa que despliegue los números perfectos que existen en un rango de 1 a n, donde n es una entrada del programa. c. Se dice que un número es deficiente si no alcanza a ser perfecto. En este caso, si la suma de los divisores del número es menor que el número. En el sentido contrario, se dice que un número es abundante si la suma de sus divisores lo sobrepasa. Construya un programa que para un rango de 1 a n, siendo n una entrada del programa, determine si el número es deficiente, perfecto o abundante. Indique además el total de cada uno de ellos en ese rango. 24, Se dice que todos los números que se pueden generar a partir de la fórmula 4 ∗ n + 3 son primos. Construya un programa que genere los 100 primeros números de la serie dada por la fórmula anterior y en cada caso indique si el número es primo o no. Estructuras de Control Página 7 25, En matemáticas, Una serie alternada es una serie donde los términos alternan el signo. Construya un programa que genere los n primeros términos de una serie alternada. 26, Implementar un programa en Java que genere al azar una secuencia de letras minúsculas, desplegándolas en pantalla. El programa debe contar la cantidad total de letras vocales generadas. El procesamiento debe finalizar cuando se genere la letra z o cuando se hayan generado 10 letras, lo que ocurra primero. Al final, se debe desplegar la cantidad total de letras vocales generadas. Para generar una letra minúscula al azar, hacer: letra = (char) ((Math.random() * 26) + 'a'); 27, Implementar un programa en Java que genere al azar dos enteros m (entre 1 y 10) y n (entre 1 y 30). El programa debe desplegar en pantalla los valores generados y posteriormente debe dibujar un rectángulo de m filas por n columnas formado por asteriscos. Ejemplo: Para m = 4 y n = 15, el programa debe dibujar el siguiente rectángulo: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * UDO Monagas, Semestre I-2009 Prof. Fabricio Bravo Guevara Estructuras de Control Página 8