Jump to content
valeria

Perceber output de programa

Recommended Posts

valeria

Alguém me pode explicar como este exercício tem o resultado 1411001?

#include<stdio.h>
int i;
int f1(int *i){
    printf("%d",*i);
    *i=*i+1;
    *i=*i%2;
    return *i;
}
int f2(int i){
    printf("%d",i);
    i=i+1;
    i=i%2;
    return i;
}
void f3(int i,int *r){
    printf("%d",i);
    i=i+1;
    *r=i;
}
int main(void){
    i=14;
    i=f1(&i);
    printf("%d",i);
    i=f2(i);
    printf("%d",i);
    f3(i,&i);
    printf("%d",i);
    return 0;
}

 

Share this post


Link to post
Share on other sites
valeria

não

eu não percebo nada de programação comecei a dar na faculdade e tenho dificuldade

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

mas não consegues seguir o código? Que parte do código não percebes


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
HappyHippyHippo

tens de ser mais concreta na duvida. Eu não sei o que não percebes


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Eu vejo várias coisas sem lógica nesse código!

Porque é que declaras uma variável global e depois a passas por parâmetro para dentro de funções!!!

Porque é que usas o "*" para aceder ao conteúdo da variável, se ela é uma variavel global?

Porque é que usas o "return" para devolver o valor da variável se ela é uma variável global?

 

Mas qual é mesmo o objectivo do programa?

Edited by PsySc0rpi0n

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
HappyHippyHippo
12 hours ago, PsySc0rpi0n said:

Mas qual é mesmo o objectivo do programa?

ver se a pessoa percebe a passagem de argumentos das funções


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Mas o aquele código e o resultado foi dado num exame e pedia para explicar o resultado do programa, era isso?


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
HappyHippyHippo
6 hours ago, PsySc0rpi0n said:

Mas o aquele código e o resultado foi dado num exame e pedia para explicar o resultado do programa, era isso?

pelo que dá a entender


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
PsySc0rpi0n
2 minutes ago, HappyHippyHippo said:

pelo que dá a entender

A mim apetecia-me responder nesse teste/exame como respondi lá trás... Que não faz muito sentido declarar variáveis globais para entender a passagem parâmetros para funções!


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
HappyHippyHippo
Just now, PsySc0rpi0n said:

A mim apetecia-me responder nesse teste/exame como respondi lá trás... Que não faz muito sentido declarar variáveis globais para entender a passagem parâmetros para funções!

respondias isso e tinhas nega


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
PsySc0rpi0n
Just now, HappyHippyHippo said:

respondias isso e tinhas nega

Acredito, mas aquilo para mim acho que não faz grande sentido!


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
pwseo
Em 10/12/2016 às 20:47, valeria disse:

eu não percebo nada de programação comecei a dar na faculdade e tenho dificuldade

É muito pouco provável que tenhas começado programação logo por este tema. Como estão as restantes bases? E de qualquer modo, percebes o significado de todos os símbolos que aparecem junto aos nomes das variáveis? coisas como *i e &i.

 

16 minutos atrás, PsySc0rpi0n disse:

Acredito, mas aquilo para mim acho que não faz grande sentido!

O exercício tem um objectivo muito definido -- se achas que não faz sentido então não compreendeste o que o exercício está a tentar testar no programador. Olha para lá novamente e presta atenção à forma como as diferentes funções recebem os seus argumentos e que consequências isso tem na sua execução.

  • Vote 1

Share this post


Link to post
Share on other sites
PsySc0rpi0n
5 hours ago, pwseo said:

É muito pouco provável que tenhas começado programação logo por este tema. Como estão as restantes bases? E de qualquer modo, percebes o significado de todos os símbolos que aparecem junto aos nomes das variáveis? coisas como *i e &i.

 

O exercício tem um objectivo muito definido -- se achas que não faz sentido então não compreendeste o que o exercício está a tentar testar no programador. Olha para lá novamente e presta atenção à forma como as diferentes funções recebem os seus argumentos e que consequências isso tem na sua execução.

Eu vi como os parâmetros foram passados, mas para mim não faz sentido declarar uma variável global para depois fazer aquele código!


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
pwseo
13 horas atrás, PsySc0rpi0n disse:

Eu vi como os parâmetros foram passados, mas para mim não faz sentido declarar uma variável global para depois fazer aquele código!

Como faria sentido para ti, então? :) Relembro que o objectivo do exercício é perceber como a passagem de argumentos pode ter afectar o comportamento das variáveis locais a uma função, podendo as a alterações às mesmas reflectir-se (ou não) em variáveis externas (neste caso, globais).

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Ok, assim já me calo! :)

Edited by PsySc0rpi0n

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
pwseo
2 minutos atrás, PsySc0rpi0n disse:

Ok, assim já me calo! :)

Eu sei que à primeira vista pode parecer um exercício estranho, sem utilidade, mas na realidade é um exercício curioso. Aliás, sugiro até que tentes resolver em papel e ver se chegas ao resultado que foi dado acima. Dá que pensar :)

Share this post


Link to post
Share on other sites
PsySc0rpi0n
1 hour ago, pwseo said:

Eu sei que à primeira vista pode parecer um exercício estranho, sem utilidade, mas na realidade é um exercício curioso. Aliás, sugiro até que tentes resolver em papel e ver se chegas ao resultado que foi dado acima. Dá que pensar :)

Sim, eu acho que percebi os resultados. Só não tenho a certeza é dos pontos que o @HappyHippyHippo tem entre cada número/algarismo! Se ele colocou os pontos apenas para separar cada resultado, então acho que percebi.

Como exemplo:

int f1(int *i){
    printf("%d",*i);
    *i=*i+1;
    *i=*i%2;
    return *i;
}

...

i=f1(&i);
printf("%d",i);

É enviado o endereço de memória da variável 'i' para dentro da função. Dentro da função é imprimido o valor apontado por aquele endereço de memória, ou seja, o 14.

Depois o valor apontado por aquele endereço de memória é incrementado em 1 valor e como tal o valor apontado por aquele endereço de memória fica igual a 15. Na penúltima linha, esse mesmo valor é dividido por 2 e o resto dessa divisão é guardado nessa variável 'i', portanto 15 % 2 = 1. E é este último valor que é devolvido pela função e que é imprimido a partir da função main. Daqui aparece o 14 e o primeiro 1 do resultado apresentado pelo OP.  Ora, para mim isto não faz muito sentido. Andar a fazer passagem de parâmetros por referência de uma variável que é golbal, é um pouco redundante. Mas como o objectivo não é apenas a passagem de parâmetros, então talvez se justifique o código!

Edited by PsySc0rpi0n

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
pwseo

Sim, o objectivo do @HappyHippyHippo era precisamente separar os números.

E quanto ao teu raciocínio, está correcto. E o objectivo era verificar como a forma como passas os parâmetros (por valor ou por referência) pode afectar as variáveis originais (ou não).

Share this post


Link to post
Share on other sites
PsySc0rpi0n
On 17/12/2016 at 3:44 PM, pwseo said:

Sim, o objectivo do @HappyHippyHippo era precisamente separar os números.

E quanto ao teu raciocínio, está correcto. E o objectivo era verificar como a forma como passas os parâmetros (por valor ou por referência) pode afectar as variáveis originais (ou não).

Sim, mas para isso é preciso variáveis globais?


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.