Operadores matemáticos



A linguagem C++ possui cinco operadores matemáticos binários representados pelos seguintes operadores:


+ (adição);

- (subtração);

* (multiplicação);

/ (divisão); e

% (módulo);


e possui um operador unário:


- (menos unário).


Os operadores binários operam sobre dois operandos e o unário sobre um.


Os operadores de adição, subtração, multiplicação e divisão funcionam normalmente como nos cálculos matemáticos usuais. Já o operador módulo fornece-nos o resto de uma divisão inteira (sem eventuais partes fracionárias) como resultado. Por exemplo, quando fazemos a divisão de 9 por 5, o resultado é 1 e o resto é 4.


O operador menos unário serve para trocar o sinal de seu operando (positivo para negativo ou negativo para positivo):


int i = 440;
i = -i;
Label1 -> Caption = i; // Agora o valor de i é - 440



O exemplo a seguir (calculadora básica) possui, no Form, três componentes Edit e cinco RadioButton(s) dentro de um RadioGroup. Todas as propriedades do programa serão geradas em tempo de execução (no código), e não diretamente no Object Inspector. O usuário deverá digitar um valor no Edit1, outro valor no Edit2 e escolher uma operação matemática no RadioGroup para visualizar o resultado no Edit3.


//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Form1 -> Caption = "Calculadora Básica";
Form1 -> BorderStyle = bsSizeToolWin; // altera a borda de Form1

Edit1 -> Text = ""; // esvazia Edit1
Edit2 -> Text = ""; // Esvazia Edit2
Edit3 -> Text = ""; // esvazia Edit3
Edit3 -> ReadOnly = true; // Edit3 não aceita dados via teclado ou mouse (arrastar e soltar)

RadioGroup1 -> Caption = "Escolha uma operação";

RadioButton1 -> Caption = "+ (adição)";
RadioButton2 -> Caption = "- (subtração)";
RadioButton3 -> Caption = "* (multiplicação)";
RadioButton4 -> Caption = "/ (divisão)";
RadioButton5 -> Caption = "% (módulo)";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
/*Na operação de adição precisamos declarar variáveis e realizar as respectivas 
coversões para evitar erros de concatenação de strings em face do operador  +  */
double primeiro = StrToFloat(Edit1 -> Text);
double segundo = StrToFloat(Edit2 -> Text);
Edit3->Text = primeiro + segundo; //realiza o cálculo por via indireta
Edit1->SetFocus(); //chama a função SetFocus() para colocar o foco em Edit1
}
//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
Edit3->Text = double((Edit1->Text) - (Edit2->Text)); //realiza o cálculo por via direta
Edit1->SetFocus(); //chama a função SetFocus() para colocar o foco em Edit1
}
//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton3Click(TObject *Sender)
{
Edit3->Text = double((Edit1->Text) * (Edit2->Text)); //realiza o cálculo por via direta
Edit1->SetFocus(); //chama a função SetFocus() para colocar o foco em Edit1
}
//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton4Click(TObject *Sender)
{
Edit3->Text = double((Edit1->Text) / (Edit2->Text)); //realiza o cálculo por via direta
Edit1->SetFocus(); //chama a função SetFocus() para colocar o foco em Edit1
}
//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton5Click(TObject *Sender)
{
/* Essa parte do código foi corrigido com o comando if ...else pois 
apresentava um bug nas operações em que o divisor era maior que o dividendo*/

//se o valor convertido para ponto flutuante de Edit1 for maior do que o de Edit2
if (StrToFloat(Edit1 -> Text) > StrToFloat(Edit2 -> Text))
//  Edit3 apresentará o resto da divisão de Edit1->Text por Edit2->Text
Edit3 -> Text = double((Edit1 -> Text) % (Edit2 -> Text));
// caso contrário
else
// Edit3 apresentará o valor 0 (zero) em seu texto
Edit3 -> Text = 0;
Edit1 -> SetFocus(); // chama a função SetFocus() para colocar o foco em Edit1
}
//---------------------------------------------------------------------------

anterior

índice

próxima



HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO