20
Ejercicios Informáticá II Prácticá 1 Ejercicio 1: #include <stdio.h> #include <stdlib.h> #include <conio.h> #define N 5 int main() { char nombre[N][20]; int tabla [N][8]; int i=0,j=0; char l; int aux; //pide datos: for(i=0; i<N; i++) { printf("Ingrese el nombre del equipo: \n"); do { l=getche(); if(l!='\r') { nombre[i][j]=l; j++; } } while((l!='\r')&&(j<19)); nombre[i][j]='\0'; j=0; printf("\nIngrese los partidos ganados: \n"); scanf("%d", &aux); tabla[i][2]=aux; printf("Ingrese los partidos empatados: \n"); scanf("%d", &aux); tabla[i][3]=aux; printf("Ingrese los partidos perdidos: \n"); scanf("%d", &aux); tabla[i][4]=aux; printf("Ingrese los goles a favor: \n"); scanf("%d", &aux); tabla[i][5]=aux; printf("Ingrese los goles en contra: \n"); scanf("%d", &aux); tabla[i][6]=aux; printf("-------------------\n");

Practica 1 informática ii

Embed Size (px)

DESCRIPTION

guia resuelta de ejercicios, informatica II en la UCA, practica 1 (año 2014)

Citation preview

Page 1: Practica 1 informática ii

Ejercicios Informá ticá II Prácticá 1

Ejercicio 1: #include <stdio.h> #include <stdlib.h> #include <conio.h> #define N 5 int main() { char nombre[N][20]; int tabla [N][8]; int i=0,j=0; char l; int aux; //pide datos: for(i=0; i<N; i++) { printf("Ingrese el nombre del equipo: \n"); do { l=getche(); if(l!='\r') { nombre[i][j]=l; j++; } } while((l!='\r')&&(j<19)); nombre[i][j]='\0'; j=0; printf("\nIngrese los partidos ganados: \n"); scanf("%d", &aux); tabla[i][2]=aux; printf("Ingrese los partidos empatados: \n"); scanf("%d", &aux); tabla[i][3]=aux; printf("Ingrese los partidos perdidos: \n"); scanf("%d", &aux); tabla[i][4]=aux; printf("Ingrese los goles a favor: \n"); scanf("%d", &aux); tabla[i][5]=aux; printf("Ingrese los goles en contra: \n"); scanf("%d", &aux); tabla[i][6]=aux; printf("-------------------\n");

Page 2: Practica 1 informática ii

tabla[i][0]=3*tabla[i][2]+tabla[i][3]; tabla[i][1]=tabla[i][2]+tabla[i][3]+tabla[i][4]; tabla[i][7]=tabla[i][5]-tabla[i][6]; } //pasa a ordenar: for(i=0; i<N; i++) { for(j=i+1;j<N;j++) { if(tabla[i][1]<=tabla[j][1]) { if(tabla[i][1]<tabla[j][1]) cambio(i,j,tabla,nombre); else { if(tabla[i][7]<=tabla[j][7]) { if(tabla[i][7]<tabla[j][7]) cambio(i,j,tabla,nombre); else { if(tabla[i][5]<tabla[j][5]) cambio(i,j,tabla,nombre); } } } } } } //pasa a imprimir for(i=0;i<N;i++) { j=0; while ((nombre [i][j]!='\0')&&(j<20)) { printf("%c", nombre[i][j]); j++; } for(j=0;j<8;j++) printf("-%d-", tabla[i][j]); printf("\n"); } return 0; } void cambio (int a,int b, int tabla[N][8], char nombre[N][20]) { char nom[20]; int aux; int i=0;

Page 3: Practica 1 informática ii

while (nombre [a][i]!='\0') { nom[i]=nombre[a][i]; i++; } nom[i]='\0'; i=0; while (nombre[b][i]!='\0') { nombre[a][i]=nombre[b][i]; i++; } nombre[a][i]='\0'; i=0; while (nom[i]!='\0') { nombre[b][i]=nom[i]; i++; } nombre[b][i]='\0'; for(i=0;i<8;i++) { aux=tabla[a][i]; tabla[a][i]=tabla[b][i]; tabla[b][i]=aux; } }

