Teoria

E aí pessoal, aqui é o Juan do Responde Aí, e hoje vamos falar de Operações Aritméticas com C++.

Introdução aos operadores

Você logo vai notar que matemática é uma parte muito importante da programação. Constantemente vamos querer somar e subtrair números, comparar se dois valores são iguais, ou até saber se uma sequência lógica é verdadeira ou falsa.

Pra realizar essas atividades nós utilizamos os operadores!

No C++ temos diversos operadores. A gente já utilizou o operador < < para inserir textos na função cout, e também usamos o operador = para guardar valores dentro de variáveis.

E agora vamos conhecer os operadores usados para operações matemáticas.

Os operadores aritméticos básicos

Estes são os operadores mais básicos do C++. Representam as operações de soma, subtração, multiplicação, divisão e resto da divisão. (alguns professores chamam o “resto da divisão” de “módulo”)

Estes cinco operadores são usados da mesma forma, é só colocar eles entre dois valores:

  • Os valores podem até estar guardado em variáveis, por exemplo: v a r 1   +   v a r 2
  • Podem ser números escritos literalmente, tipo: 17   /   24
  • Ou pode ser um número e uma variável numérica, dessa forma: 17   %   v a r

O resultado de qualquer operação pode ser guardado em uma variável, ou pode ser impresso diretamente usando cout.

Olha só o exemplo:

Vamos ver mais um exemplo. Qual é o resto da divisão entre 20 por 3 ? É só usar o operador %.

Atualizando variáveis

Imagine agora a situação: Você está desenvolvendo um programa pra contar os pontos do seu time no Brasileirão. Ele começa o campeonato com P o n t o s   =   0 . Toda semana tem um jogo, e sempre que o time vencer ele ganha três pontos. Assim, se tiver uma vitória P o n t o s   =   3 , se tiver duas vitórias P o n t o s   =   6 , e assim por diante.

Como você pode ver, o valor da variável pontos vai mudar sempre que o time vencer. Para fazer isso, podemos usar a variável P o n t o s para guardar o resultado da operação P o n t o s   +   3 . Saca só:

O que nós fizemos foi atualizar uma variável.

Isso funciona porque o C++ primeiro calcula todas as operações à direita, e só depois guarda o resultado na variável à esquerda:

Os operadores de atribuição

Você logo vai notar que atualizar variáveis é uma tarefa extremamente comum durante a programação.

Pra facilitar esse processo existem os operadores de atribuição:

Em programação, a palavra atribuir geralmente significa “guardar um valor”. Os operadores de atribuição fazem exatamente isso! Guardam um determinado valor em uma variável. O operador = apenas guarda os valores. Os demais operadores de atribuição efetuam operações matemáticas antes de guardar o valor resultante.

Voltando ao nosso exemplo dos pontos do time de futebol, se o time ganhar a segunda rodada, a gente pode usar o operador += pra adicionar 3 à variável Pontos:

Operadores de incremento e decremento

De todas as operações de atualização de variável a mais comum é adicionar ou subtrair “1” da variável. Você pode efetuar essa operação utilizando x = x + 1 ou com x + = 1 . Só que essas operações são tão comuns que inventaram um atalho, os operadores de incremento!

Voltando ao exemplo do time de futebol. Se o time empatar um jogo ele ganha um ponto. Então, podemos usar o operador ++ para adicionar mais um ponto ao time.

Sacou? É só colocar o operador ++ ou -- depois de uma variável, e aí a variável vai ser incrementada ou decrementada!

Fun fact alert! O C++ tem o “++” na frente porque ele é uma Linguagem C incrementada. (Piada de programador)

Conversão automática de tipos.

Uma coisa muito importante pra ter cuidado em C++ é com os tipos de dados! Por exemplo. Olha o resultado do seguinte programa:

Notou a diferença?

Na linha 08, a gente dividiu 10 por 3 . O resultado deveria ser 3.333 , mas como as variáveis x e y são inteiras, o C++ simplesmente ignorou os números depois da vírgula e retornou o resultado 3 .

Na linha 09, a gente dividiu 10 por 3.0 (um valor real). O resultado é   3.333 , e devido a variável z   ser do tipo float, logo o C++ entendeu que o resultado deve ser do tipo float.

Esse é um comportamento padrão do C++ chamado conversão implícita, que é uma conversão automática dos tipos envolvidos. Basicamente, o C++ observa os tipos de dados envolvidos, e faz com o que o resultado corresponda ao tipo mais alto.

Vamos a outro exemplo. O que acontece se você somar o número inteiro 10 com a letra ‘C’?

O resultado é o inteiro 77 ! Porque isso acontece? Primeiro o compilador olha os tipos envolvidos, e percebe que o tipo int é o mais alto dessa operação, por isso a letra ‘C’ que é do tipo char é automaticamente convertida pra um int. Existe uma tabela padronizada chamada ASCII que relacionada diversos caracteres a um número inteiro específico. O C++ usa essa tabela para converter a letra ‘C’ número equivalente 67 . Então, depois disso, é feita a soma 67 + 10 .

Ah, não precisa se preocupar, pois essa tabela ASCII não cai nas provas. Mas é interessante você entender que qualquer caractere em C++ corresponde a um número inteiro.

Eu sei... pareceu um pouco confuso. Mas com a prática você se acostuma, e depois de um tempo começa a usar a conversão automática ao seu favor!

Por exemplo, a gente pode forçar a conversão para um tipo qualquer! Basta a gente criar uma variável com o tipo que queremos, e guardar o resultado de qualquer operação dentro dela. Por exemplo:

No código acima a gente multiplicou dois números reais 10.0 e 3.1415 , e o resultado é 31.415 , e guardamos esse valor na variável x . Porém a variável x é do tipo inteiro. Então os valores depois da vírgula são ignorados, e guarda-se apenas o valor 31 .

Estas conversões automáticas de tipos são ótimas, e nos ajudam a resolver problemas e tornam o nosso código mais prático de desenvolver.

Mas tenha cuidado! É muito comum ocorrer erros aqui, quando a gente acaba convertendo tipos sem perceber no meio das nossas contas. Outro problema comum é deixar o código difícil de entender. Afinal, nem sempre uma conversão implícita é fácil de perceber.

Então, se você tiver equações no seu código e os resultados estiverem estranhos, é sempre bom olhar em busca de variáveis fora do lugar, ou conversões inapropriadas.

Uma boa dica pra evitar erros é fazer cálculos aritméticos apenas com tipos parecidos entre si: números com números (ints, floats e doubles entre si). Fazer cálculos de booleanos com booleanos, e evitar usar caracteres nos seus cálculos. Isso vai te ajudar a evitar erros e tirar um 10 na prova!

Por hoje é isso pessoal! Agora, que tal fazer umas questões de fixação?

Atualizando variáveis

Os operadores de atribuição

Operadores de incremento e decremento

Conversão automática de tipos.