我必须为大学的工作创建一个计算器。在我的程序中,我使用了重复clrscr;使用计算器完成时始终清洁屏幕。 和我定义使用clrscr直到option = 9,并显示此错误:语法错误,“;”预期,但“UNTIL”发现。 我在我的程序中建立了9个选项。我已经花了几个小时试图解决这个问题,但我无法做到。请有人帮助我!
该计划:
program CALCULADORA;
uses crt;
var
var1, var2, resultado, salvo: real;
resp: char;
opcao: integer;
memoria: boolean;
begin
memoria := false;
repeat
clrscr;
writeln;
writeln('Escolha a operacao matematica desejada: ');
writeln;
writeln('1 - Soma');
writeln('2 - Subtracao');
writeln('3 - Produto');
writeln('4 - Divisao');
writeln('5 - Inversao');
writeln('6 - Potenciacao');
writeln('7 - Radiciacao');
writeln('8 - Limpar a Memoria');
writeln('9 - Sair do programa');
writeln;
if ( memoria=true ) then
begin
writeln('Memoria ', salvo:3:4);
writeln;
writeln('Opcao desejada: ');
readln(opcao);
writeln;
case (opcao) of
...在这一部分我列出了所有选项,直到8选项...
9:begin
writeln('Obrigado por usar a calculadora!');
readln;
end;
else
begin
writeln('Nao ha a opcao ', opcao);
readln;
end;
end;
until opcao9;
end;
end.
整个区块代码:
program CALCULADORA;
uses crt;
var
var1, var2, resultado, salvo: real;
resp: char;
opcao: integer;
memoria: boolean;
begin
repeat
clrscr;
writeln;
writeln('Escolha a operacao matematica desejada: ');
writeln;
writeln('1 - Soma');
writeln('2 - Subtracao');
writeln('3 - Produto');
writeln('4 - Divisao');
writeln('5 - Inversao');
writeln('6 - Potenciacao');
writeln('7 - Radiciacao');
writeln('8 - Limpar a Memoria');
writeln('9 - Sair do programa');
writeln;
if ( memoria=true ) then
begin
writeln('Memoria ', salvo:3:4);
writeln;
writeln('Opcao desejada: ');
readln(opcao);
writeln;
end;
case (opcao) of
1: begin
if ( memoria=false ) then
begin
writeln('Digite a primeira variavel: ');
readln(var1);
writeln;
writeln('Digite a segunda variavel: ');
readln(var2);
writeln;
resultado:=var1+var2;
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end
else
begin
writeln('Voce deseja utilizar a memoria?');
writeln('S-Sim');
writeln('N-Nao');
readln(resp);
writeln;
if ( resp='S' ) then
begin
writeln('Digite a segunda variavel: ');
readln(var2);
resultado:=salvo + var2;
writeln('Resultado = ', resultado:3:4);
end
else
begin
writeln('Digite a primeira variavel: ');
readln(var1);
writeln;
writeln('Digite a segunda variavel: ');
readln(var2);
resultado:=var1 + var2;
writeln('Resultado = ', resultado:3:4);
end;
end;
memoria:=true;
end;
2: begin
if ( memoria = false ) then
begin
writeln('Digite a primeira variavel: ');
readln(var1);
writeln;
writeln('Digite a segunda variavel: ');
readln(var2);
writeln;
resultado:=var1 - var2;
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end
else
begin
writeln('Voce deseja utilizar a memoria?');
writeln('S-Sim');
writeln('N-Nao');
readln(resp);
writeln;
if ( resp='S' ) then
begin
writeln('Digite a segunda variavel: ');
readln(var2);
resultado:=salvo - var2;
writeln;
writeln('Resultado = ', resultado:3:4);
end
else
begin
writeln('Digite a primeira variavel: ');
readln(var1);
writeln;
writeln('Digite a segunda variavel: ');
readln(var2);
writeln;
resultado:=var1 - var2;
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end;
end;
readln;
end;
3:begin
if (memoria = false ) then
begin
writeln('Digite a primeira variavel: ');
readln(var1);
writeln;
writeln('Digite a segunda variavel: ');
readln(var2);
writeln;
resultado:=var1*var2;
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end
else
begin
writeln('Deseja utilizar a memoria?');
writeln('S-Sim');
writeln('N-Nao');
readln(resp);
if (resp='S') then
begin
writeln('Digite a segunda variavel: ');
readln(var2);
resultado:=salvo*var2;
writeln;
writeln('Resultado = ', resultado:3:4);
end
else
begin
writeln('Digite a primeira variavel: ');
readln(var1);
writeln;
writeln('Digite a segunda variavel: ');
readln(var2);
writeln;
resultado:=var1*var2;
writeln('Resultado = ', resultado:3:4);
end;
end;
readln;
end;
4:begin
if (memoria=false) then
begin
writeln('Digite a primeira variavael');
readln(var1);
writeln;
writeln('Digite a segunda variavel: ');
readln(var2);
writeln;
if (var2=0) then
begin
writeln('Zero nao pode ser denominador');
end
else
begin
resultado:= (var1)/(var2);
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end;
end
else
begin
writeln('Deseja utilizar a memoria?');
writeln('S-Sim');
writeln('N-Nao');
readln(resp);
if (resp='S') then
begin
writeln('Digite a segunda variavel: ');
readln(var2);
writeln;
resultado:=(salvo)/(var2);
writeln('Resultado = ', resultado:3:4);
end
else
begin
writeln('Digite a primeira variavel: ');
readln(var1);
writeln;
writeln('Digite a segunda variavel: ');
readln(var2);
writeln;
if (var2=0) then
begin
writeln('Zero nao pode ser denominador');
end
else
begin
resultado:= (var1)/(var2);
writeln('Resultado = ', resultado:3:4);
end;
end;
end;
readln;
end;
5: begin
if (memoria=false) then
begin
writeln('Digite a variavel: ');
readln(var1);
writeln;
if (var1=0) then
begin
writeln('Zero nao pode ser denominador');
end
else
begin
resultado:=1/(var1);
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end;
end
else
begin
writeln('Deseja utilizar a memoria?');
writeln('S-Sim');
writeln('N-Nao');
readln(resp);
writeln;
if (resp='S') then
begin
resultado:=1/(salvo);
writeln('Resposta = ', resultado:3:4);
end
else
begin
writeln('Digite a variavel: ');
readln(var1);
writeln;
if (var1=0) then
begin
writeln('Zero nao pode ser denominador');
end
else
begin
resultado:=1/(var1);
writeln('Resultado = ', resultado:3:4);
end;
end;
end;
readln;
end;
6: begin
if ( memoria = false ) then
begin
writeln('Digite a base ');
readln(var1);
writeln;
write('Digite o expoente ');
readln(var2);
writeln;
if ( var1=0) then
begin
if(var2=0) then
begin
writeln('Operacao impossivel');
end
else
begin
resultado:=0;
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end;
end
else
if(var1<0) then
begin
if((var2>-1) and (var2<1) and (var2<>0)) then
begin
if((frac(1/var2)<>0) or ((trunc(1/var2)) mod 2 = 0)) then
begin
writeln('Operacao fora do conjunto dos numeros reais');
end
else
begin
var1:=var1*(-1);
resultado:= (-1)*exp(var2*ln(var1));
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end;
end
else
if(var2=0) then
begin
resultado:= 1;
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end
else
if(frac(var2)<>0) then
begin
writeln('Operacao fora do conjunto dos numeros reais')
end
else
begin
if(trunc(var2)mod(2)=0) then
begin
var1:=var1*-1;
resultado:= exp(var2*ln(var1));
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end
else
begin
var1:=var1*-1;
resultado:= (-1)*exp(var2*ln(var1));
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end;
end;
end
else
begin
resultado:= exp(var2*ln(var1));
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end;
end
else
begin
writeln('Deseja utilizar a memoria como base?');
writeln;
writeln('S-Sim');
writeln('N-Nao');
writeln;
readln(resp);
writeln;
if(resp='S') then
begin
write('Digite a variavel Base = ');
readln(var1);
writeln;
write('Digite a variavel Expoente = ');
readln(var2);
writeln;
if(var1=0) then
begin
if(var2<=0) then
begin
writeln('Operacao impossivel');
end
else
begin
resultado:=0;
writeln('Resultado = ', resultado:3:4);
end;
end
else
if(var1<0) then
begin
if((var2>-1) and (var2<1) and (var2<>0)) then
begin
if((frac(1/var2)<>0) or ((trunc(1/var2)) mod 2 = 0)) then
writeln('Operacao fora do conjunto dos numeros reais')
else
begin
var1:=var1*(-1);
resultado:= (-1)*exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end;
end
else
if(var2=0) then
begin
resultado:= 1;
writeln('Resultado = ', resultado:3:4);
end
else
if(frac(var2)<>0) then
writeln('Operacao fora do conjunto dos numeros reais')
else
begin
if(trunc(var2)mod(2)=0) then
begin
var1:=var1*-1;
resultado:= exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end
else
begin
var1:=var1*-1;
resultado:= (-1)*exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end;
end;
end
else
begin
resultado:= exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end;
end
else
if(resp='S') then
begin
var1:=resultado;
write('Expoente = ');
readln(var2);
writeln;
if(var1=0) then
begin
if(var2<=0) then
begin
writeln('Operacao impossivel');
end
else
begin
resultado:=0;
writeln('Resultado = ', resultado:3:4);
end;
end
else
if(var1<0) then
begin
if((var2>-1) and (var2<1) and (var2<>0)) then
begin
if((frac(1/var2)<>0) or ((trunc(1/var2)) mod 2 = 0)) then
writeln('Operacao fora do conjunto dos numeros reais')
else
begin
var1:=var1*(-1);
resultado:= (-1)*exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end;
end
else
if(var2=0) then
begin
resultado:=0;
writeln('Resultado = ', resultado:3:4);
end
else
if(frac(var2)<>0) then
writeln('Operacao fora do conjunto dos numeros reais')
else
begin
if(trunc(var2)mod(2)=0) then
begin
var1:=var1*-1;
resultado:= exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end
else
begin
var1:=var1*-1;
resultado:= (-1)*exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end;
end;
end
else
begin
resultado:= exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end;
end
else
writeln('Escolha apenas uma das opcoes Sim ou Nao');
end;
readln;
end;
7: begin
if(memoria=false) then
begin
write('Digite o Radicando = ');
readln(var1);
writeln;
write('Digite o Radical = ');
readln(var2);
writeln;
if(var2=0) then
writeln('Radical nao pode ser zero')
else
begin
if(var1=0) then
begin
resultado:=0;
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end
else
if(var1<0) then
begin
if((var2>-1) and (var2<1)) then
begin
var2:=1/var2;
var1:=var1*(-1);
if(frac(var2)<>0) then
writeln('Operacao fora do conjunto dos numeros reais')
else
begin
if((trunc(var2) mod 2) = 0) then
begin
resultado:= exp(var2*ln(var1));
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end
else
begin
resultado:= (-1)*exp(var2*ln(var1));
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end;
end;
end
else
if(frac(var2)<>0) then
writeln('Operacao fora do conjunto dos numeros reais')
else
begin
if((trunc(var2) mod 2) <> 0) then
begin
var2:=1/var2;
var1:=var1*(-1);
resultado:= (-1)*exp(var2*ln(var1));
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end
else
writeln('Operacao fora do conjunto dos numeros reais');
end;
end
else
begin
var2:= 1/var2;
resultado:= exp(var2*ln(var1));
memoria:=true;
writeln('Resultado = ', resultado:3:4);
end;
end;
end
else
begin
writeln('Deseja utilizar a memoria como radicando?');
writeln;
writeln('S-Sim');
writeln('N-Nao');
writeln;
write('Resposta = ');
readln(resp);
writeln;
if(resp='N') then
begin
write('Digite o variavel Radicando = ');
readln(var1);
writeln;
write('Digite a variavel Radical = ');
readln(var2);
writeln;
if(var2=0) then
begin
writeln('A variavel Radical nao pode ser zero');
end
else
begin
if(var1=0) then
begin
resultado:=0;
writeln('Resultado = ',resultado:3:4);
end
else
if(var1<0) then
begin
if((var2>-1) and (var2<1)) then
begin
var2:=1/var2;
var1:=var1*(-1);
if(frac(var2)<>0) then
writeln('Operacao fora do conjunto dos numeros reais')
else
begin
if((trunc(var2) mod 2) = 0) then
begin
resultado:= exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end
else
begin
resultado:= (-1)*exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end;
end;
end
else
if(frac(var2)<>0) then
writeln('Operacao fora do conjunto dos numeros reais')
else
begin
if((trunc(var2) mod 2) <> 0) then
begin
var2:=1/var2;
var1:=var1*(-1);
resultado:= (-1)*exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end
else
writeln('Operacao fora do conjunto dos numeros reais');
end;
end
else
begin
var2:= 1/var2;
resultado:= exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end;
end;
end
else
if(resp='S') then
begin
var1:=resultado;
write('Digite a variavel Radical = ');
readln(var2);
writeln;
if(var2=0) then
writeln('A variavel Radical nao pode ser zero')
else
begin
if(var1=0) then
begin
resultado:=0;
writeln('Resultado = ', resultado:3:4);
end
else
if(var1<0) then
begin
if((var2>-1) and (var2<1)) then
begin
var2:=1/var2;
var1:=var1*(-1);
if(frac(var2)<>0) then
writeln('Operacao fora do conjunto dos numeros reais')
else
begin
if((trunc(var2) mod 2) = 0) then
begin
resultado:= exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end
else
begin
resultado:= (-1)*exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end;
end;
end
else
if(frac(var2)<>0) then
writeln('Operacao fora do conjunto dos numeros reais')
else
begin
if((trunc(var2) mod 2) <> 0) then
begin
var2:=1/var2;
var1:=var1*(-1);
resultado:= (-1)*exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end
else
writeln('Operacao fora do conjunto dos numeros reais');
end;
end
else
begin
var2:= 1/var2;
resultado:= exp(var2*ln(var1));
writeln('Resultado = ', resultado:3:4);
end;
end;
end
else
writeln('Escolha apenas uma das opcoes Sim ou Nao');
end;
readln;
end;
8:begin
if(memoria=false) then
begin
writeln('Nao ha memoria salva');
readln;
writeln('Escolha uma das operacoes');
readln(opcao);
end
else
begin
resultado:=0.0000;
memoria:=false;
writeln('Escolha uma das operacoes');
readln(opcao);
writeln;
end;
end;
9:begin
writeln('Obrigado por usar a calculadora!');
readln;
end;
else
begin
writeln('Nao ha a opcao ',opcao);
writeln;
writeln('Escolha uma das opcoes de 1 a 9');
readln(opcao);
end;
end;
until opcao=9;
end.
答案 0 :(得分:0)
end;
之前需要until
。 end
属于if
。根据您的逻辑,您需要end;
之前的case
。
答案 1 :(得分:0)
执行代码不会导致语法错误。
我已经阅读了部分代码,直到案例1。
(现在已经很晚了,所以我不能花太多时间把你的教学单词翻译成英文,所以我猜对了Opcao是某种选择索引。)
你的错误是没有
readln(opcao);
当memoria为false时,默认情况下。 因此,您的代码会保持循环和读取。
我怀疑您的变量salvo
未分配给您想要的值,请同时检查。到目前为止,我可以发表评论,如果出现类似的错误,你应该能够看到剩下的代码。
if(resp='S') then
更改为`if
(resp ='N')然后'从if ( memoria=true ) then
if(memoria = true)然后 开始 writeln('Memoria',齐射:3:4); writeln; 结束; writeln('Opcao desejada:'); readln(opcao); writeln;
Opcao案例编号1末尾的memoria:=true;
,更改它
进入`readln;'
确保所有memoria:=true;
都有salvo:=resultado;
。我相信
你希望计算器记住结果。
我仔细阅读了其余的代码。 您的代码在某些地方非常重复且冗余。 请尽量不要复制和粘贴您自己的代码。 如果需要重复代码,将它们重新写入适当的功能或程序。
例如,每个案例的代码,无论是memoria是真还是假,用户是否选择了memoria,程序执行完全相同的函数除了变量可能不同。尝试将其重写为一个过程,或者只是在选择后将它们组合起来,而不是写三次。举一个你的opcao案例编号1的例子,我将在整个程序的开头定义一个程序问题。
procedure ask;
begin
writeln('Digite a primeira variavel: ');
readln(var1);
writeln;
writeln('Digite a segunda variavel: ');
readln(var2);
end;
procedure write_memory;
begin
memoria:=true;
salvo:=resultado;
end;
然后案例编号1可以写为
1: begin
if ( memoria=false )
then ask
else
begin
writeln('Voce deseja utilizar a memoria?');
writeln('S-Sim');
writeln('N-Nao');
readln(resp);
writeln;
if ( resp='S' ) then
begin
writeln('Digite a segunda variavel: ');
var1:=salvo;
readln(var2);
end
else ask
end;
resultado:=var1 + var2;
if not(memoria) or (memoria and (resp='S')) then write_memory;
writeln('Resultado = ', resultado:3:4);
readln;
end;