Ir para conteúdo
Fórum Script Brasil
  • 0

Struct Questao Duvida exercicio


Leonardo Prass

Pergunta

Programa que faz cadastro de alunos e consulta de notas Criar uma struct dados aluno com informações nome, numero de matrícula, notas do grau A, grau B, grau C, grau substituido e grau Final Criar um vetor para armazenar os dados de uma turma de alunos (máximo 30 alunos) Menu: Cadastrar aluno No cadastro, pedir as notas do grau A, grau B. Perguntar se o aluno fez recuperação. Se fez, pedir o grau substituido. Calcular o grau Final. Consultar nota: buscar pelo número de matrícula e exibir as notas Sair do programa

 

#include<iostream>

struct Notas {

float A;
float B;
float C;
int Matricula;
};
int main(){
char R;

 Notas Grau ;
do{

  std::cout<<"Digite  Nota Grau A: " ;//Equivale ao Grau 1.

   std::cin>>Grau.A ;

   std::cout<<"Digite Nota Grau B: " ;//Equivale ao Grau 2.

   std::cin >>Grau.B ;


   Grau.B=(Grau.B)*2; //Grau B Equivale a 2x o Grau A.

   if (Grau.A+Grau.B >18){

   std::cout<<"Parabens Voce Foi Aprovado!!!\n" ;
   return 0;
   }
   else{

   std::cout<<"\nSua Nota Foi Abaixo Da Media\n";
  std::cout<<"Digite Nota Grau C: \n" ;
   std::cin >>Grau.C ;}
std::cout<<"Deseja Subistituir a Nota do Grau A  Tecle [1] Ou \n Do Grau B Tecle [2] : "    ;
std::cin>>R ;

 switch(R){
 case ' 1':
    std::cout<<"\nA Sua Nota do grau C Foi Substituida Pela Nota Do Grau A Com Sucesso!";//Nota que foi Substituida.
     if (Grau.A+Grau.C >18){
     std::cout<<"\nParabens voce Foi Aprovado!!!" ;}
     else{std::cout<<"\nSua Nota Nao Foi Suficiente Voce Foi Reprovado!\n";}
 break;
 case '2':
     std::cout<<"A Sua Nota do grau C Foi Substituida Pela Nota Do Grau B Com Sucesso!\n";//Nota Que foi Substituids.
     if (Grau.A+Grau.C*2 >18){
     std::cout<<"\nParabens Voce Foi Aprovado!!!\n" ;}
     else{std::cout<<"\nSua Nota Nao Foi Suficiente Voce Foi Reprovado!\n";}
 break;
 }

 }while(R!='S');
    return 0;
}






A matricula Como faço ? POnteiros?

e não conseguir dar um limite de alunos, não é com o For?

outra quando ele e aprovado de primeira  acaba o programa o que eu uso no lugar do return?

para que recomece do inicio e não continue?

 

Editado por Leonardo Prass
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
//Programa que faz cadastro de alunos e consulta de notas Criar uma struct dados aluno com informações nome, numero de matrícula,
//notas do grau A, grau B, grau C, grau substituido e grau Final Criar um vetor para armazenar os dados de uma turma de alunos
//(máximo 30 alunos) Menu: Cadastrar aluno No cadastro, pedir as notas do grau A, grau B. Perguntar se o aluno fez recuperação.
//Se fez, pedir o grau substituido. Calcular o grau Final. Consultar nota: buscar pelo número de matrícula e exibir as notas Sair
//do programa

#include<stdio.h>
#include<iostream>

struct Notas {

char nome [30];
float A;
float B;
float C;
int Matricula;
};
int main(){
char R;
char op;

 Notas Grau ;
do{
std::cout<<"Para efetuar Seu Cadastro E Nessesario As Suas Notas,Seu Nome Completo\nE Sua Matricula.\n";
std::cout<<"\nPara Efetuar Seu Cadastro Digite C : ";
std::cin>>op;
fflush(stdin);
std::cout<<"\n";
switch(op){
case 'C':
std::cout<<"Digite Seu Nome Completo: \n";

std::cin.getline (Grau.nome,30);

std::cout<<"Digite Sua Matricula: \n";

std::cin>>Grau.Matricula;

std::cout<<"Digite  Nota Grau A: " ;//Equivale ao Grau 1.

std::cin>>Grau.A ;

std::cout<<"Digite Nota Grau B: " ;//Equivale ao Grau 2.

std::cin >>Grau.B ;


   Grau.B=(Grau.B)*2; //Grau B Equivale a 2x o Grau A.
break;
case 'c':
std::cout<<"Digite Seu Nome Completo: \n";

std::cin>>Grau.nome;

std::cout<<"Digite Sua Matricula: \n";

std::cin>>Grau.Matricula;

std::cout<<"Digite  Nota Grau A: " ;//Equivale ao Grau 1.

std::cin>>Grau.A ;

std::cout<<"Digite Nota Grau B: " ;//Equivale ao Grau 2.

std::cin >>Grau.B ;


   Grau.B=(Grau.B)*2; //Grau B Equivale a 2x o Grau A.
break;}
   if (Grau.A+Grau.B >18){

   std::cout<<"Parabens Voce Foi Aprovado!!!\n" ;
   return 0 ;
   }
   else{

   std::cout<<"\nSua Nota Foi Abaixo Da Media,Diga Sua Nota Da Recuperacao!\n";
  std::cout<<"Digite Nota Grau C: \n" ;
   std::cin >>Grau.C ;}
std::cout<<"Deseja Subistituir a Nota do Grau A  Tecle [1] Ou \n Do Grau B Tecle [2] : "    ;
std::cin>>R ;

 switch(R){
 case  '1':
    std::cout<<"\nA Sua Nota do grau C Foi Substituida Pela Nota Do Grau A Com Sucesso!";//Nota que foi Substituida.
     if (Grau.A+Grau.C >18){
     std::cout<<"\nParabens voce Foi Aprovado!!!\n\n" ;}
     else{std::cout<<"\nSua Nota Nao Foi Suficiente Voce Foi Reprovado!\n\n";}
 break;
 case '2':
     std::cout<<"A Sua Nota do grau C Foi Substituida Pela Nota Do Grau B Com Sucesso!\n";//Nota Que foi Substituids.
     if (Grau.A+Grau.C*2 >18){
     std::cout<<"Parabens Voce Foi Aprovado!!!\n\n" ;}
     else{std::cout<<"Sua Nota Nao Foi Suficiente Voce Foi Reprovado!\n\n";}
 break;
 }

 }while(R!='S');
    return 0;
}






já estou mais avançado em meu código porem não sei ainda como procurarei a matricula e com definir um limite de alunos a ser cadastrado

Link para o comentário
Compartilhar em outros sites

  • 0
//Programa que faz cadastro de alunos e consulta de notas Criar uma struct dados aluno com informações nome, numero de matrícula,
//notas do grau A, grau B, grau C, grau substituido e grau Final Criar um vetor para armazenar os dados de uma turma de alunos
//(máximo 30 alunos) Menu: Cadastrar aluno No cadastro, pedir as notas do grau A, grau B. Perguntar se o aluno fez recuperação.
//Se fez, pedir o grau substituido. Calcular o grau Final. Consultar nota: buscar pelo número de matrícula e exibir as notas Sair
//do programa

#include<stdio.h>
#include<iostream>
#include <stdlib.h>

