Ir ao conteúdo
  • Cadastre-se

Jorge Tadeu

Membro Júnior
  • Posts

    6
  • Cadastrado em

  • Última visita

Reputação

5
  1. Pessoal Agradeço a atenção. Vou implementar as mudanças e testar! Depois retorno com o resultado!
  2. Pessoal Após as alterações indicadas, o problema continua: 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("%[^\n]s", turma[i]->nome); // aqui o formato '%[^\n]s' é para ler um nome onde no mesmo tenha espaços. Ex: Jonas Borba limpa_linha(); // essa linha é 'ignorada' pelo compilador. O q a função faz é limpar o stdin, ou buffer printf("\nEntre com a matrícula:\n"); scanf("%[^\n]s", turma[i]->matricula); limpa_linha(); printf("\nEntre com a primeira nota:\n"); scanf("%f", &turma[i]->p1); limpa_linha(); printf("\nEntre com a segunda nota:\n"); scanf("%f", &turma[i]->p2); limpa_linha(); printf("\nEntre com a terceira nota:\n"); scanf("%f", &turma[i]->p3); limpa_linha(); printf("\nEntre com a quarta nota:\n"); scanf("%f", &turma[i]->p4); limpa_linha(); printf("\nExiste prova de recuperação? Digite S ou N\n"); scanf("%c", &rec); adicionado 1 minuto depois
  3. Novamente pára a execução na linha seguinte. Não solicita a primeira nota!!!
  4. Obrigado. Resolveu. Tô avançando:
  5. Obrigado. Fiz as correções, mas após inserir o primeiro nome, o programa não avança para a matrícula. Será que tem algum problema na definição dos ponteiros? adicionado 26 minutos depois Substituí scanf por gets: 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"); gets(turma[i]->nome); printf("\nEntre com a matrícula:\n"); gets(turma[i]->matricula); Na execução:
  6. 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; }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...