|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jun 2007
Messaggi: 62
|
[C] Funzioni.. Help!
Ciao a tutti, sono disperato sto preparando un esame di informatica e leggendo i vecchi temi d'esame non capisco come si svolge questo esercizio:
Mostrare i valori stampati dal seguente programma C: #include <stdio.h> int fz(int a, int *b) { int c = 0; for( a=1; a<4; a++) c = c + *b; return a; } int main() { int a=12, b=-3; for (b=1;b<5; b++) b = fz(13,&a); printf("%d %d\n",a,b); return 0; } non riesco a capire come si sviluppa questa funzione nel programma, perchè b= fz(13, &a)???? Grazie a chiunque voglia aiutarmi.. ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1454
|
come secondo argomento la funzione ha un puntatore ad intero; l'operatore & ricava l'indirizzo del suo argomento, indirizzo che viene quindi passato alla funzione per chiamarla correttamente.
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Nov 2006
Città: Mantova
Messaggi: 468
|
Quote:
a B si assegna il valore della funzione fz, alla quale si passano i parametri a=13 ed al parametro b (che è un puntatore) si assegna l'indirizzo di a. Per trovare il valore di B devi "svolgere" la funzione. ricorda che se nella funzione modifichi *b modifichi il valore della variabile a nel main. Ultima modifica di ..::DAVE::.. : 23-06-2007 alle 13:38. |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
edit: mi sono incasinato
![]() Ultima modifica di ndakota : 23-06-2007 alle 13:51. |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jun 2007
Messaggi: 62
|
grazie delle risposte ma voi capite cosa fa questa funzione?? Anche perchè come risultati mi da 12 e 5 (credo a=12 e b=5) e provando a svolgere la funzione non riesco a capire come possano venire questi risultati.. disperazione..
![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
a è 12 nel main.. viene passata per riferimento ma il suo valore non viene cambiato ergo rimane 12.. mentre b(che nella funzione sarebbe a) viene ritornato ed assegnato ad a con valore 5 perchè l'ultima volta che viene incrementato è 5 poi c'è il test 5<4 che fallisce e viene restituito.. sbaglio?
Ultima modifica di ndakota : 23-06-2007 alle 14:33. |
![]() |
![]() |
![]() |
#7 | |
Member
Iscritto dal: Jun 2007
Messaggi: 62
|
Quote:
|
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#9 | ||
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
|
||
![]() |
![]() |
![]() |
#10 | |||
Member
Iscritto dal: Jun 2007
Messaggi: 62
|
Quote:
|
|||
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
b è -3 ma diventa 1 nell'intestazione del for.. e non ci importa di quello che diventa nella funzione perchè è passata per valore quindi quando torna nel main avrà lo stesso valore che aveva prima e l'ultimo valore che avrà sarà 5 perchè nel ciclo viene incrementata fino a quando rende falsa la condzione 5<5.. e così stamperà 5.. credo..
|
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Jun 2007
Messaggi: 62
|
#include <stdio.h>
int fz(int *a, int b) { int c = 0; for( *a=b; *a<4; *a++) c = c + b; return *a; } int main() { int a=12, b=-3; for (b=1;b<5; b++) b = fz(&a,13); printf("%d %d\n",a,b); return 0; } Ok! Ed in questo caso sapresti dirmi quali valori vengono stampati e perchè? Scusami ma io sti esercizi faccio proprio fatica a comprenderli.. |
![]() |
![]() |
![]() |
#13 | ||
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
a credo sia 13
|
||
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Jun 2007
Messaggi: 62
|
Effettivamente a è 13 ma il valore di b mi dice che è 14 e qui siamo sempre allo stesso problema.. non riesco a capire perchè 14.. (la mia facoltà è economia)
![]() |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Sep 2006
Messaggi: 876
|
Se guardi la funzione fz(), questa restituisce 13 (il valore che sarà quello di a); se fino qui non hai problemi, il valore 13 viene caricato in b, quindi al momento b=13; il 1° ciclo for termina, b viene incrementato e va a 14, la condizione b<5 è falsa e si esce dal ciclo. A questo punto la stampa mostra b come 14. Cosa non ti è chiaro?
|
![]() |
![]() |
![]() |
#16 |
Member
Iscritto dal: Jun 2007
Messaggi: 62
|
Mah a fatica credo di aver capito.. la a assume valore 13 perchè nella funz abbiamo (&a,13) e poi nella funzione mi dice for *a=b cioè *a=13??? dopodichè abbiamo il return *a che viene caricato in b che a sua volta viene incrementato di 1 nel for del main (b=14) salvo poi constatare che la condizione non è vera e restituircelo a valore 14.. giusto? dunque a= 13 e b= 14?
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Sep 2006
Messaggi: 876
|
Tutto giusto, dovresti aver capito
|
![]() |
![]() |
![]() |
#18 |
Member
Iscritto dal: Jun 2007
Messaggi: 62
|
Questo è l'ultimo al quale vi sottopongo.. poi non vi stresso più. Mi trovate i valori di a e b? me li spieghereste x l'ultima volta? Vi ringrazio ragazzi.
#include <stdio.h> int f(int *a, int b) { *a = b + 3; return b – 1; } int main() { int a=4, b; for (b=5; b<9; b++) b = f(&a, a); printf(“%d %d\n”,a,b); return 0; } |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
secondo me a=10 e b=9 ma non me lo compila da errori che non ho mai visto.. a te lo compila?
|
![]() |
![]() |
![]() |
#20 |
Member
Iscritto dal: Jun 2007
Messaggi: 62
|
che compilatore usi??
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:47.