Pessoal,
Tô começando em C++ e tentei fazer um pequeno programa para cadastro de alunos numa turma, cadastro de notas, substituição da menor nota pela nota de recuperação, e impressão 2 relatórios: um geral, e outro com relação de aprovados, para aqueles com média superior a 5,0. Após compilação no dev c++, o programa executa apenas a primeira linha e pára. Podem analisar e sugerir correções, por favor?
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct turma{ /* definição de registro */
char nome[80];
char matricula[5];
float p1;
float p2;
float p3;
float p4;
float r;
float media;
};
typedef struct turma Aluno;
#define MAX 30
Aluno* turma[MAX];
void inicializa (int n, Aluno** turma){
int i;
for (i=0; i<n; i++)
turma[i]=NULL;
}
void preenche (int n, Aluno** turma, int i){ /* cadastro de alunos, matrículas e notas */
float p1,p2,p3,p4,r;
char rec;
if (i<0 || i>=n){
printf("\nIndice fora do limite do vetor\n");
exit(1);
}
if (turma[i==NULL])
turma[i]=(Aluno*)malloc(sizeof(Aluno));
printf("\nEntre com o nome:\n");
scanf("%c", &turma[i]->nome);
printf("\nEntre com a matrícula:\n");
scanf("%c", &turma[i]->matricula);
printf("\nEntre com a primeira nota:\n");
scanf("%f", &turma[i]->p1);
printf("\nEntre com a segunda nota:\n");
scanf("%f", &turma[i]->p2);
printf("\nEntre com a terceira nota:\n");
scanf("%f", &turma[i]->p3);
printf("\nEntre com a quarta nota:\n");
scanf("%f", &turma[i]->p4);
printf("\nExiste prova de recuperação? Digite S ou N\n");
scanf("%c", &rec);
switch (rec){
case 'S':
printf("\nEntre com a nota de recuperação:\n");
scanf("%f", &turma[i]->r);
break;
case 'N':
printf("\nOk\n");
break;
default:
printf("\nDigite apenas S ou N\n");
break;
}
if (r!=NULL) /* substituição de nota de recuperação pela menor nota */
if (p1<p2)
if (p1<p3)
if (p1<p4)
p1=r;
else
p4=r;
else
if (p3<p4)
p3=r;
else
p4=r;
else
if (p2<p3)
if (p2<p4)
p2=r;
else
p4=r;
else
if (p3<p4)
p3=r;
else
p4=r;
else
exit (1);
}
void imprime (int n, Aluno** turma, int i){ /* impressão de relatório geral */
if (i<0 || i>=n){
printf("Indice fora do limite do vetor\n");
//exit(1);
return;
}
float media;
float p1,p2,p3,p4;
media=(p1*1+p2*2+p3*3+p4*4)/10;
if (turma[i]!=NULL){
printf("\nMatrícula: %c\n", turma[i]->matricula);
printf("\nNome:%c\n", turma[i]->nome);
printf("\nNota 1:%f", turma[i]->p1);
printf("\nNota 2:%f", turma[i]->p2);
printf("\nNota 3:%f", turma[i]->p3);
printf("\nNota 4:%f", turma[i]->p4);
printf("\nMédia:%f", turma[i]->media);
printf("\n\n");
}
}
void imprime_aprovados (int n, Aluno** turma, int i){ /* impressão de relatório de aprovados */
if (i<0 || i>=n){
printf("Indice fora do limite do vetor\n");
//exit(1);
return;
}
float soma;
float media;
float p1,p2,p3,p4;
float mediasala;
media=(p1*1+p2*2+p3*3+p4*4)/10;
soma=0;
for (i=0; i<n; i++){
soma=soma+turma[i]->media;
}
mediasala=(soma/n);
for (i=0; i<n; i++){
if (media>5,0){
imprime (30, turma, 0);
printf("\nMatrícula:%c", turma[i]->matricula);
printf("\nNome:%c", turma[i]->nome);
printf("\nMédia:%f", turma[i]->media, "Aprovado");
}
else
return;
}
}
int main() {
float mediasala;
system ("cls");
printf ("\n%c\n", "SISTEMA DE GERENCIAMENTO DE NOTAS");
preenche(30, turma,0);
imprime (30, turma,0);
imprime_aprovados(30, turma,0);
printf("\nMédia da classe:%f", mediasala);
system("PAUSE");
return 0;
}