Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Onde está o erro neste código?


Posts recomendados

 Olá estou fazendo um trabalho no lazarus e queria saber por que n está dando certo

 

program Principal;
USES CRT;

VAR
contmenu, opcao: integer;

//Op. 2 ------------------------------------------------------------------------
n1, n2: integer;

//Op. 3 ------------------------------------------------------------------------
num: integer;


begin

 { DESENVOLVENDO MENU DE ACESSO}
     CONTMENU:=1;
     WHILE (CONTMENU = 1) DO
     BEGIN
          writeln ('MENU  DE ENTRADA');
          writeln (' 1 - Equipe');
          writeln (' 2 - Sistema sequencial');
          writeln (' 3 - Sistema de decisão');
          writeln (' 4 - Sistema de repeticao (enquanto)');
          writeln (' 5 - Sistema composto (decisão e enquanto)' );
          writeln (' 6 - Sistema composto (enquanto e decisão)' );
          writeln (' 7 - Sistema de repeticao (para)' );
          writeln (' 8 - Sistema composto (para e se)' );
          writeln (' 9 - Sistema composto (para e vetor)' );
          writeln ('10 - Sistema composto (matriz)' );
          writeln ('11 - Sair');
          writeln ('0 - Menu de entrada');
          write ('DIGITE O NUMERO DE OPCAO: ');
          read(OPCAO);

//Opção 11 Sair ----------------------------------------------------------------

           if (opcao = 11 ) then
          BEGIN
            contmenu:=0;
          end;

 //Opção 1 Equipe --------------------------------------------------------------

          if (OPCAO = 1 ) then
          begin
            writeln ('');
            writeln ('1 - Equipe');
            writeln ('ALUNO: Marcelo Rolim de Moura - Numero: 20');
             writeln ('');
          end;

//Opção 2 Sistema sequencial ---------------------------------------------------

           if (OPCAO = 2 ) then
          begin
           writeln('');
           writeln('2 - Ex. Sistema sequencial');
           writeln('');
           writeln('Digite primeiro numero');
           read(n1);
           writeln('Digite segundo numero');
           read(n2);
           writeln('a soma de ',n1,'+',n2,' e igual a ',n1+n2);
           writeln('');

          end;

//Opção 3 Sistema de decisão -------- AQUI ESTÀ O ERRO vvvvv ---------------------------------------------------

           if (opcao = 3 ) then
          begin
           writeln('');
           writeln('3 - Ex. Sistema de decisão');
           writeln('');
           writeln('digite um numero');
           read(num);

/////////////////////////////////////////////////////////////////
// o erro esta no else, mas n sei consertar ---------------------

                if (num > 0) then
               begin
                writeln(num,' e um número positivo');
                else
                writeln(num,'e um número negativo');
               end;

//----------------------------------------------------------------
//////////////////////////////////////////////////////////////////

            contmenu:=0;
           end;
          end;
     end;

readkey;

end.
              

 

 Na opção 3 tem um erro com o 'else' e n consigo encontrar como consertar isso

Agradeço desde ja.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Whillis    o erro é que precisa colocar begin e end antes do else e também depois do else, sendo que o primeiro end não pode ter ponto e vírgula .  veja como ficaria seu código :

/////////////////////////////////////////////////////////////////
// o erro esta no else, mas n sei consertar ---------------------

                if (num > 0) then
                begin
                  writeln(num,' e um número positivo');
                end
                 else
                begin
                  writeln(num,'e um número negativo');
                end;
                readkey;

//----------------------------------------------------------------
//////////////////////////////////////////////////////////////////

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá...

 

1) ESTRUTURA IF/ELSE

 

Ou pode ser assim:

    if (num > 0) then
      writeln(num,' e um n?mero positivo')
    else
      writeln(num,'e um n?mero negativo');
    contmenu:=0;

Pois o begin/end não é necessário quando se tem apenas uma instrução após o if ou else (ou while, ou for.. etc). A mesma regra vale para "não ter ';' antes do else.

 

 

 

 

2) CONDIÇÕES MUTUAMENTE EXCLUSIVAS

Quando opções são excludentes entre si, ou seja, "quando for uma, não poderá ser outra", é sugestionado o uso do else... como no caso de opcao. Já que, por exemplo, se for 2, não faz sentido verificar se é 3, se é 4.. etc. Ex.de como poderia ficar:

  if (opcao = 1) then
    begin

    end
  else
    if (opcao = 2) then
       begin
       
       end
  else
    if (opcao = 3) then
      begin

      end
  else
    if (opcao = 4) then
      begin

      end
.
.
.
  else
    if (opcao = 11) then
      begin

      end;

 

2.1) IF/ELSE  x  CASE

