Jump to content
Fórum Script Brasil
  • 0

Struct Questao Duvida exercicio


Leonardo Prass
 Share

Question

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?

 

Edited by Leonardo Prass
Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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!

Edited by vangodp
Link to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.1k
×
×
  • Create New...