ejercicios resueltos practica 4 informatica ii
TRANSCRIPT
Ejercicios Resueltos |Practica 4 | Informática II | UCA 2014
Ejercicio 1 #include <stdio.h>
#include <stdlib.h>
int multiplo (int,int);
int main()
{
int a=10, b=5;
printf("%d X %d = %d\n",a,b,multiplo(a,b));
return 0;
}
int multiplo (int a,int b)
{
int aux;
if(b>=0)
{
if(b==0)
return 0;
else
return a+multiplo(a,b-‐1);
}
else
{
return -‐a+multiplo(a,b+1);
}
}
Ejercicio 2 #include <stdio.h>
#include <stdlib.h>
int dividir (int ,int);
int main()
{
int a=10,b=2;
printf("%d / %d = %d\n", a,b, dividir(a,b));
return 0;
}
int dividir (int a,int b)
{
if (b==0)
{
printf("ERROR");
exit(0);
}
else
{
if((a<=0&&b<0)||(a>=0&&b>0))
{
if(a<=0&&b<0)
{
a=-‐a;
b=-‐b;
}
if(a<b)
return 0;
else
return 1+dividir(a-‐b,b);
}
else
{
if(a>=0&&b<0)
{
a=-‐a;
b=-‐b;
}
if(a>b)
return 0;
else
return -‐1+dividir(a+b,b);
}
}
}
Ejercicio 3 #include <stdio.h> #include <stdlib.h> int main() { int arr[6]={1,2,3,4,5,6}; int i; for(i=0;i<6;i++) printf("%d", arr[i]); printf("\n"); invertir(arr,6); for(i=0;i<6;i++) printf("%d", arr[i]); return 0; } void invertir (int * arr, unsigned int pos) { int aux; aux=(*(arr+pos-1)); (*(arr+pos-1))=(*arr); (*arr)=aux; if(pos>2) invertir(arr+1,pos-2); }
Ejercicio 4
A) #include <stdio.h> #include <stdlib.h> int main() { int arr[6]={1,2,7,4,5,0}; int max; max=r_max(arr); printf("Valor maximo: %d\n", max); return 0; } int r_max (int * arr) {
int pmax; if(*(arr)==0) return (*arr); else { pmax=r_max(arr+1); if((*arr)>pmax) return(*arr); else return pmax; } }
B) #include <stdio.h> #include <stdlib.h> int * r_dmax (int * ); int main() { int arr[6]={8,2,7,4,5,0}; int *max; max=r_dmax(arr); printf("Valor maximo: %d\n", *max); return 0; } int * r_dmax (int * arr) { int * pmax; if(*(arr)==0) return arr; else { pmax=r_dmax(arr+1); if((*arr)>(*pmax)) return arr; else return pmax; } }
Ejercicio 5
C) #include <stdio.h> #include <stdlib.h> int r_min (int*); int main() { int arr[6]={8,2,7,-1,5,0}; int min; min=r_min(arr); printf("Valor minimo: %d\n", min); return 0; } int r_min (int* arr) { int pmin; if(*(arr+1)==0) return (*arr); else { pmin=r_min(arr+1); if((*arr)<pmin) return (*arr); else return (pmin); } }
D) #include <stdio.h> #include <stdlib.h> int* r_dmin (int*); int main() { int arr[6]={8,2,-7,-1,5,0}; int * min; min=r_dmin(arr); printf("Valor minimo: %d\n", *min); return 0; }
int* r_dmin (int* arr) { int *pmin; if(*(arr+1)==0) return arr; else { pmin=r_dmin(arr+1); if((*arr)<(*pmin)) return (arr); else return (pmin); } }
Ejercicio 6 #include <stdio.h> #include <stdlib.h> int* r_dmin (int*); int main() { int arr[6]={8,2,-7,-1,5,0}; int i; ordenar_creciente(arr); for(i=0;arr[i]!=0;i++) printf("(%d)", arr[i]); return 0; } int* r_dmin (int* arr) { int *pmin; if(*(arr+1)==0) return arr; else { pmin=r_dmin(arr+1); if((*arr)<(*pmin)) return (arr); else return (pmin); } }
void ordenar_creciente (int * arr) { int aux; int * paux; if(*arr!=0) { paux=r_dmin(arr); aux=*arr; *arr=*paux; *paux=aux; ordenar_creciente(arr+1); } }
Ejercicio 7
Ejercicio 8
A) #include <stdio.h> #include <stdlib.h> double power (int, int); int main() { int base=-2,exp=3; printf("%d^%d=%.2lf\n", base, exp, power(base,exp)); return 0; } double power (int base, int exp) { if(exp>0) { if(exp==0) return 1; else return base*power(base,exp-1); } else { if(exp==0)
return 1; else return (1/(double)base)*power(base, exp+1); } }
B) double power (int, int); int main() { int base=2,exp=-5; printf("%d^%d=%.2lf\n", base, exp, power(base,exp)); return 0; } double power (int base, int exp) { if(exp==0) return 1; else{ if (exp==1) return base; else{ if(exp==-1) return 1/(double)base; else { if((exp>1)||(exp<1)) return power(base, exp/2)*power(base, exp/2 + exp%2); } } } }
Ejercicio 9 #include <stdio.h> #include <stdlib.h> #define N 5 #define M 6 int main()
{ int fila, columna; char matriz[N][M]={ {' ','X',' ',' ',' ',' '}, {' ','X',' ',' ',' ',' '}, {' ',' ','X',' ',' ','X'}, {' ',' ',' ','X','X',' '}, {' ',' ',' ',' ',' ',' '} }; printf("Matriz Inicial:\n"); for(fila=0;fila<N;fila++) { for(columna=0;columna<N;columna++) printf("|%c|", matriz[fila][columna]); printf("\n"); } printf("Fila:"); scanf("%d",&fila); printf("Columna:"); scanf("%d",&columna); rellenar(fila, columna, matriz); for(fila=0;fila<N;fila++) { for(columna=0;columna<M;columna++) printf("|%c|", matriz[fila][columna]); printf("\n"); } return 0; } void rellenar (int fila, int columna, char matriz[N][M]) { if((matriz[fila-1][columna]==' ')&&(fila>=1)) rellenar(fila-1, columna, matriz); else { if((matriz[fila][columna-1]==' ')&&(columna>=1)) rellenar(fila,columna-1, matriz); } matriz[fila][columna]='#'; if((matriz[fila+1][columna]==' ')&&(fila+1<N))
rellenar(fila+1,columna, matriz); else { if((matriz[fila][columna+1]==' ')&&(columna+1<M)) rellenar(fila, columna+1, matriz); } }
Ejercicio 10 #include <stdio.h> #include <stdlib.h> #define N 5 #define M 6 int main() { int fila, columna; char matriz[N][M]={ {' ',' ',' ',' ','X',' '}, {'X','X','X','X','X',' '}, {' ',' ','X',' ',' ','X'}, {' ',' ',' ','X','X',' '}, {' ',' ',' ',' ',' ',' '} }; printf("Matriz Inicial:\n"); for(fila=0;fila<N;fila++) { for(columna=0;columna<M;columna++) printf("|%c|", matriz[fila][columna]); printf("\n"); } printf("Fila:"); scanf("%d",&fila); printf("Columna:"); scanf("%d",&columna); rellenar(fila, columna, matriz); printf("\nMatriz rellenada desde %d, %d:\n",fila, columna); for(fila=0;fila<N;fila++) { for(columna=0;columna<M;columna++)
printf("|%c|", matriz[fila][columna]); printf("\n"); } return 0; } void rellenar (int fila, int columna, char matriz[N][M]) { if((matriz[fila-1][columna-1]==' ')&&(fila>=1)&&(columna>=1)) rellenar(fila-1,columna-1, matriz); else { if((matriz[fila-1][columna]==' ')&&(fila>=1)) rellenar(fila-1,columna, matriz); else { if((matriz[fila][columna-1]==' ')&&(columna>=1)) rellenar(fila, columna-1, matriz); else { if((matriz[fila-1][columna+1]==' ')&&(fila>=1)&&(columna+1<M)) rellenar(fila-1,columna+1, matriz); } } } matriz[fila][columna]='#'; if((matriz[fila+1][columna-1]==' ')&&(fila+1<N)&&(columna>=1)) rellenar(fila+1,columna-1, matriz); else { if((matriz[fila+1][columna]==' ')&&(fila+1<N)) rellenar(fila+1,columna, matriz); else { if((matriz[fila+1][columna+1]==' ')&&(fila+1<N)&&(columna+1<M)) rellenar(fila+1,columna+1, matriz); else { if((matriz[fila][columna+1]==' ')&&(columna+1<M)) rellenar(fila,columna+1, matriz); } } } }
Ejercicio 11 #include <stdio.h> #include <stdlib.h> int main() { char frace[18]="hola, como estas?"; printf("la frace '%s' tiene %d vocales\n", frace, contar_vocales(frace)); return 0; } int contar_vocales (char * arr) { if(arr!=NULL) { if((*arr=='a')||(*arr=='A')||(*arr=='e')||(*arr=='E')||(*arr=='i')||(*arr=='I')||(*arr=='o')||(*arr=='O')||(*arr=='u')||(*arr=='U')) { if(*(arr+1)=='\0') return 1; else return 1+contar_vocales(arr+1); } else { if(*(arr+1)=='\0') return 0; else return contar_vocales(arr+1); } } }
Ejercicio 12 #include <stdio.h> #include <stdlib.h> #define N 20 int main() { char lab[N][N]= { {'X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','S','X'}, {'X',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ',' ','X'}, {'X',' ','X','X','X','X','X','X','X','X',' ','X','X','X','X',' ','X',' ',' ','X'},
{'X',' ','X',' ',' ',' ',' ',' ',' ','X',' ',' ',' ','X',' ',' ','X',' ','X','X'}, {'X',' ','X','X','X','X',' ','X',' ','X',' ','X',' ','X','X','X','X',' ',' ','X'}, {'X',' ','X',' ',' ','X',' ','X',' ','X',' ','X',' ','X',' ',' ',' ',' ',' ','X'}, {'X',' ','X',' ',' ','X',' ','X',' ','X',' ','X',' ','X',' ','X','X','X','X','X'}, {'X',' ','X',' ','X','X',' ','X',' ','X',' ','X',' ','X',' ','X',' ',' ',' ','X'}, {'X',' ','X',' ',' ',' ',' ','X',' ',' ',' ','X',' ','X',' ','X','X','X',' ','X'}, {'X',' ','X','X',' ','X','X','X','X','X','X','X',' ','X',' ','X',' ',' ',' ','X'}, {'X',' ','X',' ',' ','X',' ',' ',' ','X',' ',' ',' ','X',' ','X',' ','X','X','X'}, {'X',' ','X','X','X','X',' ','X',' ','X',' ','X',' ','X',' ','X',' ',' ',' ','X'}, {'X',' ',' ',' ',' ',' ',' ','X',' ','X',' ','X',' ','X',' ','X','X','X',' ','X'}, {'X','X','X','X','X','X','X','X',' ','X',' ','X',' ',' ',' ',' ',' ','X',' ','X'}, {'X',' ',' ',' ',' ',' ',' ','X',' ','X','X','X','X','X','X','X',' ','X',' ','X'}, {'X',' ','X','X',' ','X',' ','X',' ',' ',' ',' ',' ',' ',' ','X',' ','X',' ','X'}, {'X',' ','X',' ',' ','X',' ',' ',' ','X','X','X','X','X',' ','X',' ','X',' ','X'}, {'X',' ','X',' ','X','X',' ','X',' ',' ',' ',' ',' ','X',' ','X',' ',' ',' ','X'}, {'E',' ','X',' ','X','X',' ','X',' ',' ',' ',' ',' ','X',' ','X',' ',' ',' ','X'}, {'X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X'}, }; int x,y; printf("Laberinto:\n"); mostrar(lab); printf("\n________________________________________\n"); printf("Solucion:\n"); esc(lab, 18,1); mostrar(lab); return 0; } void mostrar(char lab[N][N]) { int x, y; printf("\n\n\n"); for(x=0;x<9999999;x++); for(x=0;x<9999999;x++); for(x=0;x<9999999;x++); for(x=0;x<9999999;x++); for(x=0;x<9999999;x++); for(x=0;x<9999999;x++); for(x=0;x<9999999;x++); for(x=0;x<9999999;x++); for(x=0;x<9999999;x++); for(x=0;x<9999999;x++);
for(y=0; y<N; y++) { for(x=0; x<N; x++) printf("|%c|", lab[x][y]); printf("\n"); } } void esc (char lab[N][N], int x, int y) { if(lab[x][y]!='S') { if(((lab[x][y+1]==' ')||lab[x][y+1]=='S')&&(y+1<N)) { lab[x][y]='#'; mostrar(lab); esc(lab,x,y+1); } else { if(((lab[x+1][y]==' '||lab[x+1][y]=='S'))&&(x+1<N)) { lab[x][y]='#'; mostrar(lab); esc(lab,x+1,y); } else { if(((lab[x-1][y]==' ')||lab[x-1][y]=='S')&&(x>=1)) { lab[x][y]='#'; mostrar(lab); esc(lab,x-1,y); } else { if(((lab[x][y-1]==' ')||lab[x][y+1]=='S')&&(y>=1)) { lab[x][y]='#'; mostrar(lab); esc(lab,x,y-1); } else
{ if((lab[x][y+1]=='#')&&(y+1<N)) { lab[x][y]='*'; esc(lab,x,y+1); } else { if((lab[x+1][y]=='#')&&(x+1<N)) { lab[x][y]='*'; esc(lab,x+1,y); } else { if((lab[x-1][y]=='#')&&(x>=1)) { lab[x][y]='*'; esc(lab,x-1,y); } else { if((lab[x][y-1]=='#')&&(y>=1)) { lab[x][y]='*'; esc(lab,x,y-1); } } } } } } } } } }
Ejercicio 13 #include <stdio.h> #include <stdlib.h> int main() { char palabra[19]="A donar a Maradona"; if(pal(palabra, 17))
printf("%s SI es un paliandromo!\n", palabra); else printf("%s NO es un paliandromo!\n", palabra); return 0; } int pal (char * palabra, int longitud) { if (longitud==1||longitud==0) return 1; else { if(*palabra==' ') return pal(palabra+1, longitud); else { if(*(palabra+longitud)==' ') return pal(palabra, longitud-1); else { if((*palabra>='A')&&(*palabra<='Z')) { if(((*palabra)==(*(palabra+longitud)))||((*palabra)==(*(palabra+longitud)-32))) return (palabra + 1, longitud -1); else return 0; } else { if((*palabra>='a')&&(*palabra<='z')) { if((*palabra)==(*(palabra+longitud))||(*palabra)==(*(palabra +longitud)+32)) return (palabra + 1, longitud -1); else return 0; } } } } } }
Ejercicio 14 #include <stdio.h>
#include <stdlib.h> int main() { int *arr[10]={1,2,3,4,5,6,7,8,9,0}; int i; for(i=0;i<10;i++) printf("%d,",arr[i]); printf("\nOrdenada creciente:\n"); if(creciente(arr)) printf("SI esta ordenado crecientemente."); else printf("NO esta ordenado crecientemente."); return 0; } int creciente (int arr[]) { if(*arr==0||*(arr+1)==0) return 1; else { if(*arr<*(arr+1)) return creciente(arr+1); else return 0; } }