Não encontro o Erro - Pascal vs Insanity

Gaminger

Power Member
Eu ando a programar uma calculadora em pascal para ver até aonde chego mas não arranca, diz que tem erro na 14 (a que tá a negrito) mas na encontro erro nenhum.

program calculadora_em_pascal;
uses Crt;
var r, v1, v2: Real;
var c, sn: Char;
begin
writeln ('***Calculadora by Gaminger VersÆo 0.1 19/12/2005***');
writeln ('Instru‡äes: +=soma, -=subtrac‡Æo, /=divisÆo, *=multiplica‡Æo');
repeat
writeln ('Qual o c*lculo que pretende fazer? Insira o sinal correspondente.');
readln (c);
writeln ('Agora insira dois valores, clique enter quando inserir o primeiro e outraves enter quando inserir o segundo.');
readln (v1, v2);
if c=+ then
r := v1+v2;
writeln ('Foram somados os valores e o resultado ‚:',r);
else
if c=- then
r := v1-v2;
writeln ('Foram subtra¡dos os valores e o resultado ‚:',r);
else
if c=/ then
r := v1/v2;
writeln ('Foram divididos os valores e o resultado ‚:',r);
else
if c=* then
r := v1*v2;
writeln ('Foram multiplicados os valores e o resultado ‚:',r);
else
writeln ('Instru‡äes erradas!');
end;
end;
end;
end;
writeln ('Deseja fazer outro c*lculo? Inserir s se sim ou n se nÆo.');
readln (sn);
until sn='n';
readkey;
end.
 
Convém explicar o pq em vez de dar só a solução...

Então meninos... há que ajudar a formar bons programadores

A razão pela qual tens de comparar com '+' e não com + é que estás a comparar strings, já que + sem plicas (ou aspas - ja nao me lembro de pascal, já lá vão mm mts anos) é um operador da linguagem - basicamente o programa estava à espera que tu fosses fazer um cálculo (ou uma concatenação de strings) e estava à espera do segundo parâmetro.
 
que erro tão estupido que eu fiz XD e eu sei que precisa daquilo...emfim vou ja emendar

EDIT::: agr o erro é na linha 16 (duas linhas abaixo do negrito, aonde está a virgula antes do ":" aquela virgula é um "é", parece que alguns simbolos ao passar do prog ficam codificados)
 
Última edição:
Cristiano disse:
que erro tão estupido que eu fiz XD e eu sei que precisa daquilo...emfim vou ja emendar

EDIT::: agr o erro é na linha 16 (duas linhas abaixo do negrito, aonde está a virgula antes do ":" aquela virgula é um "é", parece que alguns simbolos ao passar do prog ficam codificados)

Os símbolos com sinais de acentuação, não pertencem á tabela ASCII e são mostrados de forma 'estranha'. Em programas DOS-style não costumo por acentuação nas palavras...

Cumps
 
Boas! Tal como a Ophelia referiu, o "simbolo" =+, =- etc e tal são MESMO operadores, se queres saber se um caracter é "x" ou "y" tens de o meter entre pelicas.

Além do erro que assinalaste tens em todos os if's a mesma gafe!

Código:
if c=+ then
(...)
if c=- then
(...)
if c=/ then
(...)
if c=* then

que deveria ser:
Código:
if c='+' then
(...)
if c='-' then
(...)
if c='/' then
(...)
if c='*' then

muito provavelmente os outros if's afectam-te o bloco todo!

abraços, HecKel
 
Em pascal não existe o operador =+..
Ele dá erro simplesmente por tar a comparar uma string com o operador + (daí ter que levar plicas) não tem nada a ver com o operador =+ usado em C etc.
 
writeln ('Deseja fazer outro c*lculo? Inserir s se sim ou n se nÆo.');
readln (sn);
until sn='n';
readkey;
end.

achei piada nao teres posto um tecla para o sim :P e qualquer uma menos n :) 10 ano ne ? ;)


ja agora ainda nao deste case ... of ? conseguias fazer essa cena toda das operacoes em 4 linhas :) era mto mais facil de fazer e mais facil de nao ter erros ;)

se quiseres mando te um pm com a calculadora feita com case( tenho no meu caderno de tlp de ha 3 anos e tal atras ;) )

cumps
 
Última edição:
Os erros que vi : tens ENDs a mais, cada END deve ter um par BEGIN correspondente, ou uma instrução de bloco, por exemplo o CASE. Isto é :

BEGIN-END, CASE-END, etc...

isto vai provocar-te erros quase de linha a linha porque o compilcador não encontra o início do Bloco de cada END a mais que colocaste.

a sintaxe do if é esta :

http://www.freepascal.org/docs-html/ref/refsu36.html#x97-1040009.2.3

IF-THEN-ELSE

não é tipo

IF-THEN-ELSE-END

quando muito seria assim :

IF condição THEN
BEGIN
instrução 1
instrução 2
END;
ELSE
BEGIN
instrução 2;
instrução 3;
END;

usas o BEGIN e o END para delimitar blocos de instruções.

eu usava o BORLAND PASCAL e tinha uns helps muito bons


tenta mudar o Writeln e/ou o readln para Write e/ou Read para que não mude de linha ao inserir as variáveis

já não me lembro bem, mas acho que é assim, isto já é muita confusão de linguagens na cabeça :D

Write('a :');
readln(a);



program calculadora_em_pascal;
uses Crt;
var r, v1, v2: Real;
var c, sn: Char;
begin
writeln ('***Calculadora by Gaminger VersÆo 0.1 19/12/2005***');
writeln ('Instru‡äes: +=soma, -=subtrac‡Æo, /=divisÆo, *=multiplica‡Æo');
repeat
writeln ('Qual o c*lculo que pretende fazer? Insira o sinal correspondente.');
readln (c);
writeln ('Agora insira dois valores, clique enter quando inserir o primeiro e outraves enter quando inserir o segundo.');
readln (v1, v2);

Case C of
'+' : begin r := v1+v2; writeln('foram somados 2 numeros');end;
'-' : r := v1-v2;
'/' : r := v1/v2;
'*' : r := v1/v2;
else
writeln ('Instru‡äes erradas, comando desconhecido : ',C);
end;
writeln ('Deseja fazer outro c*lculo? Inserir s se sim ou n se nÆo.');
readln (sn);
until sn='n';
readkey;
end.
 
Última edição:
@Warrior ya, sorry..., faz tempo que não mexo em pascal..., ultimamente tem sido só java e C...

@Delta bem visto ;) Em C, java e afins se o bloco trata-se apenas de uma linha os limitadores podem ser "ignorados", pascal já não é bem assim..., acho que me andam a escapar pormenores demais :S tenho de rever os meus conhecimentos...

abraços, HecKel
 
Back
Topo