C/Visual C - Ayuda con funciones

   
Vista:

Ayuda con funciones

Publicado por Miguel (1 intervención) el 27/02/2015 16:25:27
Hola buen dia me dejaron realizar un codigo para capturar y mostrar lo capturado... hasta ahi todo bien el problema es que ahora me piden que ese mismo programa lo haga pero utilizando funciones y ya intente e intente y no me sale espero y me peudan ayudar...
este es mi codigo sin funciones y funcional al 100%:




#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(void)
{
char alumno[25][25] ;
char opcion;
float calificacion[50];
int i,cantalum;
do{
clrscr(); /* Limpiar pantalla antes de mostrar el menu al igual que en cada CASE */
printf("\n \n Sistema de Gestion de Alumnos.\n");
printf("[A] Captura de Calificaciones.\n");
printf("[B] Lista de Calificaciones.\n");
printf("[C] Obtener Promedio Grupal.\n");
printf("[D] Salir del sistema\n");
printf("Digite la opcion deseada: ");
scanf("%c",&opcion); /* GUARDA OPCION ELEGIDA*/

switch(opcion){

/*Primer Caso para carturar el nombre y calificaciones de los alumnos*/
case 'A':
clrscr();
printf("Ingrese la cantidad de alumnos: ");
scanf("%d",&cantalum);
for(i=0;i<cantalum;i++){
fflush(stdin);
printf("_________________________________________________________\n");
printf("Escribe el Nombre del Alumno: ");
gets(alumno[i]);
printf("Digite la Calificacion: ");
scanf("%f",&calificacion[i]);}
printf("_________________________________________________________\n");
printf("Enter para regresar al menu principal ");
getch(); break;

/*Segundo Case Muestra el nombre del alumno y su calificacion */
case 'B':
clrscr();
if(cantalum>0){

printf("Lista de Alumnos y calificaciones\n");
for(i=0;i<cantalum;i++){
printf("_________________________________________________________\n");
printf("Nombre del alumno: %s",alumno[i]);
printf("\tCalificacion Obtenida: %.2f \n",calificacion[i]);}
printf("_________________________________________________________\n");
printf("Enter para regresar al menu principal ");
}else printf("Base de datos Vacia!!.\n");
getch(); break;

/* Tercer Case Muestra en pantalla el promedia del Grupo*/
case 'C':
clrscr();
if(cantalum>0){
float promedio=0;
for(i=0;i<cantalum;i++)
promedio=promedio+calificacion[i];
printf("Promedio grupal: %.2f\n",promedio/cantalum);
printf("Enter para regresar al menu principal ");
}else printf("Bace de Datos Vacia!!.\n");
getch(); break;}

}while(opcion!='D');
return 0;}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con funciones

Publicado por chema (187 intervenciones) el 01/03/2015 11:26:19
Capturar capturas debe ser algo bueno, suena bien. yo, no se hacer esas cosas tan potentes.

El Pc esta capturado ¿Quién lo desencapturará? el desencapturador que lo desencapture, buen desencapturadr será.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con funciones

Publicado por aguml (179 intervenciones) el 01/03/2015 23:49:17
No me he podido parar a revisar si tienes algunos bugs mas pero bueno, esto te puedo poner:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <stdio.h>
#include <stdlib.h>
#include <conio.h> //No me hace mucha gracia porque no es estandar
#include <string.h>
 
#define MAXALUMS 25 //Constante que indica el numero maximo de alumnos
#define MAXSIZENAME 25 //Constante que indica el tamaño maximo del nombre
//-----------------------------------------------------------------------------
 //Declaro el tipo para un alumno
typedef struct{
   char nombre[MAXSIZENAME];
   float calificacion;
} TPupils;
 
//Declaro los prototipos de las funciones
void AddAlumns(int nAlumnos, TPupils *alumnos);
void PrintAlumns(int nAlumns, TPupils *alumnos);
void Promedio(int nAlumns, TPupils *alumnos);
//-----------------------------------------------------------------------------
 
