Operadores Aritméticos
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:
- Podem ser números escritos literalmente, tipo:
- Ou pode ser um número e uma variável numérica, dessa forma:
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 por ? É 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 . Toda semana tem um jogo, e sempre que o time vencer ele ganha três pontos. Assim, se tiver uma vitória , se tiver duas vitórias , 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 para guardar o resultado da operação . 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 à 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 ou com . 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 por . O resultado deveria ser , mas como as variáveis e são inteiras, o C++ simplesmente ignorou os números depois da vírgula e retornou o resultado .
Na linha 09, a gente dividiu por (um valor real). O resultado é, e devido a variável 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 ! 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 . Então, depois disso, é feita a soma .
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 e , e o resultado é , e guardamos esse valor na variável . Porém a variável é do tipo inteiro. Então os valores depois da vírgula são ignorados, e guarda-se apenas o valor .
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.
Exercícios Resolvidos
Exercício Resolvido #1
Adaptado de Savitch – C++ Absoluto – 2014 – Projeto de Programação 1 – Capítulo 1
Uma tonelada métrica, ou simplesmente tonelada, equivale a onças. Escreva um programa que leia o peso de um pacote de cereal matinal em onças e apresente na saída o peso em toneladas métricas, assim como o número de caixas necessárias para fornecer uma tonelada métrica de cereal.
Considere uma caixa de cereal com (ou ).
Passo 1
Uma boa dica antes de programar é pensar: “Quais as entradas e saídas desse programa?”
A entrada é o peso do pacote inserido pelo usuário em onças. Este valor deve ser um número real. Vamos criar uma variável do tipo chamada para receber esse valor inserido pelo usuário. Como vamos fazer cálculos muito precisos, vamos usar o tipo .
As saídas são: o valor em toneladas cúbicas e a quantidade de caixas necessárias. Estes dois valores também podem ser números reais. Vamos criar as variáveis do tipo chamadas e para guardar os valores que vamos calcular.
A questão é boazinha e facilita pra gente 😊, já nos dá o valor da conversão de onça para tonelada, e também nos dá a quantidade de cereal que cabe numa caixa. Estes dois valores não podem mudar durante a execução do código, então o ideal é tornar estes valores constantes!
Então vamos criar uma constante chamada que guarda o valor de conversão entre onças e toneladas: . E a constante chamada que guarda a quantas toneladas cabem em uma caixa de cereal .
Então, o nosso código começa dessa forma:
Passo 2
Certo! Com nossas variáveis definidas, vamos usar o para imprimir uma mensagem requisitando os dados do usuário e usar a função para receber a variável do nosso usuário. Ah, não esqueça de usar o ponto e vírgula.
Passo 3
Agora vamos pra etapa de conversão!
Usando o operador de divisão vamos calcular a divisão entre o peso em onça e o fator de conversão. O resultado da operação é guardado na variável . Veja no código:
Com o mesmo processo nós podemos calcular a quantidade de caixas necessárias, dividindo a o peso em toneladas, pela quantidade de toneladas em uma caixa. O resultado é armazenado em :
Passo 4
Prontinho! Agora, pra finalizar o programa é só a gente imprimir o resultado usando o .
E prontinho!
Passo 5
Agora é hora dos testes. É sempre importante testar seus códigos pra detectar possíveis erros.
Rode o seu programa e compare as seguintes entradas com as seguintes saídas, se der tudo certo, então o código está bom:
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #2
Elaboração Própria.
Em um jogo de vídeo game, o usuário começa com 3 vidas. Sempre que ele falha em uma fase ele perde uma das vidas. Faça um programa que imprima a quantidade de vidas inicial do jogador e depois vá gradativamente reduzindo a quantidade de vidas até chegar em zero. Sempre que a quantidade de vidas for reduzida, imprima uma mensagem na tela. Quando chegar em zero, imprima na tela uma mensagem de fim de jogo.
Passo 1
Fala aí, pessoal.
Essa questão não pede nenhuma entrada de dados. Tudo que precisamos fazer é iniciar uma variável e diminuir seu valor até chegar em zero.
Como a variável começa em 3 e diminui de 1 em 1 até 0, podemos defini-la como um inteiro sem sinal. Fazemos isso escrevendo “unsigned int” antes do nome da variável, na hora de declarar (linha 06).
Já vamos aproveitar e usar o cout pra imprimir a quantidade de vidas iniciais (linha 08):
Passo 2
Agora só precisamos diminuir gradativamente o valor de vidas de um em um. Pra diminuir em 1 unidade, podemos usar o operador de decremento “– –”. Ele aparece 3 vezes (linhas 11, 13 e 16), porque vamos diminuir até zero. E, depois de cada mudança de valor, não vamos esquecer de imprimir o número de vidas.
Passo 3
E pra finalizar o programa, vamos imprimir uma mensagem de fim de jogo:
E prontinho! Programa feito.
Resposta
Exercício Resolvido #3
Elaboração Própria
Faça um programa que receba dois números do usuário e guarde nas variáveis A e B. Em seguida, calcule a soma, a subtração, a multiplicação e divisão de A por B. Imprima cada um dos resultados em uma linha na tela.
Passo 1
E aí galerinha? Prontos pra mais um exercício?
Primeiro vamos pensar em qual é a entrada e qual a saída dessa questão.
As entradas são os valores A e B. Como podem ser quaisquer números que o usuário quiser, essas variáveis devem ser do tipo double.
A saída é o resultado de cada uma das operações. Então são 4 saídas.
Então vamos declarar as variáveis que vamos precisar, e usar a função cin para receber o valor do usuário.
Passo 2
Agora vamos realizar as operações. Como não são operações complicadas, podemos fazer as operações dentro do cout e imprimi-las diretamente.
OBS. Pessoal, se fosse um caso de fazer contas mais difíceis, com várias operações, talvez fosse melhor fazer uma coisa de cada vez. Primeiro, criar novas variáveis, pra calcular os resultados, e depois imprimir os valores na tela. Fica mais organizado e evita erros. Mas nesse caso aqui, em que só estamos fazendo uma operação por linha, fazer as operações dentro do cout funciona muito bem!
Lembre-se de usar os operadores corretos para soma +, subtração –, multiplicação *, e divisão /.
Também não esquece do comando “endl”, porque o enunciado pediu especificamente para imprimir os resultados em linhas diferentes.
E pronto! Easy peasy lemon squeezy
Resposta
Exercício Resolvido #4
Elaboração Própria
Faça um programa que receba a altura e largura de um retângulo e calcule a área.
Passo 1
As entradas dessa questão serão duas variáveis reais: base e altura. Por isso essas variáveis devem ser do tipo double
A saída é a área do retângulo, que deve ser do tipo double também.
Na linha 05, vamos declarar as variáveis que vamos precisar e definir seu tipo (double).
Depois vamos usar o comando cout para imprimir na tela uma mensagem que pergunta ao usuário o valor da variável. E vamos usar a função cin para receber o valor do usuário e atribuir à variável criada. Isso tem que ser feito para a base (linhas 7 e 8) e para a altura (linhas 9 e 10).
Passo 2
E agora vamos usar o operador * para multiplicar base e altura e guardar na variável de área.
Depois é só usar o cout pra imprimir os resultados:
E tudo certo, programinha pronto!
Resposta
Exercício Resolvido #5
Elaboração Própria
Faça um programa que calcule a tabuada. Receba um valor do usuário e imprima a tabuada deste número.
Passo 1
A tabuada é feita com números inteiros. Então a entrada do usuário vai ser do tipo int.
Não vamos precisar de outra variável, pois iremos imprimir os resultados diretamente usando o cout.
Então, vamos criar uma variável do tipo int chamada numero e em seguida vamos usar o cin para receber essa imagem.
Passo 2
Agora vamos imprimir uma mensagem pro usuário. Informando que abaixo será impressa a tabuada
Agora vamos usar o cout para imprimir a variável numero que estamos trabalhando, na mesma linha vamos imprimir o texto “ x 1 = ” para mostrar pro usuário que estamos multiplicando por 1, e depois vamos imprimir o resultado de numero*1.
E repetimos esse mesmo processo do 2 até o 10:
Resposta
Exercício Resolvido #6
Elaboração Própria
Crie uma variável do tipo char com uma letra maiúscula qualquer do alfabeto. Depois aplique o operador de incremento ++ sobre essa variável. O que aconteceu? O que ocorre se você efetuar a operação +=5 nesta variável? Explique
Passo 1
Primeiro de tudo vamos criar uma variável letra do tipo char que vai conter uma letra qualquer, eu vou escolher a letra J. Vamos aproveitar e usar o cout pra imprimir essa variável na tela.
Passo 2
Vamos seguir os passos indicados pela questão e construir o nosso programa. Na linha 10, aplicamos o operador de incremento ++ e, na linha 14, efetuamos a operação +=5. Depois de cada operação, usamos o comando cout para imprimir o resultado.
O resultado deste programa é:
Passo 3
Para o C++ as letras nada mais são do que números! Quando criamos uma variável do tipo char, o que realmente acontece sobre o capô é que o C++ faz uma comparação entre o número guardado na variável char, e uma tabela de caracteres chamada Tabela ASCII.
Nesta tabela, a letra “J” é representada pelo número 74. Quando aplicamos o operador de incremento ++ somos enviados para a letra “K” que é representada pelo número 75.
Quando aplicamos a operação +=5 somos enviados para a letra “P” que corresponde ao número 80 da tabela ASCII. Atenção que, quando aplicamos +=5, a letra já era “K”, por isso ao somar 5, chegamos na letra “P”. Se tivéssemos feito essa mesma operação na variável original, teríamos como resultado a letra “O”.
Resposta
Exercício Resolvido #7
Elaboração própria
Para calcular a tensão que atua sobre uma viga utilizamos a expressão:
Onde é o momento que atua na viga, é a metade da altura da viga, e é o momento de inércia de área da viga.
Já a tensão admissível é calculada considerando um fator de segurança da seguinte forma:
Faça um programa que receba o momento, altura, momento de inércia e fator de segurança da viga, e calcule a tensão e a tensão admissível sobre uma viga.
Utilize as unidades do Sistema Internacional: newtons metros e pascal .
Passo 1
E aí pessoal, hora de outro exercício.
Esse exercício é bem legal pois pede pra gente calcular uma viga. Mas no fim das contas, é só mais um exercício de aritmética com C++.
Pra começar vamos precisar de muitas variáveis, uma pra cada um dos valores que vamos receber e calcular. Um detalhe é que vai ser necessária muita precisão nesses cálculos, então vamos usar o tipo
Então vamos declarar as variáveis , , , , , e :
Passo 2
O próximo passo é receber os valores do usuário. Utilizando os objetos e vamos receber os valores de e
Passo 3
Agora é horas dos cálculos!
Primeiro de tudo, a fórmula da tensão utiliza o parâmetro que vale metade da altura, então vamos calculá-lo
E com isso temos tudo que é necessário para calcular a tensão sobre a viga utilizando a fórmula
Show! Pra terminar as contas só precisamos calcular a tensão admissível considerando o fator de segurança da viga:
Passo 4
Com tudo calculado vamos imprimir os resultados. Utilizando o objeto podemos imprimir as variáveis e
Ah, não se esqueça de colocar a unidade de medida! Como todos os valores são recebidos de acordo com o SI, o resultado final será dado em pascal .
E prontinho! Questão concluída!
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #8
Adaptado de Deitel – C++ Como Programar 3ª edição – Exercício 1.36
Escreva um programa que recebe como entrada um número de três dígitos, separa o número em seus dígitos individuais e imprime os dígitos separados um dos outros por um . (Sugestão: use os operadores de divisão e módulo).
Por exemplo, se o usuário digitar , o programa deve imprimir
Passo 1
E aí pessoal, vamos pra mais uma questãozinha de C++.
Como você talvez já saiba, um número de três dígitos é composto por três partes: as centenas, dezenas e unidades.
Basicamente, essa questão quer que pra cada número inserido pelo usuário a gente indique a centena, a dezena e a unidade.
E como podemos fazer isso? É só a gente usar os operadores de divisão e de resto de maneira esperta.
Lembre-se que quando dividimos dois números inteiros no C++ o resultado é um inteiro! Se a gente dividir vamos receber o resultado , e não como seria o caso de uma divisão com números reais.
E como isso ajuda a gente? Olha que legal, se a gente dividir o número por vamos obter , que é exatamente o valor das centenas.
Que maneiro, né. Mas eu te falei que vamos usar o operador de resto também. Saca só, se a gente usar a operação receberemos o resultado .
E usando a mesma lógica, podemos dividir o por e obter o valor das dezenas:
E pra completar, se a gente calcular o resto uma outra vez conseguiremos o valor das unidades:
Passo 2
Show, agora vamos implementar essa lógica em código C++
Pra começo de conversa vamos declarar as variáveis, todas do tipo inteiro, pra gente poder efetuar divisões entre inteiros.
Vamos receber uma variável do usuário. E também vamos ter uma variável para guardar o resto da divisão, e as variáveis e .
E já vamos aproveitar e pedir pro usuário inserir um número:
Passo 3
Então vamos aplicar a lógica que explicamos no Passo 1:
Primeiro efetuamos uma divisão inteira entre o e , e com isso obtemos as
Em seguida, vamos calcular o resto entre o e , e guardar esse valor na variável pra podermos usar depois
Agora replicamos a lógica inicial, e para obter a vamos dividir o valor do por .
E pra concluir, podemos obter as unidades calculando :
Passo 4
Tudo certinho. Pra concluir a questão só falta a gente imprimir os resultados que obtivemos.
Com o comando podemos imprimir o valor de cada variável e aplicar uma tabulação entre elas utilizando o
Nós usamos 3 linhas pra escrever o comando só mesmo pra que o código fique mais organizado. Mas o resultado impresso vai estar todo na mesma linha, pois só passa pra linha de baixo quando usamos o comando .
E é isso. Fechamos mais uma questão!
Resposta
Ei, a resposta está no passo a passo :)