Ir ao conteúdo
  • Cadastre-se
sTokesX

Problemas de Notas Escolares em Pascal - Dúvida

Recommended Posts

Fala galera! É o seguinte, estou no 2º grau do Ensino Médio e com o final das notas escolares, eu resolvi tentar criar um pequeno algoritmo em pascal que apenas de colocar o resultado do 4º Bimestre, ele calcula o resultado do ano inteiro e me diz se passei ou não, em determinada matéria.

 

Eu criei 2 variáveis: uma para Português (ValPortugues), e uma para Matemática (ValMatematica), que recebem o total dos meus 3 Bimestres. Já as variáveis QPortugues e QMatematica, recebem o valor do 4º Bimestre.

 

Porém, o problema que estou tendo é que ao executar o programa e escolher o número 2, além de executar o cálculo de MATEMÁTICA, ele também executa o bloco de Português.

 

Creio eu que isso seja um erro bem bobo, mas estou há 3 dias tentando solucionar esse problema e não consigo. Comecei a aprender Pascal na semana passada, ainda não consegui obter aquela "lógica" da programação. Isso foi o máximo que consegui fazer:

 

Programa em execução e ao escolher número 2 (Matemática):

 

 
10863645_1583884155166274_145711105_n.jp
 

Código até o momento:

uses  SysUtils;  Var ValPortugues, ValMatematica, ValBiologia, ValGeografia,      QPortugues, QMatematica, QBiologia, QGeografia: Real;      Escolha: Integer;begin  Writeln('====== Programa de Notas Escolares - 4 bimestre ======');  Writeln('Digite o numero da materia que deseja calcular: ');  Writeln(' 1 - Portugues');  Writeln(' 2 - Matematica');  Writeln(' 3 - Biologia');  Writeln(' 4 - Geografia');  Readln(Escolha);     {Portugues}   If Escolha = 1 Then    Begin      Writeln(' ===== Portugues ===== ');      Writeln('* Digite a nota do 4 bimestre: ');      Readln(QPortugues);      ValPortugues := 22;      ValPortugues := ValPortugues + QPortugues;    End;     If ValPortugues < 20 Then      Begin        Writeln('* REPROVADO *');        Writeln('** O total de pontos ao ano foi de ',ValPortugues:2:2,' Pontos.');      End;     If ValPortugues >= 20 Then      Begin        Writeln('* APROVADO * ');        Writeln('** O total de pontos ao ano foi de ',ValPortugues:2:2,' Pontos.');        Readln;      End;      {Matematica}   If Escolha = 2 Then    Begin      Writeln(' ===== Matematica ===== ');      Writeln('Digite a nota do 4 bimestre: ');      Readln(QMatematica);      ValMatematica := 16;      ValMatematica := ValMatematica + QMatematica;      Writeln('O total de pontos ao ano foi de ',ValMatematica:2:2,' Pontos.');      Readln;    End;     If ValMatematica < 20 Then      Begin        Writeln('* REPROVADO *');        Writeln('** O total de pontos ao ano foi de ',ValMatematica:2:2,' Pontos.');      End;     If ValMatematica >= 20 Then      Begin        Writeln('* APROVADO * ');        Writeln('** O total de pontos ao ano foi de ',ValMatematica:2:2,' Pontos.');        Readln;      End;    Readln; end. 
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá. Vamos aos pontos:

1) IDENTAÇÃO
Mantenha o seu código sempre bem identado. E evite esses espaços entre as linhas, creio que só faz atrapalhar.

Abaixo o seu código no meu padrão de identação:

uses  SysUtils;Var   ValPortugues, ValMatematica, ValBiologia, ValGeografia,  QPortugues, QMatematica, QBiologia, QGeografia: Real;  Escolha: Integer;BEGIN  Writeln('====== Programa de Notas Escolares - 4 bimestre ======');  Writeln('Digite o numero da materia que deseja calcular: ');  Writeln(' 1 - Portugues');  Writeln(' 2 - Matematica');  Writeln(' 3 - Biologia');  Writeln(' 4 - Geografia');  Readln(Escolha);  {Portugues}  If Escolha = 1 Then    begin    Writeln(' ===== Portugues ===== ');    Writeln('* Digite a nota do 4 bimestre: ');    Readln(QPortugues);    ValPortugues := 22;    ValPortugues := ValPortugues + QPortugues;    End;  If ValPortugues < 20 Then    Begin    Writeln('* REPROVADO *');    Writeln('** O total de pontos ao ano foi de ',ValPortugues:2:2,' Pontos.');    End;  If ValPortugues >= 20 Then    Begin    Writeln('* APROVADO * ');    Writeln('** O total de pontos ao ano foi de ',ValPortugues:2:2,' Pontos.');    Readln;    End;  {Matematica}  If Escolha = 2 Then    Begin    Writeln(' ===== Matematica ===== ');    Writeln('Digite a nota do 4 bimestre: ');    Readln(QMatematica);    ValMatematica := 16;    ValMatematica := ValMatematica + QMatematica;    Writeln('O total de pontos ao ano foi de ',ValMatematica:2:2,' Pontos.');    Readln;    End;  If ValMatematica < 20 Then    Begin    Writeln('* REPROVADO *');    Writeln('** O total de pontos ao ano foi de ',ValMatematica:2:2,' Pontos.');    End;  If ValMatematica >= 20 Then    Begin    Writeln('* APROVADO * ');    Writeln('** O total de pontos ao ano foi de ',ValMatematica:2:2,' Pontos.');    Readln;    End;  Readln;END.

2) SEPARAÇÃO POR BLOCOS
O que está faltando é separar as matérias, ou seja, cada uma delas "deve" está dentro do seu respectivo "controle", no caso, seu "if".

Algo assim:
 


