informática ii – practica 2

18

Click here to load reader

Upload: alvin-jacobs

Post on 07-Jul-2015

158 views

Category:

Education


4 download

DESCRIPTION

ejercicios de la practica de informatica II resueltos. (uca 2014)

TRANSCRIPT

Page 1: Informática ii – practica 2

NO  IMPRIMIR  1  

Informática  II  –  Practica  2  –  Ejercicios  Resueltos  

Tabla  de  contenido  Ejercicio  1  .........................................................................................................................................  1  Ejercicio  2  .........................................................................................................................................  1  Ejercicio  3  .........................................................................................................................................  3  Ejercicio  4  .........................................................................................................................................  5  Ejercicio  5  .......................................................................................................................................  11  Ejercicio  6  .......................................................................................................................................  14  

 

Ejercicio  1    #include <stdio.h> #include <stdlib.h> #include <math.h> typedef struct { int x; int y; } punto; double distancia (int, int); int main() { double d1,d2; punto punto1, punto2; printf("Ingrese las coordnadas (x,y) del punto 1\n"); scanf("%d %d", &punto1.x,&punto1.y); d1=distancia(punto1.x,punto1.y); printf("Ingrese las coordnadas (x,y) del punto 2\n"); scanf("%d %d", &punto2.x,&punto2.y); d2=distancia(punto2.x,punto2.y); if(d1>d2) printf("El punto 1 esta mas lejos del origen que el punto 2"); else printf("El punto 2 esta mas lejos del origen que el punto 1"); return 0; } double distancia (int x, int y) { return (sqrt((double)x*x+(double)y*y)); }  

Ejercicio  2    #include <stdio.h>

Page 2: Informática ii – practica 2

   

NO  IMPRIMIR  2  

#include <stdlib.h> #include <math.h> #define N 10 typedef struct { int x; int y; } punto; double dconsec(punto[]); double dtotal(punto[]); double distancia (punto,punto); int main() { int i,x,y; punto dot[N]; for(i=0;i<N;i++) { printf("Ingrese los valores (x,y) del punto %d\n", (i+1)); scanf("%d %d", &x, &y); dot[i].x=x; dot[i].y=y; //printf("\npunto %d: (%d,%d)\n", (i+1), dot[i].x, dot[i].y); //para confirmar que lee y guarda bien lo que se pide. } printf("\nDistancia minima entre puntos consecutivos: %.2lf\n", dconsec(dot)); printf("\nDistancia minima entre dos puntos cuales quiera: %.2lf", dtotal(dot)); return 0; } double dconsec(punto dot[]) { double aux, min=999999;//un billon -1 es la distancia maxima entre puntos con la que funciona el programa. int i=0; for(i=0;i<N-1;i++) { aux=distancia(dot[i],dot[i+1]); if(aux<min) min=aux; } return min; } double dtotal(punto dot[]) { double aux, min=999999;//un billon -1 es la distancia maxima entre puntos con la que funciona el programa. int i=0,j; for(i=0;i<N;i++) { for(j=i+1;j<N;j++) aux=distancia(dot[i],dot[j]); if(aux<min) min=aux; } return min; } double distancia (punto dot1,punto dot2)

Page 3: Informática ii – practica 2

NO  IMPRIMIR  3  

{ return sqrt(((double)dot1.x-dot2.x)*((double)dot1.x-dot2.x)+((double)dot1.y-dot2.y)*((double)dot1.y-dot2.y)); //d(P,Q)=|P-Q|=raiz[(Px-Qx) ^2 + (Py-Qy)^2] }  

 

   

Ejercicio  3    #include <stdio.h> #include <stdlib.h> #define N 5 #define M 25 typedef struct { char nombre[M]; int pg,pe,pp,gf,gc; }team; void cambio (int ,int , team []); int main() { char l; int i=0,j=0,aux; team equipo[N]; //pide datos: for(i=0; i<N; i++) { printf("Ingrese el nombre del equipo: \n"); do { l=getche(); if(l!='\r') { equipo[i].nombre[j]=l; j++; } } while((l!='\r')&&(j<M-1)); equipo[i].nombre[j]='\0'; j=0; printf("\nIngrese los partidos ganados: \n"); scanf("%d", &aux); equipo[i].pg=aux; printf("Ingrese los partidos empatados: \n"); scanf("%d", &aux); equipo[i].pe=aux; printf("Ingrese los partidos perdidos: \n"); scanf("%d", &aux); equipo[i].pp=aux;

Page 4: Informática ii – practica 2

   

NO  IMPRIMIR  4  

printf("Ingrese los goles a favor: \n"); scanf("%d", &aux); equipo[i].gf=aux; printf("Ingrese los goles en contra: \n"); scanf("%d", &aux); equipo[i].gc=aux; printf("-------------------\n"); } //pasa a ordenar: for(i=0; i<N; i++) { for(j=i+1;j<N;j++) { if(3*equipo[i].pg+equipo[i].pe<=3*equipo[j].pg+equipo[j].pe) { if(3*equipo[i].pg+equipo[i].pe<3*equipo[j].pg+equipo[j].pe) cambio(i,j,equipo); else { if(equipo[i].gf-equipo[i].gc<=equipo[j].gf-equipo[j].gc) { if(equipo[i].gf-equipo[i].gc<equipo[j].gf-equipo[j].gc) cambio(i,j,equipo); else { if(equipo[i].gf<equipo[j].gf) cambio(i,j,equipo); } } } } } } //pasa a imprimir for(i=0;i<N;i++) { printf("%s_ %d_ %d_ %d_ %d_ %d_ %d_ %d_ %d \n", equipo[i].nombre,3*equipo[i].pg+equipo[i].pe,equipo[i].pg+equipo[i].pe+equipo[i].pp,equipo[i].pg,equipo[i].pe,equipo[i].pp,equipo[i].gf,equipo[i].gc,equipo[i].gf-equipo[i].gc); } return 0; } void cambio (int a,int b, team equipo[]) { team aux; aux=equipo[a]; equipo[a]=equipo[b]; equipo[b]=aux; }    

Page 5: Informática ii – practica 2

NO  IMPRIMIR  5  

Ejercicio  4    #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define N 52 #define C 10 #define A 1 #define M 5 #define J 4 //N es el numero de cartas del mazo //C son los creditos iniciales //A es la apuesta fija. //M es la cantidad de cartas que se reparten por jugados (m por mano) typedef struct { short int valor, palo; char apodo[25]; } card; //palo=1:trebol //palo=2:diamantes //palo=3:picas //palo=4:corazon int main() { card mazo[N]= { {1,1,"As de Trevol"}, {1,2,"As de Diamantes"}, {1,3,"As de Picas"}, {1,4,"As de Corazones"}, {2,1,"2 de Trevol"}, {2,2,"2 de Diamantes"}, {2,3,"2 de Picas"}, {2,4,"2 de Corazones"}, {3,1,"3 de Trevol"}, {3,2,"3 de Diamantes"}, {3,3,"3 de Picas"}, {3,4,"3 de Corazones"}, {4,1,"4 de Trevol"}, {4,2,"4 de Diamantes"}, {4,3,"4 de Picas"}, {4,4,"4 de Corazones"}, {5,1,"5 de Trevol"}, {5,2,"5 de Diamantes"}, {5,3,"5 de Picas"}, {5,4,"5 de Corazones"}, {6,1,"6 de Trevol"}, {6,2,"6 de Diamantes"}, {6,3,"6 de Picas"}, {6,4,"6 de Corazones"},

Page 6: Informática ii – practica 2

   

NO  IMPRIMIR  6  

{7,1,"7 de Trevol"}, {7,2,"7 de Diamantes"}, {7,3,"7 de Picas"}, {7,4,"7 de Corazones"}, {8,1,"8 de Trevol"}, {8,2,"8 de Diamantes"}, {8,3,"8 de Picas"}, {8,4,"8 de Corazones"}, {9,1,"9 de Trevol"}, {9,2,"9 de Diamantes"}, {9,3,"9 de Picas"}, {9,4,"9 de Corazones"}, {10,1,"10 de Trevol"}, {10,2,"10 de Diamantes"}, {10,3,"10 de Picas"}, {10,4,"10 de Corazones"}, {11,1,"J de Trevol"}, {11,2,"J de Diamantes"}, {11,3,"J de Picas"}, {11,4,"J de Corazones"}, {12,1,"Q de Trevol"}, {12,2,"Q de Diamantes"}, {12,3,"Q de Picas"}, {12,4,"Q de Corazones"}, {13,1,"K de Trevol"}, {13,2,"K de Diamantes"}, {13,3,"K de Picas"}, {13,4,"K de Corazones"} }; card mano[M]; int i,j=0; int sen=0; int creditos=C; srand(time(NULL)); while(creditos>0 && creditos<C+C*0.9 ) { printf("Su apuesta ha sido de %d creditos. Ud. posee %d creditos restantes.\n",A,creditos-A); printf("\n....................\n"); for(i=0; i<M; i++) { mano[i]=mazo[rand()%N]; for(j=0;j<i;j++) { if(strcmp(mano[i].apodo,mano[j].apodo)==0) { mano[i]=mazo[rand()%N]; j=0; } } }

Page 7: Informática ii – practica 2

NO  IMPRIMIR  7  

printf("Sus cartas para esta mano son: \n"); for(i=0; i<M; i++) { printf("%s\n", mano[i].apodo); } printf("\n....................\n"); if(escalerarealalas(mano)) { printf("\nUd. tiene Escalera real! Paga x250\n"); creditos+=A*250; } else { if(escalerareal(mano)) { printf("\nUd. tiene Escalera real al As! Paga x50\n"); creditos+=A*50; } else { if(poker(mano)) { printf("\nUd. tiene Poker! Paga x25\n"); creditos+=A*25; } else { if(full(mano)) { printf("\nUd. tiene Full! Paga x9\n"); creditos+=A*9; } else { if(color(mano)) { printf("\nUd. tiene Color! Paga x6\n"); creditos+=A*6; } else { if(escalera(mano)) { printf("\nUd. tiene Escalera! Paga x4\n"); creditos+=A*4; } else { if(pierna(mano)) { printf("\nUd. tiene Pierna! Paga x3\n"); creditos+=A*3; } else { if(doblepar(mano)) { printf("\nUd. tiene Doble Par! Paga x2\n");

Page 8: Informática ii – practica 2

   

NO  IMPRIMIR  8  

creditos+=A*2; } else { if(pardejosup(mano)) { printf("\nUd. tiene Par de J o superior! Paga x1\n"); creditos+=A; } else { printf("\nLo siento, Ud. no tiene nada en esta mano.\n"); creditos-=A; } } } } } } } } } } return 0; } int escalerarealalas (card mano[]) { int sen10=0,senj=0,senq=0,senk=0,senas=0; int i; for(i=0; i<M; i++) { if(mano[i].valor==10) sen10=1; if(mano[i].valor==11) senj=1; if(mano[i].valor==12) senq=1; if(mano[i].valor==13) senk=1; if(mano[i].valor==1) senas=1; } if((sen10==1)&&(senj==1)&&(senq==1)&&(senk==1)&&(senas==1)) return 1; else return 0; } int escalerareal (card mano[]) { int i, cont=0,min=20,aux,senpalo=0; for(i=0; i<M; i++) { aux=mano[i].valor; if(min>aux) min=aux; } for(i=0; i<M; i++)

Page 9: Informática ii – practica 2

NO  IMPRIMIR  9  

{ if(mano[i].valor==(min+cont)) { cont++; i=0; } } if((mano[0].palo==mano[1].palo)&&(mano[0].palo==mano[2].palo)&&(mano[0].palo==mano[3].palo)&&(mano[0].palo==mano[4].palo)&&(mano[0].palo==mano[5].palo)) senpalo=1; if(cont==5&&senpalo==1) return 1; else return 0; } int poker (card mano[]) { int i,j; int sen=0; int cont[13]= {0}; for(i=0; i<M; i++) { for(j=0; j<13; j++) { if(mano[i].valor==(j+1)) cont[j]++; } } for(j=0; j<13; j++) { if(cont[j]==4) sen=1; } return sen; } int full (card mano[]) { int i,j; int sen1=0, sen2=0; int cont[13]= {0}; for(i=0; i<M; i++) { for(j=0; j<13; j++) { if(mano[i].valor==(j+1)) cont[j]++; } } for(j=0; j<13; j++) { if(cont[j]==3) sen1=1; if(cont[j]==2) sen2=1; } return sen1&&sen2; }

