Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Problema com "ELSE" no Pascal.


Posts recomendados

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.

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...