rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · programacion aplicada a la ingenieria civil...

27
******************************************************** PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº4 Ayudante: Rodrigo Torres Aguirre/2009 Compilador utilizado: Dev-C++ versión 4.9.9.2 ******************************************************** 1)-Cree una función que dado un vector de estructuras con el nombre de un alumno, sus 3 notas, obtenga el promedio de cada alumno y lo almacene en el campo promedio. -Cree una función que permita obtener el promedio del curso. -Cree una función que permita obtener el nombre del alumno con mayor promedio y nombre del menor promedio (en caso de empate el primero que aparezca). -Observar el vector por promedios (en forma ascendente). #include<stdio.h> #include<stdlib.h> #include<string.h> #define n 3 //Definicion de una estructura typedef struct alumno{ char nombre[40]; float promedio,n1,n2,n3; };//Esta estructura contiene 5 campos //Llenado de la estructura void llenar(){ system("color 1f"); alumno A[n]; int i; printf("INGRESE LOS DATOS DE LOS ALUMNOS\n"); for(i=0;i<n;i++){ printf("-Nombre:");fflush(stdin);gets(A[i].nombre); printf("-Nota1:");fflush(stdin);scanf("%f",&A[i].n1); printf("-Nota2:");fflush(stdin);scanf("%f",&A[i].n2); printf("-Nota3:");fflush(stdin);scanf("%f",&A[i].n3); printf("\n\n"); } } //Muestra los datos ingresados void mostrar(){ alumno A[n]; int i; printf("\nLOS DATOS DE LOS ALUMNOS SON:\n"); for(i=0;i<n;i++){ printf("-Nombre: %s",A[i].nombre); printf("\n-Nota1: %.1f",A[i].n1); printf("\n-Nota2: %.1f",A[i].n2); printf("\n-Nota3: %.1f",A[i].n3); printf("\n\n"); } printf("\n"); } //Promedio de notas del curso float promedio(){ struct alumno A[n]; int i; float suma=0; for(i=0;i<n;i++){ A[i].promedio=(float)(A[i].n1+A[i].n2+A[i].n3)/3; suma=suma+A[i].promedio; } return (float)suma/n; }

Upload: others

Post on 12-Jul-2020

5 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

*************************************************** ***** PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC

GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009

Compilador utilizado: Dev-C++ versión 4.9.9.2 *************************************************** *****

1)-Cree una función que dado un vector de estructura s con el nombre de un alumno, sus 3 notas, obtenga el promedio de cada alumno y lo alma cene en el campo promedio. -Cree una función que permita obtener el promedio d el curso. -Cree una función que permita obtener el nombre del alumno con mayor promedio y nombre del menor promedio (en caso de empate el primero qu e aparezca). -Observar el vector por promedios (en forma ascende nte). #include<stdio.h> #include<stdlib.h> #include<string.h> #define n 3 //Definicion de una estructura typedef struct alumno{ char nombre[ 40]; float promedio,n1,n2,n3; }; //Esta estructura contiene 5 campos //Llenado de la estructura void llenar(){ system( "color 1f" ); alumno A[n]; int i; printf( "INGRESE LOS DATOS DE LOS ALUMNOS\n" ); for(i= 0;i<n;i++){ printf( "-Nombre:" );fflush(stdin);gets(A[i].nombre); printf( "-Nota1:" );fflush(stdin);scanf( "%f" ,&A[i].n1); printf( "-Nota2:" );fflush(stdin);scanf( "%f" ,&A[i].n2); printf( "-Nota3:" );fflush(stdin);scanf( "%f" ,&A[i].n3); printf( "\n\n" ); } } //Muestra los datos ingresados void mostrar(){ alumno A[n]; int i; printf( "\nLOS DATOS DE LOS ALUMNOS SON:\n" ); for(i= 0;i<n;i++){ printf( "-Nombre: %s" ,A[i].nombre); printf( "\n-Nota1: %.1f" ,A[i].n1); printf( "\n-Nota2: %.1f" ,A[i].n2); printf( "\n-Nota3: %.1f" ,A[i].n3); printf( "\n\n" ); } printf( "\n" ); } //Promedio de notas del curso float promedio(){ struct alumno A[n]; int i; float suma= 0; for(i= 0;i<n;i++){ A[i].promedio=( float)(A[i].n1+A[i].n2+A[i].n3)/ 3; suma=suma+A[i].promedio; } return ( float)suma/n; }

Page 2: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

//Nombre del mejor y peor promedio void mayor_menor(){ alumno A[n]; int i,iM,im; float menor,mayor; iM=im=- 1; menor= 10; mayor= 0; for(i= 1;i<n;i++){ if(mayor < (A[i].promedio)){ iM=i; mayor=A[i].promed io; } if(menor > (A[i].promedio)){ im=i; menor=A[i].promed io; } } printf( "\nEl promedio mayor lo tiene %s con un %f" ,A[iM].nombre,mayor); printf( "\nEl promedio menor lo tiene %s con un %f" ,A[im].nombre,menor); } //Ordenar el vector de forma ascendente void burbuja(){ alumno A[n]; int i,j; alumno aux; for(i= 0;i<n- 1;i++){ for(j= 1;j<n;j++){ if((A[i].promedio) > (A[j].promedio)){ aux=A[i]; A[i]=A[j]; A[j]=aux; } } } printf( "\n\n\nLos promedios ordenados de forma ascendente son:" ); for(i= 0;i<n;i++){ printf( "\n-Nombre: %s" ,A[i].nombre); printf( "\n-Promedio: %f" ,A[i].promedio); printf( "\n\n" ); } } //Principal int main(){ llenar(); mostrar(); printf( "\nPromedio del curso es:%f" ,promedio()); mayor_menor(); burbuja(); printf( "\n\n\n\n" ); system( "pause" ); } --------------------------------------------------- ---------------------------------- 2)-Crear una estructura que permita almacenar datos de automóviles -Marca -Año -Cilindrada -Color Suponga que se tiene un vector con datos de 1000 automóviles -Hacer una función que determine cuantos automóvile s son de una marca determinada. -Cuantos automóviles son de una marca X y de un col or Z.

Page 3: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

-Cuantos automóviles son de una cilindrada X. #include<stdio.h> #include<string.h> #include<stdlib.h> #define n 3 //Definicion de la estructura donde se almacenaran los datos typedef struct automoviles{ char marca[ 10],color[ 10],cilindrada[ 5],ano[ 5]; }; //Llenar el registro de automoviles void llenar(){ automoviles A[n]; int i; printf( "****INGRESE LOS AUTOMOVILES****\n" ); printf( "------------------\n" ); for(i= 0;i<n;i++){ printf( "--Automovil[%d]--" ,i+ 1); printf( "\nMarca:" );fflush(stdin);gets(A[i].marca); printf( "\nColor:" );fflush(stdin);gets(A[i].color); printf( "\nCilindrada:" );fflush(stdin);gets(A[i].cilindrada); printf( "\nAño:" );fflush(stdin);gets(A[i].ano); printf( "\n------------------\n" ); } } //Mostrar el registro de los automoviles void mostrar(){ automoviles A[n]; int i; printf( "\n\n\n******************************************** *****\n" ); printf( "***********DATOS DE LOS AUTOMOVILES**************" ); printf( "\n************************************************ *\n" ); for(i= 0;i<n;i++){ printf( "\n-Marca=%s" ,A[i].marca); printf( "\tColor=%s" ,A[i].color); printf( "\tCilindrada=%s" ,A[i].cilindrada); printf( "\tAno=%s" ,A[i].ano); printf( "\n\n" ); } printf( "*************************************************\ n\n" ); } //Contar la cantidad de autos de una marca determin ada void contar(){ automoviles A[n]; int i,cont= 0; char marca[ 10]; printf( "\n\n\n*****BUSQUEDAD DE CANTIDAD DE AUTOMOVILES DE " ); printf( "UNA MARCA DETERMINADA*****\n\n" ); printf( "-Que marca quiere contar?:" );fflush(stdin);gets(marca); for(i= 0;i<n;i++){ //strcmp sirve para buscar un dato en la estructura //strcmp(campo donde se esta buscando, dato buscado ) if(strcmp(A[i].marca,marca)== 0){ cont=cont+ 1; } } if(cont== 0){ printf( "\nNo hay autos con la marca -%s-" ,marca); } else{ printf( "\nHay %d automoviles con la marca -%s-" ,cont,marca); }