Page 10: Informática ii – practica 2

   

NO  IMPRIMIR  10  

int color (card mano[]) { if((mano[0].palo==mano[1].palo)&&(mano[0].palo==mano[2].palo)&&(mano[0].palo==mano[3].palo)&&(mano[0].palo==mano[4].palo)&&(mano[0].palo==mano[5].palo)) return 1; else return 0; } int escalera (card mano[]) { int i, cont=0,min=20,aux; for(i=0; i<M; i++) { aux=mano[i].valor; if(min>aux) min=aux; } for(i=0; i<M; i++) { if(mano[i].valor==(min+cont)) { cont++; i=0; } } if(cont==5) return 1; else return 0; } int pierna (card mano[]) { int i,j; int sen=0; int cont[13]= {0}; for(i=0; i<M; i++) { for(j=0; j<13; j++) { if(mano[i].valor==(j+1)) cont[j]++; } } for(j=0; j<13; j++) { if(cont[j]==3) sen=1; } return sen; } int doblepar (card mano[]) { int i,j; int sen=0; int cont[13]= {0}; for(i=0; i<M; i++) { for(j=0; j<13; j++) {

Page 11: Informática ii – practica 2

NO  IMPRIMIR  11  

if(mano[i].valor==(j+1)) cont[j]++; } } for(j=0; j<13; j++) { if(cont[j]==2) sen++; } if(sen==2) return 1; else return 0; } int pardejosup (card mano[]) { int i,j; int sen=0; int cont[13]= {0}; for(i=0; i<M; i++) { for(j=0; j<13; j++) { if(mano[i].valor==(j+1)) cont[j]++; } } for(j=10; j<13; j++) { if(cont[j]==2) sen=1; } return sen; }    

Ejercicio  5    #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #define N 4 #define M 25 typedef struct { int doc; char nom[M]; char pais[M]; } person; void impmenu (void); int main() { int op=0; person personas[N]={0};

Page 12: Informática ii – practica 2

   

NO  IMPRIMIR  12  

while(op!=5) { impmenu(); scanf("%d",&op); switch(op) { case 1: agregar(personas); break; case 2: ordenarxnom(personas); imprimir(personas); break; case 3: ordenarxdoc(personas); imprimir(personas); break; case 4: ordenarxpais(personas); imprimir(personas); break; case 5: break; default: printf("\nOpcion incorrecta.\n"); } } printf("\n_____________________________\n"); return 0; } void impmenu (void) { printf("1- Agregar personas\n"); printf("2- Ver listado ordenado por nombre\n"); printf("3- Ver listado ordenado por documento\n"); printf("4- Ver listado ordenado por pais\n"); printf("5- Salir del programa\n"); } void agregar (person personas[]) { int i,j=0,aux; char l; for(i=0;(i<N)&&(personas[i].doc!=0);i++); if(i<N) { printf("Ingrese el documento: \n"); scanf("%d", &aux); personas[i].doc=aux; printf("Ingrese el nombre: \n");

Page 13: Informática ii – practica 2

NO  IMPRIMIR  13  

j=0; do { l=getche(); if(l!='\r') { personas[i].nom[j]=l; j++; } }while ((l!='\r')&&(j<M-1)); personas[i].nom[j]='\0'; printf("\nIngrese el pais: \n"); j=0; do { l=getche(); if(l!='\r') { personas[i].pais[j]=l; j++; } }while ((l!='\r')&&(j<M-1)); personas[i].pais[j]='\0'; printf("\n"); } printf("\n_____________________________\n"); } void ordenarxnom(person personas[]) { int i,j; for(i=0;i<N;i++) { for(j=i+1;j<N;j++) { if(strcmp(personas[i].nom,personas[j].nom)>0) cambiar(i,j,personas); } } } void ordenarxdoc(person personas[]) { int i,j; for(i=0;i<N;i++) { for(j=i+1;j<N;j++) { if(personas[i].doc>personas[j].doc) cambiar(i,j,personas); } } } void ordenarxpais(person personas[]) { int i,j; for(i=0;i<N;i++) {

Page 14: Informática ii – practica 2

   

NO  IMPRIMIR  14  

for(j=i+1;j<N;j++) { if(strcmp(personas[i].pais,personas[j].pais)>0) cambiar(i,j,personas); } } } void imprimir (person personas[]) { int i; printf("Documento\tNombre\tPais\n_____________________________\n"); for(i=0;i<N;i++) { printf("%d\t%s\t%s\n",personas[i].doc,personas[i].nom,personas[i].pais); } printf("\n_____________________________\n"); } void cambiar (int i, int j, person personas[]) { person aux; aux=personas[i]; personas[i]=personas[j]; personas[j]=aux; }    

