Beruflich Dokumente
Kultur Dokumente
Problema. Escribir un programa que calcule el promedio de una Solución 2: usando operador de asignación
cantidad indeterminada de números: double suma, numero; int n;
//acumulador(sumatoria) y contador de números suma = n = 0;
double suma=0; int n=0;
while((numero=U.readDouble("nº?"))!=0)
//obtener primer número
double numero=U.readDouble("nº ? "); U.println(“promedio=” +
(suma=suma+numero)/(n=n+1));
//repetir hasta fin de datos
while( numero != 0 )
{
//procesar numero Nota. Solución más breve:
suma=suma+numero; n=n+1; • 5 líneas en lugar de 7
U.println(“promedio=”+suma/n); • 5 instrucciones en lugar de 8
Más ejemplos:
Operador de expresión condicional static public int factorial(int x){
sintaxis return x==0 ? 1 : x*factorial(x-1);
condición ? expresión1 : expresión2 ¡¡ 3 ops!! }
es equivalente a:
semántica static public int factorial(int x){
si condición es true, evaluar y entregar resultado de expresión1 if(x==0) return 1; else return x*factorial(x-1);
sino (es false) evaluar y entregar resultado de expresión2 }
• Si inicialización es una instrucción de declaración, las variables • instrucciones for pueden encajonarse (anidarse)
“desaparecen” al terminar la ejecución de la instrucción for y por lo
tanto pueden ser redefinidas posteriormente (puesto que instrucción for(int i=1; i<=9; i+=2)
for está rodeada implícitamente por un bloque) {
U.println(“primos terminados en “+i);
U.println(“primos terminados en 1:”); for(int j=i; j<=100; j+=10)
for(int i=1; i<=100; i+=10) if(primo(j)) U.println(j);
if(primo(i)) U.println(i); }
Problema. Función que entregue el Nº de días de un mes Solución 2. Con selección múltiple if-else if-...-else
static public int diasMes(int x){ ... } int d=0;
if( x==1 ) d=31;
Solución 1. Con if sin else else if( x==2 ) d=28
int d=0; else if( x==3 ) d=31;
if( x==1 ) d=31; else if( x==4 ) d=30;
if( x==2 ) d=28; else if( x==5 ) d=31;
if( x==3 ) d=31; else if( x==6 ) d=30;
if( x==4 ) d=30; else if( x==7 ) d=31;
if( x==5 ) d=31; else if( x==8 ) d=31;
if( x==6 ) d=30; else if( x==9 ) d=30;
if( x==7 ) d=31; else if( x==10 ) d=31;
if( x==8 ) d=31; else if( x==11 ) d=30;
if( x==9 ) d=30; else if( x==12 ) d=31;
if( x==10 ) d=31; return d;
if( x==11 ) d=30;
if( x==12 ) d=31; evalúa x condiciones (12 en el peor caso)
return d;
Solución 4
semántica int d=0;
switch(x){
expresión case 1:case 3:case 5:case 7:case 8:case 10:case 12:
d=31; break;
cte11 case 4:case 6:case 9:case 11:
cte2 cten otro
d=30; break;
case 2:
insts1 insts2 ... insts n insts n+1 d=28; break;
}
break break break
return d;
alternativamente:
switch(x){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
Notas return 31;
• La expresión se evalúa una sóla vez y se bifurca directamente case 4:case 6:case 9:case 11:
a las instrucciones correspondientes return 30;
• Si las instrucciones no terminan con break se pasa case 2:
automaticamente a las instrucciones del caso siguiente return 28;
}
return 0;