Page 4: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

} //buscar un auto de una marca y color determinado void marca_color(){ automoviles A[n]; int i,cont2= 0; char marca[ 10],color[ 10]; printf( "\n\n\n\n****BUSQUEDAD DE CANTIDAD DE AUTOMOVILES D E " ); printf( "UNA MARCA Y COLOR DETERMINADO*****\n\n" ); printf( "-Que marca quiere contar?:" );fflush(stdin);gets(marca); printf( "-Que color de la marca quiere contar?:" );fflush(stdin);gets(color); for(i= 0;i<n;i++){ if(strcmp(A[i].marca,marca)== 0){ if(strcmp(A[i].color,color)== 0){ cont2=cont2+ 1; } } } if(cont2== 0){ printf( "\nNo hay autos de esa marca y de ese color" ); } else{ printf( "\nHay %d autos de esa %s y de ese %s" ,cont2,marca,color); } } //buscar un auto de una determinada cilindrada void autos_cilindrada(){ automoviles A[n]; int i,cont3= 0; char cilindrada[ 5]; printf( "\n\n\n\n***BUSQUEDAD DE CANTIDAD DE AUTOMOVILES DE " ); printf( "UNA CILINDRADA DETERMINADA***\n\n" ); printf( "-Que cilindrada quiere contar?:" );fflush(stdin);gets(cilindrada); for(i= 0;i<n;i++){ if(strcmp(A[i].cilindrada,cilindrada)== 0){ cont3=cont3+ 1; } } if(cont3== 0){ printf( "No hay autos con la cilindrada %s" ,cilindrada); } else{ printf( "\nHay %d automoviles con la cilindrada %s" ,cont3,cilindrada); } } //programa principal int main(){ system( "color 1f" ); llenar(); mostrar(); contar(); marca_color(); autos_cilindrada(); printf( "\n\n\n" ); system( "pause" ); } --------------------------------------------------- ---------------------------------- 3) Crear un programa que ingrese: nombre, apellido, Rut y promedio de notas de 30 alumnos desde teclado y que calcule además el promedio del curso, cuente cuantos alumnos están reprobados y el listado de los alumnos aprobados y buscar cuantos alumnos tienen el nombre de “José” y cuantos alumnos poseen promedio sobre 6, 0. #include<stdio.h>

Page 5: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

#include<string.h> #include<stdlib.h> #define n 3 //Deberia ser 30 en vez de 3 //Datos del alumnos o ficha(estructura) typedef struct alumno{ char nombre[ 15],apellido[ 15],rut[ 10]; float nota; }; /*Llenado de la estructura(llenar cada ficha del al umno, para cada posicion del vector, que son 30)*/ void llenar(){ system( "color 1f" ); alumno A[n]; int i; printf( "INGRESE LOS DATOS DE LOS ALUMNOS\n" ); for(i= 0;i<n;i++){ printf( "-Nombre:" ); scanf( "%s" ,&A[i].nombre); printf( "-Apellido:" ); scanf( "%s" ,&A[i].apellido); printf( "-RUT:" ); scanf( "%s" ,&A[i].rut); printf( "-Nota (entre 1 y 7):" ); scanf( "%f" ,&A[i].nota); printf( "\n----------------------------\n\n" ); } } //Promedio del curso void promedio(){ alumno A[n]; int i; float promedio,cont1= 0; for(i= 0;i<n;i++){ cont1=cont1+(A[i].nota); } promedio=cont1/n; printf( "\n=>EL PROMEDIO DEL CURSO ES: %f\n" ,promedio); } //Contar a los reprobados void reprobados(){ alumno A[n]; int i,cont2= 0; for(i= 0;i<n;i++){ if(A[i].nota< 4.0 ){ cont2=cont 2+1; } } printf( "\n=>LOS ALUMNOS REPROBADOS SON: %d\n\n" ,cont2); } //Lista de los aprobados void aprobados(){ alumno A[n]; int i; printf( "=>LOS ALUMNOS APROBADOS SON(-nombre apellido,nota) :\n\n" ); for(i= 0;i<n;i++){ if(A[i].nota>= 4.0 ){ printf( "-%s %s aprobo con nota %.1f\n" ,A[i].nombre,A[i].apellido,A[i].nota); } } printf( "\n\n" ); }

Page 6: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

//Buscar el nombre jose en la estructura void buscar(){ alumno A[n]; int i,cont3= 0; char jose[ 4]; printf( "\nSE DESEA BUSCAR EL NOMBRE jose, INGRESELO:" ); fflush(stdin);gets(jose); for(i= 0;i<n;i++){ if(strcmp(A[i].nombre,jose)== 0){ cont3=cont3+ 1; } } printf( "\nExisten en el registro %d personas con el nombre jose" ,cont3); } //Cantidad de alumnos que tienen a lo menos nota 6. 0 void superiores(){ alumno A[n]; int i,cont4= 0; for(i= 0;i<n;i++){ if(A[i].nota>= 6.0 ){ c ont4=cont4+ 1; } } printf( "\n\n\n" ); printf( "=>LA CANTIDAD DE ALUMNOS NOTA SUPERIOR O IGUAL A 6 .0,SON: %d" ,cont4); printf( "\n\n" ); } //Programa principal int main(){ alumno A[n]; system( "color 1f" ); llenar(); promedio(); reprobados(); aprobados(); buscar(); superiores(); system( "pause" ); } --------------------------------------------------- ---------------------------------- 4) Se tiene una tabla con los datos de matrícula, pe so, estatura y sexo de los alumnos de la USACH. Construya un algoritmo que reciba los datos de la tabla antes mencionada, calcule y genere como salida el promedio de los pes os y de las estaturas. Su algoritmo debe entregar estos valores considerando todos los individuos y también diferenciando por sexo. Considere el fin de datos de matrícula con el valor cero ( 0). //EJERCICIO 12 DE LA GUIA 2, CON ESTRUCTURAS #include<stdio.h> #include<stdlib.h> #include<string.h> #define n 2 typedef struct alumnos{ char matricula[ 12],sexo; int peso; float estatura; }; void llenar(){ alumnos A[n]; int i; printf( "*****INGRESE LOS DATOS DE LOS ALUMNOS*********\n" ); for(i= 0;i<n;i++){

Page 7: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

