ejercicios resueltos practica 4 informatica ii

18
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,b1); } else {

Upload: alvin-jacobs

Post on 26-Jul-2015

315 views

Category:

Engineering


5 download

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; } }