Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-06-2007, 14:22   #1
piumone
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..
piumone è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 14:35   #2
Furla
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.
Furla è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 14:36   #3
..::DAVE::..
Senior Member
 
L'Avatar di ..::DAVE::..
 
Iscritto dal: Nov 2006
Città: Mantova
Messaggi: 468
Quote:
Originariamente inviato da piumone Guarda i messaggi
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..

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 14:38.
..::DAVE::.. è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 14:40   #4
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
edit: mi sono incasinato

Ultima modifica di ndakota : 23-06-2007 alle 14:51.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 15:20   #5
piumone
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..
piumone è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 15:30   #6
ndakota
Senior Member
 
L'Avatar di ndakota
 
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 15:33.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 15:36   #7
piumone
Member
 
Iscritto dal: Jun 2007
Messaggi: 62
Quote:
Originariamente inviato da ndakota Guarda i messaggi
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?
Ma non dovrebbe uscire a 4? for (a=1; a<4; a++), un altro dubbio: allora la variabile c non mi serve ai fini della soluzione dell'esercizio?? in pratica l'unica difficoltà sta nel capire che la a vale 5?
piumone è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 15:41   #8
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da piumone Guarda i messaggi
Ma non dovrebbe uscire a 4? for (a=1; a<4; a++), un altro dubbio: allora la variabile c non mi serve ai fini della soluzione dell'esercizio?? in pratica l'unica difficoltà sta nel capire che la a vale 5?
secondo me la difficoltà sta nel fatto che nell'esericzio ci sono tutti i modi possibili ed immaginabili per farti confondere.. sbagli perchè guardi la a come primo argomento nel prototipo e nella definizione, mentre devi guardare la chiamata e seguire lo stesso ordine.. se nella chiamata a è il secondo argomento devi guardare il secondo argomento del prototipo e della definizione, in questo caso a si chiamerà b nella funzione.. spero di non dire cavolate, sono ancora agli inizi..
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 15:46   #9
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Spoiler:

Codice:
#include <stdio.h>

int fz(int a, int *b)
{ 
    int c = 0; 
    
    for( a=1; a<4; a++) 
         c = c + *b; /* b è la a del main passata con valore 12 e non viene modificata 
                            perciò rimane 12 */
    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;
}
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 15:50   #10
piumone
Member
 
Iscritto dal: Jun 2007
Messaggi: 62
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Spoiler:

Codice:
#include <stdio.h>

int fz(int a, int *b)
{ 
    int c = 0; 
    
    for( a=1; a<4; a++) 
         c = c + *b; /* b è la a del main passata con valore 12 e non viene modificata 
                            perciò rimane 12 */
    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;
}
Allora per la a ci sono ho capito bene. Per la b mi sta fondendo il cervello, si dovrebbe passare dal valore 12 che è quello di a nel main al valore 5 cioè il risultato della funzione.. come si calcola sto benedetto 5??? Mi viene da piangere..
piumone è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 16:01   #11
ndakota
Senior Member
 
L'Avatar di ndakota
 
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..
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 16:07   #12
piumone
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..
piumone è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 16:19   #13
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
a credo sia 13
Spoiler:

Codice:
#include <stdio.h>

int fz(int *a, int b)
{
    
    int c = 0; 
    
    for( *a=b; *a<4; *a++) // a=13 condizione falsa, 13 restituito
         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;
}
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 16:23   #14
piumone
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)
piumone è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 16:46   #15
squall15
Senior Member
 
L'Avatar di squall15
 
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?
squall15 è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 16:57   #16
piumone
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?
piumone è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 17:03   #17
squall15
Senior Member
 
L'Avatar di squall15
 
Iscritto dal: Sep 2006
Messaggi: 876
Tutto giusto, dovresti aver capito
squall15 è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 18:27   #18
piumone
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;
}
piumone è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 19:21   #19
ndakota
Senior Member
 
L'Avatar di ndakota
 
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?
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 19:35   #20
piumone
Member
 
Iscritto dal: Jun 2007
Messaggi: 62
che compilatore usi??
piumone è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
Funzionalità top a un prezzo acce...
Lo strumento per gli aggiornamenti autom...
Imperdibile sconto sul roborock Saros Z7...
Google Pixel 10, altri 100€ di sconto su...
Chip sotto i 2 nanometri, l'Europa alza ...
La smart meno smart di tutte: #6 in azio...
Red Hat Enterprise Linux sbarca su AWS E...
Addio alle migliaia di cicli e anni di t...
Colpo di STMicroelectronics, un'intesa d...
La Ferrari elettrica si chiama Luce: ecc...
Proseguono le riparazioni in vista del l...
Cinema domestico low cost: proiettore Fu...
Sharp porta a ISE 2026 i nuovi display i...
Casa più sicura senza lavori: Arl...
Batterie esauste, l'Italia raccoglie sol...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:51.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v