printf( "Matricula:" );fflush(stdin);gets(A[i].matricula); printf( "Sexo:" );fflush(stdin);A[i].sexo=getchar(); printf( "Peso:" );fflush(stdin);scanf( "%d" ,&A[i].peso); printf( "Estatura:" );fflush(stdin);scanf( "%f" ,&A[i].estatura); printf( "\n\n" ); } } void mostrar(){ alumnos A[n]; int i; printf( "********************************************\n" ); printf( "*******LOS DATOS DE LOS ALUMNOS SON*********\n" ); printf( "********************************************\n" ); for(i= 0;i<n;i++){ printf( "Matricula:%s" ,A[i].matricula); printf( "\nSexo:%c" ,A[i].sexo); printf( "\nPeso:%d" ,A[i].peso); printf( "\nEstatura:%.2f" ,A[i].estatura); printf( "\n\n" ); } printf( "********************************************\n" ); } void buscar(){ alumnos A[n]; int i,sw= 0; char matricula[ 12]; printf( "\nINGRESE LA MATRICULA A BUSCAR:" );fflush(stdin);gets(matricula); for(i= 0;i<n;i++){ if(strcmp(A[i].matricula,matricula)== 0){ printf( "\nMatricula:%s" ,matricula); printf( "\nSexo:%c" ,A[i].sexo); printf( "\nPeso:%d" ,A[i].peso); printf( "\nestatura:%.2f" ,A[i].estatura); sw= 1; } } if(sw== 0){ printf( "\nNo se encontro la matricula pedida\n\n" ); } printf( "\n\n" ); } void promedios(){ alumnos A[n]; int i,sumaP= 0; float promedioP,promedioE,sumaE= 0; for(i= 0;i<n;i++){ sumaP=sumaP+(A[i].peso); sumaE=sumaE+(A[i].estatura); } promedioP=( float)sumaP/n; promedioE=( float)sumaE/n; printf( "\nEl promedio de los pesos del curso es:%.2f" ,promedioP); printf( "\nEl promedio de las estaturas del curso es:%.2f" ,promedioE); } void promedios_hombres_mujeres(){ alumnos A[n]; int i,sumaPH= 0,sumaPM=0,cont1= 0,cont2= 0;

Page 8: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

float promedioPH,promedioEH,promedioPM,promedioEM,sumaEH =0,sumaEM=0; for(i= 0;i<n;i++){ if(A[i].sexo=='H' || A[i].sexo=='h'){ sumaPH=sumaPH+(A[i]. peso); sumaEH=sumaEH+(A[i]. estatura); cont1=cont1+ 1; } if(A[i].sexo=='M' || A[i].sexo=='m'){ sumaPM=sumaPM+(A[i]. peso); sumaEM=sumaEM+(A[i]. estatura); cont2=cont2+ 1; } } promedioPH=( float)sumaPH/cont1; promedioEH=( float)sumaEH/cont1; promedioPM=( float)sumaPM/cont2; promedioEM=( float)sumaEM/cont2; if(cont1!= 0){ printf( "\n\n\nEl promedio del peso de los hombres es:%.2f" ,promedioPH); printf( "\nEl promedio de la estatura del hombre es:%.2f" ,promedioEH); } else{ printf( "\n\n-No hay hombres en el curso" ); } if(cont2!= 0){ printf( "\n\nEl promedio del peso de las mujeres es:%.2f" ,promedioPM); printf( "\nEl promedio de la estatura de la mujer es:%.2f" ,promedioEM); } else{ printf( "\n\n\n-No hay mujeres en el curso" ); } } int main(){ system( "color 1f" ); llenar(); mostrar(); buscar(); promedios(); promedios_hombres_mujeres(); printf( "\n\n\n\n" ); system( "pause" ); } --------------------------------------------------- ---------------------------------- 5) //Ejercicios 12, guia 2, con ARCHIVO #include<stdio.h> #include<stdlib.h> #include<string.h> #define n 3 typedef struct alumnos{ char matricula[ 12],sexo; int peso; float estatura; }; void llenar(){ struct alumnos reg; char opc; printf( "*****INGRESE LOS DATOS DE LOS ALUMNOS*********\n" ); FILE*fp=fopen( "datos" , "wt" ); while( 1){ printf( "Matricula:" );fflush(stdin);gets(reg.matricula);

Page 9: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

printf( "Sexo:" );fflush(stdin);reg.sexo=getchar(); printf( "Peso:" );fflush(stdin);scanf( "%d" ,&reg.peso); printf( "Estatura:" );fflush(stdin);scanf( "%f" ,&reg.estatura); printf( "\n\n" ); fwrite(&reg, sizeof(reg), 1,fp); printf( "Mas datos [S/N]:" );fflush(stdin);opc=getchar(); printf( "\n\n" ); if(opc=='N' || opc=='n') break; } fclose(fp); } void mostrar(){ struct alumnos reg; FILE*fp=fopen( "datos" , "rt" ); printf( "********************************************\n" ); printf( "*******LOS DATOS DE LOS ALUMNOS SON*********\n" ); printf( "********************************************\n" ); while(fread(&reg, sizeof(reg), 1,fp)){ printf( "Matricula:%s" ,reg.matricula); printf( "\nSexo:%c" ,reg.sexo); printf( "\nPeso:%d" ,reg.peso); printf( "\nEstatura:%.2f" ,reg.estatura); printf( "\n\n" ); } printf( "********************************************\n" ); fclose(fp); } void buscar(){ struct alumnos reg; int sw= 0; char matricula[ 12]; FILE*fp=fopen( "datos" , "rt" ); printf( "\nINGRESE LA MATRICULA A BUSCAR:" );fflush(stdin);gets(matricula); while(fread(&reg, sizeof(reg), 1,fp)){ if(strcmp(reg.matricula,matricula)== 0){ printf( "\nMatricula:%s" ,matricula); printf( "\nSexo:%c" ,reg.sexo); printf( "\nPeso:%d" ,reg.peso); printf( "\nestatura:%.2f" ,reg.estatura); sw= 1; } } if(sw== 0){ printf( "\nNo se encontro la matricula pedida\n\n" ); } printf( "\n********************************************\n" ); printf( "\n\n" ); fclose(fp); } void prom_peso_estatura(){ struct alumnos reg; int cont= 0,suma_peso= 0; float prom_peso,prom_estatura,suma_estatura= 0; FILE*fp=fopen( "datos" , "rt" ); while(fread(&reg, sizeof(reg), 1,fp)){ suma_peso=suma_peso+(reg.peso); suma_estatura=suma_estatura+(reg.estatura); cont=cont+ 1; }

Page 10: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

prom_peso=( float)suma_peso/cont; prom_estatura=( float)suma_estatura/cont; printf( "\nEl promedio de los pesos del curso es:%.2f" ,prom_peso); printf( "\nEl promedio de las estaturas del curso es:%.2f" ,prom_estatura); fclose(fp); } void promedios_hombres(){ struct alumnos reg; int cont= 0,suma_peso= 0; float prom_peso,prom_estatura,suma_estatura= 0; FILE*fp=fopen( "datos" , "rt" ); while(fread(&reg, sizeof(reg), 1,fp)){ if(reg.sexo=='H' || reg.sexo=='h'){ suma_peso=suma_peso+(reg.peso); suma_estatura=suma_estatura+(reg.estatura ); cont=cont+ 1; } } prom_peso=( float)suma_peso/cont; prom_estatura=( float)suma_estatura/cont; if(cont!= 0){ printf( "\n\n\nEl promedio del peso de los hombres es:%.2f" ,prom_peso); printf( "\nEl promedio de la estatura del hombre es:%.2f" ,prom_estatura); } else{ printf( "\n\n-No hay hombres en el curso" ); } fclose(fp); } void promedios_mujeres(){ struct alumnos reg; int cont= 0,suma_peso= 0; float prom_peso,prom_estatura,suma_estatura= 0; FILE*fp=fopen( "datos" , "rt" ); while(fread(&reg, sizeof(reg), 1,fp)){ if(reg.sexo=='M' || reg.sexo=='m'){ suma_peso=suma_peso+(reg.peso); suma_estatura=suma_estatura+(reg.estatura ); cont=cont+ 1; } } prom_peso=( float)suma_peso/cont; prom_estatura=( float)suma_estatura/cont; if(cont!= 0){ printf( "\n\n\nEl promedio del peso de las mujeres es:%.2f" ,prom_peso); printf( "\nEl promedio de la estatura de las mujeres es:%.2 f" ,prom_estatura); } else{ printf( "\n\n-No hay hombres en el curso" ); } fclose(fp); } int main(){ system( "color 1f" ); llenar(); mostrar(); buscar(); prom_peso_estatura();

Page 11: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

promedios_hombres(); promedios_mujeres(); printf( "\n\n\n\n" ); system( "pause" ); } --------------------------------------------------- ---------------------------------- 6) Cree un archivo que guarde en una ficha, el nombr e y numero de una persona, los datos son ingresados por teclado, los datos deben ser mos trados en pantalla. Debe crear también una función que busque en el archivo el nombre de u na persona, y que muestre en pantalla los datos de esta. #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct ficha{ //definir un registro con 2 campos char nombre[ 30]; int numero; }; void llenar(){ //llenar un archivo con datos struct ficha reg; //registro char opc; FILE*fp=fopen( "datos" , "wt" ); //abrir un archivo llamado datos, para escritura(w) //quedan apuntado por fp (podria tener otro nombre, pero debe ser tomado en //cuenta en el programa printf( "***********************************************\n" ); printf( "INGRESE LOS DATOS QUE DESEA GUARDAR EN LA FICHA\n" ); printf( "***********************************************\n" ); while( 1){ printf( "\n-nombre:" );fflush(stdin);gets(reg.nombre); printf( "-numero:" );fflush(stdin);scanf( "%d" ,&reg.numero); fwrite(&reg, sizeof(reg), 1,fp); //escribir el registro reg en archivo //apuntado nose la cantidad de datos que deseo ingr esar printf( "\n***mas informacion [S/N]:" );fflush(stdin);opc=getchar(); if(opc=='N' || opc=='n') break; } fclose(fp); } void leer(){ struct ficha reg; FILE*fp=fopen( "datos" , "rt" ); //abrir archivo para lectura(r) printf( "\n\n\n***************************\n" ); printf( "El nombre y el numero son" ); printf( "\n***************************\n" ); while(fread(&reg, sizeof(reg), 1,fp)){ //leer un registro desde un archivo printf( "\n-Nombre= %s | -Numero= %d" ,reg.nombre,reg.numero); } fclose(fp); } void buscar(){ struct ficha reg; char nombre[ 30]; int sw= 0; FILE*fp=fopen( "datos" , "rt" ); printf( "\n\n\n***************************\n" ); printf( "BUSCADOR DE NOMBRES"); printf( "\n***************************\n" ); printf( "Ingrese nombre a buscar:" );fflush(stdin);gets(nombre); while(fread(&reg, sizeof(reg), 1,fp)){ if(strcmp(reg.nombre,nombre)== 0){ //comparacion de cadenas

Page 12: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

printf( "nombre=%s\tNumero=%d\n" ,reg.nombre,reg.numero); sw= 1; } } if(sw== 0){ printf( "%s no esta en el archivo\n" ,nombre); } fclose(fp); } int main(){ system( "color 1f" ); llenar(); leer(); buscar(); printf( "\n\n\n" ); system( "pause" ); } --------------------------------------------------- ------------------------------ 7) Cree un archivo con el nombre, sexo y edad, de pr ofesores de la USACH. Cree una función que obtenga el promedio de las edades y las muestre en pantalla, y otra función para encontrar el profesor más joven y de más edad, mues tre en pantalla el nombre de ellos. También cree una función que muestre en pantalla la cantidad de profesores que superan el promedio de edades y la no. #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct personal{ char nombre[ 12],sexo; int edad; }; void llenar(){ struct personal reg; char opc; FILE*fp=fopen( "datos" , "wt" ); while( 1){ printf( "nombre:" );fflush(stdin);gets(reg.nombre); printf( "Sexo[H/M]:" );fflush(stdin);reg.sexo=getchar(); printf( "Edad:" );fflush(stdin);scanf( "%d" ,&reg.edad); printf( "\n\n" ); fwrite(&reg, sizeof(reg), 1,fp); printf( "Mas datos [S/N]:" );fflush(stdin);opc=getchar(); if(opc=='N' || opc=='n') break; } printf( "\n\n" ); fclose(fp); } void promedio(){ struct personal reg; int cont= 0,suma= 0; float promedio; FILE*fp=fopen( "datos" , "rt" ); while(fread(&reg, sizeof(reg), 1,fp)){ suma=suma+(reg.edad); cont=cont+ 1; } promedio=( float) suma/cont; printf( "\nEl promedio de las edades es: %f" ,promedio); fclose(fp); }

Page 13: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

void juventud(){ struct personal reg; int sw= 0,mayor= 0,menor= 100 ,edad; FILE*fp=fopen( "datos" , "rt" ); while(fread(&reg, sizeof(reg), 1,fp)){ if((reg.edad)>mayor){ mayor=reg.edad; } if((reg.edad)<menor){ menor=reg.edad; } } while(fread(&reg, sizeof(reg), 1,fp)){ if(strcmp(reg.edad,menor)== 0){ printf( "\nl profesor mas joven es %s" ,reg.nombre); } if(strcmp(reg.edad,mayor)== 0){ printf( "\nEl profesor de más edad es %s" ,reg.nombre); } } fclose(fp); } void cantidad(){ struct personal reg; int cont= 0,cont1= 0,cont2= 0,suma= 0; float promedio; FILE*fp=fopen( "datos" , "rt" ); while(fread(&reg, sizeof(reg), 1,fp)){ suma=suma+(reg.edad); cont=cont+ 1; } promedio=( float) suma/cont; while(fread(&reg, sizeof(reg), 1,fp)){ if((reg.edad)>promedio){ cont1=cont1+ 1; } if((reg.edad)<promedio){ cont2=cont2+ 1; } } printf( "\nSon %d los profesores que superan el promedio" ,cont1); printf( "\nSon %d los profesores que estan bajo el promedio en edad" ,cont2); fclose(fp); } int main(){ system( "color 1f" ); llenar(); promedio(); juventud(); cantidad(); printf( "\n\n\n" ); system( "pause" ); } --------------------------------------------------- ----------------------------------

**********ALGUNOS LABORATORIOS RESUELTOS**********

Page 14: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

La empresa constructora "OOCC" desarrolla proyectos de pequeña y media envergadur a, principalmente orientados a construir viviendas de hasta 2500UF. Para lo cual tiene una serie de datos almacenados como historial, estos da tos son: -Nombre del Proyecto -Fecha de inicio -Fecha de término -Costo en pesos material -Costo mano de obra -Número de trabajadores contratados -Numero de mts cuadrados construidos -Comuna construcción -Región construcción Ahora esta empresa desea tener un pequeño modulo qu e permita determinar o responder algunas consultas de acuerdo a su historial de trabajo, en particular, desea: -Dado la región, comuna y número de mts const ruidos determinar el costo promedio en material y el numero máximo y mín imo de trabajadores contratados (esta opción la llamaremos costos ). -Dado el tiempo de duración estimado de la ob ra muestre por pantalla todos los datos de la obra que mas se aproxim e en duración (esta opción la llamaremos Aproximación). QUE SE PIDE: 1. Ingreso de Historial 2. Listado de Historial por región 3. Determinar Costos 4. Determinar Aproximación 5. Salir de Sistema Este programa debe trabajar con funciones, arreglo de estructuras o archivos de estructuras. #include<stdio.h> #include<stdlib.h> #include <string.h> typedef struct historial{ //registro con 3 campos //seran utilizados junto con el reg. para guardar l os datos que se ingresan, //en tales registros char nombre_proyecto[ 30],comuna[ 20],region[ 30]; int fid,fim,fia,ftd,ftm,fta,costo_material,costo_mobra ,n_trabajadores; float n_mcuadradosconstruidos; }; //funcion que llena el historial void llenar_historial(){ //llenar un archivo con datos struct historial reg; //registro FILE*fp=fopen( "historial.dat" , "wt" ); //abrir un archivo llamado datos, //para escritura(w) //quedan apuntado por fp.Si se coloca en vez de "wt ", un "at" //se pueden agregar datos a los que estaban anterio rmente guardados char opc; while( 1){ //no tiene fin, nose cuantos son los datos que teng o ke ingresar printf( "\n--Nombre del proyecto:" );fflush(stdin);gets(reg.nombre_proyecto); //el fflush(stdin) limpia la basura que se crea //ingreso de la fecha de inicio, segun dia, mes, y año printf( "Fecha de inicio\n" ); printf( "-Ingrese el dia de inicio(entre 1 y 30, consideran do ambos): " ); fflush(stdin);scanf( "%d" , &reg.fid); //solo se pueden ingresar numeros desde el 1 al 30 while((reg.fid < 1) || (reg.fid > 30)){ printf( "Dia ingresado incorrecto.\n" ); printf( "Ingrese el dia de hoy nuevamente: " ); scanf( "%d" , &reg.fid); } printf( "\n-Ingrese el mes de inicio (mes en numero por fav or): " );

Page 15: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

fflush(stdin);scanf( "%d" , &reg.fim); //se puede ingresar desde el mes 1 al 12 while(reg.fim<= 0 || reg.fim> 12){ printf( "\nMes ingresado incorrecto.\n" ); printf( "Ingrese el mes nuevamente: " ); scanf( "%d" , &reg.fim); } printf( "\n-Ingrese el ano de inicio correspondiente:" ); fflush(stdin);scanf( "%d" , &reg.fia); //solo se concidera desde el presente año, hasta el 2100 while((reg.fia < 2008 ) || (reg.fia> 2100 )){ printf( "\nAno ingresado incorrecto.\n" ); printf( "Ingrese el ano nuevamente (entre 2008 y 2100): " ); scanf( "%d" , &reg.fia); } printf( "\n\n-La fecha de inicio es: %d/%d/%d\n" , reg.fid,reg.fim,reg.fia); //ingreso fecha de termino, segun dia mes y año printf( "\n\nFecha termino\n" ); printf( "-Ingrese el dia de inicio(entre 1 y 30, consideran do ambos): " ); fflush(stdin);scanf( "%d" , &reg.ftd); //se puede ingresar desde el 1 al 30 while((reg.ftd < 1) || (reg.ftd > 30)){ printf( "Dia ingresado incorrecto.\n" ); printf( "Ingrese el dia de hoy nuevamente: " ); scanf( "%d" , &reg.ftd); } printf( "\n-Ingrese el mes de inicio (mes en numero por fav or): " ); fflush(stdin);scanf( "%d" , &reg.ftm); //se puede ingresar desde el mes 1 al 12 while((reg.ftm < 1) || (reg.ftm > 12)){ printf( "\nMes ingresado incorrecto.\n" ); printf( "Ingrese el mes nuevamente: " ); scanf( "%d" , &reg.ftm); } printf( "\n-Ingrese el ano de inicio correspondiente:" ); fflush(stdin);scanf( "%d" , &reg.fta); //año de termino del proyecto no puede ser mayor al de inicio del proyecto while(reg.fia>reg.fta){ printf( "\nAno ingresado incorrecto.\n" ); printf( "Ingrese el ano nuevamente (entre 2008 y 2100): " ); scanf( "%d" , &reg.fta); } printf( "\n\n-La fecha de termino es:%d/%d/%d\n\n" ,reg.ftd,reg.ftm,reg.fta); //datos del historial printf( "--Comuna:" );fflush(stdin);gets(reg.comuna); printf( "--Region de (escriba el nombre tal cual aparece en la lista)\n" ); printf( "\t- tarapaca\n\t- antofagasta\n\t- atacama\n\t- co quimbo" ); printf( "\n\t- valparaiso\n\t- ohiggins\n\t- el_maule\n\t- el_bio_bio" ); printf( "\n\t- la_araucania\n\t- los_lagos\n\t- aysen\n\t- metropolitana" ); printf( "\n\t- los_rios\n\t- arica_y_parinacota\n" ); printf( "--Region:" );fflush(stdin);scanf( "%s" ,&reg.region); printf( "--Costo en pesos material:" );fflush(stdin); scanf( "%d" ,&reg.costo_material); printf( "--Costo mano obra:" );fflush(stdin); scanf( "%d" ,&reg.costo_mobra); printf( "--Numero de trabajadores:" );fflush(stdin); scanf( "%d" ,&reg.n_trabajadores); printf( "--Numero de m^2 construidos:" );fflush(stdin); scanf( "%f" ,&reg.n_mcuadradosconstruidos); fwrite(&reg, sizeof(reg), 1,fp); //se puede ingresar los datos que el usuario desee

Page 16: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

printf( "\nMas datos [S/N]:" );fflush(stdin);opc=getchar(); if(opc=='N' || opc=='n') break; } fclose(fp); } //fuincion que muestra el listado del historial ord enado por region void mostrar_historial(){ struct historial reg; //se ocuprar la estructura definida en el inicio int sw= 0; FILE*fp=fopen( "historial.dat" , "rt" ); //abrir archivo para lectura(r) while(fread(&reg, sizeof(reg), 1,fp)){ //leer un registro desde un archivo if(strcmp(reg.region,reg.region)== 0){ //se ordena por regiones //datos de el proyecto segun la region printf( "Region:%s" ,reg.region); printf( "\n-Nombre del Proyecto:%s" ,reg.nombre_proyecto); printf( "\n-Fecha de inicio es: %d/%d/%d" , reg.fid,reg.fim,reg.fia); printf( "\n-Fecha de termino es: %d/%d/%d" ,reg.ftd,reg.ftm,reg.fta); printf( "\n-Comuna:%s" ,reg.comuna); printf( "\n-Costo en pesos del material:%d" ,reg.costo_material); printf( "\n-Costo mano de obra:%d" ,reg.costo_mobra); printf( "\n-Numero de trabajadores:%d" ,reg.n_trabajadores); printf( "\n-Numero de m^2 construidos:%.1f" ,reg.n_mcuadradosconstruidos); sw= 1; printf( "\n\n" ); } } fclose(fp); } //Funcion que determina los costos void Determinacion_de_Costos(){ struct historial reg; char region[ 25]; long int costo_mat_prom,mtsconstruidos,trab_minimos,trab_ma ximos; long int precio_region,trabminimos,trabmaximos; int sw= 0,suma_costo= 0; FILE*fp=fopen( "historial.dat" , "rt" ); //abrir el archivo de lectura printf( "Ingrese la Region:" );fflush(stdin);gets(region); //se ingresa la region printf( "Ingrese los metros cuadrados construidos:" ); fflush(stdin);scanf( "%d" ,&mtsconstruidos); //se ingresa los metro construidos while(fread(&reg, sizeof(reg), 1,fp)){ if(strcmp(reg.region,region)== 0){ precio_region=rand()% 10000 +4000 ; //cuanto cuesta por cada region por metro cuadrado trabminimos=rand()% 2+1; //hay entre 1 y 2 trabajadores como minimo para el //trabajo de 1 metro cuadrado trabmaximos=reg.n_trabajadores; //hay entre 2 y 4 trabajadores como maximo para el //trabajo de 1 metro cuadrado printf( "\n\n-Segun el proyecto:%s" ,reg.nombre_proyecto); costo_mat_prom=(precio_region)*(mtsconstruidos ); trab_minimos=(trabminimos)*(mtsconstruidos); trab_maximos=(trabmaximos)*(mtsconstruidos); printf( "\nEl costo promedio del material:%d" ,costo_mat_prom); //los trabajadores minimos no sobrepasen a los trab ajadores disponibles if((trab_minimos)<(reg.n_trabajadores)){ printf( "\nLos trabajadores minimos para el trabajo:%d" ,trab_minimos); } else{ printf( "\nLos trabajadores minimos para el trabajo:%d" ,reg.n_trabajadores); }

Page 17: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

//los trabajadores maximos no sobrepasen a los trab ajadores disponibles if((trab_maximos)<(reg.n_trabajadores)){ printf( "\nLos trabajadores maximos para el trabajo:%d" ,trab_maximos); } else{ printf( "\nLos trabajadores maximos para el trabajo:%d" ,reg.n_trabajadores); } } } sw= 1; if(sw== 0){ printf( "\nNo se encontro la region\n\n" ); } printf( "\n\n" ); fclose(fp); } //Funcion que determina las aproximaciones void Determinar_Aproximacion(){ struct historial reg; int tiempo_duracion,D,M,A,suma,aprox; char obra; FILE*fp=fopen( "historial.dat" , "rt" ); printf( "\n\nIngrese el tiempo de duracion estimado de la o bra\n" ); printf( "<Ingreselos en dias, considerando que cada mes tie ne 30 dias>:" ); fflush(stdin);scanf( "%d" ,&tiempo_duracion); //tiempo estimado de la obra while(fread(&reg, sizeof(reg), 1,fp)){ //cantidad de años de duracion de la obra, pasados a dias A=(reg.fta-reg.fia)* 365 ; //cantidad de meses de duracion de la obra, pasados a dias if(reg.ftm < reg.fim){ M=((reg.ftm+ 12)-reg.fim)* 30; } else{ M=(reg.ftm-reg.fim)* 30; } if(reg.ftd < reg.fid){ D=((reg.ftd+ 30)-reg.fid); } else{ D=(reg.ftd-reg.fid); } suma=A+M+D; //dias totales de la duracion de la obra segun las fechas del proyecto printf( "\n\nTiempo de duracion del proyecto*%s*es:%d" ,reg.nombre_proyecto,suma); aprox=tiempo_duracion-suma; if(aprox== 0){ //datos del proyecto que concuerda con el tiempo de duracion dado printf( "\nEl proyecto que es igual al t de duracion es:%s" ,reg.nombre_proyecto); printf( "\n-Region:%s" ,reg.region); printf( "\n-Fecha de inicio es: %d/%d/%d" , reg.fid,reg.fim,reg.fia); printf( "\n-Fecha de termino es: %d/%d/%d" ,reg.ftd,reg.ftm,reg.fta); printf( "\n-Comuna:%s" ,reg.comuna); printf( "\n-Costo en pesos del material:%d" ,reg.costo_material); printf( "\n-Costo mano de obra:%d" ,reg.costo_mobra); printf( "\n-Numero de trabajadores:%d" ,reg.n_trabajadores); printf( "\n-Numero de m^2 construidos:%.1f\n\n" ,reg.n_mcuadradosconstruidos); } } printf( "\n\n" ); fclose(fp); } //Pantallas a utilizar mas tarde...para cada necesi dad del usuario void menu( void);

Page 18: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

void menu_IngreseHistorial( void); void menu_ListaHistorialRegion( void); void menu_DeterminacionCosto( void); void menu_DeterminacionAproximacion( void); //Pantalla de bienvenida con fondo azul int main( void){ system( "color 1f" ); printf( "\n********************************************\n" ); printf( "**********EMPRESA CONSTRUCTORA OOCC*********" ); printf( "\n********************************************\n" ); printf( "NOMBRE:-Rodrigo Torres\n\n" ); printf( "Bienvenido\n\n\n" ); system( "pause" ); //espera la orden del usuario menu(); //menu principal return 1; } //Menu de opciones para el usuario void menu( void) { int i; char opcion[ 5]; system( "cls" ); printf( "\n********************************************\n" ); printf( "**************ELIJA UNA OPCION**************" ); printf( "\n********************************************\n" ); //opciones ke puede elejir el usuario del 1 al 5 printf( "\n 1.- Ingreso de Historial\n" ); printf( "\n 2.- Listado de Historial por Region\n" ); printf( "\n 3.- Determinacion de Costos\n" ); printf( "\n 4.- Determinar Aproximacion\n" ); printf( "\n 5.- Salir\n" ); printf( "\n\nIngrese su opcion:" ); scanf( "%s" ,&opcion); //accesos a nuevas pantallas,segun la eleccion del usuario switch(atoi(opcion)){ case 1: menu_IngreseHistorial(); break; case 2: menu_ListaHistorialRegion(); break; case 3: menu_DeterminacionCosto(); break; case 4: menu_DeterminacionAproximacion(); break; case 5: exit( 0); break; default: menu(); break; } } //Pantalla donde el usuario llena el historial void menu_IngreseHistorial(){ system( "cls" ); printf( "----INGRESE LOS DATOS QUE VA A GUARDAR EN EL HISTO RIAL----\n\n\n" ); llenar_historial(); system( "pause" ); //se espera la respuesta del usuario menu(); //se vuelve al programa principal } //Pantalla donde se ven el listado del historial po r region void menu_ListaHistorialRegion(){

Page 19: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

system( "cls" ); printf( "-----------INGRESO DE HISTORIAL POR REGION-------- ----\n\n\n" ); mostrar_historial(); system( "pause" ); //se espera la respuesta del usuario menu(); //se vuelve al programa principal } //Pantalla donde se determninano los costos void menu_DeterminacionCosto(){ system( "cls" ); printf( "-----------PARA LA DETERMINACION DE COSTOS-------- ----\n\n\n" ); Determinacion_de_Costos(); system( "pause" ); //se espera la respuesta del usuario menu(); //se vuelve al programa principal } //Pantalla donde se determinan las aproximaciones void menu_DeterminacionAproximacion(){ system( "cls" ); printf( "-----------PARA LA DETERMINACION DE APROXIMACION-- -----\n\n\n" ); Determinar_Aproximacion(); system( "pause" ); //se espera la respuesta del usuario menu(); //se vuelve al programa principal } --------------------------------------------------- ------------------------------ La empresa constructora "El Talento" desea que usted construya un sistema computacional que permita automatizar ciertas funciones propias d e su giro, en particular los requerimientos planteados por ella son los siguient es: -El sistema debe mostrar un menu de o pciones -El sistema debe permitir ingresar lo s datos de una obra (codigo, nombre,nnumero de trabajadores, comun a de la obra, tiempo planificado, ingeniero a cargo, m2 co nstruidos, costos de la obra) -El sistema debe permitir listar las obras por dos criterios: obras superiores a X metros y obras d onde trabajan o trabajaron un numero mayor a X trabajadores. -El sistema debe permitir eliminar un a obra. -El sistema debe permitir salir de es te. Para lo anterior debe construir un programa en leng uaje C que permita responder a lo anterior, puediendo trabajar con arreglo de estruct uras o con archivos de estructuras. #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct datos{ char nombre[ 30],comuna[ 20],codigo[ 10],ingeniero[ 30],tiempo_planificado[ 10]; char eliminado1[ 30],eliminado2[ 20],eliminado3[ 10],eliminado4[ 30]; int costo_obra,m_construidos,n_trabajadores; }; //Ingresar datos de obras void ingresar_datos(){ struct datos reg; char opc; FILE*fp=fopen( "datos.dat" , "wt" ); printf( "********INGRESE LOS DATOS DE OBRAS**************\n " ); while( 1){ printf( "\n--NOMBRE:" );fflush(stdin);gets(reg.nombre); printf( "--COMUNA:" );fflush(stdin);gets(reg.comuna); printf( "--CODIGO:" );fflush(stdin);gets(reg.codigo); printf( "--INGENIERO A CARGO:" );fflush(stdin);gets(reg.ingeniero); printf( "--TIEMPO PLANIFICADO [meses]:" );fflush(stdin); gets(reg.tiempo_planificado); printf( "--COSTO EN PESOS DEL MATERIAL:" );fflush(stdin);

Page 20: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

scanf( "%d" ,&reg.costo_obra); printf( "--NUMERO DE TRABAJADORES:");fflush(stdin); scanf( "%d" ,&reg.n_trabajadores); printf( "--NUMERO DE METROS CUADRADOS CONSTRUIDOS:");fflush(stdin); scanf( "%d" ,&reg.m_construidos); fwrite(&reg, sizeof(reg), 1,fp); printf( "\nMas datos [S/N]:" );fflush(stdin);opc=getchar(); if(opc=='N' || opc=='n') break; } fclose(fp); } //Listado de obras void Listado_de_Obras(){ struct datos reg; int obras_superiores_X_metros,numero_mayor_X_trabajado res; int sw= 0; FILE*fp=fopen( "datos.dat" , "rt" ); printf( "*****LISTADO DE OBRAS*****\n\n" ); printf( "OBRAS SUPERIORES A [Metros^2]:" );fflush(stdin); scanf( "%d" ,&obras_superiores_X_metros); printf( "OBRAS DONDE TRABAJAN [Trabajadores]:" );fflush(stdin); scanf( "%d" ,&numero_mayor_X_trabajadores); while(fread(&reg, sizeof(reg), 1,fp)){ if(reg.m_construidos > obras_superiores_X_metros){ if(reg.n_trabajadores > numero_mayor_X_trabajadores){ printf( "\n--NOMBRE:%s" ,reg.nombre); printf( "\n--COMUNA:%s" ,reg.comuna); printf( "\n--CODIGO:%s" ,reg.codigo); printf( "\n--INGENIERO:%s" ,reg.ingeniero); printf( "\n--TIEMPO PLANIFICADO:%s" ,reg.tiempo_planificado); printf( "\n--COSTO EN PESOS DEL MATERIAL: %d" ,reg.costo_obra); printf( "\n--NUMERO DE TRABAJADORES: %d" ,reg.n_trabajadores); printf( "\n--NUMERO DE METROS CUADRADOS CONSTRUIDOS: %d",reg.m_construidos); printf( "\n\n\n" ); sw=sw+ 1; } } } if(sw== 0){ printf( "\n\nno hay obras en el registro\n\n" ); } fclose(fp); } //Eliminar una obra (esta parte no funciona como co rresponde, existe una forma //mas directa de eliminar algun fichero de algun ar chivo) void Eliminar_Obra(){ struct datos reg; char nombre[ 30]; FILE*fp=fopen( "datos.dat" , "at" ); printf( "*****ELIMINAR DE OBRA*****\n\n" ); printf( "\n--Nombre:" );fflush(stdin);gets(nombre); while(fread(&reg, sizeof(reg), 1,fp)){ if(strcmp(reg.nombre,nombre)== 0){ //la idea es sobreescribir en la ficha ya existente printf( "\n--NOMBRE:" );fflush(stdin);gets(reg.nombre); printf( "--COMUNA:" );fflush(stdin);gets(reg.comuna);

Page 21: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

printf( "--CODIGO:" );fflush(stdin);gets(reg.codigo); printf( "--INGENIERO A CARGO:" );fflush(stdin);gets(reg.ingeniero); printf( "--TIEMPO PLANIFICADO [meses]:" );fflush(stdin); gets(reg.tiempo_planificado); printf( "--COSTO EN PESOS DEL MATERIAL:" );fflush(stdin); scanf( "%d" ,&reg.costo_obra); printf( "--NUMERO DE TRABAJADORES:");fflush(stdin); scanf( "%d" ,&reg.n_trabajadores); printf( "--NUMERO DE METROS CUADRADOS CONSTRUIDOS:");fflush(stdin); scanf( "%d" ,&reg.m_construidos); reg.costo_obra= 0; reg.n_trabajadores= 0; reg.m_construidos= 0; fwrite(&reg, sizeof(reg), 1,fp); printf( "\n\n" ); } } fclose(fp); } void menu( void); void IngresarDatos( void); void ListadoDeObras( void); void EliminarObra( void); int main( void){ printf( "*************************************************\ n" ); printf( "*******EMPRESA CONSTRUCTORA 'El Talento'*********\ n" ); printf( "*************************************************\ n\n\n" ); printf( "Bienvenido\n\n\n" ); printf( "NOMBRE: -Rodrigo Torres\n\n\n" ); system( "pause" ); menu(); return 1; } void menu( void) { int i; char opcion[ 4]; system( "cls" ); printf( "**********************************\n" ); printf( "*****<<<<ELIJA UNA OPCION>>>>*****\n" ); printf( "**********************************\n" ); printf( "\n 1.- Ingreso de datos de obras\n" ); printf( "\n 2.- Listado de Obras\n" ); printf( "\n 3.- Eliminar una Obra\n" ); printf( "\n 4.- Salir\n" ); printf( "\n\nIngrese su opcion:" ); scanf( "%s" ,&opcion); switch(atoi(opcion)){ case 1: IngresarDatos(); break; case 2: ListadoDeObras(); break; case 3: EliminarObra(); break; case 4: exit( 0); break; default: menu();

Page 22: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

break; } } void IngresarDatos(){ system( "cls" ); ingresar_datos(); system( "pause" ); menu(); } void ListadoDeObras(){ system( "cls" ); Listado_de_Obras(); system( "pause" ); menu(); } void EliminarObra(){ system( "cls" ); Eliminar_Obra(); system( "pause" ); menu(); } --------------------------------------------------- ------------------------------ Cree un programa con menu, donde se puedan ingresar el nombre, el numero de matricula y las notas de 3 pep's.Se necesita que el programa pueda -Buscar entre sus ficheros la de un alumno específi co y arroje en pantalla sus notas. -Muestre en pantalla una lista de todos los alumnos con la nota de las 3 pep's. -Actualizar los datos ya ingresados. -Calcular las notas finales para cada alumno. -Consultar los promedios por pep y por nota final. -Determinar el mejor promedio del curso. El programa ademas debe salir del sistema. #include<stdio.h> #include<stdlib.h> #include<string.h> //estructura de registro con el nombre de alumnos, que contiene 6 campos typedef struct alumnos{ char nombre[ 20],nro_matricula[ 10]; //campos float pep1,pep2,pep3,final; //campos }; //1 void Agregar(){ //llenar un archivo con los registros de los alumno s struct alumnos reg; //registro usando los campos de la estructura llama da historial. //El "reg" significa que los registros estaran //insertados en reg."el campo que se quiere" FILE*fp=fopen( "CURSO.dat" , "wt" ); //abrir un archivo llamado CURSO.dat,para escritura (w) en forma de texto //quedan apuntado por fp. Si se coloca en vez de "w t", un "at" //se pueden agregar datos a los que estaban anterio rmente guardados char opcion; //variable ocupada para deterner el llenado del reg istro printf( "AGREGAR REGISTRO AL ARCHIVO\n\n" ); while( 1){ //no tiene fin, nose cuantos son los datos que teng o ke ingresar printf( "\n--NOMBRE DEL ALUMNO:" );fflush(stdin);gets(reg.nombre); //gets, se ocupa cuando se quiere llenar un registr o con plabras printf( "\n--NUMERO DE MATRICULA:" );fflush(stdin);gets(reg.nro_matricula); printf( "\n--NOTA PEP 1:" );fflush(stdin);scanf( "%f" ,&reg.pep1); //scanf se ocupa cuando los datos que se quieren in gresar

Page 23: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

//al registro son numeros printf( "\n--NOTA PEP 2:" );fflush(stdin);scanf( "%f" ,&reg.pep2); printf( "\n--NOTA PEP 3:" );fflush(stdin);scanf( "%f" ,&reg.pep3); fwrite(&reg, sizeof(reg), 1,fp); //los datos escritos anteriormente, seran agregados a un archivo es por //eso que se escribe "fwrite",se puede ingresar los datos que //el usuario desee printf( "\nMas datos [S/N]:" );fflush(stdin);opcion=getchar(); //El opcion es definido como "getchar", la cual est ablece que para //cualquier palabra escrita, como respuesta el prin tf,se tomara en //cuenta solo la primera letra de la palabra if(opcion=='N' || opcion=='n') break; //esto indica que si se responde con N o n,el llena do del registro se //detendra.En caso contrario, si se responde con cu alquier otra letra //el programa la tomara como un "Si o S". } printf( "\n\n" ); fclose(fp); //esto sirve para cerrar el archivo con el puntero fp } //2 void Consultar(){ struct alumnos reg; //se ocuprar la estructura definida en el inicio char num_matricula[ 10]; //variable ocupada para comparar int sw= 0; //variable ocupada para FILE*fp=fopen( "CURSO.dat" , "rt" ); //abrir archivo CURSO.dat para lectura(r) printf( "CONSULTAR LOS DATOS DE UN ALUMNO, " ); printf( "DADO SU NUMERO DE MATRICULA\n\n" ); printf( "INGRESE EL NUMERO DE MATRICULA:" ); fflush(stdin);gets(num_matricula); //se necesita saber el numero de rut, para //saber si se encuentra en los registros del archiv o while(fread(&reg, sizeof(reg), 1,fp)){ //ciclo que lee el archivo llenado con anterioridad , //registro por registro, en el orden que fue llenad o el archivo. if(strcmp(reg.nro_matricula,num_matricula)== 0){ //"strcmp" sirve para comparar,las matriculas de ca da registro,con la //matricula que se quiere encontrar.Si la matricula de alguno de los //registros concuerda con la que se quiere se mostr aran los //printf que le siguen. printf( "\n--NOMBRE DEL ALUMNO:%s" ,reg.nombre); printf( "\n--NOTA PEP 1: %.1f" ,reg.pep1); printf( "\n--NOTA PEP 2: %.1f" ,reg.pep2); printf( "\n--NOTA PEP 3: %.1f" ,reg.pep3); printf( "\n\n" ); sw= 1; //cambia el sw para que no vuelva a repetirse el st rcmp } } if(sw== 0){ printf( "\nNo se encontro la matricula pedida\n\n" ); } fclose(fp); //se cierra el archivo } //3 void Listado_datos(){ struct alumnos reg; FILE*fp=fopen( "CURSO.dat" , "rt" ); //abrir archivo CURSO.dat para lectura(r) printf( "ENTREGAR UN LISTADO CON LOS DATOS DE REGISTRO " ); printf( "ALMACENADOS EN EL CURSO\n\n" ); while(fread(&reg, sizeof(reg), 1,fp)){ //leer cada registro del archivo //se imprimen los datos de cada registro de forma o rdenada

Page 24: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

