[C] Richiamare valore all'interno di una funzione
Ciao ragazzi.
Avrei una domanda da farvi: sto utilizzando una funzione che mi restituisce un valore (il grado di un nodo) all'interno di una funzione:
Come faccio ad utilizzare questo valore in un'altra funzione?
In teoria mi servirebbe calcolare il grado per un nodo scelto random, senza che vengano stampati tutti i valori (sarebbe carino stamparli così da vedere il grado di ciascun nodo) quando richiamo il grado all'interno di un'altra funzione.
Spero possiate aiutarmi. Vi ringrazio sin da ora per i vostri consigli e per il vostro aiuto.
p.s. deg l'ho dichiarato prima del main
Avrei una domanda da farvi: sto utilizzando una funzione che mi restituisce un valore (il grado di un nodo) all'interno di una funzione:
int degree(void){ int i, j; for(i=0;i<N; i++){ deg=0; for(j=0;j<N; j++){ if(matrix[i][j]==1) deg++; } printf("node: %d degree: %d\n", i, deg); } return deg; }
Come faccio ad utilizzare questo valore in un'altra funzione?
In teoria mi servirebbe calcolare il grado per un nodo scelto random, senza che vengano stampati tutti i valori (sarebbe carino stamparli così da vedere il grado di ciascun nodo) quando richiamo il grado all'interno di un'altra funzione.
Spero possiate aiutarmi. Vi ringrazio sin da ora per i vostri consigli e per il vostro aiuto.
p.s. deg l'ho dichiarato prima del main
Risposte
quando chiami la funzione scrivi nel main
e poi puoi usare i valori quando vuoi.
deg ti conviene lasciarla come variabile locale della funzione degree, come i e j, NON dichiararlo fuori dal main(globale).
Una volta che tu chiami la funzione il valore di deg lo "ritorni" col return, quindi puoi salvarlo nelle variabili che io ho chiamato grado_nodo_1 e 2(per farti capire che sono diverse da deg, ma contengono il valore volta per volta)
Se devi stampare il valore puoi aggiungere nella funzione una printf di deg, oppure scrivere nel main la stampa (di grado_nodo, deg non puoi usarlo nel main) solo quando ti serve.
se qualcosa ti è poco chiaro chiedi pure
grado_nodo_1=degree(); grado_nodo_2=degree();
e poi puoi usare i valori quando vuoi.
deg ti conviene lasciarla come variabile locale della funzione degree, come i e j, NON dichiararlo fuori dal main(globale).
Una volta che tu chiami la funzione il valore di deg lo "ritorni" col return, quindi puoi salvarlo nelle variabili che io ho chiamato grado_nodo_1 e 2(per farti capire che sono diverse da deg, ma contengono il valore volta per volta)
Se devi stampare il valore puoi aggiungere nella funzione una printf di deg, oppure scrivere nel main la stampa (di grado_nodo, deg non puoi usarlo nel main) solo quando ti serve.
se qualcosa ti è poco chiaro chiedi pure

Ti ringrazio moltissimo per la tua risposta, insideworld. Ho messo deg come variabile locale. Tuttavia non riesco a richiamare il valore del grado soltanto per il nodo i all'interno dell'altra funzione, poiché (come da printf) mi stampa il numero di collegamenti per ogni nodo.
Vorrei mantenere la stampa del grado di tutti i nodi, così da richiamare la funzione quando considero un grafo. Tuttavia mi servirebbe anche richiamarla nel caso eccezionale di un solo nodo selezionato. Potresti dirmi cosa posso fare per richiamarla soltanto per il nodo i?
Momentaneamente ho risolto con un ciclo for (poco elegante non essendo all'interno di una funzione, ma richiamato):
Non so però quanto convenga utilizzare una funzione per stampare il grado di tutti i nodi e un ciclo for che ne stampi soltanto uno...
Vorrei mantenere la stampa del grado di tutti i nodi, così da richiamare la funzione quando considero un grafo. Tuttavia mi servirebbe anche richiamarla nel caso eccezionale di un solo nodo selezionato. Potresti dirmi cosa posso fare per richiamarla soltanto per il nodo i?
Momentaneamente ho risolto con un ciclo for (poco elegante non essendo all'interno di una funzione, ma richiamato):
graph(){ i=rand()%N; int j; deg=0; for(j=0;j<N; j++){ if(matrix[i][j]==1) deg++; } printf("degree: %d\n", deg); }
Non so però quanto convenga utilizzare una funzione per stampare il grado di tutti i nodi e un ciclo for che ne stampi soltanto uno...
A mio avviso ti conviene fare qualcosa come:
#include <stdio.h> #define N 2 int grado( const int matrice[][N], const int i) { if(i < 0 || i >= N) return 0; int gr = 0; for(int j = 0; j != N; ++j) { gr += matrice[i][j]; } return gr; } int main(void) { int matrice[N][N] = { {1, 1}, {1, 0} }; printf("%d\n", grado(matrice, 0)); printf("%d\n", grado(matrice, 1)); }
Ti ringrazio, vic85. Proverò così come mi hai consigliato.