Hilfe bei verstehen von Anfänger Code 30 Zeile



  • Der folgende Code ist aus einem C++ Tutorial mehr oder weniger übernommen...
    Die Funktion ist in einem Kommentar zusammengefasst.
    Meine Frage:

    Woher weiß der Compiler welchen Wert "e" und "g" haben ?
    Ich habe diesen nirgendwo definiert !

    Btw:Alles hatt funktioniert wie ich das wollte 😉

    Code

    /*Berechnung von Bremswegen in einer Schleife mit der Formel
    (Geschwindigkeit / 10 )^2 
    Die Anfängliche Geschwindigkeit beträgt 0km/h und steigert sich auf 400
    Dies passiert in 10er schritten bis zu einem Maximalwert von 400
    */
    
    #include <iostream>
    #define Startwert 0
    #define Endwert	400
    #define Schritt	 10
    
    double bremsweg(unsigned int g)
    
    {
    	double e = g / 10;
    	e = e * e;
    }
            int main ()
    {
    
    for (unsigned int geschwindigkeit = Startwert;                   geschwindigkeit <=Endwert; geschwindigkeit += Schritt)
    
    {
    
    std::cout <<"Bei einer Geschwindigkeit von"<< geschwindigkeit<<"kmh betraegt der Bremsweg"<<bremsweg(geschwindigkeit)<<"Meter"<< std::endl;
    
    }
    
    return 0;
    
    }
    

    Danke im vorraus für alle Antworten



  • g wird als Parameter übergeben. Und e wird ausgerechnet.



  • Was ist den das für ein Tutorial?

    Ersetze mal

    #define Startwert 0
    

    durch

    const int Startwert = 0
    

    Das #define sollte man nicht für diesen Zweck verwenden.



  • Mal abgesehen davon, dass der code schlecher Stil ist (defines, formatierung) und nicht das tut, was du willst (integer division in Zeile 17) versteh ich dein Problem nicht 😕
    geschwindigkeit wird in zweile 23 im kopf der vorschleife mit Startwert initialisiert und das e inzeile 16 mit g (was eine kopie von Geschwindigkeit ist) dividiert durch 10.



  • Der Compiler weiß das gar nicht - und dem ist es auch egal. Zur Laufzeit kennt die Funktion den Wert von g, weil er als Parameter übergeben wurde (entspricht dem "geschwindigkeit" im Hauptprogramm), und berechnet den Wert von e selber.

    Aber ansonsten stecken in dem Programm zu viele Fehler, angefangen davon daß die Funktion bremsweg() keinen Wert zurückgibt, über unpassende Typ-Verwendungen bis hin zu den #define's.

    PS: Das nächste mal findest du den Button mit der Aufschrift "C/C++" selber.



  • vorschleife = for-Schleife 😃



  • Könntest du mir das mit dem Parameter noch einmal genauer erklären ?
    So wie ich das sehe wird g durch "double bremsweg(unsigned int g) " definiert und mit "bremsweg" logisch verbunden...
    Doch ich habe auch der Variable Bremsweg keinen Wert zugewiesen...

    Ps: Vielen Dank für die Schnelle Antwort



  • HatteinZiel schrieb:

    Könntest du mir das mit dem Parameter noch einmal genauer erklären ?
    So wie ich das sehe wird g durch "double bremsweg(unsigned int g) " definiert und mit "bremsweg" logisch verbunden...
    Doch ich habe auch der Variable Bremsweg keinen Wert zugewiesen...

    bremsweg ist keine Variable, sondern eine Funktion - die wird im Hauptprogramm im Inneren der Ausgabeanweisung aufgerufen ( bremsweg(geschwindigkeit) ). Dabei wird der gerade gültige Wert von "geschwindigkeit" in den Funktionsparameter g kopiert.



  • Die Defines waren bloß optional ich wollte sie bloß mal ausprobieren, aber danke für die info 😉
    Und ja, ich sollte aus der Division mit 10, eine Division mit 10.0 machen...ok..
    Und ja, der Code ist auch an sich nicht sonderlich leserlich... OK !^^

    Nach mehrmaligem lesen des letzten Kommentars von CStoll habe ich dann alles verstanden 🙂
    Glaub ich zumindestens...

    Zur Verständniskontrolle:
    Der Funktionsparameter "g" bekommt seinen Wert erst wenn ich diesen durch "bremsweg(geschwindigkeit)" am schluss definiere ?
    Das heißt die beiden Zeilen

    "double bremsweg(unsigned int g)"
    und
    "bremsweg(geschwindigkeit)"

    stehen im direkten Zusammenhang ?

    Auf jeden fall mal ! DANKE !



  • HatteinZiel schrieb:

    Zur Verständniskontrolle:
    Der Funktionsparameter "g" bekommt seinen Wert erst wenn ich diesen durch "bremsweg(geschwindigkeit)" am schluss definiere ?
    Das heißt die beiden Zeilen

    "double bremsweg(unsigned int g)"
    und
    "bremsweg(geschwindigkeit)"

    stehen im direkten Zusammenhang ?

    "definieren" ist zwar nicht das richtige Wort dafür, aber im Prinzip ist das so richtig - die erste Zeile ist die Funktionsdefinition, die zweite Zeile der Funktionsaufruf.



  • ok..hmm
    Du sagst definieren sei das falsche Wort, aber eine reine Abfrage des Wertes "Geschwindigkeit" scheint "bremsweg(geschwindigkeit)" ja auch nicht zu sein...
    Immerhin bekommt "g" erst zu diesem Zeitpunkt einen Wert zugewiesen.
    Also ist es eine Definition und Abfrage in einem ?



  • Die richtige Bezeichnung wäre "Funktionsaufruf" oder "Parameterübergabe".
    Definiert wird die Variable (Parameter) "g" im Funktionskopf. Beim Aufruf der Funktion wird ihr dann ein Wert übergeben (in deinem Beispiel aus einer lokalen Variable kopiert).



  • extern int a; //Deklaration
    int a;        //Definition
    int a = 2;    //Definition & Initialisierung
    

Anmelden zum Antworten