{Portugues}If Escolha = 1 Then    begin        //AQUI TUDO DE PORTUGUÊS    End;  {Matematica}else  If Escolha = 2 Then    begin    //AQUI TUDO DE MATEMÁTICA    end;  {Biologia}else  If Escolha = 3 thne    begin    //AQUI TUDO DE BIOLOGIA    end;//por ai vai.....

Deu para entender?

***

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

2) SEPARAÇÃO POR BLOCOS

O que está faltando é separar as matérias, ou seja, cada uma delas "deve" está dentro do seu respectivo "controle", no caso, seu "if".

 

 

Obrigado pela resposta! Porém, ainda estou tendo problemas com o código. No caso, eu queria usar um "If" que me avisasse se passei ou não, com o número total de pontos que acumulei durante o ano.

Segue o código abaixo de Português:

{Portugues}  If Escolha = 1 Then    Begin      Writeln(' ===== Portugues ===== ');      Writeln('* Digite a nota do 4 bimestre: ');      Readln(QPortugues);      ValPortugues := 22;      ValPortugues := ValPortugues + QPortugues;    End     If ValPortugues < 20 Then      Begin        Writeln('* REPROVADO *');        Writeln('** O total de pontos ao ano foi de ',ValPortugues:2:2,' Pontos.');      End          If ValPortugues >= 20 Then      Begin        Writeln('* APROVADO * ');        Writeln('** O total de pontos ao ano foi de ',ValPortugues:2:2,' Pontos.');        Readln;      End;

Entendeu o meu ponto? Não teria alguma forma de usar um "If" dentro de "If"? 

 

Ex:

       

Se Escolher = 1 Faça          Início            {PORTUGUES AQUI}          Fim                  Se ValorPortugues >= 20 Faça                    Início                     {APROVADO}                    Fim                      Se ValorPortugues < 20 Faça                       Início                         {REPROVADO}                      Fim   

Seria possível algo desse tipo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Não tem problema algum em «usar um "If" dentro de "If"?». O if ("se" em inglês) é apenas uma estrutura de "seleção", ou seja, "se" a condição, que está atrelada ao comando, for verdadeira (true), a linha (comando) que vem depois dele vai ser executada.

Ex.:

If (Escolha = 1) Then //o que está em parênteses  begin //<-- essa é a próxima linha, ou seja, "o início de um bloco". Logo, vai executar o que contém nele!  //aqui dentro fica tudo que você considera que deve ficar. Nesse contexto, fica tudo relacionado a essa disciplina  //EX.:  writeln(' ===== Portugues ===== ');  writeln('* Digite a nota do 4 bimestre: ');  readln(QPortugues);  ValPortugues := 22;  ValPortugues := ValPortugues + QPortugues;  if ValPortugues < 20 Then    begin    writeln('* REPROVADO *');    writeln('** O total de pontos ao ano foi de ',ValPortugues:2:2,' Pontos.');    end    //etc...   end; //<-- no caso, aqui é o fim desse bloco

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

Então Simon, eu fiz o que você disse, porém deu erro no código.

 

Segue abaixo o meu código:

begin   Writeln('====== Programa de Notas Escolares - 4 bimestre ======');  Writeln('Digite o numero da materia que deseja calcular: ');  Writeln(' 1 - Portugues');  Writeln(' 2 - Matematica');  Writeln(' 3 - Biologia');  Writeln(' 4 - Geografia');  Readln(Escolha);     {Portugues}  If (Escolha = 1) Then    Begin      Writeln(' ===== Portugues ===== ');      Writeln('* Digite a nota do 4 bimestre: ');      Readln(QPortugues);      ValPortugues := 22;      ValPortugues := ValPortugues + QPortugues;    If ValPortugues < 20 Then      Begin        Writeln('* REPROVADO *');        Writeln('** O total de pontos ao ano foi de ',ValPortugues:2:2,' Pontos.');        End     If ValPortugues >= 20 Then {ERRO AQUI}      Begin        Writeln('* APROVADO * ');        Writeln('** O total de pontos ao ano foi de ',ValPortugues:2:2,' Pontos.');        Readln;        End;      {Matematica}  If (Escolha = 2) Then    Begin      Writeln(' ===== Matematica ===== ');      Writeln('Digite a nota do 4 bimestre: ');      Readln(QMatematica);      ValMatematica := 16;      ValMatematica := ValMatematica + QMatematica;    If ValMatematica < 20 Then      Begin        Writeln('* REPROVADO *');        Writeln('** O total de pontos ao ano foi de ',ValMatematica:2:2,' Pontos.');        Readln;       End    If ValMatematica >= 20 Then {ERRO AQUI}      Begin        Writeln('* APROVADO * ');        Writeln('** O total de pontos ao ano foi de ',ValMatematica:2:2,' Pontos.');       Readln;       End;end. {ERRO AQUI} 

Marquei os erros que obtive.

Muito obrigado pelas respostas! Não sabia que eu poderia usar um if dentro de If. Essa é nova pra mim. rsr

 

Estou no aguardo, abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Revise com calma. Sugiro se atentar a alguns pontos:

 

1) Sempre mantenha seu código bem identado!! (Idente, e logo verá o que está "errado").

2) faça uma disciplina de cada vez; (você não precisa fazer tudo de uma vez... e nem deve).

3) durante o desenvolvimento, vá testando a compilação, ou seja, a sintaxe SEMPRE TEM QUE ESTÁ COMPILÁVEL. E vai preenchendo para criar lógica. (a dica é simples: se abriu um BEGIN, já coloque o seu END), ex.:

uses  SysUtils;  Var    ValPortugues, ValMatematica, ValBiologia, ValGeografia,    QPortugues, QMatematica, QBiologia, QGeografia: Real;    Escolha: Integer;BEGINEND.

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×