Print the N major notes and names among the values that are in the struct vector

0

Hello, I would like some help here, more specifically in case 4 if. I would like some solution without having to sort the vector. Thankful.

#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string>



 struct informacoes_do_aluno {
    char nome[30];
    int matricula[20];
    float av1;
    float av2;
    float media;
    float nota_final;
    char resultado[30];
    int x;
};

int main (void){
    //aluno alunos[10];
    int j;
    int n=3;
    int maior_nota[2];
    int i;
    int escolha;
    struct informacoes_do_aluno aluno[3];
        for(i=0; i<n; i++){
        printf("Nome do aluno .....: ");
        scanf("%s", aluno[i].nome);
        printf("Matricula do aluno .....: ");
        scanf("%i", aluno[i].matricula);
        printf("Nota da AV1: ");
        scanf("%f", &aluno[i].av1);
        printf("Nota da AV2: ");
        scanf("%f", &aluno[i].av2);
        printf("A media do aluno eh = %f \n\n", aluno[i].media = (aluno[i].av1+aluno[i].av2)/2);

        printf("Situacao do aluno: ");
        if(aluno[i].media >= 7)
        {
            //aluno[i].resultado = "aprovado";
            strcpy(aluno[i].resultado,"Aprovado");
            printf("%s\n\n",aluno[i].resultado);
        }
        else if(aluno[i].media < 7 && aluno[i].media >= 4 )
        {
            printf("Prova final\n\n");
            {
                printf("Nota da prova final: " );
                scanf("%f", &aluno[i].nota_final);
                printf("Resultado final: ");
                if((aluno[i].nota_final+aluno[i].media)/2 >= 6)
                {
                    strcpy(aluno[i].resultado,"Aprovado");
                    printf("%s\n\n",aluno[i].resultado);
                }
                else
                {
                    strcpy(aluno[i].resultado,"Reprovado");
                    printf("%s\n\n",aluno[i].resultado);
                }
            }
        }
        else
        {
            strcpy(aluno[i].resultado,"Reprovado");
            printf("%s\n\n",aluno[i].resultado);
        }
    }
    while (escolha!=5)
{

printf("\n\n ----------------------- ");

printf("\n 1 - Exibir lista de alunos ");
printf("\n 2 - Exibir alunos aprovados ");
printf("\n 3 - Exibir alunos reprovados ");
printf("\n 4 - Exibir as 5 maiores notas ");
printf("\n 5 - Fechar Programa ");
printf("\n\n Escolha uma opcao: ");
scanf("%d",&escolha);


// estrutura switch
switch (escolha) {

case 1:
{

// a função clrscr(); é para limpar a tela
system("cls");
printf("\n\n Opcao escolhida: 1 ");
printf("\n Lista de alunos: \n");
for(i=0; i<n; i++){
    printf("%s\n", aluno[i].nome);
}

break;
}

case 2:
{
system("cls");
printf("\n\n Opcao escolhida: 2 ");
printf("\n\n Alunos aprovados: \n\n");
for(i=0; i<n; i++){
    if(strcmp(aluno[i].resultado, "Aprovado") == 0){
    //if(aluno[i].resultado == "Aprovado"){
        printf(" %s \n", aluno[i].nome);
    }
}
break;
}

case 3:
{
system("cls");
printf("\n\n Opcao escolhida: 3 ");
printf("\n\n Alunos reprovados: \n\n");
for(i=0; i<n; i++){
    if(strcmp(aluno[i].resultado, "Reprovado") == 0){
    //if(aluno[i].resultado == "Aprovado"){
        printf(" %s \n", aluno[i].nome);
    }
}
break;
}

case 4:
{
system("cls");
printf("\n\n Opcao escolhida: 4 ");
printf("\n\n As 5 maiores notas foram: \n\n");
maior_nota[0]=0;
maior_nota[1]=0;

for(j=0; j<2; j++)
{
 for(i=0; i<n; i++){
  if(maior_nota[j] < aluno[i].media && maior_nota[0]  !=  maior_nota[1] )
  {
   maior_nota[j] = i;
  }
}
     printf("%s\n%f\n", aluno[maior_nota[j]].nome, aluno[maior_nota[j]].media);
}
//for(i=0; i<2; i++){
    //printf("%s\n%f\n", aluno[maior_nota[i]].nome, aluno[maior_nota[i]].media);
//}
break;
}

// opção padrão
default:
{
system("cls");

// se for escolhida a opção 5, ele pula o while utilizando continue para isso
if( escolha==5)
{
continue;
}
// caso o usuário digite um numero acima de 5, ele irá informar que nao existe essa opção
printf("\n\n Opcao invalida, digite um numero entre 1 e 5. ");
break;
}

}

}

if( escolha==5)
printf("\n\n O Programa foi fechado");

getch();

}
    
asked by anonymous 03.03.2015 / 21:36

2 answers

1

You can do a "sort sort" just for the first 5 elements; you do not need to sort the entire array.

    
03.03.2015 / 22:52
0

You can simply scroll through the entire data set and update the resulting vector values. At the end you will have the top five notes.

An immediate algorithm would be to assume that the first five notes are the largest of their set and would save it in a vector (keeping an order to facilitate comparison). From the 6th, you would compare with the previous five, and if the newer one was larger than any of the previous ones, you would update the vector.

    
25.04.2015 / 08:03