Clase7(RepasoResumen).ppt
=========================
Programas lineales con ejecucin de funciones predefinidas
Programas lineales con ejecucin de funciones definidas por el programador
//seleccionar mayor entre dos fechas
static public void main(String[]args)throws IOException{
int f1=U.readInt(“fecha1(ddmmaaaa)?”),
f2=U.readInt(“fecha2(ddmmaaaa)?”);
U.println(“mayor=“+
ddmmaaaa(Math.max(aaaammdd(f1),aaaammdd(f2))));
}
//convertir fecha ddmmaaaa a la forma aaaammdd
static public int aaaammdd(int x){
int dd=x/1000000, mm=x/10000%100, aaaa=x%10000;
return aaaa*10000 + mm*100 + dd;
}
//convertir fecha aaaammdd a la forma ddmmaaaa
static public int ddmmaaaa(int x){
int dd=x%100, mm=x%10000/100, aaaa=x/10000;
return dd*1000000 + mm*10000 + aaaa;
}


Seleccin instrucciones (if-else)
static public int diasMes(int m,int a){
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
return 31;
else if(m==4||m==6||m==9||m==11)
return 30;
else if(m==2)//if(cond simple) sin else
if(bisiesto(a))
return 29;
else
return 28;
return 0;//mes incorrecto
}
static public boolean bisiesto(int x){
return x%4==0 && x%100!=0 || x%400==0;
}

Repeticin instrucciones (while)
//tabla celsius - fahrenheit
int g=-20;
while(g<=40){
U.println(g+”ºC=“+(9.0/5.0*g+32)+”ºF”);
g=g+5;
}
static public double potencia (double x,int y){
if(y==0 && x==0) U.abortar(“0^0 indefinido”);
double producto=1;
int i=2;
while(i<=Math.abs(y)){
producto=producto*x;
i=i+1;
}
if(y>=0)
return producto;
else
return 1/producto;
}


Funciones Recursivas
//factorial(x)
static public int factorial(int x){
if(x==0)
return 1; //caso base
else
return x*factorial(x-1);
}
static public int factorial(int x){
if(x==0) return 1; //caso base
return x*factorial(x-1);
}
Operadores especiales
double suma, mayor, numero; int n;
suma = mayor = n = 0;
while((numero=U.readDouble("nº?"))>0){
U.println(“prom=”+(suma+=numero)/++n);
mayor=max(numero,mayor);
}
U.println(“mayor=“+mayor);

static public double max(double x,double y){
return x>y ? x : y;
}
Instrucciones especiales
//cuentaRegresiva en palabras
U.println(“diez”);
for(int i=9; i>=0; --i){
printDigito(i);
U.print(“\n”); //U.println(“”);
}
//combinaciones entre dígitos
for(int x=0,n=0; x<=9; ++x)
for(int y=x+1; y<=9; ++y) //int y=0?
if(x!=y) U.println(++n +”:”+x +“,“+y);
Escribe
1:0,1
2:0,2

nº:9,9
Repaso/resumen
lectura/escritura y asignacin
funciones
seleccin de instrucciones (if-else)
repeticin de instrucciones (while)
recursin
operadores/instrucciones especiales




%: operador de resto de divisin
//invertir entero de 3 dígitos
int n=U.readInt(“Nº 3 dígitos?”);
int d1=n/100, d3=n%10;
int d2=n%100/10;//int d2=n/10%10;
U.println(“inverso=”+d3+d2+d1);
//cajero automático
int d=U.readInt(“¿Cuánto dinero necesita?”);
U.println(d/20000+” de $20.000”);d=d%20000;
U,println(d/10000+” de $10.000”);d=d%10000;
U.println(d/5000+” de $5.000”);d=d%5000;
U.println(d/2000+” de $2.000”);d=d%2000;
U.println(d/1000+” de $1.000”);










Patrones para proceso de listas
//ïnicializar //inicializar
int mayor=0; int mayor=0;
//leer 1º //repetir siempre
int n=U.readInt(“nº?”); while(true){
//repetir mientras //leer
while(n!=0){ int n=U.readInt(“nº?”);
//procesar //condición de término
if(n>mayor) mayor=n; if(n==0) break;
//leer sgte //procesar
n=U.readInt(“nº?”); mayor=Math.max(mayor,n);
} }
//finalizar //finalizar
U.println(“mayor=“+mayor); U.println(“mayor=“+mayor);






Funciones Recursivas
static public int fibonacci(int i){
if(i
return fibonacci(i-1)+fibonacci(i-2);
}
//c(x,y)=c(x-1,y)+c(x-1,y-1); c(x,x)=c(x,0)=1
static public int combinaciones(int x,int y){
if(x==y || y==0) return 1;
return combinaciones(x-1,y)
+ combinaciones(x-1,y-1);
}


Mtodos void recursivos
static public void misterio(){
int n=U.readInt(“nº?”);
if(n==0) return;
misterio();
U.println(n);
}
¿Qué hace misterio(); con los sgtes datos?
nº? 6
nº? 3
nº? 5
nº? 0



? en Funciones Recursivas
static public int fibonacci(int i){
return i
fibonacci(i-1)+fibonacci(i-2);
}
static public int combinaciones(int x,int y){
return x==y || y==0 ? 1:
combinaciones(x-1,y)
+ combinaciones(x-1,y-1);
}