Differenze tra VOID, INT, BOOL ecc.. IN C++

Antonomasia1
buonasera,
inizio subito nel dire che so la differenza tra INT (interi), Bool (variabili booleane) e void...
Ma quello che non capisco è quando metterle nelle funzioni...nel senso, se devo caricare un vettore faccio

VOID caricavettore ( int vet [] )

e qui ci sono...

pero perchè se devo fare la media tra due vettori faccio

INT mediavettori ( int vet1[], int vet[])

e cosi via..
intendo dire, come mai prima di "mediavettori" non metto void? o si puo lo stesso? perchè la mia prof fa sempre cosi e aggiunge il RETURN...

grazie mille.

Risposte
Cheguevilla
La dichiarazione che fai all'inizio della funzione indica il tipo di dato che viene restituito in output dalla funzione.
Una funzione di tipo "carica vettore", avrà come risultato il caricamento di un vettore in memoria, ma nessun output.
La funzione "media vettori" produce una media, cioè un output, un numero. Questo numero dovrà avere un formato.
Dichiarare una media come INT mi sembra un po' una forzatura, comunque...

Antonomasia1
quindi diciamo che mi stai dicendo che posso anche tranquillamente dare dei valori VOID a media e alle altre cose che andro a fare giusto?

Cheguevilla
quindi diciamo che mi stai dicendo che posso anche tranquillamente dare dei valori VOID a media e alle altre cose che andro a fare giusto?
No.
La funzione "media vettori" produce una media, cioè un output, un numero. Questo numero dovrà avere un formato.

Teoricamente, si può fare una funzione void che produce l'output come side effect, ma è una brutta abitudine che non si dovrebbe prendere.
Le funzioni sono fatte per ricevere dati in input e produrre un output.
Sarebbe un'ottima cosa abituarsi a usare le funzioni come tali.

gundamrx91-votailprof
Forse dovresti prima chiarirti il concetto di funzioni e procedure... ;)

dzcosimo
allora, per funzioni si intendono parti di programma che vengono scritte una sola volta e utilizzate ad ogni chiamata di funzione.
chiarisco subito che trovo opportuno in questa brevissima spiegazione tralasciare i valori passati per riferimento che creerebbero solo problemi.
le funzioni hanno un numero di valori in input a scelta del programmatore i quali vanno definiti fra parentesi dopo il nome della funzione.
esse hanno invece o 0 o 1 output il cui tipo viene definito prima del nome della funzione.
nel caso in cui io non voglia niente in restituzione scrivo void, ad esempio:

void stampaint(int n){
cout< }

oppure

void media(int n,int m){
int i;
i=(m+n)/2;
}

in questo ultimo caso devi notare bene che ogni cosa che avviene nella funzione avviene in una parte di memoria estranea al resto del programma detta istanza della funzione per cui nell'istanza verrà creato un inti del valore assegnato, ma le istanze di funzione vengono distrutte alla fine della esecuzione della funzione e dunque risultano inutilizzabili.per chiarire meglio il concetto ti propongo questo:

void dividi2errato(int n){
n=n/2;
}

int dividi2(int n){
n=n/2;
return n;
}

nel primo caso verra creata una copia dell'intero passato alla funzione ed essa sarà dimezzata rendendo del tutto inutile la funzione, nel caso secndo invece verrà sempre creata una copia per poi essere divisa per due, ma essa verrà restituita come output e dunque se subito utilizzata in un programma del tipo

int main(){
int i=4;
int n=dividi2(i);
cout< }

output:
4 2

produrrà dei risultati utili.

se invece di int vuoi restituire un bool ecc basta che scrivi
bool verofalso(bool b,int c) ad esempio

spero di essere stato utile, per ulteriori dubbi ci sono

dzcosimo
ovviamente non credevo e non credo che l'intervento di gundam rx91 sia un atto di leggerezza o simili come giustamente sergio mi ha fatto notare.
Solo che non vorrei perdere di vista le esigenze del nostro amico anotonomasia il quale ad occhio credo sia uno studente di iti o comunque di superiori che per ora risulta ben poco interessato alle definizioni puramente formali(alle quali sono interessato il giusto pure io essendo un povero ingegnereXD) quanto al funzionamento nel C del meccanismo input/output delle funzioni; in base a questo ho dunque articolato la mia risposta, spero di non essere stato troppo superficiale in questo ma ho creduto fosse il fine del post

gundamrx91-votailprof
sergio e' stato chiarissimo ;)

Il linguaggio C all'inizio e' un po' disorientante, ma avendo le idee chiare poi si procede senza problemi. Diverso e' il discorso se lo si studia come primo linguaggio di programmazione .... :)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.