elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como ordenar las notas de las Alumnas de M ayor a Menor
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como ordenar las notas de las Alumnas de M ayor a Menor  (Leído 1,945 veces)
Gabriele7

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Como ordenar las notas de las Alumnas de M ayor a Menor
« en: 30 Octubre 2016, 00:48 am »

Hola a Todos. Bueno mi problema es que tengo las sig preguntas de un trabajo pero hay una que no pude resolver, y quisiera saber si ustedes me podrian dar una mano, la pregunta que no entiendo es la N°2, que es imprimir la lista de las 10 mejores Alumnas (no Alumnos).

Acá les dejo cuales son las preguntas asi entienden mejor el codigo:

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.

Acá les dejo el código que hice :

Código:
#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;
}


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Como ordenar las notas de las Alumnas de M ayor a Menor
« Respuesta #1 en: 30 Octubre 2016, 22:27 pm »

Como ves pides un dato que es el sexo del alumno. Ahora viene cuándo debes hacer uso de este dato para mostrar solo el resultado de las alumnas.


En línea

arcanaer

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Como ordenar las notas de las Alumnas de M ayor a Menor
« Respuesta #2 en: 4 Noviembre 2016, 02:19 am »

Hice un problema similar hace un tiempo, das el numero de cuenta de un alumno y este puede tener varias calificaciones, despues ordena las calificaciones mas altas y las imprime, es un programa un poco completo, te dejo el codigo para que lo cheques.

Código:
#include <stdio.h>
#include "stdafx.h"
#include <windows.h>

void main(void)
{
int dat, i, j, k1, aux;
int num[2000];
float cal[2000], aux1;
float mayor = 0;

//printf("Dame el numero de datos: ");
scanf_s("%i", &dat);
int k[2000];

for (i = 0; i < dat; i++)
{
//printf("Dame el numero de cuenta numero %i: ", i+1);
scanf_s("%i", &num[i]);
//printf("Dame la calificacion numero %i: ", i+1);
scanf_s("%f", &cal[i]);

}

for (i = 0;i<dat;i++)
{
for (j = 0;j<dat - 1;j++)
{
if (num[j] >= num[j + 1])
{
aux = num[j];
num[j] = num[j + 1];
num[j + 1] = aux;

aux1 = cal[j];
cal[j] = cal[j + 1];
cal[j + 1] = aux1;

}
}
}
//printf("Ordenados de manera Ascendente\n");
for (i = 0;i<dat;i++)
{
//printf("%i %f\n", num[i], cal[i]);
}
//printf("\n");
//printf("Ordenados de manera descendente\n");
for (i = dat - 1;i >= 0;i--)
{
//printf("%i %f\n", num[i], cal[i]);
}
for (i = 0;i<dat;i++)
{
k[i] = 0
;
for (j = 0;j<dat;j++)
{
if (num[i] == num[j])
{
k[i]++;
}

}

}
//printf("\n");
i = 0;
while (i<dat)
{
if (k[i] != 1)
{
//printf("El numero de cuenta %i se repite %i veces\n", num[i], k[i]);
}
else
{
//printf("El numero de cuenta %i solo se encuentra una vez\n", num[i]);
}

i = i + k[i];
}
//printf("\n");
k1 = 0;
for (i = 0;i<dat;i++)
{
if (num[i] != num[i + 1])
{
k1++;
}
}
//Programa realizado por Carlos Valdes
printf("%i\n", k1);
i = 0;
while (i<dat)
{
if (k[i] != 1)
{
for (j = i;j<k[i];j++)
{

if (cal[j] >= mayor)
{
mayor = cal[j];
}
else
{
mayor = mayor;
}
}
}
else
{
mayor = cal[i];
}
//checa que aqui se imprimen solo una calificacion, si se repite solo mostrara la mas alta
printf("%i %.2f\n", num[i], mayor);
i = i + k[i];
}
}


El programa puede tener un alumno repetido con varias calificciones distintas, las ordena y despues toma solo la calificacion mas alta de ese alumno y los imprime en orden de menor a mayor.
« Última modificación: 4 Noviembre 2016, 02:26 am por arcanaer » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
programa en vb (ordenar de mayor a menor)
Programación Visual Basic
jjam45 1 9,585 Último mensaje 19 Febrero 2006, 18:36 pm
por jjam45
Ordenar número de mayor a menor « 1 2 »
Programación Visual Basic
Nessito 14 16,315 Último mensaje 19 Mayo 2007, 20:09 pm
por Nessito
ordenar de mayor a menor 5 numeros ingresados x el teclado!!!
ASM
XxArCaNgElxX 0 19,292 Último mensaje 20 Mayo 2011, 21:19 pm
por XxArCaNgElxX
Menor fue obligado a destruir su Xbox por malas notas « 1 2 »
Foro Libre
Br1ant 17 4,347 Último mensaje 29 Mayo 2015, 23:03 pm
por scott_
Ordenar valores de menor a mayor en una LisBox
.NET (C#, VB.NET, ASP)
Usuario 202 5 8,969 Último mensaje 16 Junio 2016, 23:42 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines