Zum Inhalt springen

Funktion 2-Werte zurückgeben


Yarpen

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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*

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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