struct Notas {

char nome [30];
float A;
float B;
float C;
int Matricula;
};
int main(){
char R;
char op;

Notas Grau ;

do{
std::cout<<"Para efetuar Seu Cadastro E Nessesario As Suas Notas,Seu Nome Completo\nE Sua Matricula.\n";

std::cout<<"\nPara Efetuar Seu Cadastro Digite C : ";
std::cin>>op;

fflush(stdin);//LIMPRA BUFEER.

std::cout<<"\n";

system("cls");

switch(op){

case 'C':

for(int i=0;i<3;i++){//Faz O Cadastro de 3 Alunos.

std::cout<<"Digite Seu Nome Completo: ";
std::cin.getline (Grau.nome,30);//Le O nome Por Completo.

std::cout<<"\n";

std::cout<<"Digite Sua Matricula: ";
std::cin>>Grau.Matricula;

std::cout<<"\n";

std::cout<<"Digite a Nota Do Grau A: " ;//Equivale ao Grau 1.
std::cin>>Grau.A ;

std::cout<<"\n";

std::cout<<"Digite A Nota Do Grau B: " ;//Equivale ao Grau 2.
std::cin >>Grau.B ;

fflush(stdin);//Limpa Buffer Do Teclado.

std::cout<<"\n\n";

Grau.B=(Grau.B)*2; //Grau B Equivale a 2x o Grau A.


   if (Grau.A+Grau.B >=18){//SE SOMATORIA DE SUA NOTA FOR MAIOR  OU IGUAL A 18 VC E APROVADO.

std::cout<<"Parabens Voce Foi Aprovado!!!\n" ;
return 0 ;
   }
else{//SE NÃO.

std::cout<<"\nSua Nota Foi Abaixo Da Media,Diga Sua Nota Da Recuperacao!\n\n";
std::cout<<"Digite A Nota Do Grau C: " ;
std::cin >>Grau.C ;}

std::cout<<"\n";

std::cout<<"Deseja Subistituir a Nota do Grau A  Tecle [1] Ou \n Do Grau B Tecle [2] : " ;
std::cin>>R;
break;}}//QUEBRA.

system("cls");//LIMPA A TELA.

std::cout<<"\n";

switch(R){
case  '1':
std::cout<<"\nA Sua Nota do grau C Foi Substituida Pela Nota Do Grau A Com Sucesso!";//Nota que foi Substituida.
if (Grau.A+Grau.C >=18){
std::cout<<"\nParabens voce Foi Aprovado!!!\n\n" ;}

else{
std::cout<<"\nSua Nota Nao Foi Suficiente Voce Foi Reprovado!\n\n";}

break;

case '2':
std::cout<<"\nA Sua Nota do grau C Foi Substituida Pela Nota Do Grau B Com Sucesso!\n";//Nota Que foi Substituida.

if (Grau.A+Grau.C*2 >=18){
std::cout<<"\nParabens Voce Foi Aprovado!!!\n\n" ;}
else{
std::cout<<"\nSua Nota Nao Foi Suficiente Voce Foi Reprovado!\n\n";}
break;
 }

}while(R!='S');//DIGITE S PARA SAIR.

return 0;
}






Esta quase la Porem AInda não consegui Efetuar pesquisa pelos os alunos e outra

quando uso o default nome menu ele não deveria retornar ao Inicio Do Mesmo?

Link para o comentário
Compartilhar em outros sites

  • 0

//Programa que faz cadastro de alunos e consulta de notas Criar uma struct dados aluno com informações nome, numero de matrícula,
//notas do grau A, grau B, grau C, grau substituido e grau Final Criar um vetor para armazenar os dados de uma turma de alunos
//(máximo 30 alunos) Menu: Cadastrar aluno No cadastro, pedir as notas do grau A, grau B. Perguntar se o aluno fez recuperação.
//Se fez, pedir o grau substituido. Calcular o grau Final. Consultar nota: buscar pelo número de matrícula e exibir as notas Sair
//do programa

#include<stdio.h>
#include<iostream>
#include <stdlib.h>
#include <time.h>

