PDA

Visualizza la versione completa : c++ Procedure e funzioni


corallo
28-11-2011, 20:21
Salve ragazzi,....non riesco a capire la differenza tra procedura e funzione....mi spiego meglio,,,il prof ha detto ke quando il sottoprogramma ci restituisce un solo valore è una funzione altrimenti è una procedura.
Ho visto ke però all interno di una procedura è possibile cmq farer dei calcoli e restituire il risultato di quel calcolo e non soltanto come aveva detto il prof ke è utilizzata prettamente quando non restituisce alcun valore e quindi una semplice operazione di cout per fare ad esempio una stampa....cioè, una procedura puo restituire o meno un valore(perke il prof ha detto ke nn restituisce nessun valore relativo al tipo della funzione)...????....e se volete anke un kiarimento tra passaggio per riferimento e per valore...(se non erro nel riferimento e possibile fare delle modifiche sulla variabile fornita mentre per valore no)...grazie ragazzi..ma sono un po confuso sui questo argomento

Alex'87
28-11-2011, 20:25
Originariamente inviato da corallo
Salve ragazzi,....non riesco a capire la differenza tra procedura e funzione....mi spiego meglio,,,il prof ha detto ke quando il sottoprogramma ci restituisce un solo valore è una funzione altrimenti è una procedura. Una funzione può restituire UN SOLO valore, in ogni caso.

In linea di massima sono la stessa cosa, la differenza è che una funzione restituisce qualcosa mentre una procedura non ha un valore di ritorno.

philbert
29-11-2011, 11:18
Originariamente inviato da corallo

Ho visto ke però all interno di una procedura è possibile cmq farer dei calcoli e restituire il risultato di quel calcolo e non soltanto come aveva detto il prof ke è utilizzata prettamente quando non restituisce alcun valore e quindi una semplice operazione di cout per fare ad esempio una stampa....

cioè, una procedura puo restituire o meno un valore(perke il prof ha detto ke nn restituisce nessun valore relativo al tipo della funzione)...????....


Perché il tuo prof con ogni probabilità stava facendo considerazioni di base e non strettamente relative al c/c++.
In molti linguaggi di programmazione ci sono differenze proprio sintattiche tra funzioni e procedure, mentre nel c/c++ la differenza tra funzione e procedura è puramente concettuale: esiste una sola sintassi.

Quindi lo stesso identico codice è definito procedura se restituisce void e non ha un return, mentre è definito funzione se restituisce una altro tipo di dati diverso da void e ha almeno un return.


infatti tu giustamente hai notato che


all interno di una procedura è possibile cmq farer dei calcoli e restituire il risultato di quel calcolo

solo che in quel caso non è più una procedura ma una funzione...
proprio perché nel c/c++ funzioni e procedure sono sintatticamente la stessa cosa, la differenza è solo concettuale (ritorna un valore o non lo ritorna?)


Per quanto riguarda passaggio per riferimento e per valore è giusto come hai capito tu, non c'è nulla da aggiungere

ramy89
29-11-2011, 14:25
Quindi una procedura non ritorna un valore.
Ma se io questa funzione:


bool stampa_eta(int eta)
{
bool result=false;
if(eta>=0 && eta<120)
{
cout << "Eta' : " << eta<<endl;
result=true;
}
return result;
}

La sto a tutti gli effetti usando come una procedura.Ufficialmente è una procedura o una funzione?


Originariamente inviato da corallo
....e se volete anke un kiarimento tra passaggio per riferimento e per valore...(se non erro nel riferimento e possibile fare delle modifiche sulla variabile fornita mentre per valore no)...grazie ragazzi..ma sono un po confuso sui questo argomento

Ogni volta che si chiama una procedura o una funzione passandogli dei parametri, il valore dei parametri viene copiato in altre aree di memoria,quindi se dichiaro:


void modifica(int a)
{
a=5;
}

E' a tutti gli effetti una procedura sterile, perchè a viene copiato localmente ed è un parametro formale,se lo modifico non modifico il valore originale che ho passato alla funzione, ma modifico solo la sua copia (che è temporanea, e cessa di esistere quando la procedura termina).
Se invece alla funzione gli passo un puntatore:


void modifica(int *a)
{
*a=5;
}
int main(int argc, char **argv)
{
int var;
modifica(&var);
return 0;
}

Allora si che ha effetto, perchè localmente in a viene copiato l' indirizzo di var, e quando si accede a *a, si accede al valore a cui punta a, cioè si accede al valore contenuto nell' indirizzo di var.

oregon
29-11-2011, 14:59
Originariamente inviato da ramy89
La sto a tutti gli effetti usando come una procedura.

In che senso? Mi sfugge qualcosa ...



... E' a tutti gli effetti una procedura sterile ... Allora si che ha effetto

Sì, ma cosa c'entra tutto ciò con le procedure e le funzioni ? Anche questo mi sfugge ...

Le procedure e le funzioni si differenziano per il risultato restituito sullo stack non per quello che fanno o le locazioni di memoria che modificano (se lo fanno).

E quella procedura non è "sterile" perché perde tempo e potrebbe essere usata come "ritardo" in un qualsiasi programma ...

ramy89
29-11-2011, 17:18
Aveva chiesto anche un chiarimento sui passaggi di parametro per valore e per riferimento.


In che senso? Mi sfugge qualcosa ...
Nel senso che viene usata solo per eseguire codice (stampare l' età),il valore di ritorno è solo per sapere se c'è un errore o meno.Io il concetto di procedura lo avevo in mente così.


E quella procedura non è "sterile" perché perde tempo e potrebbe essere usata come "ritardo" in un qualsiasi programma ...
Ok che l' istruzione di per se prende tempo cpu, ma non ha effetto sulla memoria.

philbert
29-11-2011, 17:23
Originariamente inviato da ramy89
Nel senso che viene usata solo per eseguire codice (stampare l' età),il valore di ritorno è solo per sapere se c'è un errore o meno.Io il concetto di procedura lo avevo in mente così.


Se restituisce un valore di ritorno concettualmente è una funzione.
Un valore di errore è a tutti gli effetti una valore di ritorno!

oregon
29-11-2011, 21:40
Originariamente inviato da ramy89
Nel senso che viene usata solo per eseguire codice (stampare l' età),il valore di ritorno è solo per sapere se c'è un errore o meno.Io il concetto di procedura lo avevo in mente così.

Un valore di ritorno, qualsiasi cosa voglia dire, è comunque indicativo di una funzione.



Ok che l' istruzione di per se prende tempo cpu, ma non ha effetto sulla memoria.

Non importa assolutamente se non ha effetto sulla memoria.

Loading