PDA

View Full Version : [C] restituire una variabile indice di una funzione alla funzione main


bobosg
30-11-2009, 16:47
ciao a tutti ho un problema domani mattina devo consegnare questo elaborato che ho finito ma ho un ultimo problema:

la seguente funzione crea un array compatto (senza elementi nulli) da un array che contiene elementi nulli e non.

float compatta(float b[], float c[],int z, int n){
int i,k=0;
for(i=0; i<n; i++){
if(b[i]!=0){
c[k]=b[i];
k++;
}
}
return k;
}

ora nel main quando voglio stampare il nuovo array come voglio usare il seguente ciclo for:

for (i=0; i<??????????; i++){
printf("y[%d] = %.2f\n", i, y[i]);
}

ma non so che dare come indice, a me servirebbe quel k ma non so come prendermelo!!!:muro:

spero mi riusciate ad aiutare grazie mille!!!

Kralizek
30-11-2009, 17:45
premesso che, dato che restituisci k che è un intero, la firma della funzione dovrebbe essere,
"int compatta(float b[], float c[],int z, int n)"

per recuperare k basta che fai:

int totale = compatta (p1, p2, p3, p4);

dove p1, p2, p3 e p4 sono i 4 parametri da passare alla funzione.

bobosg
30-11-2009, 18:05
ho risolto
dichiarando k come variabile globale, grazie a tutti cmq

Kralizek
30-11-2009, 18:06
fermati!

bobosg
30-11-2009, 18:15
fermati!

xké???

bottomap
30-11-2009, 18:30
Perché è programmazione veramente sporca... cerca di limitare il più possibile le globali ed usale solo per variabili davvero globali, non per mantenere un valore anche fuori da una funzione.

Per ottenere un valore da una funzione il linguaggio prevede un valore di ritorno (o al limite di passare un puntatore per parametro, da modificare all'interno), che è quanto ti suggeriva di usare Kralizek.

Abusare delle globali è un vizio che porta facilmente a produrre codice gestibile con difficoltà e comunque difficile da manutenere. Se hai una variabile da condividere tra più moduli/funzioni e non c'è altra maniera (o sarebbe troppo oneroso) di tenerla condivisa, usa una globale, altrimenti sarebbe meglio evitare.

Ciaociao :)

bobosg
30-11-2009, 20:50
e allora mi proponete qualcosa?come codice

blackgin
30-11-2009, 21:25
Visto che il k è il ritorno della tua funzione, che problema hai ad assegnarlo a una variabile?

bobosg
30-11-2009, 21:29
Visto che il k è il ritorno della tua funzione, che problema hai ad assegnarlo a una variabile?

non funge...ho provato

Kralizek
30-11-2009, 21:29
e allora mi proponete qualcosa?come codice

ti ho postato esattamente cosa devi fare ;)