Ejercicio 2:

#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> double promedio_general(double [][12]); void medias_mensuales(double [][12], double[]); double maxima_absoluta(double[][12]); double promedio_general_mod(double [][12], int []); void medias_mensuales_mod(double [][12], double [], int []); double maxima_absoluta_mod(double [][12], int[]); int main() { int i,j; double temp[31][12]; double mes[12];

Page 4: Practica 1 informática ii

int limites[12]= {31,28,31,30,31,30,31,31,30,31,30,31}; srand(time(NULL)); for(i=0; i<31; i++) { for(j=0; j<12; j++) temp[i][j]=rand()%50; } //muestra resultado del inciso a) printf("Promedio: %.2lf\n", promedio_general(temp)); printf("\n----------\n"); //muestra resultado del inciso b) medias_mensuales(temp,mes); for(i=0; i<12; i++) { printf("Promedio mes %d: %.2lf\n", (i+1), mes[i]); } printf("\n----------\n"); //muestra resultados del inciso c) printf("Temperatura maxima: %.2lf", maxima_absoluta(temp)); printf("\n----------\n"); printf("Resultados corregidos con arreglo limites: "); printf("\n----------\n"); //muestra resultados del inciso d.a) printf("Promedio: %.2lf\n", promedio_general_mod(temp, limites)); printf("\n----------\n"); //muestra resultados del inciso d.b) medias_mensuales_mod(temp,mes,limites); for(i=0; i<12; i++) { printf("Promedio mes %d: %.2lf\n", (i+1), mes[i]); } printf("\n----------\n"); //muestra resultados del inciso d.c) printf("Temperatura maxima: %.2lf", maxima_absoluta_mod(temp,limites)); printf("\n----------\n"); return 0; } double promedio_general(double temp[][12]) { double sum=0; int i,j; for(i=0; i<31; i++) { for(j=0; j<12; j++) sum+=temp[i][j]; } return (sum/(31*12)); } void medias_mensuales(double temp[][12], double mes[])

Page 5: Practica 1 informática ii

{ double sum=0; int i,j; for(j=0; j<12; j++) { sum=0; for(i=0; i<31; i++) sum+=temp[i][j]; mes[j]=(sum /31); } } double maxima_absoluta(double temp[][12]) { double max=0;//el rand no me da temperaturas negativas. si quisiera agregar lo de temperaturas negativas es cuestion de inicializar max en -999999 y listo. int i,j; for(i=0; i<31; i++) { for(j=0; j<12; j++) { if(max<temp[i][j]) max=temp[i][j]; } } return max; } double promedio_general_mod(double temp[][12], int limites[]) { double sum=0; int i,j; for(j=0; j<12; j++) { for(i=0; i<limites[j]; i++) sum+=temp[i][j]; } return (sum/(365)); } void medias_mensuales_mod(double temp[][12], double mes[], int limites[]) { double sum=0; int i,j; for(j=0; j<12; j++) { sum=0; for(i=0; i<limites[j]; i++) sum+=temp[i][j]; mes[j]=(sum /limites[j]); } } double maxima_absoluta_mod(double temp[][12], int limites[]) {

Page 6: Practica 1 informática ii

double max=0; int i,j; for(j=0; j<12; j++) { for(i=0; i<limites[j]; i++) { if(max<temp[i][j]) max=temp[i][j]; } } return max; }

Ejercicio 3

#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #define N 4 ordenar_nombres_a(char[][25]); ordenar_nombres_b(char[][25]); ordenar_nombres_c(char[][25]); int main() { int i,j; char nombre[N][25]= {"Juan","Marina","Martin","Abril"}; //ordenar_nombres_a(nombre); //ordenar_nombres_b(nombre); //ordenar_nombres_c(nombre); for(i=0; i<N; i++) printf("\n%s", nombre[i]); } ordenar_nombres_a(char nombre[][25]) { int i, j; char aux[25]; for(i=0; i<N; i++) { for(j=i+1; j<N; j++) { if(nombre[j][0]<nombre[i][0]) { strcpy(aux,nombre[i]); strcpy (nombre[i],nombre[j]); strcpy (nombre [j], aux); }

Page 7: Practica 1 informática ii

} } } ordenar_nombres_b (char nombre[][25]) { int i, j,k=0; char aux[25]; for(i=0; i<N; i++) { for(j=i+1; j<N; j++) { while(nombre[j][k]==nombre[i][k]) k++; if(nombre[j][k]<nombre[i][k]) { strcpy(aux,nombre[i]); strcpy (nombre[i],nombre[j]); strcpy (nombre [j], aux); } k=0; } } } ordenar_nombres_c (char nombre[][25]) { int i, j,k=0, l; char aux[25]; char aux1[25], aux2[25]; for(i=0; i<N; i++) { for(j=i+1; j<N; j++) { for(l=0;l<25;l++) { if(('A'<=nombre[j][l])&&(nombre[j][l]<='Z')) aux1[l]=nombre[j][l]+32; else aux1[l]=nombre[j][l]; if(('A'<=nombre[i][l])&&(nombre[i][l]<='Z')) aux2[l]=nombre[i][l]+32; else aux2[l]=nombre[i][l]; } while(aux1[k]==aux2[k]) k++; if(aux1[k]<aux2[k]) { strcpy(aux,nombre[i]); strcpy (nombre[i],nombre[j]); strcpy (nombre [j], aux);

Page 8: Practica 1 informática ii

} k=0; } } }

Ejercicio 4

#include <stdio.h> #include <stdlib.h> #include <math.h> #define N 5 int modulo (int); int main() { int b,n,i,j; char rmb[N][N]; for(i=0;i<N;i++) { b=modulo(i-2); n=N-2*b; for(j=0;j<N;j++) { if(b>0) { rmb[i][j]=' '; b--; } else { if(n>0) { rmb[i][j]='*'; n--; } else rmb[i][j]=' '; } } } for(i=0;i<N;i++) { for(j=0;j<N;j++) printf("%c", rmb[i][j]); printf("\n"); } return 0;

Page 9: Practica 1 informática ii

} int modulo (int a) { return sqrt(a*a); }

Ejercicio 5

#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 3 void mostrar( int [N][N]); void transponer (int [N][N]); int main() { int mt[N][N]; int i,j; srand(time(NULL)); for(i=0;i<N;i++) { for(j=0;j<N;j++) { mt[i][j]=rand()%10; } } printf("Matriz Original: \n"); mostrar(mt); printf("\n----------\n"); printf("Matriz Transpuesta: \n"); transponer(mt); mostrar(mt); return 0; } void mostrar (int mt[N][N]) { int i,j; for(i=0;i<N;i++) { for(j=0;j<N;j++) printf("-%d-", mt[i][j]); printf("\n"); } } void transponer(int mt[N][N]) {

Page 10: Practica 1 informática ii

int i,j; int aux[N][N]; for(i=0;i<N;i++) { for(j=0;j<N;j++) { aux[i][j]=mt[j][i]; } } for(i=0;i<N;i++) { for(j=0;j<N;j++) { mt[i][j]=aux[i][j]; } } }

Ejercicio 6

#include <stdio.h> #include <stdlib.h> #include <time.h> #define M 2 #define C 2 #define A 2 #define P 2 double prom_mat(int , int [M][C][A][P]); double prom_alm(int , int, int [M][C][A][P]); double prom_com(int , int [M][C][A][P]); double prom_par(int , int, int, int [M][C][A][P]); int main() { int mt[M][C][A][P]; int a=0,b=0,c=0,d=0; int op; int aux; srand(time(NULL)); printf("Seleccione la opcion de carga:\n0) Para Carga Masiva\n1) Para Carga Selectiva\n2) Para Carga Aleatoria de Prueva\n"); scanf("%d", &op); switch (op) { case 0: for(a=0; a<M; a++) {

Page 11: Practica 1 informática ii

for(b=0; b<C; b++) { for(c=0; c<A; c++) { for(d=0; d<P; d++) { printf("Ingrese nota para Materia %d - Comision %d - Alumno %d - Parcial %d: ", (a+1),(b+1),(c+1),(d+1)); scanf("%d", &aux); mt[a][b][c][d]=aux; } } } } break; case 1: for(a=0; a<M; a++) { for(b=0; b<C; b++) { for(c=0; c<A; c++) { for(d=0; d<P; d++) { mt[a][b][c][d]=rand()%10; } } } } while((a!=-1)&&(b!=-1)&&(c!=-1)&&(d!=-1)) { printf("Ingrese el codigo de la materia:"); scanf("%d",&a); if(a!=-1) { printf("Ingrese el codigo de la comision:"); scanf("%d",&b); if(b!=-1) { printf("Ingrese el codigo del alumno:"); scanf("%d",&c); if(c!=-1) { printf("Ingrese el codigo del parcial:"); scanf("%d",&d); if(d!=-1) { printf("Ingrese la nota:"); scanf("%d", &aux); /*a--; b--; c--; d--;

Page 12: Practica 1 informática ii

estos -- son necesarios si pensas que al ingresar datos el hombre cuando se refiere a la primer materia (mt[0][x][x][x]) va a poner un 1 cuando en realidad deberia poner un 0. */ mt[a][b][c][d]=aux; printf("\n----------\n"); } } } } } break; case 2: for(a=0; a<M; a++) { for(b=0; b<C; b++) { for(c=0; c<A; c++) { for(d=0; d<P; d++) { mt[a][b][c][d]=rand()%10; } } } } break; default: printf("!!!\nOpcion Incorrecta\n"); break; } printf("\n--------------------\n"); op=0; while (aux!=6) { printf("\n\nMenu:\n"); printf("1- Ver promedio de una materia (solicitará el codigo de la materia)\n"); printf("2- Ver promedio de un alumno (solicitará la comision y el nro. del alumno)\n"); printf("3- Ver promedio de una comision (solicitara la comision)\n"); printf("4- Ver promedio de un parcial (solicitará la materia, la comisión y el parcial)\n"); printf("5- Volver a cargar los datos (se sobreescribirán los datos existentes)\n"); printf("6- Salir\n"); scanf("%d",&aux); printf("\n--------------------\n"); switch (aux) { case 1: printf("\n Ingrese la materia:"); scanf("%d", &a); printf("\n--------------------\n"); printf("Promedio: %.2lf" , prom_mat(a,mt)); printf("\n--------------------\n"); break; case 2: printf("\n Ingrese la comision:");

Page 13: Practica 1 informática ii

scanf("%d", &a); printf("\n Ingrese el alumno:"); scanf("%d", &b); printf("\n--------------------\n"); printf("Promedio: %.2lf" , prom_alm(a,b,mt)); printf("\n--------------------\n"); break; case 3: printf("\n Ingrese la comision:"); scanf("%d", &a); printf("\n--------------------\n"); printf("Promedio: %.2lf" , prom_com(a,mt)); printf("\n--------------------\n"); break; case 4: printf("\n Ingrese la materia:"); scanf("%d", &a); printf("\n Ingrese la comision:"); scanf("%d", &b); printf("\n Ingrese el parcial:"); scanf("%d", &c); printf("\n--------------------\n"); printf("Promedio: %.2lf" , prom_par(a,b,c,mt)); printf("\n--------------------\n"); break; case 5: //copy paste del codigo de arriba. printf("Seleccione la opcion de carga:\n0) Para Carga Masiva\n1) Para Carga Selectiva\n2) Para Carga Aleatoria de Prueva\n"); scanf("%d", &op); switch (op) { case 0: for(a=0; a<M; a++) { for(b=0; b<C; b++) { for(c=0; c<A; c++) { for(d=0; d<P; d++) { printf("Ingrese nota para Materia %d - Comision %d - Alumno %d - Parcial %d: ", (a+1),(b+1),(c+1),(d+1)); scanf("%d", &aux); mt[a][b][c][d]=aux; } } } } break; case 1: for(a=0; a<M; a++) { for(b=0; b<C; b++) {

Page 14: Practica 1 informática ii

for(c=0; c<A; c++) { for(d=0; d<P; d++) { mt[a][b][c][d]=rand()%10; } } } } while((a!=-1)&&(b!=-1)&&(c!=-1)&&(d!=-1)) { printf("Ingrese el codigo de la materia:"); scanf("%d",&a); if(a!=-1) { printf("Ingrese el codigo de la comision:"); scanf("%d",&b); if(b!=-1) { printf("Ingrese el codigo del alumno:"); scanf("%d",&c); if(c!=-1) { printf("Ingrese el codigo del parcial:"); scanf("%d",&d); if(d!=-1) { printf("Ingrese la nota:"); scanf("%d", &aux); /*a--; b--; c--; d--; estos -- son necesarios si pensas que al ingresar datos el hombre cuando se refiere a la primer materia (mt[0][x][x][x]) va a poner un 1 cuando en realidad deberia poner un 0. */ mt[a][b][c][d]=aux; printf("\n----------\n"); } } } } } break; case 2: for(a=0; a<M; a++) { for(b=0; b<C; b++) { for(c=0; c<A; c++) { for(d=0; d<P; d++) {

Page 15: Practica 1 informática ii

mt[a][b][c][d]=rand()%10; } } } } break; default: printf("!!!\nOpcion Incorrecta\n"); break; } break; case 6: break; default: printf("!!!\nOpcion Incorrecta\n"); break; } } return 0; } double prom_mat(int i, int mt[M][C][A][P]) { int a,b,c; double sum=0; for(a=0; a<C; a++) { for(b=0; b<A; b++) { for(c=0; c<P; c++) { sum+=mt[i][a][b][c]; } } } return ((double)sum/(C*A*P)); } double prom_alm(int i, int j, int mt[M][C][A][P]) { int a,c; double sum=0; for(a=0; a<M; a++) { for(c=0; c<P; c++) { sum+=mt[a][i][j][c]; } } return ((double)sum/(M*P)); } double prom_com(int i, int mt[M][C][A][P]) { int a,b,c; double sum=0; for(a=0; a<M; a++)

Page 16: Practica 1 informática ii

{ for(b=0; b<A; b++) { for(c=0; c<P; c++) { sum+=mt[a][i][b][c]; } } } return ((double)sum/(M*A*P)); } double prom_par(int i, int j, int k, int mt[M][C][A][P]) { int a; double sum=0; for(a=0; a<A; a++) { sum+=mt[i][j][a][k]; } return ((double)sum/(A)); }

Ejercicio 7

#include <stdio.h> #include <stdlib.h> int binario (char ); int main() { char num; int bin=0; printf("Ingrese el numero a pasar a binario: (el numero debe estar entre 0 y 255)\n"); scanf("%d", &num); bin=binario(num); printf("El numero %d en binario es: %d", num, bin); return 0; } int binario (char num) { short int aux; int bin=0; int n; for(n=0;n<8;n++) { aux=0; aux=num%2; num/=2; bin+=aux*pow(10,n); }

Page 17: Practica 1 informática ii

return bin; }

Ejercicio 8

#include <stdio.h> #include <stdlib.h> int binario (char ); int main() { char num; int bin=0; printf("Ingrese el numero a pasar a binario: (el numero debe estar entre 0 y 255)\n"); scanf("%d", &num); bin=binario(num); printf("El numero %d en binario es: %d", num, bin); return 0; } int binario (char num) { unsigned char mask=1; int n, bin=0; for(n=0;n<8;n++) { bin+=(num&mask)*pow(10,n); num=num>>1; } return bin; }

Ejercicio 9

#include <stdio.h> #include <stdlib.h> int shiftd (int); int binario (char); int main() { char num; int bin=0; printf("Ingrese el numero a pasar a binario: (el numero debe estar entre 0 y 255)\n"); scanf("%d", &num);

