GUIA4 - Rodrigo Torres Aguirre

Anuncio
********************************************************
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;
}
//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].promedio;
}
if(menor > (A[i].promedio)){
im=i;
menor=A[i].promedio;
}
}
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óviles son de una marca determinada.
-Cuantos automóviles son de una marca X y de un color Z.
-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 determinada
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);
}
}
//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 DE ");
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>
#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 alumno, 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=cont2+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");
}
//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){
cont4=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, peso, 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 pesos 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++){
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;
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);
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;
}
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:%.2f",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();
promedios_hombres();
promedios_mujeres();
printf("\n\n\n\n");
system("pause");
}
------------------------------------------------------------------------------------6) Cree un archivo que guarde en una ficha, el nombre y numero de una persona, los datos
son ingresados por teclado, los datos deben ser mostrados en pantalla. Debe crear también
una función que busque en el archivo el nombre de una 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 ingresar
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
printf("nombre=%s\tNumero=%d\n",reg.nombre,reg.numero);
sw=1;
}
}
if(sw==0){
printf("%s
}
fclose(fp);
no esta en el archivo\n",nombre);
}
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 profesores 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, muestre 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);
}
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**********
La empresa constructora "OOCC" desarrolla proyectos de pequeña y media envergadura,
principalmente orientados a construir viviendas de hasta 2500UF. Para lo cual tiene una
serie de datos almacenados como historial, estos datos 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 que 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 construidos determinar el costo
promedio en material y el numero máximo y mínimo de trabajadores
contratados (esta opción la llamaremos costos).
-Dado el tiempo de duración estimado de la obra muestre por pantalla
todos los datos de la obra que mas se aproxime 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 los 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 anteriormente guardados
char opc;
while(1){//no tiene fin, nose cuantos son los datos que tengo 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, considerando 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 favor): ");
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, considerando 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 favor): ");
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- coquimbo");
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
printf("\nMas datos [S/N]:");fflush(stdin);opc=getchar();
if(opc=='N' || opc=='n') break;
}
fclose(fp);
}
//fuincion que muestra el listado del historial ordenado 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_maximos;
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 trabajadores 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);
}
//los trabajadores maximos no sobrepasen a los trabajadores 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 obra\n");
printf("<Ingreselos en dias, considerando que cada mes tiene 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 necesidad del usuario
void menu(void);
void
void
void
void
menu_IngreseHistorial(void);
menu_ListaHistorialRegion(void);
menu_DeterminacionCosto(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 HISTORIAL----\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 por region
void menu_ListaHistorialRegion(){
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 de su giro, en particular los
requerimientos planteados por ella son los siguientes:
-El sistema debe mostrar un menu de opciones
-El sistema debe permitir ingresar los datos de una obra (codigo,
nombre,nnumero de trabajadores, comuna de la obra, tiempo
planificado, ingeniero a cargo, m2 construidos, costos de la obra)
-El sistema debe permitir listar las obras por dos criterios:
obras superiores a X metros y obras donde trabajan o trabajaron
un numero mayor a X trabajadores.
-El sistema debe permitir eliminar una obra.
-El sistema debe permitir salir de este.
Para lo anterior debe construir un programa en lenguaje C que permita responder a lo
anterior, puediendo trabajar con arreglo de estructuras 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);
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_trabajadores;
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 corresponde, existe una forma
//mas directa de eliminar algun fichero de algun archivo)
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);
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
void
void
void
menu(void);
IngresarDatos(void);
ListadoDeObras(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();
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ífico 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 alumnos
struct alumnos reg;
//registro usando los campos de la estructura llamada 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 "wt", un "at"
//se pueden agregar datos a los que estaban anteriormente guardados
char opcion;//variable ocupada para deterner el llenado del registro
printf("AGREGAR REGISTRO AL ARCHIVO\n\n");
while(1){//no tiene fin, nose cuantos son los datos que tengo ke ingresar
printf("\n--NOMBRE DEL ALUMNO:");fflush(stdin);gets(reg.nombre);
//gets, se ocupa cuando se quiere llenar un registro 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 ingresar
//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 establece que para
//cualquier palabra escrita, como respuesta el printf,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 llenado del registro se
//detendra.En caso contrario, si se responde con cualquier 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 archivo
while(fread(&reg,sizeof(reg),1,fp)){
//ciclo que lee el archivo llenado con anterioridad,
//registro por registro, en el orden que fue llenado el archivo.
if(strcmp(reg.nro_matricula,num_matricula)==0){
//"strcmp" sirve para comparar,las matriculas de cada registro,con la
//matricula que se quiere encontrar.Si la matricula de alguno de los
//registros concuerda con la que se quiere se mostraran 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 strcmp
}
}
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 ordenada
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 modificar 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
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 para 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 reemplazara a el 0.Despues
//continuara con el segundo registro para ver si este sera mayor a la
//nota final del primer registro, si es asi, reemplazara la nota del
//primer registro por la nota final del segundo registro...
//asi sucesivamente,esta que verifique todos los registros 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,
//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 Ingenieria\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, mostar 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 nume de matricula\n");
printf("\n 3.- Listado con los datos de los alumnos registrados\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 ingresar 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
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
}
Descargar