[RISOLTO] [C] Funzioni e procedure con passaggio e ritorno di valore

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
DarkF12@
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 755
Iscrizione: venerdì 22 febbraio 2008, 0:15

[RISOLTO] [C] Funzioni e procedure con passaggio e ritorno di valore

Messaggio da DarkF12@ »

ciao a tutti ;)
Come da titolo sto studiando le procedure/funzioni in c.Non so xkè, ho provato a leggere + di una guida ke le spiegasse ma non riesco a capirle.Cioè in se sono semplici ma la confusione ke ho è quando devo usare il return o il passaggio con la & .Infatti a questo punto non so + la differenza ke esiste tra procedura e funzione i quanto sia nell'una ke nell'altra posso usare sia il return ke la & ...
Qual'è la differenza?
Quale si usa l'1 o quando si usa l'altra?
Xkè in entrambi si può usare il return e la &?.
Sarebbe fantastico se riuscissi a capire le differenze.
Grazie >:(
Ultima modifica di DarkF12@ il sabato 13 settembre 2008, 19:38, modificato 1 volta in totale.
Volere è potere
Ikitt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1816
Iscrizione: mercoledì 24 ottobre 2007, 12:05

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da Ikitt »

DarkF12@ ha scritto: ciao a tutti ;)
Come da titolo sto studiando le procedure/funzioni in c.Non so xkè, ho provato a leggere + di una guida ke le spiegasse ma non riesco a capirle.Cioè in se sono semplici ma la confusione ke ho è quando devo usare il return o il passaggio con la & .Infatti a questo punto non so + la differenza ke esiste tra procedura e funzione i quanto sia nell'una ke nell'altra posso usare sia il return ke la & ...
In C non esiste la distinzione (come invece p.es. in Pascal e derivati) tra procedura e funzione: esistono solo le funzioni.
Come ritornare valori al chiamante... Dipende dai casi e dai contesti ;)

PS: potresti evitare il gergo da SMS nello scrivere nel forum, per cortesia?
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da crap0101 »

non so se ho capito bene che intendi, ma non credo dovresti pensare a return ed & come "cose" intercambiabili", almeno non sempre.

Usi la & quando la funzione deve andare a modificare delle variabili, ad esempio gli elementi di un array, contemporaneamente il return può essere usato per avere un valore di ritorno da cui desumere che è successo all` interno della funzione.

ma forse non intendevi questo eh?
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
DarkF12@
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 755
Iscrizione: venerdì 22 febbraio 2008, 0:15

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da DarkF12@ »

X crap0101  :
Grazie x la risposta xò nn era proprio quello ke intendevo io.Io vorrei solo sapere perchè in molte guide separano le funzioni dalle procedure(ad esmepio nel mio libro di c scolastico) per poi successivamente andare a spiegare che entrambe posso ricevere valori sia con il return(in questo caso il valore lo copio e non modifico quello nel main) sia con la & in questo caso modifico il valore nel main.
Questa distinzione (come ha spiegato Ikitt ) non penso debba essere fatta perchè sono entrambe la stessa cosa, troviamo gli stessi passaggi di varaibili e si dichiarono nello stesso modo.

L'unica differenza sostenziale è nel ritorno del valore uno lo copia ma non lo modifica nel main mentre l'altro lo modifica nel main.

Giusto?
Volere è potere
Ikitt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1816
Iscrizione: mercoledì 24 ottobre 2007, 12:05

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da Ikitt »

DarkF12@ ha scritto: X crap0101  :
Grazie x la risposta xò nn era proprio quello ke intendevo io.Io vorrei solo sapere perchè in molte guide separano le funzioni dalle procedure(ad esmepio nel mio libro di c scolastico)
C'e` da fare una digressione, purtroppo rilevante.
Una fetta rilevante dei testi scolastici non e` di buona qualita`, vuoi perche` poco aggiornata, vuoi perche` proprio scritta male.
Non mi sento di escludere che tale separazione possa essere dovuta al fatto che l'autore/trice si e` formato in Pascal, e ha semplicemente tradotto i concetti, con tutti gli ovvi problemi.
Attenzione: non sto dicendo che il motivo e` quello, viceversa sto dicendo che questo motivo non si puo` escludere.

Poi vabbeh dipende anche dal contesto e da come il libro presenta il discorso; potrebbe avere ([secondo me] poco) piu` senso se fosse inquadrato in una comparazione C/Pascal.
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da crap0101 »

Io vorrei solo sapere perchè in molte guide separano le funzioni dalle procedure
curiosità: quali sono i libri in cui è scritto così?
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
DarkF12@
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 755
Iscrizione: venerdì 22 febbraio 2008, 0:15

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da DarkF12@ »

Il libro è: Titolo: Introduzione alla programmazione in c/c++  autore: Gabriele Bonechi, Nazario Renzoni  Casa edittrice: Apogeo.

Ok capito xkè alcuni autori fanno questa differenza.

Anche se come detto a mio parere si fa solo + confusione e srebbe molto + comodo studiare solo le funzioni e i due passaggi che si possono effettuare->& e return.

Se ho sbagliato qualche cosa correggetemi.
Grazie
Volere è potere
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da crap0101 »

ok
io...bhu, non avevo mai letto dove le presentavano così
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
DarkF12@
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 755
Iscrizione: venerdì 22 febbraio 2008, 0:15

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da DarkF12@ »

Continuando a fare prove mi è venuto un dubbio:
Come mai se dichiaro la mia procedura in inte/char ecc ecc devo per forza mettere un return alla fine(e quindi posso far tornarnare solo un valore) mentre se uso void posso utilizzzare la comodissima &?
Inoltre ho visto che con la dichiarazione int/char(sempre delle funzioni) devo assegnare la funzione ad una variabile  per poter riavere il valore:

Codice: Seleziona tutto

int prova(int )
main()
int a,b,c;
a=prova(int);
printf("%d", a);

int prova(int b)
c=b++;
return b;
Con il return posso passare solo una variabile.Giusto?Non posso fare + return..
Per poter passare e far ritornare piu variabili devo usare la & e quindi devo dichiarare la procedura come void?
Giusto?
Volere è potere
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da crap0101 »

DarkF12@ ha scritto: Inoltre ho visto che con la dichiarazione int/char(sempre delle funzioni) devo assegnare la funzione ad una variabile  per poter riavere il valore:

Codice: Seleziona tutto

int prova(int )
main()
int a,b,c;
a=prova(int);
printf("%d", a);

int prova(int b)
c=b++;
return b;
che è?
Ultima modifica di crap0101 il sabato 13 settembre 2008, 15:30, modificato 1 volta in totale.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
DarkF12@
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 755
Iscrizione: venerdì 22 febbraio 2008, 0:15

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da DarkF12@ »

Scusa ho sbagliato,l'ho fatto al momento tanto x far capire cosa volevo dimostrare(che dopo il retunr se dichiaro la funzione in int devo assegnare la funzione ad una variabile es a=prova(int))

Codice: Seleziona tutto

int prova(int )
main()
int a,b,c;
a=prova(b);
printf("%d", a);

int prova(int l) //il ocontenuto della variabile b è andato in l
l++;
return l;
Volere è potere
Ikitt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1816
Iscrizione: mercoledì 24 ottobre 2007, 12:05

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da Ikitt »

DarkF12@ ha scritto: Scusa o sbagliato,l'ho fatto al momento tanto x far capire cosa volevo dimostrare(che dopo il retunr se dichiaro la funzione in int devo assegnare la funzione ad una variabile es a=prova(int))

Codice: Seleziona tutto

int prova(int )
main()
int a,b,c;
a=prova(b);
printf("%d", a);

int prova(int l) //il ocontenuto della variabile b è andato in l
l++;
return l;
E` ancora molto poco chiaro; potresti postare codice compilabile per indicare cosa intendi?
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da crap0101 »

non avevo visto che avete risposto  ;D sposto qui... dicevo: forse continuo a non capire,intendi uno di questi due modi?:

Codice: Seleziona tutto

#include <stdio.h>

int prova(int b, int c)
{
  c = ++b;
  return c;
}

void prova2(int *a1, int *b1)
{
  *a1 = ++(*b1);
}

int main()
{
  int a, a1, b=1, b1 = 1, c;
  a = prova(b, c);
  prova2(&a1, &b1);
  printf("\nProva:%d\n", a);
  printf("\nProva2:%d\n", a1);
  return 0;
}
Ultima modifica di crap0101 il sabato 13 settembre 2008, 15:32, modificato 1 volta in totale.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
DarkF12@
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 755
Iscrizione: venerdì 22 febbraio 2008, 0:15

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da DarkF12@ »

ora l'ho sistemato:

Codice: Seleziona tutto

