Mandar um cafézinho para o programador:


Me ajude a transformar café em código!

Precedência de Operadores e Agrupamento de Expressões com Parêntesis

Agora que você aprendeu tudo no tutorial passado, sobre operações matemáticas em C++, responda, de cabeça, pra gente, quanto valem as seguinte expressões:
  • 1 + 6*3
  • (1+6)*3
  • 1+6/2
  • (1+6/2)

Ordem dos operadores matemáticos

Vamos pegar a primeira e a terceira expressão.
Na primeira, temos duas soluções que vocês podem achar:
  • 1 + 6*3 = 1 + 18 = 19
Ou:
  • 1 + 6*3 = 7 * 3 = 21
No primeiro cálculo, fizemos primeiro a multiplicação e só depois a soma.
No segundo cálculo, fizemos primeiro a soma do 1 com o 6, só depois multiplicamos por 3.
Qual o certo?

Já a terceira expressão, pode ser resolvida assim:
  • 1+6/2 = 1 + 3 = 4
Alguns podem calcular assim:
  • 1+6/2 = 7 / 2 = 3.5
No primeiro caso, fizemos primeiro a operação de divisão. No segundo caso, primeiro somamos 1 com 6, pra só depois fazer a divisão.

Vamos colocar ambas expressões num programa, pro C++ nos responder qual o correto.
Mas, antes, pense aí qual você acha que é o certo.

Depois, faça um programa para calcular as duas expressões e veja o resultado.
Nosso código fica assim:

#include <iostream>
using namespace std;

int main()
{
    cout << "1 + 6*3 =  "<< 1 + 6*3 <<endl;
    cout << "1+6/2 =  "<< 1+6/2<<endl;

    return 0;
}

E o resultado:
Curso de C++ online grátis com apostila para download

Precedência de Operadores Matemáticos no C++

Imagina se a NASA faz a simulação de um lançamento e um cálculo resulta no valor 21.
Mas aí, durante o lançamento oficial, outra máquina faz o mesmo cálculo e resulta no valor 12 ?
Não dá né?

Por isso, o C++ estabeleceu uma ordem para fazer os cálculos, uma precedência entre os operadores.
Como pudemos ver, foi realizado primeiro o cálculo da multiplicação e divisão, antes da adição.

Ordem dos operadores é a seguinte:
  1. *  /  %
  2. + -
Ou seja, o C++ viu uma expressão matemática, a primeira coisa que vai ver é se tem uma multiplicação divisão ou operador de módulo. Se tiver um, resolve ele primeiro.
Se tiver mais de um desses, resolve da esquerda pra direita.

Só depois, vai checar se tem alguma adição ou subtração.
Se tiver mais de uma? Vai resolvendo da esquerda pra direita também, ok?

Parêntesis () - Organização e Precedência

Se colocarmos uma operação entre parêntesis, ela vai sempre ser realizada primeiro.
É como se os ( ) tivesse uma precedência superior aos dos operadores matemáticos.

Por exemplo, na conta: 1 + 6*3
Se quisermos que a soma seja feita primeiro, fazemos: (1+6)*3
Se quisermos garantir que a multiplicação seja feita primeiro: 1 + (6*3)

Vamos supor que queiramos calcular a média aritmética de 5 números, em Matemática isso é dado por:
Calcular média em C++

Uma pessoa que não aprendeu bem precedência de operadores, pode fazer:
m = a+b+c+d+e/5 ;

O erro é que somente a variável e vai ser dividida por 5, consegue perceber isso?
O correto é usar parêntesis:
m = (a+b+c+d+e)/5 ;

Assim, além de ficar certa a conta, fica mais organizada também.

Exercícios de C++

1. A equação da uma reta é dada por: y=mx + c
Escreva essa equação em C++ usando os operadores corretamente.

2. Escreva as equação algébricas abaixo na forma correta em C++:
Apostila de C++ online grátis para download

3. Uma equação do segundo grau é dada por: ax² + bx + c = 0
Escreva ela na linguagem C++.

4. Ainda na equação anterior, como calcularíamos o delta?

5. E as raízes da equação do segundo grau ?

Respostas na apostila C++ Progressivo

Referências de estudo

Lista completa de precedência de outros operadores também:
https://en.cppreference.com/w/cpp/language/operator_precedence

Um comentário:

  1. nas questões do final, o objetivo é escrever as expressoes em uma string ou declarar as variáveis e resolve-las?

    ResponderExcluir

Ajude o C++ Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo