Problem in Language C, Program does not respond

0

I have a problem with my C program, and in the second note of the second student the program stops responding. Follow the code explaining 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");
}
    
asked by anonymous 04.04.2016 / 03:26

1 answer

0

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

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

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

Below is a reference: link

    
04.04.2016 / 04:56