Se analisar o case, verás que ele não passa de uma espécie de conjunto de if/else de uma mesma variável... que é o caso acima, ou seja, ficaria muito mais elegante e prático o uso dele. Ex.:

  case opcao of
    1  :begin
    
        end;
    2  :begin
    
        end;
    3  :begin
    
        end;
    4  :begin
    
        end;
    5  :begin
    
        end;
    6  :begin
    
        end;
    7   :begin
    
        end;
    8  :begin
    
        end;
    9  :begin
    
        end;
    10 :begin
    
        end;
    11 :begin
    
        end;
    else
      begin //obs.: esse begin/end não é necessário na sintaxe do case, deixei apenas para ilustrar
      
      end;    
    end;

 

 

2.2)  ESCOPO MATEMÁTICO

No caso do seu if:

18 horas atrás, Whillis disse:

if (num > 0) then

Cuidado com essa  "negação" de positivo!!!! Ou seja, se o número não é maior que 0 ele é apenas "não positivo" que é diferente de ser negativo, pois nessa negação tem o 0 também!!!. Logo, um número teria 3 definições: positivo, nulo ou negativo.

 

obs. 1: a negação de ">" é "<=";

obs. 2: essas 3 definições também são excludentes entre si... (só pode ser um), logo precisaria de fato utilizar o else, a questão é que deveria ter mais um if/else para separar os 3.  (seria uma estrutura de 2 if e 2 else)

 

 

3) READ x READLN

Resumidamente: não user read, use apenas readln.

 

Um pouco sobre aqui:

 

 

***

 

No aguardo.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Em 2017-6-16 às 21:58, devair1010 disse:

@Whillis    o erro é que precisa colocar begin e end antes do else e também depois do else, sendo que o primeiro end não pode ter ponto e vírgula .  veja como ficaria seu código :


/////////////////////////////////////////////////////////////////
// o erro esta no else, mas n sei consertar ---------------------

                if (num > 0) then
                begin
                  writeln(num,' e um número positivo');
                end
                 else
                begin
                  writeln(num,'e um número negativo');
                end;
                readkey;

//----------------------------------------------------------------
//////////////////////////////////////////////////////////////////

 

Muito obriagado, estava realmente com problemas nesse problema tão simples.

adicionado 0 minutos depois
Em 2017-6-17 às 09:47, Simon Viegas disse:

Olá...

 

1) ESTRUTURA IF/ELSE

 

Ou pode ser assim:


    if (num > 0) then
      writeln(num,' e um n?mero positivo')
    else
      writeln(num,'e um n?mero negativo');
    contmenu:=0;

Pois o begin/end não é necessário quando se tem apenas uma instrução após o if ou else (ou while, ou for.. etc). A mesma regra vale para "não ter ';' antes do else.

 

 

 

 

2) CONDIÇÕES MUTUAMENTE EXCLUSIVAS

Quando opções são excludentes entre si, ou seja, "quando for uma, não poderá ser outra", é sugestionado o uso do else... como no caso de opcao. Já que, por exemplo, se for 2, não faz sentido verificar se é 3, se é 4.. etc. Ex.de como poderia ficar:


  if (opcao = 1) then
    begin

    end
  else
    if (opcao = 2) then
       begin
       
       end
  else
    if (opcao = 3) then
      begin

      end
  else
    if (opcao = 4) then
      begin

      end
.
.
.
  else
    if (opcao = 11) then
      begin

      end;

 

2.1) IF/ELSE  x  CASE

Se analisar o case, verás que ele não passa de uma espécie de conjunto de if/else de uma mesma variável... que é o caso acima, ou seja, ficaria muito mais elegante e prático o uso dele. Ex.:


  case opcao of
    1  :begin
    
        end;
    2  :begin
    
        end;
    3  :begin
    
        end;
    4  :begin
    
        end;
    5  :begin
    
        end;
    6  :begin
    
        end;
    7   :begin
    
        end;
    8  :begin
    
        end;
    9  :begin
    
        end;
    10 :begin
    
        end;
    11 :begin
    
        end;
    else
      begin //obs.: esse begin/end não é necessário na sintaxe do case, deixei apenas para ilustrar
      
      end;    
    end;

 

 

2.2)  ESCOPO MATEMÁTICO

No caso do seu if:

Cuidado com essa  "negação" de positivo!!!! Ou seja, se o número não é maior que 0 ele é apenas "não positivo" que é diferente de ser negativo, pois nessa negação tem o 0 também!!!. Logo, um número teria 3 definições: positivo, nulo ou negativo.

 

obs. 1: a negação de ">" é "<=";

obs. 2: essas 3 definições também são excludentes entre si... (só pode ser um), logo precisaria de fato utilizar o else, a questão é que deveria ter mais um if/else para separar os 3.  (seria uma estrutura de 2 if e 2 else)

 

 

3) READ x READLN

Resumidamente: não user read, use apenas readln.

 

Um pouco sobre aqui:

 

 

***

 

No aguardo.

 Nossa muito obrigado, você pode me tirar muitas duvidas sobre pascal!

  • Curtir 1
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...