Anda di halaman 1dari 33

Professor:

Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

rea: C++ Builder


Ttulo: Calculadora
Descrio: Criando uma simples calculadora, comentando as principais funes e
mtodos utilizados.

Calculadora
Antes de comearmos a desenvolver qualquer projeto, sempre necessrio e muito
importante, tentarmos prever quais ferramentas iremos trabalhar para que assim nosso
servio seja mais simples.
Outro ponto muito importante sempre que possvel ter em mente um outro projeto para
ter como base, principalmente quando esse projeto j est no mercado h algum tempo.
Lembrem-se, inovar muito importante, contudo d muito mais trabalho e necessrio
termos mais pacincia e criatividade.

Nosso Exemplo
Como nossa calculadora ser uma calculadora bem simples, pegaremos como exemplo a
prpria calculadora do Windows. Tentaremos criar uma calculadora bem prxima
qualidade que j conhecemos.

Acho que todos ns conhecemos a calculadora acima, agora vou fazer uma anlise mais
tcnica, decifrando quais objetos iremos utilizar em cada parte da calculadora.

1|Pgina

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Analisando a Calculadora
Peguei a calculadora e separei em oito grandes partes, tirando claro o Form, que o
local aonde iremos desenvolver nossa calculadora.

1 Menu

Essas so as opes da calculadora do Windows, Na opo Editar as opes Copiar e


Colar, na opo Exibir ele d a opo de calculadora padro ou cientfica (no nosso caso
ainda no mexeremos com ela) e agrupamento de dgitos e a opo Ajuda que possui
alguns tpicos da ajuda e algo falando sobre a calculadora.
Para o nosso projeto, usaremos um componente muito conhecido e usado na
programao orientada a objetos que o MainMenu (Standard), um componente j
pronto que precisamos apenas saber qual a melhor forma de trabalhar com ele.

2|Pgina

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

2 Visor
Analisando o visor e com o conhecimento que temos at agora, acreditamos que o visor
um simples Edit, porm digo-vos que no um simples Edit por uma simples razo, o
Edit no tem, em suas propriedades, o alinhamento direito como o alinhamento da
calculadora, para isso utilizaremos ento um outro componente chamado Panel
(Standard), que trabalhando corretamente com ele ficar com a cara de um Edit s que
com mais propriedades do que o mesmo.

3 Botes C, CE e BackSpace
Os mais simples, usaremos 3 Buttons. O que temos que entender aqui a funo de cada
um desses botes.

O boto C limpa tudo, as variveis e operadores.


O boto CE limpa apenas o ltimo nmero, por exemplo, se eu estiver fazendo a
seguinte operao:
5 + 62 5 + 3
E apertar a tecla CE, ela apagar apenas o ltimo nmero por mim digitado, que no caso
acima o nmero 3.
O boto BackSpace apaga o ultimo digito, ou seja, se tivermos digitando o nmero
1357 e apertarmos a tecla BackSpace, ser apagado o nmero 7. Em nossa calculadora
no iremos desenvolver esse boto, pois teramos que trabalhar com funes de string
que por ns ainda no foi estudado.
Obs.: Note que os botes da calculadora do Windows utilizam de cores como azul e
vermelho. Os Buttons do Standard no aceita que voc possa modificar as propriedades
de cores, no entanto, se for de seu desejo utilizar botes coloridos, pode utilizar o
BitButton (Additional) que tem as mesmas funes do Button normal s que permite
utilizar pequenas imagens e cores.

3|Pgina

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

4 Botes Numricos
Eles que sero o nosso pulmo, pois por eles que montaremos nossos nmeros, desde os
mais simples ao mais complexos. Utilizaremos, portanto 10 Buttons que sero
responsveis pela construo dos nossos nmeros.
5 Botes de Memria
Esses 4 botes trabalham diretamente como uma forma de armazenar alguns valores
enquanto a calculadora estiver sendo executada. Todos ns j visualizamos esses
nmeros, porm alguns no sabem qual a funcionalidade de cada um desses botes.
MC Responsvel pela limpeza da memria
MR Responsvel pela recuperao de um nmero que estiver na memria para o visor.
MS Responsvel pela armazenar o nmero que est no visor para a memria.
M+ - Soma ao nmero que j est na memria o nmero que se encontra no visor.
Obs.: Note que logo acima desses 4 botes existe um quadrado (Panel) que quando
armazenado um nmero em sua memria aparece uma letra M e quando no possui nada
na memria fica vazio.
6 Botes (+/- e ,)
Quando vemos esses botes achamos que so os mais simples, porm no bem assim.
O Boto +/- bem simples, apenas troca o sinal do nmero que est no visor. J o boto
de (,) no to simples. Teremos que trabalhar com uma varivel flag, que ser
responsvel apenas de indicar se podemos utilizar a vrgula ou no.
No momento de criar esse boto estudaremos um pouco sobre esse ponto.
7 Operadores ( + - * /)
Eles so os responsveis pelas 4 operaes bsicas, atravs deles escolheremos o que
fazer com dois nmeros, lembrando sempre que para termos um calculo, por mais
simples que seja, temos que ter no mnimo dois nmeros e uma operao.
8 Botes (sqrt % 1/x =)
Analisando os quatro botes, temos:
Boto sqrt, que representa tirar a raiz quadrada do nmero que estiver no visor no
momento.
Boto %, faz clculos simples de porcentagens.
Boto 1/x, dividi o nmero 1 pelo nmero que estiver no visor no momento.
Boto =, finaliza uma operao aritmtica.

4|Pgina

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Resumindo...
Depois de realizarmos uma minuciosa avaliao sobre a calculadora do Windows, abaixo
segue a lista de objetos que iremos trabalhar para o desenvolvimento da nossa
calculadora:
01 Form
26 Buttons (pois no trabalharemos com o boto BackSpace)
01 MainMenu
01 Panel ( + 01 se formos criar a janelinha para mostrar se existe alguma varivel
armazenada ou no)

Comeando o Projeto
Toda vez, ao comearmos um projeto, sempre os primeiros passos sero dados no Form,
que a nossa mesa de trabalho.
Form
Properties
BorderIcons
(biMaximize)
Caption
Height

Icon *
Name
Position
Width

Valor
False

Observao
Essa opo para bloquear a
Maximizar da Calculadora.
Calculadora
Nome de Exibio do Formulrio
260
Altura, 260 pixels exatamente
o tamanho da calculadora do
Windows
Escolher um cone para o Apenas esttico.
seu projeto
frmCalculadora
Nome real do nosso formulrio
poScreenCenter
Define, como posio inicial, o
centro da tela
260
Largura,
faremos
uma
calculadora quadrada, ento tem
que ser a mesma medida da
altura.

* Opcional
Depois de configurarmos essas propriedades, nossa calculadora j ter o seguinte
aspecto, vale ressaltar alguns pontos:
1 Ela est em tamanho real.
2 Percebam o cone, dando uma impresso de um trabalho mais profissional.
3 O boto Maximizar est desabilitado.

5|Pgina

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Menu
Depois de configurarmos nossa rea de trabalho, ser necessrio agora configurar o
menu de opes, para isso utilizaremos o MainMenu. A sua utilizao bem simples, v
at o MainMenu na Aba Standard e coloque-o no Form, neste momento percebam que
so poucas as propriedades que podemos utilizar.

6|Pgina

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Para introduzir as opes de menu podemos fazer de duas maneiras, ou indo na opo
Items ou dando um duplo clique no objeto em cima do formulrio, quando feito uma
dessas opes dever aparecer a seguinte tela:

por ela que configuraremos o nosso menu. Para isso basta dar um clique no quadrinho
azul visto em cima e digitar na opo Caption o que deseja. Depois de digitar o menu
principal (aquele que sempre visualizado), digitar as sub-opes pertencentes a cada
um.

Se desejar colocar um atalho para cada uma das opes,v at a opo ShortCut. Defina
as seguintes sub-opes:
Editar Copiar e Colar
Exibir Autor
Ajudar Sobre a Calculadora
Visor
Iremos utilizar o objeto Panel para trabalhar com o Visor

7|Pgina

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Vamos configurar as seguintes opes:


Properties
Alignment
BorderStyle
Caption
Color
Font

Valor
taRightJustify
bsSingle
0
clWhite
Tamanho 10

Name
Top

pnlVisor
2

Observao
Para alinhar a direita
Para dar um visual de borda.
O valor inicial 0 (zero)
Cor branca
S alterei o tamanho, se quiser
alterar o tipo e cor, a vontade.
Nome real do Panel
a distncia do visor para o
topo do formulrio

Aps essas configuraes, nosso projeto tem que estar mais ou menos com essa cara:

Botes C e CE
O prximo passo ser a insero de dois Buttons que representaram os botes CE e C,
lembrando que no utilizaremos o boto BackSpace por ainda no mexer com funes de
string.
Configurando o boto CE
Properties
Caption
Font Color

Valor
CE
Vermelho

Height
Left

25
88

Observao
Valor de Exibio do Button
Se
quiser,
pode
escolher
qualquer outra cor.
Altura do Boto
Distncia da coluna y, ou seja,
distncia da borda esquerda do
formulrio

8|Pgina

Professor:
Daniel de Camargo
Name
Top
Width

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

btnCE
40
73

Nome real do componente


Distncia da borda superior
Largura do boto

Properties
Caption
Font Color

Valor
C
Vermelho

Height
Left

25
168

Name
Top
Width

btnC
40
73

Observao
Valor de Exibio do Button
Se
quiser,
pode
escolher
qualquer outra cor.
Altura do Boto
Distncia da coluna y, ou seja,
distncia da borda esquerda do
formulrio
Nome real do componente
Distncia da borda superior
Largura do boto

Configurando o boto C

Veja como est ficando a nossa calculadora, lembrando que estamos programando
apenas a parte visual, em nenhum momento trabalhamos com cdigo ainda.

Botes Numricos
Ao todo so 10 botes numricos de 0 a 9. Para simplificar, vamos pensar no seguinte,
todos esses botes tm algumas propriedades em comum, ento vamos configurar as
propriedades em comum entre todos eles
Properties
Font Color
Height
Width

Valor
Azul
25
35

