Dúvida C++ (funções)

Fito

Power Member
Tenho aqui um exercício que não consigo resolver, alguém me podia explicar como é que se faz?

EX: Quais são os valores de a, b e c após o código ser todo executado?
Sabendo que a = 1;
b = a+a++;
c = ++a;

Resposta: a = 3, b = 2, c = 3.
 
Tens de ver a precedencia de operadores.

Se nao me engano os ++a e a++ sao executados antes das outras operacoes (+)

a = 1; (acho que e facil)
b = a + (a++); 1 + 1 e no final a incrementa de 1.
c = ++a: a passa a 3 e copia para c;

++a o incremento acontece antes de se usar o valor.
a++ o incremento acontece depois de se usar o valor.
 
Deixa ver se percebi (eu sou MUITOOO nabo nisto).

Nós vamos executar 3 operações, sendo que são:

1) a = 1;
2) b = a + (a++);
3) c = ++a;

Na 1) Simplesmente sabemos que o valor do 'a' é igual a 1.

Na 2) Sabemos à partida que 'a' = 1 e que 'b' é a soma de a+(a++)
-Nesta operação temos que b=1+1, logo b=2 e 'a'=2 porque foi incrementado pelo (a++).

Na 3) Sabemos que 'c'=++a
-Aqui temos que 'a'=2 (que vem da operação 2)) , logo c=(2+1)=3.

Daqui tiramos que a=3,b=2,c=3, certo?

Já agora mais uma pergunta, se eu na 3) tivesse c=a++, qual seria a diferença? Seria que c=2 e a=3?
 
Pessoal, depois dos incrementos passei para as funções.

Tenho aqui um problema que não consigo perceber porque é que retorna o valor 10 e 5 (dado nas soluções)

Código:
#include <iostream>
#include <cmath>
using namespace std;
double funcao(double & val1 , double & val2);
int main()
{
double a = 2.5;
double b = 1.5;
a = funcao(a,b);
cout << a << endl << b << endl;
return 0;
}
double funcao(double & val1 , double & val2)
{
val2 = 2*val1;
return 4*val1;
}

Algum entendido na matéria que me possa explicar pff?
 
Última edição:
Código:
a = funcao(a,b)
Aconteça o que acontecer, o valor de "a" irá ser igual ao valor retornado por funcao(a,b). E que valor é esse?

Código:
return 4*val1;
Mas para vermos isto em mais pormenor, vejamos o que se passa na função:

Código:
double funcao(double& val1, double& val2)
"val1" e "val2" são do tipo "double&", referência para double. Uma referência é basicamente um sinónimo para uma variável. Se eu fizer val1 = 10, por exemplo, a variável que corresponde ao val1 fica com o valor 10.

Assim sendo:
Código:
a = funcao(a,b); //val1 = a, val2 = b
(...)
double funcao(double & val1 , double & val2)[FONT=monospace]
[/FONT]{[FONT=monospace]
[/FONT]val2 = 2*val1; //val2 = 2*a --> val2 = 2*2.5 --> val2 = 5 --> b = 5[FONT=monospace]
[/FONT]return 4*val1; //return 4*a --> return 4*2.5[FONT=monospace]
[/FONT]}
(...)
(voltamos à chamada da função)
a = funcao(a,b); //a = 4*2.5 --> a = 10
E pronto, ficamos com a = 10 e b = 5
 
Epa, nem sei como te agradecer! Explicaste as coisas bastante bem. De repente fez tudo sentido! :P

Eu sou um bocado lento nestas "andaças" e teres-me explicado passo a passo foi bastante útil, mais uma vez os meus agradecimentos!
 
Back
Topo