C/Visual C - Sacar el promedio en este programa en C

 
Vista:
Imágen de perfil de Gabriel

Sacar el promedio en este programa en C

Publicado por Gabriel (10 intervenciones) el 27/10/2016 00:28:38
Quisiera saber por que me da error al hacer el promedio de los alumnos cuyo promedio sea >=4 && <7;
tambien como hago para imprimir la lista de las 10 mejores alumnas? como saco los 10 mejores promedios de las alumnas para luego mostrarlos.Gracias


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
#include<stdio.h>
#include<ncurses.h>
#include<string.h>
#include<ctype.h>
 
#define MAX_ALUMNOS 10000
 
 
#define MAX_NOTAS 10
 
struct alumno
{
    char nombre[20];
    char sexo;
    int notas[MAX_NOTAS];
};
 
int main()
{
struct alumno alumnos[MAX_ALUMNOS];
//float promedio=0.0;
float resultado = 0.0;
int num_alumnos;
for( num_alumnos=0; num_alumnos<MAX_ALUMNOS; num_alumnos++ )
{
  printf("Nombre del alumno (para terminar teclee FIN): ");
  scanf("%s",alumnos[num_alumnos].nombre);
  if( strcmp(alumnos[num_alumnos].nombre,"FIN") == 0 )
    break;
  // else ....
  // nota que como el if tiene un break no es necesario el else
  do
  {
    char sexo;
    printf("Sexo: M o F: ");
    scanf("%c",&sexo);
    alumnos[num_alumnos].sexo = toupper(sexo);
  } while( alumnos[num_alumnos].sexo != 'M' && alumnos[num_alumnos].sexo !='F');
  for (int j=0; j<MAX_NOTAS; j++)
  {
    printf("Ingrese nota # %d: ",j+1);
    scanf("%d",&alumnos[num_alumnos].notas[j]);
  }
  //int resultado = 0;
  float promedio=0.0;
  for (int i=0; i<num_alumnos; i++) {
    int suma = 0;
    for (int j=0; j<MAX_NOTAS; j++)
      suma += alumnos[i].notas[j];
 
    promedio = suma/MAX_NOTAS;
 
    if (promedio >= 4 && promedio < 7){
      resultado++;
 
  }
 
 
}
 
}
printf("Total de alumnos con promedio >= 4 y promedio < 7 = ");
    printf("%.2f",resultado);
 
 
 
}
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
sin imagen de perfil

Sacar el promedio en este programa en C

Publicado por Diego (150 intervenciones) el 27/10/2016 15:18:26
En el main() se indica que regresará un valor del tipo int, pero no logro ver un return dentro del codigo que modificaste.
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
Imágen de perfil de Gabriel

Sacar el promedio en este programa en C

Publicado por Gabriel (10 intervenciones) el 27/10/2016 16:47:54
Logre hacerlo de esta manera al final. Pero aun sigo sin saber como hacer para imprimir la lista de las 10 mejores alumnas.

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
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<ncurses.h>
 
#define MAX_ALUMNOS 3
 
 
#define MAX_NOTAS 3
 
struct alumno
{
    char nombre[20];
    char sexo;
    int notas[MAX_NOTAS];
    float promedio_final;
};
 
char nombre_a_buscar[20];
int total = 0;
 
int main()
{
    struct alumno alumnos[MAX_ALUMNOS];
    int num_alumnos;
 
    for(num_alumnos=0; num_alumnos<MAX_ALUMNOS; num_alumnos++)
    {
        printf("Nombre del alumno (para terminar teclee FIN): ");
        scanf("%s",alumnos[num_alumnos].nombre);
        if( strcmp(alumnos[num_alumnos].nombre,"FIN") == 0 )
            break;
 
        // else ....
        // nota que como el if tiene un break no es necesario el else
        do
        {
            char sexo;
            printf("Sexo: M o F: ");
            scanf("%s",&sexo);
            alumnos[num_alumnos].sexo = toupper(sexo);
        }
 
        while(alumnos[num_alumnos].sexo != 'M' && alumnos[num_alumnos].sexo !='F');
        float prom = 0.0;
        int sum = 0;
 
        for (int j=0; j<MAX_NOTAS; j++)
        {
            printf("Ingrese nota #%d: ",j+1);
            scanf("%d",&alumnos[num_alumnos].notas[j]);
            sum += alumnos[num_alumnos].notas[j];
 
        }
        alumnos[num_alumnos].promedio_final = (float) sum / MAX_NOTAS;
        printf("Promedio de este alumno: %.2f \n", alumnos[num_alumnos].promedio_final);
 
        if (alumnos[num_alumnos].promedio_final >= 4.0 && alumnos[num_alumnos].promedio_final < 7.0 )
            total++;
 
    }
 
    printf("Total de alumnos con promedio >= 4 y promedio < 7 = ");
    printf("%d \n", total);
 
    do
    {
    printf("Ingrese un nombre para mostrar datos: ");
    scanf("%s", nombre_a_buscar);
 
    bool hay_coincidencia = false;
 
    for(int i=0;i<MAX_ALUMNOS;i++){
 
        if(strcmp(alumnos[i].nombre, nombre_a_buscar) == 0) {
            hay_coincidencia = true;
            printf("Nombre: %s \nSexo: %c \n", alumnos[i].nombre, alumnos[i].sexo);
            for(int j=0;j<MAX_NOTAS;j++)
                printf("Nota: #%d: %d \n", j+1, alumnos[i].notas[j]);
            printf("Promedio: %.2f \n", alumnos[i].promedio_final);
        }
    }
    if(!hay_coincidencia)
        printf("El nombre ingresado no se encuentra en la lista\n");
    }
    while(true);
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Sacar el promedio en este programa en C

Publicado por Tom (619 intervenciones) el 27/10/2016 18:14:52
Podrías mantener la lista alumnos[] ordenada por la nota media. Al final solamente tendrías que mostrar los 10 primeros.

O también puedes, al final, recorrer alumnos[] e ir rellenando una lista adicional de 10 elementos que será la que muestres ...
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

Sacar el promedio en este programa en C

Publicado por Tom (619 intervenciones) el 27/10/2016 18:49:32
Ah, y si no es demasiado "avanzado" también puedes usar qsort y ordenar toda la lista de alumnos. Sería algo parecido a:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* */
int compare_media(const void *left, const void *right) {
   if(((struct alumno*)left)->promedio_final < ((struct alumno*)right)->promedio_final)
      return 1;
   if(((struct alumno*)left)->promedio_final == ((struct alumno*)right)->promedio_final)
      return 0;
   return -1;
}
/* */
... cuando tengas la lista completa ...
 
   qsort(alumnos, num_alumnos, sizeof(struct alumno), compare_media);
 
   for(int i = 0; i < 10 && i < num_alumnos; i++) {
      /* Mostrar alumos[i] */
   }
...
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
Imágen de perfil de Gabriel

Sacar el promedio en este programa en C

Publicado por Gabriel (10 intervenciones) el 28/10/2016 21:25:57
Pero necesito el de las Alumnas, vendría a ser parecido igual no?
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