Ejercicio  6    #include <stdio.h> #include <stdlib.h> #define NA 10 #define NM 10 typedef struct { char nombre[100]; int legajo, materias[30]; } t_alumno; typedef struct { char nombre[100]; int codigo; } t_materia; typedef struct { int legajo_alumo; int cod_materia,nota; } t_nota; void agregar_alm(t_alumno []); void agregar_mat (t_materia []); void agregar_notas (t_alumno [],t_materia [],t_nota []);

Page 15: Informática ii – practica 2

NO  IMPRIMIR  15  

void imp_notas_alumno (int , t_alumno [],t_materia [],t_nota []); void imp_notas_materia (int , t_alumno [],t_materia [],t_nota []); int main() { int op; int aux; t_alumno alumnos[NA]= {0}; t_materia materias[NM]= {0}; t_nota notas[NA*30]= {0}; //x30 porque segun los structs dados 30 es el maximo de materias que puede cursar un alumno. do { printf("Menu:\n"); printf("1) Agregar Alumno\n"); printf("2) Agregar Materia\n"); printf("3) Agregar Notas\n"); printf("4) Imprimir notas de un alumno\n"); printf("5) Imprimir notas de una materia\n"); printf("6) Salir\n"); scanf("%d", &op); switch (op) { case 1: agregar_alm(alumnos); break; case 2: agregar_mat(materias); break; case 3: agregar_notas(alumnos,materias,notas); break; case 4: printf("Ingrese el legajo del alumno:\n"); scanf("%d", &aux); imp_notas_alumno(aux,alumnos,materias,notas); break; case 5: printf("Ingrese el codigo de la materia:\n"); scanf("%d", &aux); imp_notas_materia(aux,alumnos,materias,notas); break; case 6: break; default: printf("\nOpcion incorrecta!"); break; } } while(op!=6); return 0; } void agregar_alm(t_alumno alumnos[]) { int i,j=0,aux; char l;

Page 16: Informática ii – practica 2

   

NO  IMPRIMIR  16  

for(i=0; (i<NA)&&(alumnos[i].legajo!=0); i++); printf("Ingrese el Numero de Legajo:\n"); scanf("%d", &aux); alumnos[i].legajo=aux; if(aux!=0) { printf("Ingrese el nombre del alumno: \n"); j=0; do { l=getche(); if(l!='\r') { alumnos[i].nombre[j]=l; j++; } } while ((l!='\r')&&(j<99)); alumnos[i].nombre[j]='\0'; for(j=0; (j<30)&&(aux!=0); j++) { printf("\nIngrese el codigo de una materia que ese alumno cursa: \n"); scanf("%d", &aux); if(aux!=0) alumnos[i].materias[j]=aux; } } printf("\n____________________\n"); } void agregar_mat (t_materia materias[]) { int i,j=0,aux; char l; for(i=0; (i<NM)&&(materias[i].codigo!=0); i++); printf("Ingrese el Codigo de Materia:\n"); scanf("%d", &aux); materias[i].codigo=aux; if(aux!=0) { printf("Ingrese el nombre de la materia: \n"); j=0; do { l=getche(); if(l!='\r') { materias[i].nombre[j]=l; j++; } }

Page 17: Informática ii – practica 2

NO  IMPRIMIR  17  

while ((l!='\r')&&(j<99)); materias[i].nombre[j]='\0'; } printf("\n____________________\n"); } void agregar_notas (t_alumno alumnos[],t_materia materias[],t_nota notas[]) { int i,j,k,l,aux; //uso i para recorrer alumnos. //uso j para recorrer materias //uso k para recorrer notas k=0; for(i=0; (i<NA)&&(alumnos[i].legajo!=0); i++)//recorro cada alumno { for(j=0; (j<30)&&(alumnos[i].materias[j]!=0); j++)//recorro cada materia que cursa ese alumno { for(l=0;(l<NM)&&(materias[l].codigo!=0); l++)//recorro todas las materias hasta encontrar la materia que cursa el alumno { if(alumnos[i].materias[j]==materias[l].codigo) { printf("Ingrese la nota de %s para la materia %s: ", alumnos[i].nombre, materias[l].nombre); scanf("%d", &aux); notas[k].legajo_alumo=alumnos[i].legajo; notas[k].cod_materia=materias[l].codigo; notas[k].nota=aux; k++; } } } } notas[k].nota=0; } void imp_notas_alumno (int legajo, t_alumno alumnos[],t_materia materias[],t_nota notas[]) { int i,j,k,l; for (i=0; (i<NA)&&(alumnos[i].legajo!=0); i++) //este for busca al alumno por su legajo para saber su nombre { if(legajo==alumnos[i].legajo)//encuentro al alumno { printf("Las notas del alumno %s son: \n", alumnos[i].nombre);//imprimo su nombre for(j=0; (j<30)&&(alumnos[i].materias[j]!=0); j++) //busco desde los codigos de materias que curso el alumno los nombres de esas materias { for(k=0; (k<NM)&&(materias[k].codigo!=0); k++)//tengo un codigo de materia, ahora busco como se llama { if(alumnos[i].materias[j]==materias[k].codigo)//encuentro la materia a la que corresponde el codigo q saque de entre las materias que cursa el alumno { for(l=0; notas[l].nota!=0; l++) //busco la nota para esa materia y ese alumno { if((alumnos[i].legajo==notas[l].legajo_alumo)&&(materias[k].codigo==notas[l].cod_materia))//la encuentro

Page 18: Informática ii – practica 2

   

NO  IMPRIMIR  18  

printf("%s:\t%d\n",materias[k].nombre,notas[l].nota);//imprimo la nota para esa materia } } } } } } } void imp_notas_materia (int cod_mat, t_alumno alumnos[],t_materia materias[],t_nota notas[]) { int i,j,k,l; //empiezo por buscar el nombre de la materia: for(i=0; (i<NM) && (materias[i].codigo!=0); i++) { if(cod_mat==materias[i].codigo) { printf("Las notas para la materia %s son:\n", materias[i].nombre); //paso a buscar 1 por 1 los alumnos que tienen esa materia entre sus cursadas: for(j=0; (j<NA)&&(alumnos[j].legajo!=0); j++) //recorro cada alumno { for(k=0; (k<30)&&(alumnos[j].materias[k]!=0); k++) //recorro cada materia que cursa ese alumno { if(alumnos[j].materias[k]==cod_mat) { for(l=0; notas[l].nota!=0; l++) { if((alumnos[j].legajo==notas[l].legajo_alumo)&&(materias[i].codigo==notas[l].cod_materia)) { printf("%s:\t%d\n",alumnos[j].nombre,notas[l].nota); } } } } } } } }