Programm mit einer Funktion [HELP]


  • Mod

    Falsch. Mach dich mal kundig, wie das mit den Rückgabewerten von Funktionen funktioniert. Zweitens sollte der Funktionstest nicht in die Funktion, da ist ja der gesamte Sinn der Übung dahin. Was dir auch gut täte, denn ich habe den Eindruck, dass du Funktionen und was sie tun und wie sie funktionieren nicht so recht verstanden hast. Und dein Programm compiliert noch nicht einmal, aber das weißt du selbst. Dieses Problem wird sich aber von ganz alleine lösen, wenn du die anderen genannten Punkte anpackst.



  • #include <iostream>
    
    int produkt(int z1, int z2);
    
    int main() {
    	int zahl1, zahl2, ergebnis; // Variablen (hier für die Eingabe gedacht)
    
    	std::cout << "Zahl 1 eingeben: ";
    	std::cin  >> zahl1; // Erfasse zahl1 vom Benutzer
    	std::cout << "Zahl 2 eingeben: ";
    	std::cin  >> zahl2; // Erfasse zahl2 vom Benutzer
    
    	ergebnis = produkt(zahl1, zahl2); // "ergebnis" erhält Wert der Funktionsrückgabe. Die Dunktion "produkt" erhält die eingegebenen Integer-Werte als Parameter
    
    	std::cout << "Ergebnis: " << ergebnis; // Ausgabe des Ergibnisses
    
    	std::cin.get();
    	std::cin.ignore();
    	return 0;
    }
    
    int produkt(int z1, int z2) {
    	return (z1 * z2); // Rückgabe der Funktion(Parameter1 * Parameter2)
    }
    

    Am besten nochmal das Kapitel über die Funktionen lernen 🙂 Der Rückgabewert ist der Wert, der von der Funktion selbst zurückgegeben wird (lol?!). Wär dieser "void" also "leer", dann würde die Funktion nichts zurückgeben (meistens bei Ausgaben von Texten). Bei dieser Funktion (produkt) gibst du den Wert zurück, der duch die Multiplikation der beiden Parameter berechnet wird. Bei einer Division bekommt man meistens eine Kommazahl heraus, weshalb man dort rein logisch einen Rückgabetyp von "float" bzw. "double" festlegen muss/kann.
    Außerdem macht man das normalerweise so, dass man die Definition einer Funktion hinter die "main" Funktion macht. Die Deklaration vor der "main" Funktion. Ist allgemeiner Programmierstil 😉


  • Mod

    WeißIkNet schrieb:

    Außerdem macht man das normalerweise so, dass man die Definition einer Funktion hinter die "main" Funktion macht. Die Deklaration vor der "main" Funktion. Ist allgemeiner Programmierstil 😉

    Eigentlich eher nicht. Das ist Jürgen Wolfs Stil.



  • SeppJ schrieb:

    WeißIkNet schrieb:

    Außerdem macht man das normalerweise so, dass man die Definition einer Funktion hinter die "main" Funktion macht. Die Deklaration vor der "main" Funktion. Ist allgemeiner Programmierstil 😉

    Eigentlich eher nicht. Das ist Jürgen Wolfs Stil.

    Hm ok, ich habs aber auch so gelernt 😃


  • Mod

    WeißIkNet schrieb:

    Hm ok, ich habs aber auch so gelernt 😃

    Naja, im Prinzip ist es müßig, da man das sowieso nur bei Programmen < 100 Zeilen überhaupt so macht, daher kann man nicht wirklich von allgemeinem Stil reden. Mir ist nur aufgefallen, dass die JW-Schüler es so machen und sonst nur sehr wenige Leute. Und es ist halt total sinnlos und macht nur mehr zu schreiben.



  • [cpp]int main() 
    { 
        produkt[b](3,4)[/b]; //hier hast du keine Parameter angegeben 
    }[/cpp]
    

    Lies nächstes Mal die Compilerfehler durch. Dann können solche Fehler in der Regel nicht passieren.

    Wenn du die Ausgabe außerhalb der Funktion haben willst, kannst dann halt

    return a1*a2
    

    in die Funktion schreiben.

    -Gruß P_T



  • Dieser Programmierstil wird auch von manchen praktiziert, die nicht unbedingt die JW-Schule besucht haben. Er wird auch in guten Grundlagebüchern vorgestellt und nahegelegt. Ich stimme SeppJ zu, dass das nicht unbedingt das Gelbe vom Ei ist, aber das soll zum Einen dem Compiler helfen, die Funktionsaufrufe und -definitionen schneller zu überprüfen, zum Anderen ist es nicht schlecht, wenn main() als Erstes steht, weil es die Struktur des Programms vorgibt. So die Theorie.



  • SeppJ schrieb:

    WeißIkNet schrieb:

    Hm ok, ich habs aber auch so gelernt 😃

    Naja, im Prinzip ist es müßig, da man das sowieso nur bei Programmen < 100 Zeilen überhaupt so macht, daher kann man nicht wirklich von allgemeinem Stil reden. Mir ist nur aufgefallen, dass die JW-Schüler es so machen und sonst nur sehr wenige Leute. Und es ist halt total sinnlos und macht nur mehr zu schreiben.

    Naja, das kommt wohl von früheren Tagen her, da machte das durchaus Sinn.

    Denn der Compiler konnte so schneller die Funktionsdeklarationen zusammenfassen und wußte bei der Main schon was los war, d.h. er mußte bis zur main weniger Parsen.
    Das beschleunigte wohl die Compilezeit.
    Und bei begrenztem Arbeitsspeicher half die schnelle knappe Zusammenfassung auch sicher.

    Heutzutage ist das aber total sinnlos. Denn man merkt auf heutigen Rechnern da keinen Geschwindigkeitsunterschied mehr.



  • Früher wars AFAIK releva schrieb:

    SeppJ schrieb:

    WeißIkNet schrieb:

    Hm ok, ich habs aber auch so gelernt 😃

    Naja, im Prinzip ist es müßig, da man das sowieso nur bei Programmen < 100 Zeilen überhaupt so macht, daher kann man nicht wirklich von allgemeinem Stil reden. Mir ist nur aufgefallen, dass die JW-Schüler es so machen und sonst nur sehr wenige Leute. Und es ist halt total sinnlos und macht nur mehr zu schreiben.

    Naja, das kommt wohl von früheren Tagen her, da machte das durchaus Sinn.

    Denn der Compiler konnte so schneller die Funktionsdeklarationen zusammenfassen und wußte bei der Main schon was los war, d.h. er mußte bis zur main weniger Parsen.
    Das beschleunigte wohl die Compilezeit.
    Und bei begrenztem Arbeitsspeicher half die schnelle knappe Zusammenfassung auch sicher.

    Heutzutage ist das aber total sinnlos. Denn man merkt auf heutigen Rechnern da keinen Geschwindigkeitsunterschied mehr.

    PS:
    Aus ähnlichem Grund gab es auch die Headerdateien.


  • Mod

    Das macht keinen Sinn. Wenn alles in einer Datei steht, dann wird auch alles Verarbeitet. Dann greift das Prinzip der Header eben gerade nicht mehr.



  • SeppJ schrieb:

    Das macht keinen Sinn. Wenn alles in einer Datei steht, dann wird auch alles Verarbeitet. Dann greift das Prinzip der Header eben gerade nicht mehr.

    Man kann auch nur bis zur main Funktion suchen, genau deswegen sollten damals die Funktionsdeklarationen ja auch über der main stehen.



  • Ich hab auch nicht bei JW gelernt und schreibe auch immer Funktionsdeklarationen über der main() bevor die eigentliche Implementierung nach der main() folgt. Es ist ansonsten häufig sehr nervig, wenn Funktionen voneinander abhängig sind und man diese verschieben muss, damit der Compiler/Linker damit klar kommt und die Funktion findet. Das Problem tritt durch die Funktionsdeklaration erst gar nicht mehr auf und man hat gewissemraßen vorgesorgt.

    Allerdings schreibe ich selten ein Programm ausschließlich in der main(), das kommt eher bei Testanwendungen vor, wo es dann ohnehin quick and dirty um eine Idee geht, die ich außerhalb des Projektes testen will.



  • Ich verstehe Dich nicht. Der Compiler sagt Dir doch schon selber, was ihm nicht passt. Meinst Du, Du kannst durch Einholen einer zweiten Meinung hier im Forum den Compiler davon überzeugen, daß Du recht hast?

    Wenn Du jedoch die Fehlermeldng des Compilers nicht versteht, probiere es mal mit einem Grundlagenbuch.

    mfg Martin



  • mgaeckler schrieb:

    Ich verstehe Dich nicht. Der Compiler sagt Dir doch schon selber, was ihm nicht passt. Meinst Du, Du kannst durch Einholen einer zweiten Meinung hier im Forum den Compiler davon überzeugen, daß Du recht hast?

    Wenn Du jedoch die Fehlermeldng des Compilers nicht versteht, probiere es mal mit einem Grundlagenbuch.

    mfg Martin

    Auf welchen Posting bezieht sich dein Kommentar?? Nächstes Mal bitte Zitate verwenden oder zumindest den Autornamen hinschreiben.



  • [Rewind] schrieb:

    Auf welchen Posting bezieht sich dein Kommentar?? Nächstes Mal bitte Zitate verwenden oder zumindest den Autornamen hinschreiben.

    Stimmt. Sorry, ich vergaß, die hier verwendete Forensoftware zeigt das nicht an. Ich bezog mich auf die erste Nachricht.

    mfg Martin



  • [Rewind] schrieb:

    Dieser Programmierstil wird auch von manchen praktiziert, die nicht unbedingt die JW-Schule besucht haben. Er wird auch in guten Grundlagebüchern vorgestellt und nahegelegt. Ich stimme SeppJ zu, dass das nicht unbedingt das Gelbe vom Ei ist, aber das soll zum Einen dem Compiler helfen, die Funktionsaufrufe und -definitionen schneller zu überprüfen, zum Anderen ist es nicht schlecht, wenn main() als Erstes steht, weil es die Struktur des Programms vorgibt. So die Theorie.

    Bei mir ist main immer das Letzte. Dadurch spare ich mir die Prototypen der aufgerufenen Funktionen, wernn sie im gleichen Modul sind. Schneller ist der Compiler übrigens auch nicht, wenn main als erstes steht. Denn dann muß er sowohl die Prototypen als auch die Funktionsdefinitionen parsen.

    mfg Martin



  • Bei "das soll zum Einen dem Compiler helfen" habe ich vergessen "angeblich" hinzuzuschreiben, weil das nicht meine persönliche Meinung ist. Das Parsen von Prototypen ist kein Problem. Ich habe es zwar nicht überprüft, aber ich denke, das wird genauso wenig Zeit in Anspruch nehmen wie die Überprüfung von richtigen Funktionsaufrufen, Rückgabewerten, etc. (in kleinen Programmen ist das performancetechnisch sowieso irrelevant). Von da her sehe ich keine objektiven Gründe für die Anwendung dieser Schreibweise, wenn's aber für jemanden schöner/besser/angenehmer ist, so zu schreiben, soll er's machen.

    Grüße,
    Rew.


Anmelden zum Antworten