C/Visual C - Como realizo el sig ordenamiento en C?

 
Vista:
Imágen de perfil de Gabriel

Como realizo el sig ordenamiento en C?

Publicado por Gabriel (10 intervenciones) el 01/11/2016 06:42:33
Hola a todos.Mi pregunta es como hago para imprimir la lista de las 10 mejores alumnas(no alumnos), sin usar qsort() ni punteros. qsort() ?
Aca les dejo las preguntas para que puedan entender mejor mi codigo. La pregunta que no entiendo es solo la N°2, los otros ya estan echos.

N1° : Ingresar los datos de los alumnos de un establecimiento consistentes en NOMBRE(string de30 caracteres) ; Sexo (char) ; Y NOTAS de 10 materias codificadas de 0 a 9 (int).El ingreso terminara cuando se ingrese el nombre "FIN".Se sabe que el establecimiento no tiene mas de 1000 Alumnos.

N2° : IMPRIMIR LA LISTA DE LAS 10 MEJORES ALUMNAS. (ESTE ES EL QUE NO EINTIENDO)

N°3: Indicar cuantos alumnos hay en el establecimiento cuyo promedio sea mayor o igual que 4 y menor que 7.

N°4: Permitir el ingreso de un nombre y mostrar la totalidad de sus datos, o bien si no pertenece al establecimiento.

Mi codigo:

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
#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 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];
 
    }
    prom = (float) sum / MAX_NOTAS;
    printf("Promedio de este alumno: %.2f \n", prom);
 
 
}
 
int total = 0;
 
for (int i=0; i<num_alumnos; i++)
{
    int suma = 0;
    float promedio = 0.0;
 
    for (int j=0; j<MAX_NOTAS; j++)
        suma += alumnos[i].notas[j];
 
    promedio = (float) suma / MAX_NOTAS;
    alumnos[i].promedio_final = promedio;
 
    if (promedio >= 4.0 && promedio < 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 pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Como realizo el sig ordenamiento en C?

Publicado por dario (13 intervenciones) el 01/11/2016 07:16:05
Te dejo este pseudocodigo, a ver si te ayuda.
Saludos.

1
2
3
4
5
para i = 1 hasta 10
	si (alumnos[i].sexo == 'F') y (alumnos[i].promedio_final > 7)
		imprimir(alumnos[i].nombre)
	fin-si
fin-para
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar