Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Whillis

Pascal Onde está o erro neste código?

Recommended Posts

 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

Compartilhar este post


Link para o post
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;

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

 

Editado por devair1010
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Editado por Simon Viegas
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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

    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






    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

    ×