Language Problem C, Program does not respond

Asked

Viewed 118 times

0

I have a problem with my program in C, and in the registration of the second student’s second grade the program stops responding. Follow the code with the explanation of the problem.

/*
    Faça um programa que cadastre 10 alunos.
    Para cada aluno, devem ser cadastrados:
        nome,
        nota 1,
        nota 2.

    Primeiro, liste todos os alunos cadastrados ordenando-os pela média pondera das notas,
    tendo a primeira nota peso 2 e a segunda peso 3.

    Em seguida, ordene os alunos, de forma crescente, pela nota 1, e liste-os.

    Finalmente, considerando que para ser aprovado o aluno deve ter no minimo media 7,
    liste em ordem alfabética os alunos reprovados.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 2

typedef struct Aluno{
    char nome[64];
    float nota1;
    float nota2;
    float mediaPonderada;
}Aluno;

struct Aluno aluno[MAX];

void exibirReprovados(Aluno *v){
    printf("Alunos Reprovados:\n");
    int i;
    for(i = 0; i < MAX-1; i++)
    {
        if(v[i].mediaPonderada < 7)
        {
            printf("Nome: %s \t nota 1: %.2f \t nota 2: %.2f\t Media: %.2f\n", v[i].nome, v[i].nota1, v[i].nota2, v[i].mediaPonderada);
        }
    }
}
void exibir(Aluno *v){
    printf("Todos os alunos:\n");
    int i;
    for(i = 0; i < MAX-1; i++)
    {
        printf("Nome: %s \t nota 1: %.2f \t nota 2: %.2f\t Media: %.2f\n", v[i].nome, v[i].nota1, v[i].nota2, v[i].mediaPonderada);
    }
}
// Usando o Select Sort
void ordenarPorNome(Aluno *v){
    struct Aluno aux;
    int i, j;
    int min;
    int tam = MAX;

    for(i = 0; i < (tam-1); i++)
    {
        min = i;
        for(j = (i+1); i < tam; j++)
        {
            if(strcmp(v[j].nome, v[min].nome) < 0)
            {
                min = j;
            }
        }
        if(i != min)
        {
            aux = v[i];
            v[i] = v[min];
            v[min] = aux;
        }
    }
}
// Usando o Select Sort
void ordenar(Aluno *v)
{
    struct Aluno aux;
    int i, j, min;
    int tam = MAX;

    for(i = 0; i < (tam-1); i++)
    {
        min = i;
        for(j = (i+1); i < tam; j++)
        {
            if(v[j].nota1 < v[min].nota1)
            {
                min = j;
            }
        }
        if(i != min)
        {
            aux = v[i];
            v[i] = v[min];
            v[min] = aux;
        }
    }

}

void calcularMediaPonderada(Aluno *v){
    int i;
    for(i = 0; i < MAX; i++)
    {
        v[i].mediaPonderada = ((v[i].nota1 * 1) + (v[i].nota2 * 3))/1+3;
    }
}

void cadastrarAlunos(Aluno *v){
    int i;
    for(i = 0; i < MAX; i++){
        printf("Digite o nome do aluno %d: \n", i);
        fflush(stdin);
        gets(v[i].nome);
        fflush(stdin);

        printf("Digite a nota 1 do aluno %s: \n", v[i].nome);
        fflush(stdin);
        scanf("%f", &v[i].nota1);
        fflush(stdin);
        printf("Digite a nota 2 do aluno %s: \n", v[i].nome);
        fflush(stdin);
        scanf("%f", &v[i].nota2);
        fflush(stdin);
    }
    calcularMediaPonderada(v);
}


void main(void){
    cadastrarAlunos(aluno);
    ordenar(aluno);
    exibir(aluno);
    ordenarPorNome(aluno);
    exibirReprovados(aluno);
    system("PAUSE");
}

1 answer

0

Fabio, the error you are asking about occurs due to what I believe is a typo, in the second loop of your Selection Sort. To correct, just leave as follows:

for(j = (i+1); j < tam; j++)

PS: the same problem happens in the void function orderPorName(Student *v).

Follows a reference: http://www.algolist.net/Algorithms/Sorting/Selection_sort

  • That’s right, thank you very much!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.