int main(void)
{
   TPupils alumnos[MAXALUMS];
 
   char opcion;
   int i,cantalum;
   do{
      clrscr(); /* Limpiar pantalla antes de mostrar el menu al igual que en cada CASE */
      printf("\n \n Sistema de Gestion de Alumnos.\n");
      printf("[A] Captura de Calificaciones.\n");
      printf("[B] Lista de Calificaciones.\n");
      printf("[C] Obtener Promedio Grupal.\n");
      printf("[D] Salir del sistema\n");
      printf("Digite la opcion deseada: ");
      scanf("%c",&opcion); /* GUARDA OPCION ELEGIDA*/
 
      switch(opcion){
 
         /*Primer Caso para carturar el nombre y calificaciones de los alumnos*/
         case 'A': case 'a':
            printf("Ingrese la cantidad de alumnos: ");
            scanf("%d",&cantalum);
            memset(alumnos, 0, sizeof(alumnos)); //Limpio la memoria del array de tipos TPupils
            AddAlumns(cantalum, alumnos);
            break;
 
         /*Segundo Case Muestra el nombre del alumno y su calificacion */
         case 'B': case 'b':
            PrintAlumns(cantalum, alumnos);
            break;
 
         /* Tercer Case Muestra en pantalla el promedia del Grupo*/
         case 'C': case 'c':
            Promedio(cantalum, alumnos);
            break;
      }
 
   }while(opcion!='D' && opcion != 'd');
   return 0;
}
//-----------------------------------------------------------------------------
 
//Funcion que añade alumnos
void AddAlumns(int nAlumnos, TPupils* alumnos)
{
   int i;
   clrscr();
   if(nAlumnos > 0 && nAlumnos <= MAXALUMS){
      for(i=0;i<nAlumnos;i++){
         fflush(stdin);
         printf("_________________________________________________________\n");
         printf("Escribe el Nombre del Alumno: ");
         //gets tiene un problema y es que si introduces un nombre mas largo que
         //MAXSIZENAME desbordarás el buffer y el comportamiento del programa será
         //cualquier cosa menos estable. Para evitar eso utiliza fgets que si
         //permite indicar el limite de caracteres de la cadena. Los caracteres
         //de mas se quedan en el buffer de entrada con lo que es importante hacer
         //un fflush justo despues
         fgets(alumnos[i].nombre, MAXSIZENAME, stdin);
         fflush(stdin);
         printf("Digite la Calificacion: ");
         scanf("%f",&alumnos[i].calificacion);
      }
   }else{
      printf("\n\nEl número introducido no es válido.\n\n");
   }
   printf("_________________________________________________________\n");
   printf("\nEnter para regresar al menu principal\n");
   getch();
}
//-----------------------------------------------------------------------------
 
void PrintAlumns(int nAlumns, TPupils* alumnos)
{
   int i;
   clrscr();
   if(nAlumns > 0){
      printf("Lista de Alumnos y calificaciones\n");
      for(i=0;i<nAlumns;i++){
         printf("_________________________________________________________\n");
         printf("Nombre del alumno: %s",alumnos[i].nombre);
         printf("\tCalificacion Obtenida: %.2f \n",alumnos[i].calificacion);
      }
      printf("_________________________________________________________\n");
      printf("Enter para regresar al menu principal ");
   }else{
      printf("Base de datos Vacia!!.\n");
   }
   getch();
}
//-----------------------------------------------------------------------------
 
void Promedio(int nAlumns, TPupils* alumnos)
{
   int i;
   clrscr();
   if(nAlumns>0){
      float promedio=0;
      for(i=0;i<nAlumns;i++)
         promedio = promedio + alumnos[i].calificacion;
      printf("Promedio grupal: %.2f\n",promedio/nAlumns);
      printf("Enter para regresar al menu principal ");
   }else{
      printf("Base de Datos Vacia!!.\n");
   }
   getch();
}
//-----------------------------------------------------------------------------


¿puedes usar malloc? es que con eso consigues algo mas versatil que usará solo la memoria necesaria. Ahora mismo usas un array de 25 estructuras aunque solo uses 1 y con malloc podrias reservar la memoria justa para lo que necesites limitado solo por el espacio de memoria libre del PC. Aqui como podria quedar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <stdio.h>
#include <stdlib.h>
#include <conio.h> //No me hace mucha gracia porque no es estandar
#include <string.h>
 
#define MAXALUMS 25 //Constante que indica el numero maximo de alumnos
#define MAXSIZENAME 25 //Constante que indica el tamaño maximo del nombre
//-----------------------------------------------------------------------------
 //Declaro el tipo para un alumno
typedef struct{
   char nombre[MAXSIZENAME];
   float calificacion;
} TPupils;
 
//Declaro los prototipos de las funciones
void AddAlumns(int nAlumnos, TPupils *alumnos);
void PrintAlumns(int nAlumns, TPupils *alumnos);
void Promedio(int nAlumns, TPupils *alumnos);
//-----------------------------------------------------------------------------
 
int main(void)
{
   TPupils *alumnos = NULL;
 
   char opcion;
   int i,cantalum;
   do{
      clrscr(); /* Limpiar pantalla antes de mostrar el menu al igual que en cada CASE */
      printf("\n \n Sistema de Gestion de Alumnos.\n");
      printf("[A] Captura de Calificaciones.\n");
      printf("[B] Lista de Calificaciones.\n");
      printf("[C] Obtener Promedio Grupal.\n");
      printf("[D] Salir del sistema\n");
      printf("Digite la opcion deseada: ");
      scanf("%c",&opcion); /* GUARDA OPCION ELEGIDA*/
 
      switch(opcion){
 
         /*Primer Caso para carturar el nombre y calificaciones de los alumnos*/
         case 'A': case 'a':
            if(alumnos != NULL){
               free(alumnos);
               alumnos = NULL;
            }
            printf("Ingrese la cantidad de alumnos: ");
            scanf("%d",&cantalum);
            alumnos = malloc(sizeof(TPupils) * cantalum);
 
            if(alumnos == 0){
               printf("\n\nError al allocar memoria para los alumnos indicados.\n\n");
            }else{
               memset(alumnos, 0, (sizeof(TPupils)*cantalum)); //Limpio la memoria del array de tipos TPupils
               AddAlumns(cantalum, alumnos);
            }
            break;
 
         /*Segundo Case Muestra el nombre del alumno y su calificacion */
         case 'B': case 'b':
            PrintAlumns(cantalum, alumnos);
            break;
 
         /* Tercer Case Muestra en pantalla el promedia del Grupo*/
         case 'C': case 'c':
            Promedio(cantalum, alumnos);
            break;
      }
 
   }while(opcion!='D' && opcion != 'd');
   free(alumnos);
   return 0;
}
//-----------------------------------------------------------------------------
 
//Funcion que añade alumnos
void AddAlumns(int nAlumnos, TPupils* alumnos)
{
   int i;
   clrscr();
   if(nAlumnos > 0 && nAlumnos <= MAXALUMS){
      for(i=0;i<nAlumnos;i++){
         fflush(stdin);
         printf("_________________________________________________________\n");
         printf("Escribe el Nombre del Alumno: ");
         //gets tiene un problema y es que si introduces un nombre mas largo que
         //MAXSIZENAME desbordarás el buffer y el comportamiento del programa será
         //cualquier cosa menos estable. Para evitar eso utiliza fgets que si
         //permite indicar el limite de caracteres de la cadena. Los caracteres
         //de mas se quedan en el buffer de entrada con lo que es importante hacer
         //un fflush justo despues
         fgets(alumnos[i].nombre, MAXSIZENAME, stdin);
         fflush(stdin);
         printf("Digite la Calificacion: ");
         scanf("%f",&alumnos[i].calificacion);
      }
   }else{
      printf("\n\nEl número introducido no es válido.\n\n");
   }
   printf("_________________________________________________________\n");
   printf("\nEnter para regresar al menu principal\n");
   getch();
}
//-----------------------------------------------------------------------------
 
void PrintAlumns(int nAlumns, TPupils* alumnos)
{
   int y;
   clrscr();
   if(nAlumns > 0){
      printf("Lista de Alumnos y calificaciones\n");
      for(y=0;y<nAlumns;y++){
         printf("_________________________________________________________\n");
         printf("Nombre del alumno: %s",alumnos[y].nombre);
         printf("\tCalificacion Obtenida: %.2f \n",alumnos[y].calificacion);
      }
      printf("_________________________________________________________\n");
      printf("Enter para regresar al menu principal ");
   }else{
      printf("Base de datos Vacia!!.\n");
   }
   getch();
}
//-----------------------------------------------------------------------------
 
void Promedio(int nAlumns, TPupils* alumnos)
{
   int i;
   clrscr();
   if(nAlumns>0){
      float promedio=0;
      for(i=0;i<nAlumns;i++)
         promedio = promedio + alumnos[i].calificacion;
      printf("Promedio grupal: %.2f\n",promedio/nAlumns);
      printf("Enter para regresar al menu principal ");
   }else{
      printf("Base de Datos Vacia!!.\n");
   }
   getch();
}
//-----------------------------------------------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar