Ejercicios Resueltos Practica 2 (NUEVA 2014) | Informática II 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> #include <stdlib.h> #include <math.h> #define N 10 typedef struct { int x; int y; }t_punto; int main() { t_punto puntos[10]; cargar_puntos(puntos); distancia_consecutivos(puntos); distancia_total(puntos); return 0; } void cargar_puntos (t_punto puntos[N]) { int i=0, aux; FILE * arch=fopen("puntos.csv","r"); if(arch!=NULL) { fscanf(arch,"%d;%d", &(puntos[i].x), &(puntos[i].y)); i++; while (!feof(arch)) { aux=fgetc(arch); fscanf(arch,"%d;%d", &(puntos[i].x), &(puntos[i].y)); i++; } } fclose(arch); } void distancia_consecutivos (t_punto puntos[N]) { int i; double d, dmin=pow(2,sizeof(double)*8); for(i=0;i<N-1;i++) { d=sqrt((puntos[i].x-puntos[i+1].x)*(puntos[i].x-puntos[i+1].x)+(puntos[i].ypuntos[i+1].y)*(puntos[i].y-puntos[i+1].y)); if(d<dmin) dmin=d; } printf("\nLa distancia minima entre puntos consecutivos es: %.2lf", dmin); } void distancia_total (t_punto puntos[N]) { int i,j; double d, dmin=pow(2,sizeof(double)*8); for(i=0;i<N;i++) { for(j=i+1;j<N;j++) { d=sqrt((puntos[i].x-puntos[j].x)*(puntos[i].x-puntos[j].x)+(puntos[i].ypuntos[j].y)*(puntos[i].y-puntos[j].y)); if(d<dmin) dmin=d; } } printf("\nLa distancia minima entre puntos cuales quiera es: %.2lf", dmin); } Ejercicio 3 #include <stdio.h> #include <stdlib.h> #define N 5 #define M 30 typedef struct { char nombre[M]; int PG; int PE; int PP; int GF; int GC; } t_equipo; int main() { t_equipo equipos[N]; cargar_equipos(equipos); mostrar_equipos(equipos); return 0; } void cargar_equipos (t_equipo equipos[N]) { FILE * arche=fopen("Equipos.txt","r"), *archp=fopen("puntos.csv","r"); int i=0; if((arche!=NULL) && (archp!=NULL)) { fgets(equipos[i].nombre,M,arche); fscanf(archp,"%d;%d;%d;%d;%d\n",&(equipos[i].PG),&(equipos[i].PE),&(equipos[i].PP),&(equi pos[i].GF),&(equipos[i].GC)); i++; while((!feof(arche))&&(!feof(archp))) { fgets(equipos[i].nombre,M,arche); fscanf(archp,"%d;%d;%d;%d;%d\n",&(equipos[i].PG),&(equipos[i].PE),&(equipos[i].PP),&(eq uipos[i].GF),&(equipos[i].GC)); i++; } } fclose(arche); fclose(archp); } void mostrar_equipos (t_equipo equipos[N]) { int i; printf("Equipos\tPTS\tPJ\tPG\tPE\tPP\tGF\tGC\tDIF"); printf("\n---------------------------------------------------------------------\n"); for(i=0;i<N;i++) { printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", equipos[i].nombre,3*equipos[i].PG+equipos[i].PE,equipos[i].PG+equipos[i].PE+equipos[i].PP,equip os[i].PG,equipos[i].PE,equipos[i].PP,equipos[i].GF,equipos[i].GC,equipos[i].GF-equipos[i].GC); } } 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"}, {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; } } } 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"); 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++) { 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; } 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++) { 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> #define N 5 #define M 30 int main() { //guardar_personas(); imprimir_tabla(); return 0; } void guardar_personas () { int doc; char nombre[M]; char pais[M]; char l; int i=0,j=0; FILE * arch=fopen("personas.csv","w"); while((j<N)&&(doc!=0)) { printf("\nIngrese el documento: (0 para terminar la carga)\n"); scanf("%d", &doc); l='a'; if(doc!=0) { printf("\nIngrese el Nombre:\n "); while((i<M)&&(l!='\r')) { l=getche(); if(l!='\r') { nombre[i]=l; i++; } } nombre[i]='\0'; i=0; l='a'; printf("\nIngrese el Pais:\n "); while((i<M)&&(l!='\r')) { l=getche(); if(l!='\r') { pais[i]=l; i++; } } pais[i]='\0'; i=0; fprintf(arch,"%d;%s;%s\n",doc,nombre,pais); j++; } } fclose(arch); } Ejercicio 6 void imprimir_tabla (void) { FILE* arch=fopen("personas.csv","r"); int aux, i=0; char l; int doc; char nom[M]; char pais[M]; printf("Documento:\tNombre:\t\tPais:\n============================================= ==========\n"); fscanf(arch,"%d",&doc); fgetc(arch); aux=fgetc(arch); l=aux; while(l!=';'&&l!='\n'&& i<M) { nom[i]=l; aux=fgetc(arch); l=aux; i++; } nom[i]='\0'; i=0; aux=fgetc(arch); l=aux; while(l!=';'&&l!='\n'&& i<M) { pais[i]=l; aux=fgetc(arch); l=aux; i++; } pais[i]='\0'; i=0; printf("%d\t%s\t%s\n",doc,nom,pais); while (!(feof(arch))) { fscanf(arch,"%d",&doc); if(!feof(arch)) { fgetc(arch); aux=fgetc(arch); l=aux; while(l!=';'&&l!='\n'&& i<M) { nom[i]=l; aux=fgetc(arch); l=aux; i++; } nom[i]='\0'; i=0; aux=fgetc(arch); l=aux; while(l!=';'&&l!='\n'&& i<M) { pais[i]=l; aux=fgetc(arch); l=aux; i++; } pais[i]='\0'; i=0; printf("%d\t%s\t%s\n",doc,nom,pais); } } } Ejercicio 7 #include <stdio.h> #include <stdlib.h> #include <string.h> #define M 30 typedef struct { int doc; char nom[M]; char pais[M]; }t_persona; int main() { mostrar_tabla(); return 0; } void menu (void) { printf("1-Ver listado ordenado por nombre\n"); printf("2-Ver listado ordenado por documento\n"); printf("3-Ver listado ordenado por pais\n"); printf("4-Salis del programa\n"); } void mostrar_tabla (void) { int op; menu(); scanf("%d", &op); t_persona personas[1000]; cargar_personas(personas); switch (op) { case 1: ordenarxnom(personas); imprimir(personas); break; case 2: ordenarxdoc(personas); imprimir(personas); break; case 3: ordenarxpais(personas); imprimir(personas); break; case 4: break; default: printf("La opcion elegida no es valida."); break; } } void cargar_personas(t_persona personas[]) { FILE*arch=fopen("personas.csv","r"); int aux, i=0,j=0; char l; int d; char n[M]; char p[M]; fscanf(arch,"%d",&d); fgetc(arch); aux=fgetc(arch); l=aux; while(l!=';'&&l!='\n'&& i<M) { n[i]=l; aux=fgetc(arch); l=aux; i++; } n[i]='\0'; i=0; aux=fgetc(arch); l=aux; while(l!=';'&&l!='\n'&& i<M) { p[i]=l; aux=fgetc(arch); l=aux; i++; } p[i]='\0'; i=0; personas[j].doc=d; strcpy(personas[j].nom,n); strcpy(personas[j].pais,p); j++; while (!(feof(arch))) { fscanf(arch,"%d",&d); if(!feof(arch)) { fgetc(arch); aux=fgetc(arch); l=aux; while(l!=';'&&l!='\n'&& i<M) { n[i]=l; aux=fgetc(arch); l=aux; i++; } n[i]='\0'; i=0; aux=fgetc(arch); l=aux; while(l!=';'&&l!='\n'&& i<M) { p[i]=l; aux=fgetc(arch); l=aux; i++; } p[i]='\0'; i=0; personas[j].doc=d; strcpy(personas[j].nom,n); strcpy(personas[j].pais,p); j++; } } personas[j].doc=0; } void ordenarxdoc (t_persona personas[]) { int i,j; t_persona aux; for(i=0;personas[i].doc!=0;i++) { for(j=i+1;personas[j].doc!=0;j++) { if(personas[i].doc>personas[j].doc) { aux=personas[i]; personas[i]=personas[j]; personas[j]=aux; } } } } void ordenarxnom (t_persona personas[]) { int i,j; t_persona aux; for(i=0;personas[i].doc!=0;i++) { for(j=i+1;personas[j].doc!=0;j++) { if(strcmp(personas[i].nom,personas[j].nom)>0) { aux=personas[i]; personas[i]=personas[j]; personas[j]=aux; } } } } void ordenarxpais (t_persona personas[]) { int i,j; t_persona aux; for(i=0;personas[i].doc!=0;i++) { for(j=i+1;personas[j].doc!=0;j++) { if(strcmp(personas[i].pais,personas[j].pais)>0) { aux=personas[i]; personas[i]=personas[j]; personas[j]=aux; } } } } void imprimir (t_persona personas[]) { printf("Documento:\tNombre:\t\tPais:\n============================================= ==========\n"); int i=0; while(personas[i].doc!=0) { printf("%d\t%s\t%s\n",personas[i].doc,personas[i].nom,personas[i].pais); i++; } } Ejercicio 8 #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 void void void void agregar_alm(t_alumno []); agregar_mat (t_materia []); agregar_notas (t_alumno [],t_materia [],t_nota []); imp_notas_alumno (int , t_alumno [],t_materia [],t_nota []); 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; 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++; } } 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==n otas[l].cod_materia))//la encuentro 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==n otas[l].cod_materia)) { printf("%s:\t%d\n",alumnos[j].nombre,notas[l].nota); } } } } } } } }