Ir ao conteúdo
  • Cadastre-se
Sr. David Almeida

Ordem de execução sobrecarga de operadores

Recommended Posts

Galera, estou trabalhando em uma serie de cálculos que usam por toda parte funções, para melhor entendimento, resolvi fazer sobrecarga de operadores. porém o resultado não está saindo como antes quando utilizava as funções. De modo que se eu utilizo parenteses para especificar que a ordem das operações é da esquerda para direita, o resultado sai como o esperado, como teste resolvi colocar um 'std::cout<<"(simbolo do operador)"...', para ver a ordem de execução, até que percebi que os cálculos aparecem de forma totalmente aleatória...

Queria saber como defino que a ordem de execução da operação será da esquerda para direita.

 

SO: Win7

IDE: Code::blocks

Compilador: GNU GCC

C++11 ISO

 

 

Desde já, grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

((((a++)*2)+10))

É só você ter na cabeça que o primeiro que vai ser calculado é o parêntesis que está mais adentro.

A conta anterior tem a seguinte ordem:
1º a++, vamos supor que a vale 10, depois de incrementar passa a valer 11

2º a*2 //11*2
3º 22+10 //o resultado de 11*2 somamos a 10.

 

É a única forma de garantir a ordem. Eu nem ligo muito para a prioridade dos operadores, melhor é você saber usar os ().
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite para todos;

Se bem entendi a dúvida a assunto nos remete a precedência de operadores aritméticos:

s1- Para operações de *(multiplicação) /(divisão)

s2- Para operações de +(Soma) -(subtração)

Em qualquer operação que envolva um ou mais operadores do s1, estes serão execultados

primeiro, e s2 por final cada um obedecendo as respectivas regras de execução da esquerda

para direita. 

 

 

o que acontece aqui?

E.i: 10 * 6 / 3 + 4 - 5

   1p: 60 / 3 + 4 - 5

   2p: 20 + 4 - 5

   3p: 24 - 5

   4p: 19

 

E.i: 10 * 6 + 4 - 10 / 2

   1p: 60 + 4 - 10 / 2

   2p: 60 + 4 - 5

   3p: 64 - 5

   4p: 59

 

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

ficar decorando regras nunca foi meu forte. Eu sempre prefiro usar os asteriscos que me parecem mais fácil de garantir a ordem.
Mas como é feio... >_<

Queria ver se em matemáticas te ia parecer feio algo como {-5+[-8+3X(-4+9)-3]}, dai você tentar buscar "atalhos" para amenizar o bagulho kkk

Compartilhar este post


Link para o post
Compartilhar em outros sites

KKKKKKK.  Bem..., neste caso os parenteses se fazem necessários pôs sem eles e os outros separadores o resultado sairá diferente. Na minha humilde opinião feio é algo como:((-X-Y(+2Z(-3A)/7B) *3))

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite;

Poderia equacionar com uma função:

 

//"Mesma coisa que ((-X-Y(+2Z(-3A)/7B) *3))"
	float array_var[] = { 3A, 7B, 2Z, Y, X, 3 };
	result = calc( "/-+-*", array_var );

Exemplo:

/* cFile.c Calculadora
   author Mauro Britivaldo
   */
#include <stdio.h>
float cal(char *str, float *numbers)
{
  float ret = *numbers++;
  while(*str)
  {
    switch(*str)
    {
      case '+': ret = ret + *numbers; break;
      case '-': ret = ret - *numbers; break;
      case '*': ret = ret * *numbers; break;
      case '/': ret = ret / *numbers; break;
      case '%': ret = (int)ret % ((int)*numbers); break;
    }
    str++, numbers++;
  }
  return (ret);
}
int main(void)
{
  float r = cal( "+*", (float[]){1, 2, 3} );

  printf( "Resultado: %f\n", r );
  return 0;
}

fica legal também

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×