struct Notas {

char nome [30];
float A;
float B;
float C;
int Matricula;
};
int main(){
char R;
char op;

Notas Grau ;

do{
std::cout<<"Para efetuar Seu Cadastro E Nessesario As Suas Notas,Seu Nome Completo\nE Sua Matricula.\n";

std::cout<<"\nPara Efetuar Seu Cadastro Digite C : ";
std::cin>>op;

fflush(stdin);//LIMPRA BUFEER.

std::cout<<"\n";

system("cls");

switch(op){

case 'C':

for(int i=0;i<3;i++){//Faz O Cadastro de 3 Alunos.

std::cout<<"Digite Seu Nome Completo: ";
std::cin.getline (Grau.nome,30);//Le O nome Por Completo.

std::cout<<"\n";

std::cout<<"Digite Sua Matricula: ";
std::cin>>Grau.Matricula;

std::cout<<"\n";

std::cout<<"Digite a Nota Do Grau A: " ;//Equivale ao Grau 1.
std::cin>>Grau.A ;

std::cout<<"\n";

std::cout<<"Digite A Nota Do Grau B: " ;//Equivale ao Grau 2.
std::cin >>Grau.B ;

fflush(stdin);//Limpa Buffer Do Teclado.

std::cout<<"\n\n";

Grau.B=(Grau.B)*2; //Grau B Equivale a 2x o Grau A.


   if (Grau.A+Grau.B >=18){//SE SOMATORIA DE SUA NOTA FOR MAIOR  OU IGUAL A 18 você E APROVADO.

std::cout<<"PARABENS VOCE FOI APROVADO!!!\n" ;

_sleep(2000);//DOIS SEGUNDOS ATE DAR UMA QUEBRA.
break;
   }
else{//SE NÃO.

std::cout<<"\nSua Nota Foi Abaixo Da Media,Diga Sua Nota Da Recuperacao!\n\n";
std::cout<<"Digite A Nota Do Grau C: " ;
std::cin >>Grau.C ;}

std::cout<<"\n";

std::cout<<"Deseja Subistituir a Nota do Grau A  Tecle [1] Ou \n Do Grau B Tecle [2] : " ;
std::cin>>R;
break;}}//QUEBRA.

system("cls");//LIMPA A TELA.

std::cout<<"\n";

switch(R){
case  '1':
std::cout<<"\nA Sua Nota do grau C Foi Substituida Pela Nota Do Grau A Com Sucesso!";//Nota que foi Substituida.
if (Grau.A+Grau.C >=18){
std::cout<<"\nParabens voce Foi Aprovado!!!\n\n" ;}

else{
std::cout<<"\nSua Nota não Foi Suficiente Voce Foi Reprovado!\n\n";}

break;

case '2':
std::cout<<"\nA Sua Nota do grau C Foi Substituida Pela Nota Do Grau B Com Sucesso!\n";//Nota Que foi Substituida.

if (Grau.A+Grau.C*2 >=18){
std::cout<<"\nParabens Voce Foi Aprovado!!!\n\n" ;_sleep(4000);
system("cls");}

else{
std::cout<<"\nSua Nota não Foi Suficiente Voce Foi Reprovado!\n\n";
_sleep(4000);
system("cls");}
break;

 }

}while(op!='S');//DIGITE S PARA SAIR.

return 0;
}

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

fflush ( stdin ); não é a forma adequada para limpar o buffer nunca. Isso é uma gambiarra XDDD

fflush foi concebido para trabalhar com o buffer de saída(stdout). O fato de que ele funcione com stdin é pura sorte, pois essa função em particular pode dar resultados imprevistos, e não sou eu quem falou não, si não os próprios caras que criaram ela.

Em C++ estamos de sorte pois temos algo mais "padrão" para isso, me estou referindo a um método  membro da classe cin chamado sync. Logo depois que você fizer um cin >> algo;, chame o método cin.sync(); justo na linha seguinte.

A função fflush pode dar ainda mais erros quando se tratar de strings.

 

Agora vamos ao tema principal.

Programa que faz cadastro de alunos...

 Ao se tratar de "alunos" suponho que sua estrutura representa um aluno. Sendo assim não é o metodo correto de abordar o problema. O que você precisa é de um vetor de alunos, algo como isso:

struct Notas {
    char nome [30];
    float A;
    float B;
    float C;
    int Matricula;
};

int main(){
    Notas aluno[30];
    ...

Então nesse caso você dispõe de 30 alunos máximo tal como pediu no seu enunciado. Para mudar o nome do primeiro aluno seria algo como: cin >> aluno[0].nome; . E para mudar o nome do ultimo seria: cin >> aluno[29].nome. Dai já da para ter uma ideia de como mudar o resto dos dados.

Para a tal pesquisa que você necessita, você tem que percojer todos os alunos e comparar com o que você estiver buscando, algo tipo:
 

int i = 0;
while (   i < 30 ){
    if (  strcmp( aluno[i].nome, nomeBuscado){
        //encontrado!!!
        break;
    }
    i++;
}

Com isso você encontra o nome no meio de 30 alunos. =) Tente implementar isso.

Sorte!

Editado por vangodp
Link para o comentário
Compartilhar em outros sites

  • 0

e sobre fflush quem mandou utilizar foi o proprio professor pra ver a qualidade de ensino.

Acontece mais do que você pode pensar, faça sempre o que ele diz, mas tenha claro que seu professor se formou quando os monitores ainda eram de fósforo, na época do catapum chimpum, muito coisa mudou desde então.>_<

O fato é que C/C++ não tem uma forma padrão para limpar o buffer, a única forma de limpar, é lendo os tais caracteres, para isso existe uma soluçao muito interesante circulando por internet que você pode usar e ela funciona na maioria(si não en todos) os sistemas operativos. Se trata disso:

//funcion que vacia el buffer
void flush_in() {
    int ch;
    while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ) {}
}

 

Em C++ você pode invocar a cin.sync(); logo depois de usar o stdin e funciona muito bem.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...