printf( "--NOMBRE DEL ALUMNO:%s" ,reg.nombre); printf( "\n--NUMERO DE MATRICULA:%s" ,reg.nro_matricula); printf( "\n--NOTA PEP 1: %.1f" ,reg.pep1); printf( "\n--NOTA PEP 2: %.1f" ,reg.pep2); printf( "\n--NOTA PEP 3: %.1f" ,reg.pep3); printf( "\n\n" ); } fclose(fp); //se cierra el archivo } //4 void Actualizar_datos(){ struct alumnos reg; int sw= 0; char numero_matricula[ 10]; FILE*fp=fopen( "CURSO.dat" , "a+" ); //abrir archivo CURSO.dat para agregar datos printf( "ACTUALIZAR LOS DATOS DEL ALUMNO\n\n" ); printf( "Ingrese el n'de matricula del alumno, para modific ar sus datos:" ); fflush(stdin);gets(numero_matricula); //igual que en la funcion"Consultar" while(fread(&reg, sizeof(reg), 1,fp)){ //leer cada registro del archivo if(strcmp(reg.nro_matricula,numero_matricula)== 0){ printf( "\n--NOMBRE DEL ALUMNO:" );fflush(stdin);gets(reg.nombre); printf( "\n--NOTA PEP 1:" );fflush(stdin);scanf( "%f" ,&reg.pep1); printf( "\n--NOTA PEP 2:" );fflush(stdin);scanf( "%f" ,&reg.pep2); printf( "\n--NOTA PEP 3:" );fflush(stdin);scanf( "%f" ,&reg.pep3); printf( "\n\n" ); sw= 1; } } if(sw== 0){ printf( "\nNo se encontro la matricula pedida\n\n" ); } fclose(fp); } //5 void Calcular(){ struct alumnos reg; char opcion; FILE*fp=fopen( "CURSO.dat" , "rt" ); //abrir archivo CURSO.dat para lectura(r) printf( "CALCULAR LAS NOTAS FINALES PARA CADA REGISTRO\n\n" ); while(fread(&reg, sizeof(reg), 1,fp)){ //leer cada registro del archivo printf( "\n--NOMBRE DEL ALUMNO: %s" ,reg.nombre); reg.final=((reg.pep1)+(reg.pep2)+(reg.pep3))/ 3; //se calcula las notas finales de cad alumno, //para despues imprimirlas en la pantalla printf( "\nLa nota final es: %.1f" ,reg.final); printf( "\n\n" ); } fclose(fp); //se cierra el archivo } //6 void Promedios_peps_final(){ struct alumnos reg; int cont= 0; float suma_pep1= 0,suma_pep2= 0,suma_pep3= 0,suma_final= 0; float prom_pep1,prom_pep2,prom_pep3,prom_final; FILE*fp=fopen( "CURSO.dat" , "rt" ); //abrir archivo CURSO.dat para lectura(r) printf( "CONSULTAR LOS PROMEDIOS POR PEP Y POR NOTA FINAL\n " ); while(fread(&reg, sizeof(reg), 1,fp)){ //leer cada registro del archivo suma_pep1=suma_pep1+(reg.pep1); //se suman las pep1, de cada registro

Page 25: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

suma_pep2=suma_pep2+(reg.pep2); //se suman las pep2, de cada registro suma_pep3=suma_pep3+(reg.pep3); //se suman las pep3, de cada registro reg.final=((reg.pep1)+(reg.pep2)+(reg.pep3))/ 3; //las notas finales se obtienen sacando el promedio de las 3 pep suma_final=suma_final+(reg.final); cont=cont+ 1; //el contador servira para sacar los promedios por pep y por notas finales } prom_pep1=( float) suma_pep1/cont; //promedio por pep1 prom_pep2=( float) suma_pep2/cont; //promedio por pep2 prom_pep3=( float) suma_pep3/cont; //promedio por pep3 prom_final=( float) suma_final/cont; //promedio por notas finales //se imprime cada resultado printf( "\nEl promedio del curso en la pep1: %.1f" ,prom_pep1); printf( "\nEl promedio del curso en la pep2: %.1f" ,prom_pep2); printf( "\nEl promedio del curso en la pep3: %.1f" ,prom_pep3); printf( "\nEl promedio del curso en la final: %.1f" ,prom_final); printf( "\n\n" ); fclose(fp); //se cierra el archivo } //7 void Mejor_promedio(){ struct alumnos reg; float mayor= 0; int sw= 0; FILE*fp=fopen( "CURSO.dat" , "rt" ); //abrir archivo CURSO.dat para lectura(r) printf( "DETERMINACION DLE MEJOR PROMEDIO DLE CURSO\n"); while(fread(&reg, sizeof(reg), 1,fp)){ //leer cada registro del archivo reg.final=((reg.pep1)+(reg.pep2)+(reg.pep3))/ 3; //se necesitan las notas finales de cada registro p ara determinar //el mejor promedio if((reg.final)>mayor){ //como el "mayor" es igual a 0, el primer registro de nota final sera //mayor a este, entonces la nota de reg.final reemp lazara a el 0.Despues //continuara con el segundo registro para ver si es te sera mayor a la //nota final del primer registro, si es asi, reempl azara la nota del //primer registro por la nota final del segundo reg istro... //asi sucesivamente,esta que verifique todos los re gistros del archivo mayor=reg.final; } } printf( "\nEl mejor promedio del curso es: %.1f" ,mayor); //se imprimer el mayor de las notas finales. printf( "\n\n" ); fclose(fp); } //pantallas a utilizar a posterior void menu( void); //pantalla del menu void Agregar_registros( void); //opciones del menu void Consultar_datos_alumnos( void); // void Listado_datos_alumnos( void); // void Actualizar_datos_alumnos( void); // void Calcular_notas_finales( void); // void Consultar_promedios( void); // void Determinar_mejor_promedio( void); // //pantalla de bienvenida con fondo azul int main( void){ system( "color 3f" ); //fondo de pantalla, si se coloca g en vez de f,

Page 26: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

//se puede acceder a una pantalla de configuracion de colores printf( "\n\n**********BIENVENIDO**********\n" ); printf( "\n\nNombre: Rodrigo Torres\n" ); printf( "\nAsignatura: Programacion Aplicada a la Ingenieri a\n\n" ); printf( "\nVersion 1.00.Copyright (c) 2009 by." ); printf( "\n\n\n" ); system( "pause" ); //espera la orden del usuario menu(); //menu principal return 1; } //menu de opciones para el usuario void menu( void){ char opcion[ 8]; system( "cls" ); //system("cls"); limpia la pantalla anterior, mosta r la que se quiere printf( ">>>>>>>>>>>BIENVENIDO<<<<<<<<<\n" ); printf( "--------ELIJA UNA OPCION-------\n" ); //opciones ke puede elejir el usuario del 1 al 8 printf( "\n 1.- Ingreso de los datos de los alumnos\n" ); printf( "\n 2.- Consultar los datos de un alumno,por el num e de matricula\n" ); printf( "\n 3.- Listado con los datos de los alumnos regist rados\n" ); printf( "\n\nIngrese su opcion:" ); scanf( "%s" ,&opcion); //accesos a nuevas pantallas,segun la eleccion del usuario, que van desde //el 1 al 8 si se sale de ese rango, se debera ingr esar otro numero switch(atoi(opcion)){ case 1: Agregar_registros(); break; case 2: Consultar_datos_alumnos(); break; case 3: Listado_datos_alumnos(); break; case 4: Actualizar_datos_alumnos(); break; case 5: Calcular_notas_finales(); break; case 6: Consultar_promedios(); break; case 7: Determinar_mejor_promedio(); break; case 8: exit( 0); break; default: menu(); break; } } void Agregar_registros(){ system( "cls" ); Agregar(); //primera funcion que se hizo system( "pause" ); //se espera la respuesta del usuario menu(); //se vuelve al programa principal } void Consultar_datos_alumnos(){ system( "cls" ); Consultar(); //segunda funcion que se hizo system( "pause" ); //se espera la respuesta del usuario menu(); //se vuelve al programa principal } void Listado_datos_alumnos(){ system( "cls" ); Listado_datos(); //tercera funcion que se hizo

Page 27: rorro.ublog.clrorro.ublog.cl/archivos/2482/guia4.pdf · PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº 4 Ayudante: Rodrigo Torres Aguirre/ 2009 Compilador utilizado: Dev-C++

system( "pause" ); //se espera la respuesta del usuario menu(); //se vuelve al programa principal } void Actualizar_datos_alumnos(){ system( "cls" ); Actualizar_datos(); //cuarta funcion que se hizo system( "pause" ); //se espera la respuesta del usuario menu(); //se vuelve al programa principal } void Calcular_notas_finales(){ system( "cls" ); Calcular(); printf( "\n" ); //quinta funcion que se hizo system( "pause" ); //se espera la respuesta del usuario menu(); //se vuelve al programa principal } void Consultar_promedios(){ system( "cls" ); Promedios_peps_final(); //sexta funcion que se hizo system( "pause" ); //se espera la respuesta del usuario menu(); //se vuelve al programa principal } void Determinar_mejor_promedio(){ system( "cls" ); Mejor_promedio(); //octava funcion que se hizo system( "pause" ); //se espera la respuesta del usuario menu(); //se vuelve al programa principal }