return - niby po co to?

0

ucząc się C++ w ogóle nie mogę zrozumieć, po jaką cholercię jest funkcja RETURN?
Przez większość czasu używałem jej z przymusu (return = 0;) gdyż inaczej programy mi nie działały.
ale ostatnio w poradniku czytałem o pętli krokowej i było tam coś takiego:

int Suma(int nLiczba)
{
    int nSuma = 0;
    
    for (int i = 1; i <= nLiczba; i++)
    nSuma += i;
    
    return nSuma;
}

nie wiem po co to return, skoro wynik Sumy można podać w zmiennej... (chyba?)

0

Ponieważ masz coś takiego jak zasięg działania zmiennej, zmienna nSuma zawarta w Twojej funkcji nie będzie dostępna nigdzie indziej w programie.

0

Byłeś uczony pascala ;-)? W pascalu był zwrot przez zmienną o nazwie takiej samej jak funkcja. W c/c++ musi być return, żeby funkcja cokolwiek zwróciła.

0

Ale o co chodzi zwróciła? eh... i jak mam potem wykorzystać tą zwróconą wartość?

0

spróbuj tak:

int suma(int nLiczba)
{
int nSuma = 3;
nSuma += nLiczba;
return nSuma;
}

///

int main()
{
int x = suma(3);
cout << nSuma ; // BLAD bo nSuma juz tutaj nie istnieje !
cout << x; // tak można, 

cin.sync();
cin.get();
return 0;
}
0

Właśnie wczoraj zastanawiałem się nad użyciem tej instrukcji w książce "Wprowadzenie do algorytmów" (nie chciałem tworzyć nowego tematu, więc piszę tutaj).
Jest tam użyte przekazywanie przez wartość i rozumiem do czego służy funkcja return, ale nie zawsze rozumiem dlaczego w danym miejscu.
Przykładowo Algorytm Euklidesa:

EUCLID(a, b)
1  if b = 0
2     then return a
3     else return EUCLID(b, a mod b)
 

Nie rozumiem tutaj po co funkcja return została użyta w 3 wierszu., na początku myślałem, że to dlatego bo zmienia się wartość zmiennej b w wywołaniu rekurencyjnym, ale np. w algorytmie sortowania przez scalanie nie ma tej instrukcji (mimo iż wartości parametrów również się zmieniają).

MERGE-SORT(A, p, r)
1  if p < r
2     then q := trunc((p + r)/2)
3          MERGE-SORT(A, p, q)
4          MERGE-SORT(A, q + 1, r)
5          MERGE(A, p, q, r) 
 

Nie znalazłem nic o tej instrukcji w książce, więc mam nadzieję, że mi ktoś wytłumaczy.

1

Bo w sortowaniu dziel i zwyciężaj, nie zwracasz żadnej wartości tylko zastępujesz pewną instrukcją (dokonujesz zamiany miejscami). W funkcji euklidesa funkcja zwróci Ci wartość bo tego wymaga zadanie. W trzeciej linijce jest potrzebna instrukcja return ponieważ funkcja Euklid zwroci wartość w momencie kiedy b == 0, a żeby tak było, to może dojść nawet do 100 wywołań rekurencyjnych. Kiedy natomiast już to nastąpi, to zwróci wartość a100, potem tą wartość zwróci do instrukcji wyżej czyli a99, potem a98.... aż do a1 a wynikiem będzie właśnie to a1 które widzisz w twoim kodzie. (bo wywołanie funkcji rekurencyjnej polega na tym, że w jednej funkcji wywołujesz samą siebie jeszcze raz, ale kiedy ta druga przestanie działać, to ta pierwsza musi się dokończyć, czyli w tym przypadku zwróci to co zwróciła tamta później)

0

No tak teraz rozumiem - z instrukcją Return wyjdzie tak samo, jakbym w Pascalu pisał funkcję i przypisywał EUCLID := EUCLID(b, a mod b).

0

No tak teraz rozumiem - z instrukcją Return wyjdzie tak samo, jakbym w Pascalu pisał funkcję i przypisywał EUCLID := EUCLID(b, a mod b).

Nie do końca. return wychodzi z funkcji, jest więc odpowiednikiem z pascala przypisania wartości wraz z exit; zaraz po tym.

printf("ala ma kota");
return 1;
printf("ala nie ma kotów");

tylko pierwszy napis się pojawi.

0

Nie do końca. return wychodzi z funkcji, jest więc odpowiednikiem z pascala przypisania wartości wraz z exit; zaraz po tym.

To czy w pseudokodzie u Cormena jest tak samo (jak w C++)? Pytam się, bo chciałbym już dokładnie wiedzieć.

0

Tak samo jak w c++. Return dla funkcji, to jak break dla pętli z tym że powoduje że funkcja zwróci jakąś wartość

1 użytkowników online, w tym zalogowanych: 0, gości: 1