Ir ao conteúdo

Posts recomendados

Postado

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.

Postado

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:

Postado

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))

Postado

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:

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!