Newsgroup: it.comp.lang.c
Titolo: L'istruzione return

Salve a tutti. Ho la seguente domanda da porre: ho una funzione che
trova il valore minimo in un array e la sua posizione in esso. Come
fare per far tornare entrambi i valori alla funzione chiamante? In
tutti i programmi che ho visto fin ora l'istruzione return aveva come
espressione, ad esempio, il nome di una sola variabile.
Con la funzione da me scritta, devo utilizzare una variabile puntatore
per far tornare il valore della posizione? Come funziona l'istruzione
return, quanti valori può tornare una funzione in C?  Grazie
/* compilatore utilizzato: Djgpp */
/*function che trova il valore minimo in un array*/
int trovamin (int *a, int n)
{
	int i, min, pos_min;
	min = a[0];
	pos_min = 0;
	for (i = 1; i <= n; i++)
		{	
		if (a[i] < min)
			{
			min = a[i];
			pos_min = i;
			}
		}
	return min;  /*come fare per far tornare anche pos_min? */
}

	return min;  /*come fare per far tornare anche pos_min? */
Mediante passaggio per riferimento :
int getMin( int a[], int n, int *pos_min )
{ 
    int min = a[0], i ;
 
    *pos_min = -1 ;
    for ( i = 0 ; i < n ; i++ )
    {
        if ( a[i] < min ) 
        { 
           min = a[i] ;
           *pos_min = i ; 
        }
    }
    return min ;    
}


Dato che  l'array viene passato alla funzione dal main() è sufficiente
ritornare pos_min (anzichè min) e leggere il valore a[i] nella funzione
chiamante.
Inoltre ricorda che gli indici dell'array vanno da zero a (n-1), quidi il 
test nel ciclo deve essere  i < n.
HTH

 fare per far tornare entrambi i valori alla funzione chiamante?
Potresti far restituire dalla funzione una struct contenente i due
valori oppure passare per indirizzo le variabili nelle quali la funzione
deposita i valori richiesti. Secondo me meglio la prima soluzione.
EMG

Premesso che le idee da voi suggerite mi sono di grandissima utilità,
con la mia domanda però io volevo sapere altro. E cioè cosa può fare
l'istruzione di return. Vorrei capire se con essa i possano far
tornare i valori di più variabili o se se ne possano utilizzare più di
una allo stesso tempo. A questo punto, credo di potermi rispondere da
solo...Ho provato ad attuare queste idee, ma senza risultati utili...
Mi confermate che l'espressione utilizzabile nell'istruzione return
non può tornare più di un valore?
Grazie a tutti.

 non può tornare più di un valore?
Confermo. Solo che il tipo di tale "valore" può essere qualunque. E
questo fa la differenza.
EMG

 non può tornare più di un valore?
Confermo. E la logica delle funzioni che obbliga a ritornare un solo valore
alla volta.
Ciao.

non può tornare più di un valore?
Confermo.  Pero' stai attento a cosa intendi per "valore".
Ogni valore in C ha anche un tipo.
Le funzioni possono anche restituire strutture (che possono contenere
molti membri, da intendersi come tanti valori distinti).  

}
Se a[0] č il minimo, questa funzione ritorna -1; la cosa si corregge
usando
        if (a[i] <= min)
al posto della disuguaglianza stretta.
(lo so, sono un po' rompi ;-P)
-- 
Saluti,
    Mardy

}
--
Antonio Cuni, 18 anni, studente
Brainbench Certification: 
Master C++: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
http://www.brainbench.com/transcript.jsp?pid=1301688

usando
Grazie della correzione.

Antonio Cuni, 18 anni, studente
Ti posso chiedere una cosa ?
Perche' inserisci la tua eta' nella firma ?

Perche' inserisci la tua eta' nella firma ?
scusa se ti risp in ritardo, ma ero via.
Non c'è una ragione precisa, però secondo me sarebbe utile sapere le
età di quelli con i quali comunico, quindi inizio io per primo; è un
modo come un altro per presentarsi.
Anto 
--
Antonio Cuni, 18 anni, studente


Io purtroppo invece la penso in modo contrario, sincerametne chi se ne
frega dell'età online...
Lawrence Oluyede
