控制台纯文本计算器用PASCAL编写,有bug。

时间:2013-09-15 15:41:54

标签: pascal

我必须为大学的工作创建一个计算器。在我的程序中,我使用了重复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.

2 个答案:

答案 0 :(得分:0)

end;之前需要untilend属于if。根据您的逻辑,您需要end;之前的case

答案 1 :(得分:0)

执行代码不会导致语法错误。

我已经阅读了部分代码,直到案例1。 (现在已经很晚了,所以我不能花太多时间把你的教学单词翻译成英文,所以我猜对了Opcao是某种选择索引。)

你的错误是没有

readln(opcao); 

当memoria为false时,默认情况下。 因此,您的代码会保持循环和读取。

我怀疑您的变量salvo未分配给您想要的值,请同时检查。到目前为止,我可以发表评论,如果出现类似的错误,你应该能够看到剩下的代码。

更新

  • Opcao案例编号6,将第二个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;