Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Anderson1986

Erro Case Pascal

Recommended Posts

Ola amigos do forum

Estou criando um programa que calcula as 4 operaçoes aritmeticas, so que com o uso de CASE para escolher a opção do tipo de calculo, o codigo é o seguinte:

Program Menu;

Uses Crt;

Var Num1, Num2:Real;

Opcao:Char;

Begin

Clrscr;

Writeln('Digite o Primeiro Numero:');

Readln(Num1);

Writeln('Digite o Segundo Numero:');

Readln(Num2);

Writeln('Menu');

Writeln('[1] Adição');

Writeln('[2] Subtração');

Writeln('[3] Multiplicação');

Writeln('[4] Divisão');

Writeln('[5] Fim');

Writeln('Digite a Opção:');

Readln(Opcao);

Case opcao of

+:Writeln('A Adição:', Num1+Num2:0:0);

-:Writeln('A Subtração:', Num1-Num2:0:0);

*:Writeln('A Multiplicão:', Num1*Num2:0:0);

/:Writeln('A Divisão:', Num1/Num2:0:0);

F:Writeln('FIM');

Else

Writeln('Opção Inválida');

End;

End.

Só que deram os seguintes erros:

(21,2) Error: Illegal expression

(21,3) Error: Constant Expression expected

(21,3) Fatal: Syntax error, ":" expected but "identifier WRITELN" found

(0) Fatal: Compilation aborted

Compartilhar este post


Link para o post
Compartilhar em outros sites

O cara beleza.

O case trabalha somente com operação ordinal. Portanto, como você definiu opção como char basta fazer o seguinte:

substituir a linha

Readln(Opcao);

pela linha

Opcao := readkey;

Substituir a seguinte instrução dentro do case, seu case fica assim:

Case opcao of

'1':Writeln('A Adição:', Num1+Num2:0:0);

'2':Writeln('A Subtração:', Num1-Num2:0:0);

'3':Writeln('A Multiplicão:', Num1*Num2:0:0);

'4':Writeln('A Divisão:', Num1/Num2:0:0);

'5':Writeln('FIM');

Else

Writeln('Opção Inválida');

End;

End.

A função readkey está definida na biblioteca Pascal e retorna o caracter pressionado.

Faz ai funciona com certeza.

Valeu e posta ai o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza.

O Programa até funcionou, eu consigo digitar os os numeros a serem somados, mas quando escolho a opção de um dos calculos o programa fecha e nao da o resutado

o codigo ficou assim

Program Menu;

Uses Crt;

Var Num1, Num2:Real;

Opcao:Char;

Begin

Clrscr;

Writeln('Digite o Primeiro Numero:');

Readln(Num1);

Writeln('Digite o Segundo Numero:');

Readln(Num2);

Writeln('Menu');

Writeln('[1] Adição');

Writeln('[2] Subtração');

Writeln('[3] Multiplicação');

Writeln('[4] Divisão');

Writeln('[5] Fim');

Writeln('Digite a Opção:');

Readln(Opcao);

Opcao:=Readkey;

Case opcao of

'1':Writeln('A Adição:', Num1+Num2:0:0);

'2':Writeln('A Subtração:', Num1-Num2:0:0);

'3':Writeln('A Multiplicação:', Num1*Num2:0:0);

'4':Writeln('A Divisão:', Num1/Num2:0:0);

'5':Writeln('FIM');

Else

Writeln('Digite a Opção');

End;

End.

Compartilhar este post


Link para o post
Compartilhar em outros sites
O cara beleza.

O case trabalha somente com operação ordinal. Portanto, como você definiu opção como char basta fazer o seguinte:

substituir a linha

Readln(Opcao);

pela linha

Opcao := readkey;

Substituir a seguinte instrução dentro do case, seu case fica assim:

A função readkey está definida na biblioteca Pascal e retorna o caracter pressionado.

Faz ai funciona com certeza.

Valeu e posta ai o resultado.

Valeu warlockplus

A forma que voce falou deu certo, o problema e que eu tinha esquecido o read ln; no final

Obrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

da resultado sim.

o que esta ocorrendo e que você não colocou um ponto de parada para verificar o resultado.

você pode fazer assim, usando um readkey no final para ver a saida

Program Menu;

Uses Crt;

Var Num1, Num2:Real;

Opcao:Char;

Begin

Clrscr;

Writeln('Digite o Primeiro Numero:');

Readln(Num1);

Writeln('Digite o Segundo Numero:');

Readln(Num2);

Writeln('Menu');

Writeln('[1] Adição');

Writeln('[2] Subtração');

Writeln('[3] Multiplicação');

Writeln('[4] Divisão');

Writeln('[5] Fim');

Writeln('Digite a Opção:');

Readln(Opcao);

Opcao:=Readkey;

Case opcao of

'1':Writeln('A Adição:', Num1+Num2:0:0);

'2':Writeln('A Subtração:', Num1-Num2:0:0);

'3':Writeln('A Multiplicação:', Num1*Num2:0:0);

'4':Writeln('A Divisão:', Num1/Num2:0:0);

'5':Writeln('FIM');

Else

Writeln('Digite a Opção');

End;

readkey;

End.

:

ou então fazer desse jeito que ao meu ver e bem melhor:

Program Menu;

Uses Crt;

Var Num1, Num2:Real;

Opcao:Char;

Begin

repeat

Clrscr;

Write('Digite o Primeiro Numero: ');

Readln(Num1);

Write('Digite o Segundo Numero: ');

Readln(Num2);

Writeln;

Writeln('Menu');

Writeln('[1] Adicao');

Writeln('[2] Subtracao');

Writeln('[3] Multiplicacao');

Writeln('[4] Divisao');

Writeln('[5] Fim');

Write('Digite a Opcao:');

opcao:=Readkey;

if( opcao <> '5') then

begin

writeln;

writeln;

Case opcao of

'1':Writeln('A Adicao:', Num1+Num2:0:0);

'2':Writeln('A Subtracao:', Num1-Num2:0:0);

'3':Writeln('A Multiplicacao:', Num1*Num2:0:0);

'4':Writeln('A Divisao:', Num1/Num2:0:0);

End;

readkey;

end;

until( opcao = '5')

End.

Testa ai vai funcionar. Poste se conseguiu.

Compartilhar este post


Link para o post
Compartilhar em outros sites
da resultado sim.

o que esta ocorrendo e que você não colocou um ponto de parada para verificar o resultado.

você pode fazer assim, usando um readkey no final para ver a saida:

ou então fazer desse jeito que ao meu ver e bem melhor:

Testa ai vai funcionar. Poste se conseguiu.

Das 2 formas que voce me ensinou funcionaram mas

Qual é a diferença entre as duas formas, na funcionalidade do programa

Compartilhar este post


Link para o post
Compartilhar em outros sites

A primeira o programa e executado apenas uma vez, ou seja, aquela opção que você colocou para

sair não adianta muito, qualquer opção que a pessoa escolher vai terminar saindo.

Jà na segunda o programa é executando sem a necessidade de ser compilado novamente até que o usuário realmente deseje sair e pressione a opção 5, podendo executar quantas vezes o usuário quiser sem ficar precisando rodar o programa, Ctrl+F9. Basicamente é isso.

É isso mesmo que queria saber?

Compartilhar este post


Link para o post
Compartilhar em outros sites
A primeira o programa e executado apenas uma vez, ou seja, aquela opção que você colocou para

sair não adianta muito, qualquer opção que a pessoa escolher vai terminar saindo.

Jà na segunda o programa é executando sem a necessidade de ser compilado novamente até que o usuário realmente deseje sair e pressione a opção 5, podendo executar quantas vezes o usuário quiser sem ficar precisando rodar o programa, Ctrl+F9. Basicamente é isso.

É isso mesmo que queria saber?

É exatamente isso que eu queria saber

Muito obrigado + 1 vez

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

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
Entre para seguir isso  





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

×