1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

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

Discussão em 'Programação' iniciada por Fito, 1 de Novembro de 2008. (Respostas: 7; Visualizações: 850)

  1. Fito

    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.
     
  2. ups

    ups Power Member

    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.
     
  3. Fito

    Fito Power Member

    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?
     
  4. AliFromCairo

    AliFromCairo Power Member

    Sim, é isso mesmo.
     
  5. Fito

    Fito Power Member

    Obrigado aos dois ;) Esta matéria já percebi, só falta IR\{incrementos} :D
     
  6. Fito

    Fito Power Member

    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: 1 de Novembro de 2008
  7. Mr_Miguel

    Mr_Miguel Power Member

    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
     
  8. Fito

    Fito Power Member

    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!
     

Partilhar esta Página