Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » erklärung return wert bei funktionen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.11.2002, 21:00 Uhr
karim



hallo ..

ich habe ein problem.. ich verstehe bei den funktionen den return wert nicht.

was heisst das eigentlich? wenn die funktion gemacht wird übergibt er dann am schluss mit return den wert an die funktion zurück und dann kann ich diesen wert im hauptprogramm aufrufen oder?

ich habe nämlich folgende funktion gefunden und kann mir die return- werte einfach nicht erklären. vielleicht kann es hier jemand....

wenn ich zb den grössten gemeinsamen teiler habe und zwei zahlen einlöse....

dann habe ich folgende funktion mit den return-werten:

int GGT(int m, int n)
if (n == 0)
return a; //was bezweckt jetzt das a, wenn ich es zurückschicke und im hauptprogramm ausgebe?
else
return GGT(n, m%b); // was bewirkt das? modulo ist mir klar aber hat das n auch noch eine funktion?

vielleicht kann mir das jemand erklären .. check mich da überhaupt nicht durch. wär aber echt wichtig für mich das zu wissen.

danke.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.11.2002, 08:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi

Zitat:
ich habe ein problem...

Das haben viele


Zitat:
ich verstehe bei den funktionen den return wert nicht.

ok ich erklärs dir

Wenn man eine Funktion hat:


C++:
int Funktion(int p1, int p2)
{
    return (p1 * p2);
}


sind p1 und p2 2 Zahlen (Parameter) welche man der Funktion übergeben muss. Normalerweiße benutzt man Funktionen um gleiche Schritte "auszulagern", also das man nicht immer z.B. 5 Zeilen schreiben muss sondern nur noch eine. Die obere Funktion berechnet im Grunde nichts anderes als p1 * p2 (also z.B. p1 = 4, p2 = 2, Funktion(4,2) = 8).
Das return bedeutet, das man eben dieses Ergebnis (8) dann "zurückgibt", also wieder dem Hauptprogramm oder einer anderen Funktion übergibt.


C++:
void main(void)
{
    int erg = Funktion(4,2);
}



In diesem Fall wäre eben die Variable erg 8.

[quote]
ich habe nämlich folgende funktion gefunden und kann mir die return- werte einfach nicht erklären. vielleicht kann es hier jemand....

wenn ich zb den grössten gemeinsamen teiler habe und zwei zahlen einlöse....
[quote]


C++:
int GGT(int m, int n)
{
  if (n == 0)
      return a;
  else
    return GGT(n, m%b);



Da muss ein Fehler vorliegen, den a und b sind nicht definiert, da würde der Compiler meckern


C++:
    return GGT(n, m%b);


rekursiver Aufruf von GGT, man ruft die Funktion GGT so auf:


C++:
GGT(5,10);
  da n != 0
     GGT(10,5%b);
        da n != 0
           GGT(5%b,(5%b)%b);
               usw...
                 GGT(m,0);
                   aha n==0!
                 <- a
           <- a
      <- a
<- a


Am Ende kommt eben a raus ...

Hoffentlich konnt ich dirs einigermaßen erklären, wenn noch was unklar ist, einfach posten
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.11.2002, 11:32 Uhr
karim



hallo..

ich hab mich bei der funktion verschrieben... es sollte heissen:

int GGT(int m, int n)
if (n == 0)
return m;
else
return GGT(n, m%n);

also kein b usw..

also wenn jetzt m = 10 ist und n= 5.

dann:
5 == 0 ist false also gibt er kein 10 zurück.

er gibt also 5, 10%5 zurück.

aber was bedeutet der beistrich zwischen n und dem zweiten ausdruck? oder heisst das nur, dass n unverändert zurückgegeben wird und m verändert wird?
10%5 ist doch 0. heisst das m ist jetzt null?

das ist alles kompliziert ich hoffe du kannst mir nochmal helfen. danke.

karim
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.11.2002, 11:45 Uhr
virtual
Sexiest Bit alive
(Operator)


Warum postest Du denn nicht den OrignalCode? Das was Du zeigst, sind Fragmente, aber nie und nimmer eine Funktion.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.11.2002, 12:02 Uhr
karim



das ist meine funktion! und sie funktioniert.. also kein fragment!

gruss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.11.2002, 12:04 Uhr
~0xdeadbeef
Gast


Du hast da eine rekursive Funktion. Der ggt-Algorithmnus wird in aller Regel iterativ implementiert, deswegen sieht das etwas befremdlich aus, aber es macht im Grunde Sinn. Was passiert ist folgendes:

Du rufst die Funktion GGT zum Beispiel mit m = 10, n = 5 auf.

Wegen 5 == 0 false gibt die nicht 10 zurück, sondern den Rückgabewert von GGT(5, 0). GGT(5,0) gibt wegen 0 == 0 true 5 zurück, also ist das auch der Rückgabewert von GGT(10, 5).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.11.2002, 12:34 Uhr
karim



danke jetzt hab ich es verstanden...

nur noch eine frage.

wenn ich jetzt stehen hab

return ggt(b, a%b), ist dann der erste ausdruck in meiner klammer gleich a und der zweite ausruck in der klammer a%b eigentlich gleich b? da ja ggt (a, b) ist.

denn wäre es anders wäre ja b = 5 und nicht null. er würde also alles nochmal machen. und 5 == 0 wäre false und er würde a nicht zurück geben. a hätte ja den wert 0.

etwas verwirrend aber so müsste es gehen oder? bzw so muss ich es verstehn. oder nicht?

wäre es dir zu anstrengend mir mal aufzuschreiben wie es aussieht wenn ich die zahlen 880 für m und 550 für n habe. der ausdruck m müsste ja eigentlich immer gleich bleiben. nur der ausdruck n mit m%n verändert sich oder? (das erbegnis ist übrigends 40)

ich versuch das nämlich schon ne weile nachzurechnen damit ich es besser verstehe.. komm aber nicht darauf.

danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.11.2002, 13:47 Uhr
~0xdeadbeef
Gast


Ich schreibs mal durchlaufsweise auf:

m = 880, n = 550
m2 = 550, n2 = 880 % 550 = 330
m3 = 330, n3 = 550 % 330 = 220
m4 = 220, n4 = 330 % 220 = 110
m5 = 110, n4 = 220 % 110 = 0

Also: ggt(880, 550) = ggt(550, 330) = ggt(330, 220) = ggt(220, 110) = ggt(110, 0) = 110.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: