Esse exemplo faz uma calculadora simples usando um procedimento para cada operação. Também faz uso do Case, uma alternativas a if (s) aninhados.
program CALCULADORA;
uses
CRT;
var
opcao: char;
{ Sub-rotinas de calculos - Adição }
Procedure rot_adicao;
var
x, a, b: real;
Begin
clrscr;
gotoxy(32, 1); write('Rotina de adição');
gotoxy(5, 6); write('Entre um valor para A: '); readln(a);
gotoxy(5, 7); write('Entre um valor para b: '); readln(b);
x:=a+b;
gotoxy(5,10); write('O resultado equivale a: ', x:6:2);
gotoxy(25,24); writeln('Pressione para voltar para o menu ');
readln;
end;
{----------------------------------------------------------------------------------------------------------------------------------------------}
{ Sub-rotinas de calculos - Subtração }
Procedure rot_subtracao;
var
x, a, b: real;
Begin
clrscr;
gotoxy(32, 1); write('Rotina de adição');
gotoxy(5, 6); write('Entre um valor para A: '); readln(a);
gotoxy(5, 7); write('Entre um valor para b: '); readln(b);
x:=a-b;
gotoxy(5,10); write('O resultado equivale a: ', x:6:2);
gotoxy(25,24); writeln('Pressione para voltar para o menu ');
readln;
end;
{----------------------------------------------------------------------------------------------------------------------------------------------}
{ Sub-rotinas de calculos - Multiplicação}
Procedure rot_multiplicacao;
var
x, a, b: real;
Begin
clrscr;
gotoxy(32, 1); write('Rotina de adição');
gotoxy(5, 6); write('Entre um valor para A: '); readln(a);
gotoxy(5, 7); write('Entre um valor para b: '); readln(b);
x:=a*b;
gotoxy(5,10); write('O resultado equivale a: ', x:6:2);
gotoxy(25,24); writeln('Pressione para voltar para o menu ');
readln;
end;
{----------------------------------------------------------------------------------------------------------------------------------------------}
{ Sub-rotinas dee calculos - Divisão }
Procedure rot_divisao;
var
x, a, b: real;
Begin
clrscr;
gotoxy(32, 1); write('Rotina de adição');
gotoxy(5, 6); write('Entre um valor para A: '); readln(a);
gotoxy(5, 7); write('Entre um valor para b: '); readln(b);
x:=a/b;
gotoxy(5,10); write('O resultado equivale a: ', x:6:2);
gotoxy(25,24); writeln('Pressione para voltar para o menu ');
readln;
end;
{----------------------------------------------------------------------------------------------------------------------------------------------}
BEGIN { PROGRAMA PRINCIPAL}
textColor(yellow + blink); { altero a cor da fonte }
textBackground(BLUE); { altero a cor do plano de fundo }
clrscr;
opcao:='0';
while (opcao < '5') do Begin
clrscr;
gotoxy(33,1); write('Menu principal');
gotoxy(22, 6); write('1 Soma');
gotoxy(22, 8); write('2 Subtracao');
gotoxy(22, 10); write('3 Multiplicacao');
gotoxy(22, 12); write('4 Divisao');
gotoxy(22, 14); write('5 Fim de programa');
gotoxy(22, 18); write(' Escolha uma opcao ......: ');
readln(opcao);
Case opcao of
'1': rot_subtracao;
'2': rot_subtracao;
'3': rot_multiplicacao;
'4': rot_divisao
Else
Writeln('Byeee');
end;
end;
END.
Este artigo foi útil ?
SimNão
Last modified: 23 de outubro de 2007
Há um erro no programa principal onde está:
while (opcao ‘5’) do Begin
O correto é:
while (opcao ‘5’) do Begin
Há me esqueci de agradecer muito legal esse programinha de pascal!
Obrigado.
Acho que o erro está na página que não dá para enxergar o sinal de maior e menor, no primeiro comentário postei
while (opcao sinal de maior e menor ‘5’) do Begin
Valeu Ulysses, ta arrumado.Abraço
Muito Legal mesmo
Brigadao ai 🙂
há um erro no programa principal.
como está:
Case opcao of
‘1’: rot_subtracao;
‘2’: rot_subtracao;
‘3’: rot_multiplicacao;
‘4’: rot_divisao
como deveria estar:
Case opcao of
‘1’: rot_adicao;
‘2’: rot_subtracao;
‘3’: rot_multiplicacao;
‘4’: rot_divisao
aah, mais ficou beem legal! 🙂
byeee
Como se faz um programa de calculadora procedure em pascal????
Rpz, sinceramente… depois desse exemplo q vi agora foi q eu vim conseguir entender, ja fiz de tudo, li vi exemplos, mais esse foi foda, consegui entender mesmo como funciona a procedure, e como se faz pra chamar ela… mto bem…
gostei!
Esta dando um erra no else do case do programa principal me ajude…..
Oii!
Muito bom seu site!
E pode ter certeza, esse seu algoritmo salvou minha vida!!
Thank’s 😉
Ola galera to querendo fazer umna prova tipo do detran em pascal.
do codigo ja tenho pro isso ai Program Prova ;
uses crt;
var
q: array [1..10] of string; {*variaveis para as questoes*}
a: array [1..5] of string;// variaveis para alternativas
i, j: integer; // atribuição para a linha e coluna da maatriz
op: char; // caracter de criação para o menu
sair: boolean; // verdadeiro ou falso
procedure menu;
begin
writeln (‘1 – aplicar prova’);
writeln (‘2 – resultado’);
writeln (‘3 – ranking’);
writeln (‘4 – Sair’);
case op of
‘1’: writeln (‘aplicar prova’);
‘2’: writeln (‘resultado’);
‘3’: writeln (‘ranking’);
‘4’: writeln (‘sair’);
end;
procedure prova;
begin
q[1]:= ‘Ficou conhecido como primeiro instrumento de calculo?’;
q[2]:= ‘Super computadores utilizados normalmente em centros de processamentos de grande porte.’;
q[3]:= ‘Mais conhecida como linguagem de montagem.’;
q[4]:= ‘Qual o ano em que foi criada a linguagem Pascal?’;
q[5]:= ‘A que geração se adequa a linguagem de montagem.’;
q[6]:= ‘Uma tecnologia semicondutora é conhecida por utilizar…’;
q[7]:= ‘Memoria em que uma vez gravados, os dados contidos em seu interior não podem ser apagados.’;
q[8]:= ‘Qual extenção do arquivo salvo no Writer (processador de textos em BrOffice)?’;
q[9]:= ‘Quem é o fundador do WikiLeaks (organização transnacional sem fins lucrativos, sediada na Suécia, que publica, em seu site, posts de fontes anônimas, documentos, fotos e informações confidenciais, vazadas de governos ou empresas, sobre assuntos sensíveis.’);
q[10]:= ‘Computador em forma de prancheta eletrônica, sem teclado e com tela sensível ao toque.’);
end;
begin
q[1]a:= (‘Calculadora’);
q[1]b:= (‘Tabuada’);
q[1]c:= (‘Abaco’);
q[1]d:= (‘A Regua de Calculo’);
q[1]e:= (‘NRA’);
q[2]a:= (‘Mainframes’);
q[2]b:= (‘Minicomputadores’);
q[2]c:= (‘Microcomputadores’);
q[2]d:= (‘Notebook’);
q[2]e:= (‘Workstation’);
q[3]a:= (‘C++’);
q[3]b:= (‘Java’);
q[3]c:= (‘Cobol’);
q[3]d:= (‘Dotnet’);
q[3]e:= (‘Assembly’);
q[4]a:= (‘1900’);
q[4]b:= (‘1930’);
q[4]c:= (‘1970’);
q[4]d:= (‘1980’);
q[4]e:= (‘1987’);
q[5]a:= (‘1a geração’);
q[5]b:= (‘2a geração’);
q[5]c:= (‘3a geração’);
q[5]d:= (‘4a geração’);
q[5]e:= (‘5a geração’);
q[6]a:= (‘Processador’);
q[6]b:= (‘Transitores’);
q[6]c:= (‘Memoria’);
q[6]d:= (‘Placa mãe’);
q[6]e:= (‘Pilhas’);
q[7]a:= (‘RAM’);
q[7]b:= (‘ROM’);
q[7]c:= (‘PROM’);
q[7]d:= (‘EPROM’);
q[7]e:= (‘EEPROM’);
q[8]a:= (‘.xls’);
q[8]b:= (‘.ppt’);
q[8]c:= (‘.doc’);
q[8]d:= (‘.odt’);
q[8]e:= (‘.ods’);
q[9]a:= (‘Jimmy Wales’);
q[9]b:= (‘Larry Page’);
q[9]c:= (‘Sergey Brin’);
q[9]d:= (‘Mark Zuckerberg’);
q[9]e:= (‘Julian Assange’);
q[10]a:= (‘Palmtop’);
q[10]a:= (‘Laptop’);
q[10]a:= (‘Tablet’);
q[10]a:= (‘Iphone’);
q[10]a:= (‘Smartphone’);
end;
end.
cara depois que termina o calculo pra voltar pro menu quando está executando, a tela fica suja… como limpar isso? pois em todos os procedures contem o ( clrscr ) mais não funciona apenas nesta parte.
Para limpar a tela para o Menu Principal não ficar por cima do resultado anterior, apenas colocar clrscr após todos os ( readln ) de cada procedure e antes de todos os ( end´s ) de cada procedure.
OK!
OBS: Deixa o que ja existe, apenas adiciona no fim de cada procedure!
Ah muito bom….ajudou bem para entender procedure…
Valeww