Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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.

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.

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

  • Autor

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.

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

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.

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.

  • Autor

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

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.

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.

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

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*

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.

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.