Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program calculadora;
- uses crt;
- function fatorial(x: real): real;
- var i, conversor: integer;
- begin
- conversor := trunc(x);
- fatorial := 1;
- for i:=1 to conversor do
- begin
- fatorial := fatorial*i;
- end;
- end;
- Label voltar;
- var
- numero1, numero2, resultado: real;
- operacao, resposta: char;
- execucao, operacaoinvalida, utilizar_resultado: boolean;
- begin
- execucao := true;
- utilizar_resultado := false;
- while (execucao) do (* Mantém o programa em execução até que o comando de saída seja executado *)
- begin
- repeat
- writeln;
- writeln(' ==========CALCULADORA========== ');
- writeln;
- writeln('|----------------------------------MENU---------------------------------------|');
- writeln('| |');
- writeln('| -Operacoes- |');
- writeln('| |');
- writeln('| |');
- writeln('| "+" Adicao "-" Subtracao |');
- writeln('| "*" Produto "/" Divisao |');
- writeln('| "i" Inversao (1/x) "^" Potenciacao |');
- writeln('| "r" Raiz quadrada "!" Fatorial (do inteiro mais proximo) |');
- writeln('| "s" Seno "c" Cosseno |');
- writeln('| |');
- writeln('| |');
- writeln('| "#" Sair do programa |');
- writeln('|-----------------------------------------------------------------------------|');
- writeln;
- writeln;
- operacaoinvalida := false; (* Boolean criada para o caso do resultado ser usado como operando *)
- writeln('Escolha a operacao a ser executada:');
- readln(operacao);
- if (operacao='#') then halt (* Comando de saída, encerra o programa *)
- else
- begin
- if (operacao<>'i') and (operacao<>'r') and (operacao<>'!')
- and (operacao<>'s') and (operacao<>'c') then (* Para as operações que necessitam de dois operandos *)
- begin
- if (utilizar_resultado = false) then
- begin
- writeln('Forceca o primeiro operando:');
- readln(numero1);
- end;
- writeln('Forceca o segundo operando:');
- readln(numero2);
- end
- else (* Para as operações de um operando só *)
- begin
- if (utilizar_resultado = false) then
- begin
- writeln('Forneca o operando:');
- readln(numero1);
- end;
- end;
- voltar:
- if ((operacao='/') and (numero2=0)) or (((operacao='r') or (operacao='!')) and
- (numero1<0)) or ((operacao='i') and (numero1=0)) then (* Casos não permitidos de operações *)
- begin
- writeln;
- writeln('<OPERACAO INVALIDA>');
- operacaoinvalida := true;
- readln;
- clrscr; (* Limpa a tela *)
- end
- else
- begin
- case operacao of (* Executa a operação escolhida pelo usuário *)
- '+': resultado := numero1 + numero2;
- '-': resultado := numero1 - numero2;
- '*': resultado := numero1*numero2;
- '/': resultado := numero1/numero2;
- 'i': resultado := 1/numero1;
- '^': resultado := exp(numero2*ln(numero1)); (* Potenciação *)
- 'r': resultado := sqrt(numero1);
- '!': resultado := fatorial(numero1); (* Uso da função "fatorial" declarada no começo do programa *)
- 's': resultado := sin(numero1);
- 'c': resultado := cos(numero1);
- else
- begin
- writeln;
- writeln('<OPERACAO INVALIDA>');
- readln;
- operacaoinvalida := true;
- clrscr; (* Limpa a tela *)
- end;
- end;
- end;
- end;
- until (operacaoinvalida = false); (* Para retornar a escolha da operação, caso a operação seja inválida *)
- writeln;
- writeln('Resultado = ', resultado:0:2);
- writeln;
- writeln('Deseja utilizar este resultado para mais uma operacao? (s/n)');
- readln(resposta);
- if resposta = 's' then
- begin
- utilizar_resultado := true;
- numero1 := resultado; (* Coloca o resultado como um dos operandos *)
- clrscr; (* Limpa a tela*)
- end
- else
- begin
- utilizar_resultado := false;
- clrscr;
- end;
- end;
- end.
Add Comment
Please, Sign In to add comment