Ir ao conteúdo
  • Cadastre-se

Problemas de Notas Escolares em Pascal - Dúvida


Posts recomendados

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. 
 
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

Link para o comentário
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?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...