Observao
Pode escolher outra cor.
Altura do boto
Largura do boto

Agora vamos configurar cada um dos botes numricos

9|Pgina

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Boto 0
Properties
Caption
Left
Name
Top
Width

Valor
0
48
btnNum0
168
35

Observao
Nome de Exibio
Distncia da borda a esquerda
Nome real
Distncia da borda superior
Largura do objeto

Boto 1
Properties
Caption
Left
Name
Top
Width

Valor
1
48
btnNum1
136
35

Observao
Nome de Exibio
Distncia da borda a esquerda
Nome real
Distncia da borda superior
Largura do objeto

Boto 2
Properties
Caption
Left
Name
Top
Width

Valor
2
88
btnNum2
136
35

Observao
Nome de Exibio
Distncia da borda a esquerda
Nome real
Distncia da borda superior
Largura do objeto

Boto 3
Properties
Caption
Left
Name
Top
Width

Valor
3
128
btnNum3
136
35

Observao
Nome de Exibio
Distncia da borda a esquerda
Nome real
Distncia da borda superior
Largura do objeto

Boto 4
Properties
Caption
Left
Name
Top
Width

Valor
4
48
btnNum4
104
35

Observao
Nome de Exibio
Distncia da borda a esquerda
Nome real
Distncia da borda superior
Largura do objeto

10 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Boto 5
Properties
Caption
Left
Name
Top
Width

Valor
5
88
btnNum5
104
35

Observao
Nome de Exibio
Distncia da borda a esquerda
Nome real
Distncia da borda superior
Largura do objeto

Boto 6
Properties
Caption
Left
Name
Top
Width

Valor
6
128
btnNum6
104
35

Observao
Nome de Exibio
Distncia da borda a esquerda
Nome real
Distncia da borda superior
Largura do objeto

Boto 7
Properties
Caption
Left
Name
Top
Width

Valor
7
48
btnNum7
72
35

Observao
Nome de Exibio
Distncia da borda a esquerda
Nome real
Distncia da borda superior
Largura do objeto

Boto 8
Properties
Caption
Left
Name
Top
Width

Valor
8
88
btnNum8
72
35

Observao
Nome de Exibio
Distncia da borda a esquerda
Nome real
Distncia da borda superior
Largura do objeto

Boto 9
Properties
Caption
Left
Name
Top
Width

Valor
9
128
btnNum9
72
35

Observao
Nome de Exibio
Distncia da borda a esquerda
Nome real
Distncia da borda superior
Largura do objeto

11 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Depois de todas essas configuraes, nossa calculadora est da seguinte maneira:

Botes de Memria
Utilizaremos 4 BitButtons ou Buttons
Boto MC
Properties
Caption
FontColor
Height
Left
Name
Top
Width

Valor
MC
Vermelho
25
5
btnMC
72
35

Observao
Nome de Exibio
Pode escolher outra cor
Altura do objeto
Distncia da borda esquerda
Nome real do objeto
Distncia da borda superior
Largura do objeto

Boto MR
Properties
Caption
FontColor
Height
Left
Name
Top
Width

Valor
MR
Vermelho
25
5
btnMR
104
35

Observao
Nome de Exibio
Pode escolher outra cor
Altura do objeto
Distncia da borda esquerda
Nome real do objeto
Distncia da borda superior
Largura do objeto

Boto MS
Properties
Caption
FontColor
Height

Valor
MS
Vermelho
25

Observao
Nome de Exibio
Pode escolher outra cor
Altura do objeto

12 | P g i n a

Professor:
Daniel de Camargo
Left
Name
Top
Width
Boto M+
Properties
Caption
FontColor
Height
Left
Name

Top
Width

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

5
btnMS
136
35

Distncia da borda esquerda


Nome real do objeto
Distncia da borda superior
Largura do objeto

Valor
M+
Vermelho
25
5
btnMm

Observao
Nome de Exibio
Pode escolher outra cor
Altura do objeto
Distncia da borda esquerda
Nome real do objeto, aqui vale
uma observao, nunca utilize
caracteres especiais como (+ @
%)
Distncia da borda superior
Largura do objeto

168
35

Vejamos a nossa calculadora como est ficando:

Botes ( +/- e ,)
Esses dois botes so bem simples
Boto +/Properties
Caption
FontColor
Height
Left
Name

Valor
MS
Azul
25
88
btnModulo

Observao
Nome de Exibio
Pode escolher outra cor
Altura do objeto
Distncia da borda esquerda
Nome real do objeto, no utilize
caracteres (+ / -)

13 | P g i n a

Professor:
Daniel de Camargo
Top
Width
Boto ,
Properties
Caption
FontColor
Height
Left
Name

Top
Width

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

168
35

Distncia da borda superior


Largura do objeto

Valor
,
Azul
25
128
btnVirgula

Observao
Nome de Exibio
Pode escolher outra cor
Altura do objeto
Distncia da borda esquerda
Nome real do objeto, aqui vale
uma observao, nunca utilize
caracteres especiais como (+ @
%)
Distncia da borda superior
Largura do objeto

168
35

Mais uma prvia da calculadora

Operadores (+ - * /)
Vamos configurar agora os botes dos operadores.
Boto +
Properties
Caption
FontColor
Height
Left
Name
Top
Width

Valor
+
Vermelho
25
168
btnSoma
168
35

Observao
Nome de Exibio
Pode escolher outra cor
Altura do objeto
Distncia da borda esquerda
Nome real do objeto
Distncia da borda superior
Largura do objeto

14 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Boto Properties
Caption
FontColor
Height
Left
Name
Top
Width

Valor
Vermelho
25
168
btnSub
136
35

Observao
Nome de Exibio
Pode escolher outra cor
Altura do objeto
Distncia da borda esquerda
Nome real do objeto
Distncia da borda superior
Largura do objeto

Boto *
Properties
Caption
FontColor
Height
Left
Name
Top
Width

Valor
*
Vermelho
25
168
btnMult
104
35

Observao
Nome de Exibio
Pode escolher outra cor
Altura do objeto
Distncia da borda esquerda
Nome real do objeto
Distncia da borda superior
Largura do objeto

Depois desses novos objetos e configuraes, nossa calculadora deve estar desta
maneira:

Botes (sqrt % 1/x =)


As propriedades desses botes devem ser a seguinte. No esquea claro de inserir mais
4 BitButtons

15 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Boto =
Properties
Caption
FontColor
Height
Left
Name
Top
Width

Valor
=
Vermelho
25
208
btnIgual
168
35

Observao
Nome de Exibio
Pode escolher outra cor
Altura do objeto
Distncia da borda esquerda
Nome real do objeto
Distncia da borda superior
Largura do objeto

Boto 1/x
Properties
Caption
FontColor
Height
Left
Name
Top
Width

Valor
1/x
Azul
25
208
btnX
136
35

Observao
Nome de Exibio
Pode escolher outra cor
Altura do objeto
Distncia da borda esquerda
Nome real do objeto
Distncia da borda superior
Largura do objeto

Boto %
Properties
Caption
FontColor
Height
Left
Name
Top
Width

Valor
%
Azul
25
208
btnPorc
104
35

Observao
Nome de Exibio
Pode escolher outra cor
Altura do objeto
Distncia da borda esquerda
Nome real do objeto
Distncia da borda superior
Largura do objeto

Boto sqrt
Properties
Caption
FontColor
Height
Left
Name
Top
Width

Valor
%
Azul
25
208
btnRaiz
72
35

Observao
Nome de Exibio
Pode escolher outra cor
Altura do objeto
Distncia da borda esquerda
Nome real do objeto
Distncia da borda superior
Largura do objeto

16 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Vejamos como est ficando nossa calculadora

Para no ficar com esse espao grande ao lado do boto CE vamos colocar um Panel para
exibir quando a memria est sendo usada ou no.
Utilize as seguintes configuraes no novo Panel
Properties
Alignment
BorderStyle
Caption

Valor
taCenter
bsSingle

Height
Left
Name
Top

25
5
pnlMemoria
40

Width

75

Observao
Centralizar
Para dar um visual de borda.
Deixaremos em branco para dar
uma noo de vazio
Tamanho
Distncia a borda esquerda
Nome real do Panel
a distncia do visor para o
topo do formulrio
Largura do objeto

Depois de todas essas configuraes, vamos comparar, visualmente, a calculadora do


Windows e a nossa calculadora:

Windows

Nosso Projeto

17 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Linhas de Cdigo
Agora vamos comear a fazer a programao de cada um dos objetos que iremos utilizar
em nosso projeto.
Biblioteca math.h
Algumas vezes, o programador precisar utilizar algumas ferramentas que o Builder
padro no dispe automaticamente porm, existem algumas bibliotecas na pasta include
do Builder que nos auxiliam nessas funes. Iremos declarar a biblioteca math.h para
realizar a funo de raiz quadrada.
Veja como declarar:

Variveis
Uma varivel um espao reservado na memria do computador para armazenar um tipo
de dado determinado. Variveis devem receber nomes para poderem ser referenciadas e
modificadas quando necessrio.
Toda vez que vamos comear um projeto, o grande desafio e prever quais variveis sero
utilizadas em nossa programao. Aqui veremos algumas dessas variveis.
Toda varivel tem um tipo e um nome, vejamos quais variveis iremos utilizar
AnsiString copiar
Essa varivel ir nos auxilia com a operao de copiar e colar. Existem outras maneiras
para realizar essa tarefa, mas iremos utilizar essa para ter uma simplicidade. O tipo
AnsiString indica que iremos trabalhar com palavras que podem ser caracteres de [a..z] ,

18 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

