Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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 B)

{

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.

Geschrieben

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.

Geschrieben
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.

Geschrieben
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* :]

Geschrieben

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.

Geschrieben

@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*

Geschrieben
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.

Geschrieben
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.

Geschrieben (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 von Klotzkopp
Geschrieben
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.
Geschrieben

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.
Geschrieben

@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.

Geschrieben
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*

Geschrieben
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.

Geschrieben
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 ;)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...