Page 18: Practica 1 informática ii

bin=binario(num); printf("El numero %d en binario es: %d", num, bin); num=shiftd(num); bin=binario(num); printf("\nluego del shift a la derecha su numero, en binario, es: %d", bin); return 0; } int shiftd (int num) { int mask=1; mask=mask<<(sizeof(int)*4);//*4 porque hay 4 bits por cada byte, y el sizeof me da en bytes. mask=~mask; num=num>>1; return (num&mask); } int binario (char num) { short int aux; int bin=0; int n; for(n=0;n<8;n++) { aux=0; aux=num%2; num/=2; bin+=aux*pow(10,n); } return bin; }

Ejercicio 10

#include <stdio.h> #include <stdlib.h> int cbits (unsigned int); int binario (char); int main() { unsigned int num; int bin=0; printf("Ingrese el numero a contar los '1s': \n"); scanf("%d", &num); bin=binario(num); printf("El numero %d en binario es: %d", num, bin); num=cbits(num); printf("\nHay %d '1s' en esa variable.", num); return 0; }

Page 19: Practica 1 informática ii

int cbits (unsigned int var) { unsigned int mask=1; int i; int cont=0; for(i=0;i<(sizeof(unsigned int)*4); i++) { if(((var>>i)&mask)==1) cont++; } return cont; } int binario (char num) { short int aux; int bin=0; int n; for(n=0;n<8;n++) { aux=0; aux=num%2; num/=2; bin+=aux*pow(10,n); } return bin; }

Ejercicio 11

#include <stdio.h> #include <stdlib.h> #include <math.h> unsigned int mashup (unsigned char,unsigned char,unsigned char,unsigned char); int binario (char ); int binario_int (int); int main() { unsigned char v1=1,v2=4,v3=8,v4=16; unsigned int vr; vr=mashup(v1,v2,v3,v4); printf("\nv1=%d", binario(v1)); printf("\nv2=%d", binario(v2)); printf("\nv3=%d", binario(v3)); printf("\nv4=%d", binario(v4)); printf("\nvr=%d", vr); /*me va a tirar el numero decimal porque la variable int no alcanza para almacenar este numero en binario, asique directamente mande el numero sin transformarlo.*/ return 0;

Page 20: Practica 1 informática ii

} unsigned int mashup (unsigned char v1,unsigned char v2,unsigned char v3,unsigned char v4) { unsigned int vr=0,ve1,ve2,ve3,ve4; ve1=v1; ve1=ve1<<(sizeof(unsigned int)*3);//es *4*(3/4), directamente escribo *3 ve2=v2; ve2=ve2<<(sizeof(unsigned int)*2); ve3=v3; ve3=ve3<<(sizeof(unsigned int)); ve4=v4; vr=vr|ve1; vr=vr|ve2; vr=vr|ve3; vr=vr|ve4; return vr; } int binario (char num) { unsigned char mask=1; int n, bin=0; for(n=0;n<8;n++) { bin+=(num&mask)*(pow(10,n)); num=num>>1; } return bin; }

Ejercicio 12

#include <stdio.h> #include <stdlib.h> char cletra (char); int main() { char a='c'; printf("Letra original: %c\n", a); a=cletra(a); printf("Letra luego de 'cletrar': %c\n",a); return 0; } char cletra (char a) { unsigned char mask=32; return a^mask; }