nmeros [0..9] e caracteres especiais [@, #, $]. Tome muito cuidado quando trabalhar
com esse tipo de dado, no um tipo de dado para clculos.
AnsiString memoria
Com essa varivel iremos trabalhar com os botes de memria (MC, MR, MS e M+).
Utilizaremos o tipo AnsiString tambm, porm daria para utilizar o tipo float tambm.
float num1,num2
Elas sero responsveis por armazenar os nmeros. Lembrando sempre que por mais
contas que voc ir trabalhar, sempre necessrio pelo menos duas variveis para
realizar essa tarefa.
int op
Ser a responsvel pelo controle da operao aritmtica que o usurio ir escolher.
int virgula
Como sabemos que s podemos utilizar a virgula em um nico nmero, essa varivel far
esse controle, dizendo a hora que podemos ou no utilizar essa opo.
int inicio
Ns precisamos avisar ao programa quando que estaremos iniciando um nmero ou
quando apenas parte de um nmero. Por esse motivo, utilizaremos essa varivel para
saber quando inicio de nmero ou no.
int primeiro
Utilizaremos essa varivel para indicar apenas se o nmero que digitamos o primeiro de
uma srie ou no. Essa varivel ser muito importante quando formos trabalhar com os
operadores, pois eles podem trabalhar tambm como se fosse um boto de igual, ou seja,
de finalizar uma operao.
Essas declaraes devem ser feitas de uma maneira global. Para isso devemos declarar as
variveis logo abaixo da declarao do formulrio. Abaixo segue a imagem do local
correto da declarao com as inicializaes devidas.

19 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Menu
Antes de comearmos a entrar com os cdigos, temos as seguintes opes:
Editar Copiar
Editar Colar
Exibir Autor
Ajuda Sobre a Calculadora
Percebam que as opes esto um pouco diferente da calculadora habitual do Windows
por motivo de ainda no abordarmos alguns assuntos que seria importante para nosso
desenvolvimento.
Editar Copiar
No Form aonde est desenvolvendo a calculadora, v at a opo Editar Copiar e d
um clique como se estivesse escolhendo essa opo. Aparecer uma tela igual a tela
abaixo:

20 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Perceba que o cursor j est posicionado no lugar correto de inserir o cdigo. Usaremos
um cdigo bem simples para representar o Copiar e Colar. O cdigo ficar desta maneira:
void __fastcall TfrmCalculadora::Copiar1Click(TObject *Sender)
{
copiar = pnlVisor -> Caption;
}

Veja que o prprio Builder j monta uma funo de chamada rpida (__fastcall)
pertencente ao formulrio Calculadora (TfrmCalculadora). O nosso cdigo faz com que a
varivel copiar recebe o valor que se encontra no objeto pnlVisor na opo Caption
Editar Colar
O cdigo do colar bem parecido, a nica diferena que em vez da varivel receber o
valor do objeto, o objeto que receber o valor da varivel.
Veja o cdigo:
void __fastcall TfrmCalculadora::Colar1Click(TObject *Sender)
{
pnlVisor -> Caption = copiar;
}

Exibir Autor
Essa opo no existe na calculadora normal, mas iremos utilizar essa opo apenas para
utilizar uma ferramenta que geralmente no muito citada nos livros de Builder, porm
sempre utilizei essa ferramenta com muito xito.
Utilizaremos para exibir uma mensagem o MessageBox. Para utilizar essa opo,
devemos utilizar da seguinte maneira:
Application -> MessageBox (Mensagem, Ttulo, MB_OPES + MB_ICONES)
O nosso cdigo ficar desta maneira:
void __fastcall TfrmCalculadora::Autor1Click(TObject *Sender)
{
Application -> MessageBox("Daniel de Camargo","Autor",
MB_ICONINFORMATION);
}

MB_OK

Note, primeiro veio o nome do Autor, depois o ttulo da mensagem, a opo de boto OK
e o cone de informao.
Veja como o resultado desta linha de aplicao (programao):

21 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Ajuda Sobre a Calculadora


Nesta opo vamos dizer qual a verso do software. Usaremos o mesmo mtodo do
autor.
Cdigo:
void __fastcall TfrmCalculadora::SobreaCalculadora1Click(TObject *Sender)
{
Application -> MessageBox("Verso 1.01 - Agosto/2008","Verso", MB_OK
+ MB_ICONINFORMATION);
}

Botes C e CE
Boto C
Essa operao ir limpar todas as variveis e operadores. Para que isso seja possvel,
todas as variveis numricas sero igualadas a zero e as variveis do tipo string sero
igualadas a espao em branco.
Para inserir o cdigo, clique duas vezes no objeto at aparecer o nome da funo com o
cursor entre as chaves.
O cdigo ser o seguinte:
void __fastcall TfrmCalculadora::btnCClick(TObject *Sender)
{
copiar = "";
num1 = 0;
num2 = 0;
op = 0;
virgula = 0;
inicio = 0;
primeiro = 0;
pnlVisor->Caption = "0";
}

22 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Boto CE
Como j dito antes, esse boto apenas vai zerar o segundo nmero e vai fazer com que o
visor mostre o nmero 0. Fora esses dois parmetros, ser importante avisar que ser
iniciar um novo nmero (igualando a varivel inicio zero).
Segue o cdigo:
void __fastcall TfrmCalculadora::btnCClick(TObject *Sender)
{
num2 = 0;
inicio = 0;
pnlVisor->Caption = "0";
}

Botes Numricos
Eles so a essncia da construo de nossos nmeros que nada mais so do que a juno
de um ou mais nmeros. Vou mostrar o cdigo de apenas um nmero, o resto basta
seguir o mesmo padro.
Os nmeros de 1 9 o cdigo ficar da seguinte maneira, vale ressaltar que o exemplo
abaixo foi feito para o nmero 1, no esquea de substituir para os outros nmeros.
void __fastcall TfrmCalculadora::btnNum1Click(TObject *Sender)
{
if (inicio == 0)
{
pnlVisor -> Caption = "1";
inicio = 1;
}
else
{
pnlVisor -> Caption = pnlVisor -> Caption + "1";
}
}

Explicando o cdigo:
Veja que logo a primeira linha de cdigo uma deciso, ou seja, pergunta se o nmero
que est construindo em questo inicio ou no, pois se for inicio, ele apagar o que est
escrito no visor e colocar apenas 1. Agora, se no for inicio, manter o que j foi escrito
no painel e acrescentar o caractere 1 ao final do nmero.
No sei se vocs perceberam, mas no citei o nmero 0 na seqncia acima, disse
apenas que o cdigo deveria ser colocado nos nmeros de 1 9. Por que deixei o zero de
fora?
Pelo simples fato de no criar um nmero do tipo 0000, a linha de cdigo para o nmero
zero sofrer apenas uma alterao:

23 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

void __fastcall TfrmCalculadora::btnNum0Click(TObject *Sender)


{
if (inicio == 0)
{
pnlVisor -> Caption = "0";
}
else
{
pnlVisor -> Caption = pnlVisor -> Caption + "0";
}
}

Note que mesmo identificando que inicio de um nmero, eu no mudo o status do


mesmo, pois se algum coloca zero no incio, para mim continua sendo como nada
tivesse acontecido.
Botes de Memria
Toda vez que tiver algum nmero na memria, escreveremos no pnlMemoria a sigla MEM,
que vai significar para ns que existe algum nmero gravado. Se o pnlMemoria estiver
em branco, significar que no tem nada armazenado na memria.
Boto MC
Como ele o responsvel pela limpeza na memria iremos apenas limpar a varivel
memoria e limpar o que estiver escrito no painel pnlMemoria.
Cdigo:
void __fastcall TfrmCalculadora::btnMCClick(TObject *Sender)
{
memoria = "0";
pnlMemoria -> Caption = "";
}

Boto MR
Toda vez que o usurio acionar esse boto, ele recuperar o valor que estiver na memria
para o visor.
Cdigo:
void __fastcall TfrmCalculadora::btnMRClick(TObject *Sender)
{
pnlVisor -> Caption = memoria;
}

Boto MS
Armazena o nmero que est no visor na varivel memoria.

24 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Cdigo:
void __fastcall TfrmCalculadora::btnMSClick(TObject *Sender)
{
memoria = pnlVisor -> Caption;
pnlMemoria -> Caption = "MEM";
}

Boto M+
Soma ao nmero que est na memria o nmero que se encontra no visor e armazena o
novo nmero.
Neste caso, vamos declarar duas variveis locais, ou seja, dentro da prpria funo que
nos auxiliaram na soma entre a memria e o nmero do visor.
Cdigo:
void __fastcall TfrmCalculadora::btnMmClick(TObject *Sender)
{
float aux1, aux2;
aux1 = StrToFloat(memoria);
aux2 = StrToFloat(pnlVisor -> Caption);
aux1 = aux1 + aux2;
memoria = FloatToStr(aux1);
}

Vejam que declarei duas variveis do tipo real (float). Usei uma funo de converso
StrToFloat para converter string em nmero real e usei a inverso dela a FloatToStr para
converter um nmero real em string.

Aqui vale uma observao muito importante, vai muito de cada


programador como trabalhar com variveis, se sempre vai usar
variveis globais (declaradas logo no incio) ou vai usar variveis
locais.
Botes ( +/- e ,)
Temos dois botes bem opostos, pois o +/- bem simples, j o de vrgula vale um pouco
mais de reflexo.
Boto +/ apenas uma inverso de sinal, ou seja, basta eu pegar o valor que est no visor e
multiplicar por -1.
Cdigo:

25 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

1 opo funcional, mas no a mais correta.


void __fastcall TfrmCalculadora::btnModuloClick(TObject *Sender)
{
pnlVisor -> Caption = pnlVisor -> Caption * -1;
}

Mas por que no a mais correta, pelo simples fato de que toda vez que for trabalhar
com algum tipo de clculo mais correto que se converta o valor, faa o calculo e depois
volte esse valor ao tipo string, pois os conversores de tipos j tem mecanismos que
verificam se existe algum erro ou no.
2 opo a mais correta
void __fastcall TfrmCalculadora::btnModuloClick(TObject *Sender)
{
pnlVisor -> Caption = FloatToStr(StrToFloat(pnlVisor -> Caption) * -1);
}

a mais correta pois trabalha convertendo os valores de string para real e de real para
string evitando assim qualquer tipo de erro.
Boto ,
Neste boto iremos controlar o uso da vrgula, podemos utiliz-la somente uma vez em
cada nmero, ento temos que fazer esse controle atravs da varivel virgula que
declaramos anteriormente.
Cdigo:
void __fastcall TfrmCalculadora::btnVirgulaClick(TObject *Sender)
{
if (virgula == 0)
{
if (inicio==0)
{
pnlVisor -> Caption = "0,";
inicio = 1;
}
else
{
pnlVisor -> Caption = pnlVisor -> Caption + ",";
}
virgula = 1;
}
}

26 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Operadores
Os operadores exercem um papel muito importante na nossa calculadora. Primeiro ponto
devemos definir alguns valores para diferenciar as quatro operaes bsicas. Definiremos
como nosso padro os seguintes valores: 1 soma, 2 subtrao, 3 multiplicao e 4
diviso.
Segundo ponto que o operador um finalizador de um nmero, pois quando
escolhemos uma operao indica que j terminamos de digitar o nosso nmero. O que
precisaremos ver se o nmero que terminamos de digitar o primeiro nmero ou o
segundo nmero. Ele s ser o primeiro nmero quando iniciarmos realmente as nossas
operaes. Por isso importante termos declarado uma varivel primeiro.
Boto + (soma)
Vamos comear com o boto de soma, veja o cdigo:
void __fastcall TfrmCalculadora::btnSomaClick(TObject *Sender)
{
if (primeiro == 0)
{
num1 = StrToFloat(pnlVisor -> Caption);
op = 1;
primeiro = 1;
inicio = 0;
}
else
{
num2 = StrToFloat(pnlVisor -> Caption);
if (op == 1)
{
num1 = num1 + num2;
}
if (op == 2)
{
num1 = num1
}
if (op == 3)
{
num1 = num1
}
if (op == 4)
{
num1 = num1
}
pnlVisor -> Caption
op = 1;
inicio = 0;

- num2;

* num2;

/ num2;
= FloatToStr(num1);

}
}

27 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Perceba que logo a primeira linha de cdigo, eu verifico se a varivel primeiro igual a
zero. Pois se a mesma for igual a zero significa que o usurio acabou de digitar o primeiro
nmero. Vamos analisar um pouco melhor esse trecho de cdigo:
if (primeiro == 0)
{
num1 = StrToFloat(pnlVisor -> Caption); (1)
op = 1; (2)
primeiro = 1; (3)
inicio = 0; (4)
}

Note que sendo a varivel igual a zero tomamos as seguintes decises:


(1)
Convertemos o valor do visor (pnlVisor -> Caption) de uma string (palavra) para
um nmero real (float).
(2)
Mudamos o valor da varivel op para 1, pois como definimos anteriormente, o
valor 1 indicar que estaremos realizando uma soma.
(3)
Outra varivel que mudaremos o valor ser a varivel primeiro, pois a partir do
momento que entramos com o primeiro valor (1) bloqueamos o valor 1 para que ele no
seja sobrescrito.
(4)
Inicializamos a varivel inicio para que assim que o usurio digitar qualquer outro
valor numrico a nossa calculadora comece a criar um novo nmero.
Agora vamos ver o restante do cdigo:
else (1)
{
num2 = StrToFloat(pnlVisor -> Caption); (2)
if (op == 1) (3)
{
num1 = num1 + num2; (4)
}
if (op == 2)
{
num1 = num1
}
if (op == 3)
{
num1 = num1
}
if (op == 4)
{
num1 = num1
}
pnlVisor -> Caption
op = 1; (6)
inicio = 0; (7)

- num2;

* num2;

/ num2;
= FloatToStr(num1); (5)

Cdigo linha a linha:

28 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

(1)
Esse comando s ser executado quando o valor da varivel primeiro no for zero,
ou seja, quando j entramos com um primeiro.
(2)
Veja que bem parecido com o primeiro cdigo, a nica grande diferena que
agora estamos convertendo o valor do visor e guardando na varivel num2, que o
segundo nmero da nossa operao.
(3)
J que entramos com o segundo nmero, agora verifico qual foi a operao por ele
escolhido anteriormente, antes de digitar o segundo nmero. Nesta linha verifico se o
usurio deseja fazer uma operao de soma.
(4)
a operao de soma, pego o valor do num1 e somo com o valor de num2, aps
essa operao guardo o resultado em num1, pois ele sempre representar o meu
primeiro nmero em uma operao.
(5)
Depois de efetuar a operao, fao o inverso do passo (2), converto agora um valor
do tipo real (float) em string e exibo no meu visor.
(6)
Mudamos o valor da varivel op para 1 indicando que escolhemos a operao
soma.
(7)
Inicializamos a varivel inicio para que assim que o usurio digitar qualquer outro
valor numrico a nossa calculadora comece a criar um novo nmero.
Botes - * /
Esses botes tm a mesma lgica que o boto soma, s ter duas pequenas mais
importantes mudanas que so as duas linhas em que atribumos varivel op o valor
correspondente a operao escolhida.
Abaixo vou colocar os cdigos para simples conferncia.
Boto - (subtrao)
void __fastcall TfrmCalculadora::btnSubClick(TObject *Sender)
{
if (primeiro == 0)
{
num1 = StrToFloat(pnlVisor -> Caption);
op = 2;
primeiro = 1;
inicio = 0;
}
else
{
num2 = StrToFloat(pnlVisor -> Caption);
if (op == 1)
{
num1 = num1 + num2;
}
if (op == 2)
{
num1 = num1 - num2;
}
if (op == 3)
{

29 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

num1 = num1 * num2;


}
if (op == 4)
{
num1 = num1 / num2;
}
pnlVisor -> Caption = FloatToStr(num1);
op = 2;
inicio = 0;
}
}

Boto * (multiplicao)
void __fastcall TfrmCalculadora::btnMultClick(TObject *Sender)
{
if (primeiro == 0)
{
num1 = StrToFloat(pnlVisor -> Caption);
op = 3;
primeiro = 1;
inicio = 0;
}
else
{
num2 = StrToFloat(pnlVisor -> Caption);
if (op == 1)
{
num1 = num1 + num2;
}
if (op == 2)
{
num1 = num1 - num2;
}
if (op == 3)
{
num1 = num1 * num2;
}
if (op == 4)
{
num1 = num1 / num2;
}
pnlVisor -> Caption = FloatToStr(num1);
op = 3;
inicio = 0;
}
}

Boto / (diviso)
void __fastcall TfrmCalculadora::btnDivClick(TObject *Sender)
{
if (primeiro == 0)
{

30 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

num1 = StrToFloat(pnlVisor -> Caption);


op = 4;
primeiro = 1;
inicio = 0;
}
else
{
num2 = StrToFloat(pnlVisor -> Caption);
if (op == 1)
{
num1 = num1 + num2;
}
if (op == 2)
{
num1 = num1 - num2;
}
if (op == 3)
{
num1 = num1 * num2;
}
if (op == 4)
{
num1 = num1 / num2;
}
pnlVisor -> Caption = FloatToStr(num1);
op = 4;
inicio = 0;
}
}

Botes (sqrt % 1/x =)


Boto sqrt
Esse boto responsvel em extrair a raiz quadrada do nmero que est no visor da
calculadora. Seu cdigo bem simples, porm totalmente dependente da biblioteca
math.h. Se a biblioteca no for includa no projeto, no ir funcionar.
Cdigo:
void __fastcall TfrmCalculadora::btnRaizClick(TObject *Sender)
{
num1 = sqrt (StrToFloat(pnlVisor -> Caption));
pnlVisor -> Caption = num1;
inicio = 0;
}

Perceba que usamos duas linhas de cdigo pelo simples fato de que no queremos
apenas exibir o novo nmero, queremos tambm armazenar esse novo valor.
A funo sqrt s aceita valores reais (lembrando que um nmero inteiro est contido no
conjunto dos reais). Por esse motivo que usei a funo de converso de string para real.

31 | P g i n a

Professor:
Daniel de Camargo

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

Boto %
Esse boto serve para calcularmos a porcentagem de um determinado nmero.
Cdigo:
void __fastcall TfrmCalculadora::btnPorcClick(TObject *Sender)
{
num2 = StrToFloat(pnlVisor->Caption);
num2 = (num1*num2)/100;
pnlVisor->Caption =num2;
inicio = 0;
}

Observe que trabalhamos apenas com 4 linhas de cdigo. Na primeira convertemos o


valor do visor e armazenamos na varivel num2. Na segunda, fazemos o calculo que o
primeiro vezes o segundo dividido por cem e a terceira linha mostramos no visor o novo
valor. A quarta linha serve apenas para forar a criao de um novo nmero caso o
usurio digite algum boto numrico.
Boto 1/x
Esse o mais fcil de toda a calculadora, at hoje no sei qual o motivo da existncia
desse boto, mas enfim, basta dividir o nmero 1 pelo nmero que estiver no visor da
nossa calculadora.
Cdigo:
void __fastcall TfrmCalculadora::btnClick(TObject *Sender)
{
num1 = StrToFloat(pnlVisor->Caption);
num1 = 1/num1;
pnlVisor->Caption = num1;
inicio = 0;
}

Boto =
Ele o principal finalizador de operaes. Tem apenas uma opo importante do que
vimos at agora. Veja o cdigo:

void __fastcall TfrmCalculadora::btnIgualClick(TObject *Sender)


{
num2 = StrToFloat(pnlVisor -> Caption);
if (op == 1)
{
num1 = num1 + num2;

32 | P g i n a

Professor:
Daniel de Camargo
}
if (op == 2)
{
num1 = num1
}
if (op == 3)
{
num1 = num1
}
if (op == 4)
{
num1 = num1
}
pnlVisor -> Caption
op = 5;
inicio = 0;

IMPORTANTE
Todo contedo inserido nesse
documento de total
responsabilidade do seu autor.

- num2;

* num2;

/ num2;
= FloatToStr(num1);

Note que na penltima linha apareceu um op = 5. Ai voc pode parar e perguntar: - U,


temos 4 operaes, por que ele est usando um op = 5?. Respondo-vos usei op = 5 para
que a nossa calculadora no saia fazendo qualquer outro tipo de calculo. O op = 5 para
mim ser o mesmo que dizer a calculadora, s faa esse calculo e mais nada. Espere para
um novo comando.
Pronto, se voc realizar cada um desses passos, ao final ter uma calculadora muito
funcional e bem parecida com a calculadora do sistema operacional Windows.

33 | P g i n a

Anda mungkin juga menyukai