Tema: Estructuras
Ver Mensaje Individual
  #5 (permalink)  
Antiguo 21/04/2012, 20:56
martin_9_91
 
Fecha de Ingreso: mayo-2011
Ubicación: Bs.As Argentina
Mensajes: 193
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: Estructuras

Ok ahi lo cambie.
Este es todo el programa que tengo

Cita:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

//Defino la estructura
typedef struct alumno{
char nomApe[50];
char dni[10];
int nota;
}alumno;

//Declaración de funciones
int cargaAlumno();
int buscoAlm();
void menu();
int cargoNota();
void promedio();

//Función principal
int main(){

struct alumno a[35];

//Llamo al menu
menu(a);

printf("\n");
system("pause");

}

//***************************************

//Menu del programa
void menu(struct alumno b[]){

int mn=0;
int con=0;
int valbool=0;

while(mn==0){
printf("Ingrese 1 para ingresar al menu\n");
scanf("%i",&mn);

if(mn==1){

//Limpio la pantalla
system("cls");

int op;

printf("*****************************\n");

printf("Carga de alumnos: Ingrese 1\n");
printf("Carga de notas: Ingrese 2\n");
printf("Promedio por alumno: Ingrese 3\n");

printf("*****************************\n");

printf("Ingrese la opcion que desee\n");
scanf("%i", &op);


//Menu
switch(op){
case 1:
//Llamo a la funcion carga de alumno
con = cargaAlumno(b);
break;
case 2:
//Llamo a la funcion que se encarga de buscar y cargar
// Notas por alumno
valbool = buscoAlm(b,con);
if(valbool == 1){
cargoNota(b, con);
}
break;
case 3:
//Funcion que calcula el promedio de los alumnos (primero ordeno)
promedio(b, con);
break;
}
mn=0;
//cierre del if
}
}

}

//***************************************

//Carga de los alumnos
int cargaAlumno(struct alumno b[]){
int i, con=0,res=0, reg=0, registros=1;
int a=0;

for(i=0;i<35;i++){
//Cargo los datos
printf("Ingrese el nombre y apellido %i\n", registros);
fflush(stdin);
gets(b[i].nomApe);
printf("Ingrese el DNI %i \n", registros);
fflush(stdin);
gets(b[i].dni);

//Cuento la cantidad de registros ingresados
con++;

//Verifico si el usuario desea agregar otro registro
printf("¿Desea ingresar otro registro? 1. si , 2. no \n");
scanf("%i", &reg);
if(reg == 1){
printf("Ingrese un nuevo registro: \n");
}
else{
i=35;
}
//Aviso que no se permitan mas de 35 registro
if(con == 35){
printf("\n");
printf("No se permiten mas de 35 registros\n");
break;
}

printf("\n");
}
//Retorno la cantidad de alumnos
return con;
}


//***************************************

//Busco el alumno que deseo ingresar las notas
int buscoAlm(struct alumno b[], int valor){

//struct alumno doc;
int i, con=0, registros=1, reg;
int val = 0;
char dni[10];
//Ingreso el alumno a buscar
printf("Ingrese el dni del alumno para buscarlo\n");
fflush(stdin);
gets(dni);

//Busco el alumno
for(i=0;i<valor;i++){
if(strcmp(dni, b[i].dni) == 0){
val = 1;
break;
}
else{
printf("El alumno no existe\n");
val = 0;
break;
}
}

return val;
}

//***************************************

//Ingreso la nota del alumno
int cargoNota(struct alumno b[], int valor){

int i, con=0, registros=1, reg;

printf("Las notas son entre 1 y 10\n");

//Ingreso las notas
for(i=0;i<valor;i++){
printf("Ingrese la nota %i \n", registros);
scanf("%i", &b[i].nota);

//Valido que la nota sea entre 1 y 10
if(b[i].nota < 1 || b[i].nota > 10){
printf("Nota incorrecta\n");
return;
}

con++;
registros++;

//Verifico si el usuario desea agregar otro nota
printf("¿Desea ingresar otro nota? 1. si , 2. no \n");
scanf("%i", &reg);
if(reg == 1){
printf("Ingrese otra nota: \n");
}
else{
i=5;
}

//Valido que no ingrese mas de 5 notas
if(con == 5){
printf("No se permiten mas de 5 notas por alumno\n");
break;
}
}

return registros;
}

//Promedio por alumno
void promedio(struct alumno b[], int valor){

int i=0, j=0, res=0, con=1, prom=0;
struct alumno aux;

//Ordeno de forma ascendente
for(i=0;i<valor;i++){
for(j=i+1;j<valor;j++){
if(strcmp(b[i].nomApe, b[j].nomApe) > 0){
aux = b[i];
b[i] = b[j];
b[j] = aux;
}
}
printf("Alumno: %s \n", b[i].nomApe);
}


for(i=0;i<valor;i++){
if(((i+1)<valor) && (strcmp(b[i].nomApe , b[i+1].nomApe) == 0)){
con++;
res = res + b[i].nota;
prom = res / con;
}
else{
con++;
res = res + b[i].nota;
prom = res / con;
printf("El alumno %s, tiene un promedio de %i \n", b[i].nomApe, prom);
con=0;
res=0;
prom=0;
}
}


}
Agradezco mucho tu ayuda!