Yarpen Geschrieben 12. Mai 2013 Geschrieben 12. Mai 2013 Hallo Leute! Ich habe ein großes Problem mit meinem Programm... Der User soll im Hauptprogramm folgende Angaben angeben... Siehe im Quelltext, Diese Werte "Anzahl Kinder" & "Anzahl Erwachsene" werden an meine Funktion übergeben und anschließend ausgerechnet...Das klappt auch ohne Probleme... Bei den Ergebnis Variabeln "Personen" -rechnet die Personen Gesamt aus & "Endpreis" - rechnet den Endpreis insgesamt Erwachsene und Kinder aus. Jetzt will ich die 2 Werte - (Personen, Endpreis) an meine Hauptfunktion (main) übergeben bzw. dem User als 'cout' ausgeben... nur bei mir klappts nur mit 1 Wert über return. Habe mit Speicheradresse probiert aber da habe ich nur die Werte von der Eingabe Kinder und Erwachsene vertauscht. könnte mir jmd erläutern wie ich das machen soll ?? Vielen dank schonmal an alle die helfen... // ZooKasse.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung. // #include "stdafx.h" #include <iostream> using namespace std; int PersoPreis(int a, int { int Personen,Endpreis; Personen = a+b; int K = 7,E = 10; Endpreis = a*K + b*E; } int main() { int Kinder, Erwachsene,PreisG,AllPerso; cout << "Bitte geben Sie die Anzahl der Erwachsenen besucher:" << endl; cin >> Erwachsene; cout << "Bitte geben Sie die Anzal der Kinder:" << endl; cin >> Kinder; cout << AllPerso << PreisG; return 0; } P.S. Ich suche seit 3h schon im Netz nach einer Lösung aber nichts hat geholfen. Zitieren
127.0.0.1 Geschrieben 12. Mai 2013 Geschrieben 12. Mai 2013 zuerst: ich bin kein programmierer und ich weiß nicht, wie diletantisch meine lösung ist... kann man den kein array zurückgeben...? Zitieren
Hexagon Geschrieben 12. Mai 2013 Geschrieben 12. Mai 2013 Moin. 1. Bezeichnente Variablennamen erhöhen das Codeverständnis. 2. Für die Rückgabe von zwei Werten helfen Referenzen oder Zeiger. Zitieren
lilith2k3 Geschrieben 12. Mai 2013 Geschrieben 12. Mai 2013 In dem Fall erschließt sich mir nicht, warum Du die Anzahl an Gesamtpersonen zurückgeben möchtest: Es ist die einfache Summe aus Kinder+Erwachsene. Und diese Information liegt (als Einzelinformation) in "main" vor. Andererseits, wenn Du unbedingt mehrere Dinge zurückgeben möchtest, solltest Du im Falle von C über Data Structures - C++ Documentation nachdenken. Im Falle von C++ kann man ja Classes (I) - C++ Documentation benutzen. Das ist ein gutes Beispiel für schlechte Angewohnheitem, die sich später beim Profi weiter durchschleifen. Das ist jetzt nicht böse gemeint Leider allzuhäufig anzutreffen: Du schreibst eine Funktion, die "zu viel möchte" und entsprechend stehst Du vor dem Problem, "zu viel" an Information zurückgeben zu müssen. 1 Funktion 1 Sache. Das sollte die Regel sein: Also eine Funktion, die den Preis kalkuliert und eine die die Summe der Personen berechnet (wenn Du es unbedingt in eine Funktion packen willst). Deine Preisfunktion sähe dann so aus: int BerechneEndpreis(int Erwachsene, int Kinder){ int EintrittKinder=7; int EintrittErwachsene=10; return Erwachsene*EintrittErwachsene+Kinder*EintrittKinder; } [/php] Btw. "return 0" am Ende von Main kannst Du auch einfach weglassen. Es trägt nichts zum Programm bei. Wenn Du es nicht schreibst, hängt der Compiler es einfach an. Ein return-Code wäre dann sinnvoll, wenn Du etwas zurückzugeben hättest. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf reaching the } that terminates the main function returns a value of 0. Zitieren
lilith2k3 Geschrieben 12. Mai 2013 Geschrieben 12. Mai 2013 zuerst: ich bin kein programmierer und ich weiß nicht, wie diletantisch meine lösung ist... kann man den kein array zurückgeben...? Ja, könnte man. Allerdings hast Du das Problem einer "stillschweigenden" Konvention. Du mußt ja irgendwann irgendwo festlegen, dass array[0] Blabla bedeutet und array[1] BlubBlub. Das kann man mitten im Code schnell vergessen oder schlichtweg vertauschen. Technisch machbar wäre das - aber fehleranfällig. Zitieren
Klotzkopp Geschrieben 12. Mai 2013 Geschrieben 12. Mai 2013 Ja, könnte man. Nein, könnte man nicht. Arrays können nicht Rückgabetyp einer Funktion oder Methode sein. @Yarpen: Lass die Funktion eine Struktur zurückgeben. Zitieren
lilith2k3 Geschrieben 12. Mai 2013 Geschrieben 12. Mai 2013 Nein, könnte man nicht. Arrays können nicht Rückgabetyp einer Funktion oder Methode sein. @Yarpen: Lass die Funktion eine Struktur zurückgeben. Stimmt! Ich dachte auch eher an einen Vector *ankopphau* :] Zitieren
Yarpen Geschrieben 12. Mai 2013 Autor Geschrieben 12. Mai 2013 Hallo... Bin wieder da, musste dringend etwas erledigen. Erstmal bedanke ich mich für eure hilfe. Ich werde die Methode Call by References weiter verfolgt... ) Moin. 1. Bezeichnente Variablennamen erhöhen das Codeverständnis. 2. Für die Rückgabe von zwei Werten helfen Referenzen oder Zeiger. Ich werde es im Auge behalten @lilith2k3 Wenn die Frage stellung nicht mit Funktion gegeben were, dann würde ich es auch im Hauptprogramm ausrechnen lassen. Ist meine Hausaufgabe weil wir gerade Funktionen durchmachen. Zitieren
lilith2k3 Geschrieben 12. Mai 2013 Geschrieben 12. Mai 2013 @lilith2k3 Wenn die Frage stellung nicht mit Funktion gegeben were, dann würde ich es auch im Hauptprogramm ausrechnen lassen. Ist meine Hausaufgabe weil wir gerade Funktionen durchmachen. Wer stellt denn solche Aufgaben? Wahrscheinlich die gleichen Leute, die den Leuten beibringen "return 0" zu schreiben *SNCR* Zitieren
flashpixx Geschrieben 12. Mai 2013 Geschrieben 12. Mai 2013 2. Für die Rückgabe von zwei Werten helfen Referenzen oder Zeiger. In C++ würde ich darauf wohl versuchten und wenn man es dann braucht eher einen Shared-Pointer verwenden oder eben eine entsprechende Datenstruktur. Zitieren
127.0.0.1 Geschrieben 12. Mai 2013 Geschrieben 12. Mai 2013 mal für uns unwissende: was ist an return 0 falsch? Zitieren
pr0gg3r Geschrieben 12. Mai 2013 Geschrieben 12. Mai 2013 mal für uns unwissende: was ist an return 0 falsch? Naja, man hat eine Mainfunktion int main worauf sich das return 0 bezieht. Da das Programm aber nichts macht, ist es rein von der Semantik her schlichtweg "falsch". Viel sinnvoller wäre es, void main, also garkeinen Rückgabewert zu definieren. Anderes Beispiel: Dein Programm soll irgendwas berechnen und einen Integer an das Program, aus welchem es heraus aufgerufen wurde zurückgeben. Hier wäre ein int main richtig. Zitieren
Yarpen Geschrieben 13. Mai 2013 Autor Geschrieben 13. Mai 2013 (bearbeitet) So... ich habe jetzt bisschien rumgebastellt und folgendes ist rausgekommen... Ich habe jetzt ein Problem mit der if-else verzweigung. Möchte nehmlich das Programm bei Antwort "Ja" eine widerholung des Programms erzwingen und Antwort "Nein" das Program Schließen... bei if mit return 0 hab ich schon gemerkt, dass es nicht geht... Wenn ich richtig liege werde ich die Funktion in eine Schleife einbauen, wenn so etwas möglich ist. ich freue mich auf eure vorschlege und tipps. // ZooKasse.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung. // #include "stdafx.h" #include <iostream> using namespace std; int BerechneEndpreis(int Erwachsene, int Kinder) { int Betrag; int EintrittKinder=7; int EintrittErwachsene=10; Betrag = Erwachsene*EintrittErwachsene+Kinder*EintrittKinder; return Betrag; } int main() { int Kinder=0, Erwachsene=0; int GanzerBetrag=0; int PersonenG=0; cout << "Bitte geben Sie die Anzahl der Erwachsenen besucher:" << endl; cin >> Erwachsene; cout << "Bitte geben Sie die Anzal der Kinder:" << endl; cin >> Kinder; cout << endl << endl; PersonenG = Kinder + Erwachsene; cout << "Anzahl der Besucher: " << PersonenG <<endl << "davon Kinder: " << Kinder << endl << "Rechnung: "<< BerechneEndpreis(Kinder,Erwachsene) << "Euro" << endl <<endl; cout << "Wollen Sie noch einen Preis ermitteln ?" << endl; char antwort = ' '; cout<<"Ja (j) /Nein (n): "; cin>>antwort; if (antwort == 'j') { return 0; } else { } return 0; } @lilith2k3 Mit der Ausrechnung der Personen gesamt hab ich die Frage stellung falsch verstanden... war nicht dadrauf bezogen, mein Fehler... Bearbeitet 13. Mai 2013 von Klotzkopp Zitieren
Klotzkopp Geschrieben 13. Mai 2013 Geschrieben 13. Mai 2013 mal für uns unwissende: was ist an return 0 falsch?Formal ist an return 0; gar nichts falsch. Der Standard definiert, dass man in main (und nur dort) die return-Anweisung weglassen darf, und dies dieselbe Wirkung hätte, als würde dort eben return 0; stehen. Zitieren
Klotzkopp Geschrieben 13. Mai 2013 Geschrieben 13. Mai 2013 Yarpen, verwendest du bitte Code-Tags für deinen Code? Dann geht die Einrückung nicht verloren. bei if mit return 0 hab ich schon gemerkt, dass es nicht geht...Siehe meine Signatur. ich freue mich auf eure vorschlege und tipps.Du hast dir die Antwort doch schon selbst gegeben: Du willst dass ein Programmteil wiederholt wird. Für Wiederholungen benutzt man üblicherweise Schleifen. Zitieren
flashpixx Geschrieben 13. Mai 2013 Geschrieben 13. Mai 2013 @Yarpen: Bitte benutze die Code-Tags. Als Anmerkung zum Code: Du solltest mal darüber nachdenken, ob int ein sinnvoller Datentyp ist, denn, ich würde mal sagen, dass weder Betrag noch die Anzahl der Kinder / Erwachsenen negativ sein kann. Zitieren
lilith2k3 Geschrieben 13. Mai 2013 Geschrieben 13. Mai 2013 mal für uns unwissende: was ist an return 0 falsch? Falsch? Nichts. Aber wie ich weiter oben angemerkt habe, ist es nicht nötig, es explizit zu tun, da der Compiler es für Dich tut. Das wäre so, als würdest Du zur Tür raus gehen und während alle Augen auf Dich schauen, sagst Du: "Ich gehe zur Tür raus". Und jeder sagt: "Ja. sehen wir" *g* Zitieren
Gurki Geschrieben 13. Mai 2013 Geschrieben 13. Mai 2013 Nein, könnte man nicht. Arrays können nicht Rückgabetyp einer Funktion oder Methode sein. @Yarpen: Lass die Funktion eine Struktur zurückgeben. Zur Verständnis: Bezieht sich doch nur auf C / C++ oder? In Java / C# kann ich auch Arrays zurückgeben. Zitieren
Klotzkopp Geschrieben 13. Mai 2013 Geschrieben 13. Mai 2013 Zur Verständnis: Bezieht sich doch nur auf C / C++ oder?Genau. Zitieren
Guybrush Threepwood Geschrieben 13. Mai 2013 Geschrieben 13. Mai 2013 Du kannst allerdings einen Zeiger zurückgeben der auf ein Array zeigt (oder was beliebig anderes) Zitieren
Klotzkopp Geschrieben 13. Mai 2013 Geschrieben 13. Mai 2013 Du kannst allerdings einen Zeiger zurückgeben der auf ein Array zeigt (oder was beliebig anderes) Lieber nicht. Wenn man einen Zeiger auf statischen Speicher zurückgibt, ist man nicht mehr eintrittsinvariant. Wenn man einen Zeiger auf dynamischen Speicher zurückgibt, muss der Aufrufer ans Freigeben denken. Wenn man einen Zeiger auf lokalen Speicher zurückgibt, geht die Welt unter Zitieren
flashpixx Geschrieben 13. Mai 2013 Geschrieben 13. Mai 2013 Wenn man einen Zeiger auf lokalen Speicher zurückgibt, geht die Welt unter OT: Der ist gut, das muss ich mir merken... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.