Anzeige

Hilfe in C++

Hilfe in C++ | PSD-Tutorials.de

Erstellt von Lederstrumpf, 15.03.2012.

  1. Lederstrumpf

    Lederstrumpf Noch nicht viel geschrieben

    Dabei seit:
    13.01.2010
    Beiträge:
    32
    Geschlecht:
    männlich
    Hilfe in C++
    Hallo zusammen,
    da ich kein geeignetes Unterforum gefunden habe stelle ich meine Frage jetzt einfach mal hier und hoffe auf eine Antwort.

    Ich habe eine Aufgabe aus der Informatik, verstehe jedoch nicht so wirklich was hier passiert.

    einmal der Code im ganzen. Und unten mit meinen Kommentaren.

    Code (Text):
    1. 6. Welche Ausgabe erzeugt das Hauptprogramm main auf dem Bildschirm? #include <iostream>
    2.   using namespace std;
    3.   int f(int a, int b) {
    4.     if (b-a <= 1) {
    5.       return b-a;
    6.     } else {
    7.       int c = (a+b) / 2;
    8.       return 1 + f(a,c) + f(c,b);
    9.     }
    10. }
    11.   int main() {
    12.     cout << f(2,5) << endl;
    13.     return 0;
    14. }
    15. (a) 7 (b) 5 (c) 3 (d) 0
    16.  

    Jetzt der Code mit meinen Kommentaren.


    Code (Text):
    1. #include <stdlib.h>
    2.  
    3. #include <iostream>
    4.  
    5.  
    6.   using namespace std;
    7.  
    8.  
    9.   int f(int a, int b) {
    10.     if (b-a <= 1) {
    11.       return b-a;
    12.     } else {
    13.       int c = (a+b) / 2;
    14.       return 1 + f(a,c) + f(c,b);
    15.     }
    Hier wird ja eine Funktionsvorschrift ausgeführt die in der main aufgerufen wird.

    Ich verstehe jedoch nicht, was nach dem return in der else-Funktion passiert.

    Code (Text):
    1.  
    2. }
    3.   int main() {
    4.     cout << f(2,5) << endl;
    5.     return 0;
    6. }
    7.  

    Ich hoffe mir kann jemand helfen. Wenn ich hier im falschen Bereich gelandet bin kann es gerne verschoben werden.

    Vielen Dank schonmal

    ;)
     
    Zuletzt bearbeitet: 15.03.2012
    #1      
  2. Robbyn-

    Robbyn- PHP / Flex Programmierer

    Dabei seit:
    18.12.2006
    Beiträge:
    553
    Geschlecht:
    männlich
    Ort:
    Schmallenberg
    Software:
    CC, JetBrains PhpStorm 8, Flash Builder 4.7
    Hilfe in C++
    AW: Hilfe in C++

    Er gibt dir einen Integer Wert zurück, du rufst ja mit

    Code (Text):
    1.  
    2. cout << f(2,5) << endl;
    3.  
    die Funktion "f" auf. Dieser Funktion übergibst du 2 Parameter einmal die 2 und einmal die 5. So dann wird überprüft:

    Code (Text):
    1.  
    2.  if (b-a <= 1) {
    3.       return b-a;
    4.     }
    5.  
    Wenn 5-2 kleiner-oder gleich 1 ist dann gibt 5-2 zurück

    Code (Text):
    1.  
    2. else {
    3.       int c = (a+b) / 2;
    4.       return 1 + f(a,c) + f(c,b);
    5.     }
    6.  
    Ist dies nicht der Fall dan erstelle einen weiteren Integer Wert der c heißt. Dieser Wert besteht aus deinen Parametern 2 und 5. So nun zum return Wert.

    Bei Return wird die gleiche Funktion in der man sich befindet nochmal aufgerufen.
    Im klartext würde das da stehen:

    Code (Text):
    1.  
    2. return 1 + f(2,3) + f(3,5);
    3.  
    letzendlich zurück gegeben wird der Wert: 3 Wenn ich mich nicht verrechnet habe. :)

    Was diese Funktion aber letzendlich bewirken soll, weiß ich auch nicht :D
     
    #2      
  3. Lederstrumpf

    Lederstrumpf Noch nicht viel geschrieben

    Dabei seit:
    13.01.2010
    Beiträge:
    32
    Geschlecht:
    männlich
    Hilfe in C++
    AW: Hilfe in C++

    Danke schonmal für deine Antwort :)

    Genau so weit bin ich auch gekommen dann aber nicht weiter.

    Im Prinzip gibt er mir ja das

    Code (Text):
    1. return 1 + f(2,3) + f(3,5);
    in die If-Schleife zurück.

    Was ich jetzt nicht weiß ist wie ich damit weiterrechnen soll?????
     
    #3      
  4. Robbyn-

    Robbyn- PHP / Flex Programmierer

    Dabei seit:
    18.12.2006
    Beiträge:
    553
    Geschlecht:
    männlich
    Ort:
    Schmallenberg
    Software:
    CC, JetBrains PhpStorm 8, Flash Builder 4.7
    Hilfe in C++
    AW: Hilfe in C++

    Ich verstehe deine Frage nichzt, wie/was willst du weiterrechnen?

    Willst du wissen was z.b. bei f(2,3) beim return zurück kommt?
     
    #4      
  5. Skyclad

    Skyclad Clockwork Doll

    Dabei seit:
    10.12.2009
    Beiträge:
    341
    Geschlecht:
    männlich
    Ort:
    London
    Software:
    C4D16S, Carrara8
    Kameratyp:
    Canon EOS40D
    Hilfe in C++
    AW: Hilfe in C++

    Sie soll bewirken, dass sich der Schueler mit dem Prinzip der rekursiven Funktion auseinandersetzt und diese verstehen lernt.

    Indem Du die entsprechenden Rueckgabewerte einsetzt und den Vorgaben des Programmcodes folgst.
     
    Zuletzt bearbeitet: 15.03.2012
    #5      
  6. Robbyn-

    Robbyn- PHP / Flex Programmierer

    Dabei seit:
    18.12.2006
    Beiträge:
    553
    Geschlecht:
    männlich
    Ort:
    Schmallenberg
    Software:
    CC, JetBrains PhpStorm 8, Flash Builder 4.7
    Hilfe in C++
    AW: Hilfe in C++

    Ah ok das klingt plausibel, scheint aber offenbar nicht geholfen zu haben wenn die Frage hier im Forum aufkommt :D
     
    #6      
  7. Skyclad

    Skyclad Clockwork Doll

    Dabei seit:
    10.12.2009
    Beiträge:
    341
    Geschlecht:
    männlich
    Ort:
    London
    Software:
    C4D16S, Carrara8
    Kameratyp:
    Canon EOS40D
    Hilfe in C++
    AW: Hilfe in C++

    Ja, das gute alte Prinzip des "in dieser Hausaufgabe sollst Du das anwenden, was der Lehrer in der letzten Stunde erklaert hat" und der Schueler schaut wie ein Schwein ins Uhrwerk.
     
    #7      
  8. Lederstrumpf

    Lederstrumpf Noch nicht viel geschrieben

    Dabei seit:
    13.01.2010
    Beiträge:
    32
    Geschlecht:
    männlich
    Hilfe in C++
    AW: Hilfe in C++

    Ich muss kurz anmerken, dass ich Maschinenbau im 1. Semester studiere:uhm:

    Meine Rückgabewerte sind dann doch 1 + f(2,3) + f(3,5); richtig?

    Mein Problem ist, dass es jetzt auf einmal zwei Funktionen gibt in denen auch noch ein c gespeichert ist.

    Irgendwie will mir nicht einleuchten was ich jetzt im nächsten Schritt zu tun habe.

    Eclipse spuckt mir den Wert 5 raus. Nur warum?

    Leider werde ich aus meinen Vorlesungsaufzeichnunen auch nicht wirklich schlauer... :'(
     
    #8      
  9. Robbyn-

    Robbyn- PHP / Flex Programmierer

    Dabei seit:
    18.12.2006
    Beiträge:
    553
    Geschlecht:
    männlich
    Ort:
    Schmallenberg
    Software:
    CC, JetBrains PhpStorm 8, Flash Builder 4.7
    Hilfe in C++
    AW: Hilfe in C++

    Du nimmst jetzt f(2,3) und gehst das gleich nochmal durch, das ergebniss schreibst du dir z.b. irgendwo auf. Das gleiche machst du dann auch mit f(3,5). Die Ergebnisse multiplizierst du jeweils und rechnest noch + 1 dazu. EDs handelt sich ja um die gleiche Funktion.
     
    #9      
  10. Lederstrumpf

    Lederstrumpf Noch nicht viel geschrieben

    Dabei seit:
    13.01.2010
    Beiträge:
    32
    Geschlecht:
    männlich
    Hilfe in C++
    AW: Hilfe in C++


    Ahh jetzt ist mir wieder klar wie das war.:)

    Viele Dank.
    Ich hatte vergessen, dass ich die einzelnen Schritte nacheinander ausführen muss.
    Ich komme jetzt in meiner Rechnung auch auf 5.

    Danke an euch zwei =)
     
    #10      
x
×
×