#include<stdio.h>
int prova(int );
void main()
{
int a,b;
printf("Inserire un valore : ");
scanf("%d", &b);
a=prova(b);
printf("%d", a);
}
int prova(int l) //il ocontenuto della variabile b è andato in l
{l++;
return l;
}
Ultima modifica di DarkF12@ il sabato 13 settembre 2008, 16:12, modificato 1 volta in totale.
Volere è potere
Avatar utente
simpe94
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 508
Iscrizione: sabato 10 novembre 2007, 16:32
Località: Emilia Romagna

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da simpe94 »

DarkF12@ ha scritto: Come mai se dichiaro la mia procedura in inte/char ecc ecc devo per forza mettere un return alla fine(e quindi posso far tornarnare solo un valore) mentre se uso void posso utilizzzare la comodissima &?
Se restituissi due valori assegneresti due valori alla variabile a cui vuoi che venga assegnato il valore restituito; e questo è impossibile.
Non ha senso utilizzare un int se vuoi semplicemente cambiare il valore di argomenti tramite il passaggio dell'indirizzo. Usa void.
Ad esempio vuoi assegnare ad una variabile il valore della somma di due numeri? Usi int:

Codice: Seleziona tutto

int somma (int x, int y);
int main () {
     int a, b, risultato;
     risultato = somma (a, b); //sommati a e b, inserisce in risultato il risultato
     return 0;
{

int somma (int a, int b) {
     return a+b;
}
Vuoi semplicemente alterare il valore di due variabili? Usi void:

Codice: Seleziona tutto

void change (int &x, int &y);

int main () {
     int a, b;
     change (&a, &b); //cambia i valori da a, b servendosi dei loro indirizzi
     return 0;
}

void change (&a, &b) {
     a = 1;
     b = 2;
}
Simone - Made to Make
La pillola di oggi: «Non è necessario che un piatto sia elaborato per essere appetitoso.» (Ciccio)
Ikitt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1816
Iscrizione: mercoledì 24 ottobre 2007, 12:05

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da Ikitt »

simpe94 ha scritto:
DarkF12@ ha scritto: Come mai se dichiaro la mia procedura in inte/char ecc ecc devo per forza mettere un return alla fine(e quindi posso far tornarnare solo un valore) mentre se uso void posso utilizzzare la comodissima &?
Se restituissi due valori assegneresti due valori alla variabile a cui vuoi che venga assegnato il valore restituito; e questo è impossibile.
Non ha senso utilizzare un int se vuoi semplicemente cambiare il valore di argomenti tramite il passaggio dell'indirizzo. Usa void.
E` sbagliata la logica. Il valore di ritorno di una funzione, e la relativa semantica,  non hanno vincoli (o ne hanno di estremamente deboli) rispetto al tipo degli argomenti;
in generale, dipende semplicemente da come si specifica l'interfaccia della funzione. Ad esempio, potrebbe avere perfettamente senso far ritornare un'intero ad una funzione che ha puntatori come argomenti, se questo intero rappresenta il successo o meno dell'operazione. Ad esempio:

Codice: Seleziona tutto

int swap(int *a, int *b)
{
    if (a && b) {
         int c = *b;
         *b = *a;
         *a = c;
        return 0;
    }
    return 1;
}
Avatar utente
simpe94
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 508
Iscrizione: sabato 10 novembre 2007, 16:32
Località: Emilia Romagna

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da simpe94 »

Sì, quello si può assolutamente fare, ma credo che lui volesse usare due return ravvicinati, così:

Codice: Seleziona tutto

return 0;
return 1;
::)
Simone - Made to Make
La pillola di oggi: «Non è necessario che un piatto sia elaborato per essere appetitoso.» (Ciccio)
Avatar utente
DarkF12@
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 755
Iscrizione: venerdì 22 febbraio 2008, 0:15

Re: C [Funzioni e procedure con passaggio e ritorno di valore]

Messaggio da DarkF12@ »

Grazie a tutti per le risposte.
Ora ho chiarito i miei dubbi sopratutto grazie ai due esempi postati da simpe94 .
Grazie a tutti^-^
Volere è potere
Avatar utente
simpe94
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 508
Iscrizione: sabato 10 novembre 2007, 16:32
Località: Emilia Romagna

Re: [RISOLTO] [C] Funzioni e procedure con passaggio e ritorno di valore

Messaggio da simpe94 »

È la prima volta che riesco a essere utile in Programmazione... ::)
Simone - Made to Make
La pillola di oggi: «Non è necessario che un piatto sia elaborato per essere appetitoso.» (Ciccio)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti