Catalog · How the catalog works
Calculadora-em-Pascal-Lazarus
- ★ 1 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
Calculadora em Pascal (Lazarus)
Um projeto simples de calculadora desenvolvido em Pascal utilizando a IDE Lazarus que faz cálculos simples.
Funcionalidades
- Operações Básicas: Adição, Subtração, Multiplicação e Divisão.
- Tratamento de Erros: Não permite a divisão por zero.
- Interface Visual: Calculadora com botões digitais e painel.
Estrutura do Código Principal
O arquivo Unit1.pas contém a lógica de eventos da calculadora:
- todosBotoesNumericos: Captura o clique de qualquer número e exibe no visor.
- operacao: Processa os cálculos matemáticos com base no operador selecionado.
- subtracao, adicao`, divisao, multiplicacao: Configuram o primeiro dígito e o operador atual.
- deleteTodos / deleteTodosCE: Limpam o visor da calculadora.
Tive dificuldade no inicio, mas tentei. Apesar de ser uma linguagem nova, tive varios conflios durante o processo. inicialmete, era necessario ter uma interface visual, então rapidinho montei ela, e fui colocando os botôes em seus devidos lugares com o objetivo de ser o mais proximo de como é a calculadora do windows.
Ao criar os botões, o Lazarus, automaticamente criou as instâncias de cada botão e tambem a do proprio form.
Por ter uma breve noção, adicinei alguma variaveis globais, para tentar criar uma calculadora que pega um valor da tela por vez e e depois captura o operador para saber qual operacao fazer.
var digitoUM: Double; // Pega o primeiro valor digitoDois : Double; // pega o segundo valor operador: Char; // salva o operador atual limparInput: Boolean; // verifica se ja posso inserir o segundo valor, dando permissao para limpar o input operadorDeclarado: Boolean; // confirma se já tem um operador definido resultado : Double; // Resultado da operacao, que será usado pela função do botão igual quando for habilitado
Para adicionar um valor na tela, clicando em cada botão, inicialmente existe para cada botão uma procedure propria, eu fiz uma para cada, mas pensei melhor sera? que existe uma forma melhor de fazer isso? como não conheço a linguuagem, pesquisei na internet: Como capturar o valor de varios botoes digitais e lançar na tela, e a IA me mostrou uma opção muito melhor do que a que eu tinha feito.
// Captura todos os botoes numericos e captura o valor dele em na string text
procedure TForm1.todosBotoesNumericos(Sender: TObject); // cada botão, meio que tem uma referencia para si memso quando passamod o parametro Sender: TObject begin
if limparInput then // usa a variavel global para fazer a verificação begin Edit1.Text := ''; // Limpa a tela para o novo número limparInput := False; // permanece falso pois ainda é o primeiro digito end;
Edit1.Text := Edit1.Text + (Sender as TButton).Caption; // caso seja o segundo ele insere o texto do botão. operacao(sender); depois de adicionado o segundo valor, ele chama o procedure operacao end;
salvou a variaveis globais,
inseriu o primeiro numero,
verifica se posso limpar a tela, permanece nao, quando for o primeiro digito.
no evento do operador, ele salva os estados, atualiza.
e apos inserir o segundo digito ele chama a função operacao
Das operações básicas Adição, subtração, multiplicação e divisão.
o codigo que está assim de uma delas, pois o resto é uma cópia, apenas alterando o operador lançado em tela.
criei uma declarac??o na interface, para cada procedura de opera????o, que s?? salva um estado, pra depois a procedure operacao usar e calcularprocedure TForm1.subtracao(Sender: TObject);
begin
if Edit1.Text = '' then Exit; // faz uma verificação para ver se o input está vazio ou não, se sim, ele encerra a procedure
digitoUm := StrToFloat(Edit1.Text); // salva o o primeiro digito, transformando de string para float
operador := (Sender as TButton).Caption[1]; // garante que estamos pegando o o primeiro caracter do caption do texto do botão clicado recentemente,
pois a a variavel que est?? sendo gurdadado o valor ?? do tipo char.limparInput := True; // verifica se ja pode limpar o input
operadorDeclarado := True; // verifica se tem o simbolo do operador
igualdade.Enabled := False; // igual bloqueado
Edit1.text := Edit1.text + '-';end;Agora na procedure operacao, uma parte eu fiz, mas por pouca pratica com a linguagem e pelo curto prazo, precisei pesquisar na internet para tentar entender onde eu sempre errava.
procedure TForm1.operacao(Sender: TObject); begin digitoDois := StrToFloat(Edit1.Text); // aqui a variavel global recebe o valor do ultimo digito do input e o converte em float resultado := 0;
case Operador of '+': resultado := digitoUm + digitoDois; '-': resultado := digitoUM - digitoDois; // faz um case básico, para saber qual foi o operador usado na operação '*': resultado := digitoUM * digitoDois; '/': if digitoDois <> 0 then begin resultado := digitoUM / digitoDois; // na divisão ele verifica se por acaso o segundo digito é igual a zero, se sim, evita um erro, e apresenta ao usuario. //igualdade.Enabled := true; end else begin ShowMessage('Erro: Divisão por zero!'); // mensagem de erro. Edit1.Text := '0'; Operador := #0; // nas pesquisas, me recomendou anular dessa forma a variavel global do operador quando se usa strings. interessante. Exit; // saida do prgrama end;
end; igualdade.Enabled := true; // aqui eu ativo o botão de igual Operador := #0; // Reseta o operador para evitar repetições involuntárias limparInput := True;
Que ao ser liberado, o botão de igual ( = ), ele pega o valor da operação que foi salvo na variavel global resultado, e converte ela de float par string, e devolve para o input.s
// A operaçao principal é feita aquiprocedure TForm1.mostra(Sender: TObject); begin // botao de igual Edit1.Text := FloatToStr(resultado); end;

