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:  
PascalMen

Pascal Problema com "ELSE" no Pascal.

Recommended Posts

Estava treinando no Pascal, então decidi criar uma calculadora, apenas para testar, porém o programa está encontrando um erro de "ELSE" no código. Poderiam me ajudar?

Irei selecionar a parte em que o programa diz que está errado.

O erro diz o seguinte: "ELSE não esperado".

 

SEGUE O CÓDIGO:

Program Calculadora; //NomeDoPrograma
var //Variáveis
 opcao:integer;
 opcao2:integer;
 resposta1:real;
 resposta2:real;
 num1,num2:real;
 resposta:real;
 termo1:real;
 termo2:real;

Begin
writeln('========= EXEMPLO DE PROGRAMA ==========');
writeln('PROGRAM MADE BY: JÃO');
writeln('Para usar o Programa, basta digitar a opcao de calculo.');
writeln('[ 1 ] Adicao');
writeln('[ 2 ] Subtracao');
writeln('[ 3 ] Multiplicacao');
writeln('[ 4 ] Divisao');
writeln('[ 5 ] Para mais informações do programa.');
writeln('E ai?');
read(opcao);
//Adicao
if opcao=1 then
clrscr;
Begin
writeln('Digite o primeiro numero da adicao:');
read(num1);
writeln('Digite o segundo numero da adicao:');
read(num2);
resposta:=(num1+num2);
writeln('Resposta: ',' ', round(resposta));
end

//Subtracao
 else if opcao=2 then
 begin
 writeln('Digite o primeiro número da subtração:');
 read(num1);
 writeln('Digite o segundo número da subtração:');
 read(num2);
 resposta:=(num1-num2);
 writeln('Resposta:',' ',round(resposta));
 end
End.

 

Editado por Simon Viegas
Inserir tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá. Seja bem vindo ao Fórum do Clube do Hardware.

 

O problema está no ClrSlr fora do lugar!!! ^_^

 

 

 

Vou tentar explicar o que o ocorreu e como você poderia identificar onde está o problema.

 

 

Vamos lá:
 

5 horas atrás, PascalMen disse:

porém o programa está encontrando um erro de "ELSE" no código

Na verdade o erro em si não é no else  (supostamente), mas na falta de ";" depois do end. Compilei seu código aqui e deu a seguinte mensagem:

_FCdH.PAS(38,2) Fatal: Syntax error, ";" expected but "ELSE" found

Ou seja, acusa que ficou faltando um ";" depois do end. Entende inglês ou inglês instrumental? caso não, bota no Google Translator e aos poucos vai se acostumando. O erro está dizendo que "esperada um ";", mas encontrou um ELSE". Pois, quando um comando que precisa de ";" não tem esse ";" acusa essa mensagem. Faça um teste tirando um ";" qualquer. A palavra "else" está no erro apenas porque esse foi o próximo comando (ou não. Vide Adendo mais a baixo)... experimente colocar outro comando qualquer, por exemplo um writeln (daria "Fatal: Syntax error, ";" expected but "identifier WRITELN" found"). Entende? O Compilador precisa de ";", mas encontrou outra coisa. O erro está sugerindo isso.

 

Ah! Mas como assim? antes do ELSE do if não tem ";"! Certo? Certo! Entretanto só existe else se tive um if  (ou um case) para ele se associar, ou seja, mesmo que se fosse colocado um ";" ali antes do end, como sugere a mensagem,  continuaria a dar erro... pois esse else não está vinculado a nada. Veja:

 

5 horas atrás, PascalMen disse:

//Adicao
if opcao=1 then
clrscr;
Begin
writeln('Digite o primeiro numero da adicao:');
read(num1);
writeln('Digite o segundo numero da adicao:');
read(num2);
resposta:=(num1+num2);
writeln('Resposta: ',' ', round(resposta));
end

Perceba que existe um comando, o ClrScr, entre o if e o begin que supostamente seria desse if. Dessa forma, o if  ficou apenas para o ClrScr, e o begin/end ficou "solto" (sem vínculo com o if). Logo, após o end de fato precisaria de um ";" e aquele else não poderia está ali.

 

RESUMINDO: Para corrigir, apenas tire o ClrScr dali ou o reposicione... para depois do begin ou antes do if ou onde quiser.. O if só se importa com o que vem depois do then. (ou a um comando, como foi o caso, ou a um bloco de comandos, como você quer).

 

Adendo: uma curiosidade... Coincidentemente quando um else não tem um vínculo associado, apresenta a mesma mensagem de erro: "Fatal: Syntax error, ";" expected but "ELSE" found". Por exemplo:

Begin
writeln('========= EXEMPLO DE PROGRAMA ==========');
writeln('PROGRAM MADE BY: JÃO');
else
writeln('Para usar o Programa, basta digitar a opcao de calculo.');
writeln('[ 1 ] Adicao');

Percebe que inseri um else perdido ali... Vai dar o mesmo erro (vá entender!)... mesmo existindo um ";" depois do writeln() ou não, ou seja, o erro não será específico, como "esse else não tem vínculo" ou "não encontrado if ao qual o else deveria está querendo se referir"... Teria que interpretar o contexto. Esse trecho acima dará o mesmo erro que está dando no seu código. Mas, com sugerido, acho que primeiramente se refere ao não ter ";" no seu, ou seja, ao ver o erro, você deveria inserir o ";", ai veria que daria o mesmo erro, daí perceberia que tem algo errado e acabaria posteriormente descobrindo que essa confusão toda só existiu porque tinha um comando entre o if e o begin.

 

 

No aguardo.

adicionado 10 minutos depois

UPDATE:

 

 

Adendo 2:

Mantenha seu código sempre indentado. Por exemplo:

Program Calculadora; //NomeDoPrograma
uses
  CRT;
var //Variáveis
  opcao:integer;
  opcao2:integer;
  resposta1:real;
  resposta2:real;
  num1,num2:real;
  resposta:real;
  termo1:real;
  termo2:real;
Begin
writeln('========= EXEMPLO DE PROGRAMA ==========');
writeln('PROGRAM MADE BY: JÃO');
writeln('Para usar o Programa, basta digitar a opcao de calculo.');
writeln('[ 1 ] Adicao');
writeln('[ 2 ] Subtracao');
writeln('[ 3 ] Multiplicacao');
writeln('[ 4 ] Divisao');
writeln('[ 5 ] Para mais informações do programa.');
writeln('E ai?');
read(opcao);
if opcao=1 then //Adicao
  clrscr;
Begin
writeln('Digite o primeiro numero da adicao:');
read(num1);
writeln('Digite o segundo numero da adicao:');
read(num2);
resposta:=(num1+num2);
writeln('Resposta: ',' ', round(resposta));
end
else
  if opcao=2 then //Subtracao
    begin
    writeln('Digite o primeiro número da subtração:');
    read(num1);
    writeln('Digite o segundo número da subtração:');
    read(num2);
    resposta:=(num1-num2);
    writeln('Resposta:',' ',round(resposta));
    end
End.

Perceba que só por está indentado, fica visível que ali no if da "adição" tem um "ClrScr" fora do lugar OU que esse begin/end  depois do ClrScr não deveria existir, pois antes dele não tem nenhum comando que precisa de begin/end... Mas como tem um Else mais baixo, veria logo que o problema era de fato no "ClrSrc".

 

Obs.: esse penúltimo end também precisa de ";". (mesmo que vá funcionar sem devido ao outro end que vem depois)

 

 

Qualquer dúvida é só pergunta.

 

Abraços

Editado por Simon Viegas

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

×