Guest User

Untitled

a guest
Jul 19th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.54 KB | None | 0 0
  1. program calculadora;
  2.  
  3. uses crt;
  4.  
  5. function fatorial(x: real): real;
  6. var i, conversor: integer;
  7. begin
  8.     conversor := trunc(x);
  9.     fatorial := 1;
  10.     for i:=1 to conversor do
  11.     begin
  12.         fatorial := fatorial*i;
  13.     end;
  14. end;
  15.  
  16. Label voltar;
  17.  
  18. var
  19.     numero1, numero2, resultado: real;  
  20.     operacao, resposta: char;
  21.     execucao, operacaoinvalida, utilizar_resultado: boolean;
  22.  
  23. begin
  24.     execucao := true;
  25.     utilizar_resultado := false;
  26.     while (execucao) do (* Mantém o programa em execução até que o comando de saída seja executado *)
  27.     begin
  28.         repeat     
  29.             writeln;
  30.             writeln('                      ==========CALCULADORA==========          ');
  31.             writeln;
  32.             writeln('|----------------------------------MENU---------------------------------------|');
  33.             writeln('|                                                                             |');
  34.             writeln('|                              -Operacoes-                                    |');
  35.             writeln('|                                                                             |');
  36.             writeln('|                                                                             |');
  37.             writeln('|         "+" Adicao                  "-" Subtracao                           |');
  38.             writeln('|         "*" Produto                 "/" Divisao                             |');
  39.             writeln('|         "i" Inversao (1/x)          "^" Potenciacao                         |');
  40.             writeln('|         "r" Raiz quadrada           "!" Fatorial (do inteiro mais proximo)  |');
  41.             writeln('|         "s" Seno                    "c" Cosseno                             |');
  42.             writeln('|                                                                             |');
  43.             writeln('|                                                                             |');
  44.             writeln('|         "#" Sair do programa                                                |');
  45.             writeln('|-----------------------------------------------------------------------------|');
  46.             writeln;
  47.             writeln;
  48.        
  49.             operacaoinvalida := false; (* Boolean criada para o caso do resultado ser usado como operando *)
  50.             writeln('Escolha a operacao a ser executada:');
  51.             readln(operacao);
  52.        
  53.             if (operacao='#') then halt (* Comando de saída, encerra o programa *)
  54.             else
  55.             begin
  56.                 if (operacao<>'i') and (operacao<>'r') and (operacao<>'!')
  57.                                 and (operacao<>'s') and (operacao<>'c') then (* Para as operações que necessitam de dois operandos *)
  58.                 begin
  59.                     if (utilizar_resultado = false) then
  60.                     begin
  61.                         writeln('Forceca o primeiro operando:');
  62.                         readln(numero1);
  63.                     end;
  64.                     writeln('Forceca o segundo operando:');
  65.                     readln(numero2);
  66.                 end
  67.                 else (* Para as operações de um operando só *)
  68.                 begin
  69.                     if (utilizar_resultado = false) then
  70.                     begin
  71.                         writeln('Forneca o operando:');
  72.                         readln(numero1);
  73.                     end;
  74.                 end;
  75.                
  76.                 voltar:
  77.                 if ((operacao='/') and (numero2=0)) or (((operacao='r') or (operacao='!')) and
  78.                                     (numero1<0)) or ((operacao='i') and (numero1=0)) then (* Casos não permitidos de operações *)
  79.                 begin  
  80.                     writeln;
  81.                     writeln('<OPERACAO INVALIDA>');
  82.                     operacaoinvalida := true;
  83.                     readln;
  84.                     clrscr; (* Limpa a tela *)
  85.                 end
  86.                 else
  87.                 begin
  88.                     case operacao of (* Executa a operação escolhida pelo usuário *)
  89.                         '+': resultado := numero1 + numero2;
  90.                         '-': resultado := numero1 - numero2;
  91.                         '*': resultado := numero1*numero2;
  92.                         '/': resultado := numero1/numero2;
  93.                         'i': resultado := 1/numero1;
  94.                         '^': resultado := exp(numero2*ln(numero1)); (* Potenciação *)
  95.                         'r': resultado := sqrt(numero1);
  96.                         '!': resultado := fatorial(numero1); (* Uso da função "fatorial" declarada no começo do programa *)
  97.                         's': resultado := sin(numero1);
  98.                         'c': resultado := cos(numero1);
  99.                         else
  100.                         begin
  101.                             writeln;
  102.                             writeln('<OPERACAO INVALIDA>');
  103.                             readln;
  104.                             operacaoinvalida := true;
  105.                             clrscr; (* Limpa a tela *)
  106.                         end;
  107.                     end;
  108.                 end;
  109.             end;               
  110.         until (operacaoinvalida = false); (* Para retornar a escolha da operação, caso a operação seja inválida *)
  111.         writeln;
  112.         writeln('Resultado = ', resultado:0:2);
  113.         writeln;
  114.         writeln('Deseja utilizar este resultado para mais uma operacao? (s/n)');
  115.         readln(resposta);
  116.         if resposta = 's' then
  117.         begin
  118.             utilizar_resultado := true;
  119.             numero1 := resultado; (* Coloca o resultado como um dos operandos *)
  120.             clrscr; (* Limpa a tela*)
  121.         end
  122.         else
  123.         begin
  124.             utilizar_resultado := false;
  125.             clrscr;
  126.         end;
  127.     end;
  128. end.
Add Comment
Please, Sign In to add comment