控制台纯文本计算器,用PASCAL编写,有bug。
我必须为大学的工作制作一个计算器。在我的程序中,我使用了repeat-clrsc;使用完计算器后,始终清洁屏幕。我定义使用CLRSC直到选项=9,并显示这个错误:Syntax error;期待,但直到找到。我在我的计划中确定了9个选项。我已经花了好几个小时试图解决这个问题,但我没能成功。请有人帮帮我 对不起,我的英语很差,我不是以英语为母语的人 该方案:控制台纯文本计算器,用PASCAL编写,有bug。,pascal,Pascal,我必须为大学的工作制作一个计算器。在我的程序中,我使用了repeat-clrsc;使用完计算器后,始终清洁屏幕。我定义使用CLRSC直到选项=9,并显示这个错误:Syntax error;期待,但直到找到。我在我的计划中确定了9个选项。我已经花了好几个小时试图解决这个问题,但我没能成功。请有人帮帮我 对不起,我的英语很差,我不是以英语为母语的人 该方案: program CALCULADORA; uses crt; var var1, var2, resultado, salvo:
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.
你需要结束;在之前直到。终点属于if。根据你的逻辑,你需要结束;已经在case之前。代码的执行不会导致语法错误 我已经通读了你的部分代码,直到案例1。 这里已经很晚了,所以我不能花太多时间把你的指导词翻译成英语,所以我猜Opcao是某种选择索引 你的错误是没有一个
readln(opcao);
当memoria为false时,默认情况下为false。
因此,您的代码不断循环并读取
我怀疑您的变量salvo没有指定给您想要的值,也请检查一下。到目前为止,我可以对代码的其余部分进行注释,您应该能够看到是否发生了类似的错误
更新:
Opcao案例6,将第二个ifresp='S'更改为'if'
resp='N'然后'
以if memoria=true开头的块,然后
如果memoria=true,则
开始
书面备忘录,齐射:3:4;
书面语;
终止
写着“Opcao desejada:”;
readlnopcao;
书面语
记忆:=真实;在第1号Opcao案例结束时,将其更改
进入'readln;'
确保所有记忆:=真实;具有salvo:=resultado;。我相信
你想让计算器记住结果
我通读了你剩下的密码。
您的代码在某些地方极为重复和冗余。
请尽量不要复制和粘贴您自己的代码。
如果需要重复代码,请将其重新写入适当的功能或程序中
例如,每种情况下的代码,无论内存是真是假,无论用户选择的内存,程序执行的功能完全相同,但变量可能不同。试着把它重写成一个过程,或者在选择之后简单地组合它们,而不是写三次
以opcao案例1为例,我将在整个程序开始时定义一个过程ask
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;
你能把整个代码块张贴在中间吗?您可能错过了“案例”的“结尾”-据我所知,在“else begin writeln'Nao..”之前应该是这样的-我刚刚在结尾发布了整个代码块。当我结束时,我开始写下“其他的开始…”;显示了一个错误,因为预期的是直到而不是结束。我尝试添加结束;before-until-but显示此错误消息:语法错误,until-expected-but-find。所以我觉得没有必要。我只是结束了;之前的案例和程序最终已经编译完成。但它仍然不能正常工作。这张图是这样的:1-躯体2-副臂3-产品4-分割5-反转6-效力7-放射8-记忆9-程序自动运行0,当我把我想要的选项数字化时,它会删除所有内容并再次显示出来。我该怎么办?所以,我已经更改了readln;阅读《诺普卡》;但是我不能理解没有阅读的错误;当记忆是假的。我用实际的代码块更新了我的帖子。Obs:opcao=option选择数学选项。memoria=Memory保存操作结果。salvo=save若要将结果的值保存为memorymemoria已初始化为false,则如果memoria=true,则语句将导致不读取opcao,因为只有在满足memoria条件时才会显示readlnopcao。