Funktion in C++

Hallo! Wir sollen ein Programm erstellen, dass für ein Fitnessstudio ist.

Es gibt dort Rabattklassen. Ab 125? Jahresumsatz 6%, bei 250? 7,5%. Dann immer 125? mehr und 1,5% mehr. Sooo nun mein Problem...

Im Programm wird der Jahresumsatz abgefragt... ich muss nun in einer Funktion hinbekommen das der Betrag einer Rabattstufe zugeteilt wird und danach der noch zu bezahlende Betrag ausgegeben wird. Das wichtige ist das es in einer Funktion passiert.

Code:
#include <string>
#include <iostream>
#include <windows.h>

using namespace std;

rechnen (float*, int*);

void main()
{
	string ant, x;
	float betrag,rabatt;
	
	do
	{
		cout<<"\n\n\tM\x84 \bc Fit GmbH \x26 \b Co";

		cout<<"\n\n\tRechnungsbetrag --> ";
		cin>>betrag;

		cout<<"\n\n\tHat der Kunde eine Kundenkarte vorgelegt? --> ";
		cout<<"\n\n\t<Ja> oder <Nein> ";
		cin>>ant;

		if(ant == "ja" || ant == "Ja")
		{
			cout<<"\n\tHat der Kunde einen laufenden Kurs besucht? --> ";
			cout<<"\n\n\t<Ja> oder <Nein> ";
			cin>>ant;

			if(ant == "ja" || ant == "Ja")
			{
				cout<<"\n\n\tDer Kunde erh\x84 \blt 20\x25 \b Prozent Rabatt";
				rabatt=(betrag/100)*80;
				cout<<"\n\n\tIhre Rechnung betr\x84 \bgt "<<rabatt<<" Euro!";
			}
			else
			{
				cout<<"\n\n\tRabatt";
			}
		}
		else
		{
			cout<<"\n\n\tKein Rabatt m\x94 \bglich!";
		}

		cout<<"\n\n\tWiederholen? <Ja> oder <Nein> --> ";
		cin>>x;

	}while(x == "Ja" || x == "ja");
}

void rechnen (float , int )
//{
	//Hier sollen mehrere Rechnungsbeträge zu einem Jahresumsatz zusammen
	//gerechnet werden!
//}
 
Du möchtest also eine Funktion, der du den Jahresumsatz und den aktuellen abzurechnenden Betrag übergibst und die dir dann (mit cout) den noch zu zahlenden Betrag (abzüglich des Rabatt) ausgibt?!
Code:
void rabatt(float jahresumsatz, float betrag)
{
         cout << fixed << setprecision(2) << betrag * (1.0 - ((jahresumsatz < 125.00)? 0.0 : (0.045 + 0.015 * (int)(jahresumsatz / 125)))) << endl;
}
 
ja so ungefähr... hab nochmal überlegt...

am besten ist es wenn ich am anfang anstatt einen betrag direkt den jahresumsatz eingebe

dann werden die fragen gestellt und dann soll in der funktion die stufe des rabatts festgelegt werden.

zb. 350 ? = stufe 3 und dann werden direkt 9% abgezogen..
 
Also nochmal, was soll jetzt die Funktion GENAU machen?
Nur die Stufe bestimmen? Den Rabatt in %? Den zu zahlenden Betrag? Eine Mischung aus dem?


Btw...was ich sagen will, was ist die Höchstgrenze für den Rabatt? Oder soll man ab 8000 Jahresumsatz Geld bekommen X(
 
danke für deine bemühungen... aber es hat sich heute erledigt.

so sollte es sein:

Code:
#include <string>
#include <iostream>

using namespace std;

void rechnen(float*, int*);

void main()
{
	string ant, x;
	float betrag,rabatt,umsatz;
	int rabattstufe=0;
	
	do
	{
		cout<<"\n\n\tM\x84 \bc Fit GmbH \x26 \b Co";

		cout<<"\n\n\tRechnungsbetrag --> ";
		cin>>betrag;

		cout<<"\n\n\tHat der Kunde eine Kundenkarte vorgelegt? --> ";
		cout<<"\n\n\t<Ja> oder <Nein> ";
		cin>>ant;

		if(ant == "ja" || ant == "Ja")
		{
			cout<<"\n\tHat der Kunde einen laufenden Kurs besucht? --> ";
			cout<<"\n\n\t<Ja> oder <Nein> ";
			cin>>ant;

			if(ant == "ja" || ant == "Ja")
			{
				cout<<"\n\n\tDer Kunde erh\x84 \blt 20\x25 \b Prozent Rabatt";
				rabatt=(betrag/100)*80;
				cout<<"\n\n\tIhre Rechnung betr\x84 \bgt "<<rabatt<<" Euro!";
			}
			else
			{
				cout<<"\n\n\tJahresumsatz: ";
				cin>>umsatz;
				rechnen(&umsatz,&rabattstufe);
				cout<<"\n\n\tDie Rabattstufe betr\x84 \bgt: "<<rabattstufe;
				if(rabattstufe==1)
				{
					rabatt=betrag*0.94;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe==2)
				{
					rabatt=betrag*0.925;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe==3)
				{
					rabatt=betrag*0.91;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe==4)
				{
					rabatt=betrag*0.895;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe==5)
				{
					rabatt=betrag*0.88;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe==6)
				{
					rabatt=betrag*0.865;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe==7)
				{
					rabatt=betrag*0.85;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe>=8)
				{
					rabatt=betrag*0.85;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe<1)
				{
					rabatt=betrag;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
			}
		}
		else
		{
			cout<<"\n\n\tKein Rabatt m\x94 \bglich!";
		}

		cout<<"\n\n\tWiederholen? <Ja> oder <Nein> --> ";
		cin>>x;

	}while(x == "Ja" || x == "ja");
}

void rechnen (float *pumsatz , int *prabattstufe)
{
	int intzahl;

	*pumsatz=*pumsatz/125;
	
	intzahl=*pumsatz;
	
	*prabattstufe=intzahl;
}
 
Original von Slicer
Code:
void rechnen(float*, int*);

void main()
{
...
				cout<<"\n\n\tJahresumsatz: ";
				cin>>umsatz;
				rechnen(&umsatz,&rabattstufe);
				cout<<"\n\n\tDie Rabattstufe betr\x84 \bgt: "<<rabattstufe;
				if(rabattstufe==1)
				{
					rabatt=betrag*0.94;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe==2)
				{
					rabatt=betrag*0.925;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe==3)
				{
					rabatt=betrag*0.91;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe==4)
				{
					rabatt=betrag*0.895;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe==5)
				{
					rabatt=betrag*0.88;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe==6)
				{
					rabatt=betrag*0.865;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe==7)
				{
					rabatt=betrag*0.85;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe>=8)
				{
					rabatt=betrag*0.85;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
				if(rabattstufe<1)
				{
					rabatt=betrag;
					cout<<"\n\n\tBetrag: "<<rabatt;
				}
			}
...
}

void rechnen (float *pumsatz , int *prabattstufe)
{
	int intzahl;

	*pumsatz=*pumsatz/125;
	
	intzahl=*pumsatz;
	
	*prabattstufe=intzahl;
}
Hätte ich anders gemacht. Die Funktion ist ein witz:
1. pumsatz wird geändert (es ist dann nurnoch ein 125stel), ist überflüssig...
2. überflüssige Variable intzahl
3. Zeiger werden nicht auf Gültigkeit überprüft (in C++ kann man eh besser Referencen nehmen, wenn man so Leistung/Speicheroptimierung aus ist)

Gekürzt wäre die Funktion:
Code:
int rechnen (float);
...
int rechnen (float pumsatz)
{
	return((int)(pumsatz / 125);	
}

Und das andere Stück hätte ich auch anders gemacht:
1. sehr viele ifs, bei der aber immer einer wahr ist, kann man besser mit else if codieren
2. Das cout ist immer gleich, daher sollte es besser einmal hinter dem if-konstrukt stehen
3. Formelentwicklung für 1 bis 8 ist konstant

Code:
				cout<<"\n\n\tJahresumsatz: ";
				cin>>umsatz;
				rabattstufe=rechnen(umsatz);
				cout<<"\n\n\tDie Rabattstufe betr\x84 \bgt: "<<rabattstufe;
				if(rabattstufe<1)
					rabatt=betrag;
				else if(rabattstufe>=8)
					rabatt=betrag*0.85;
				else //rabattstufe 1...7
					rabatt=betrag * (0.955 - rabattstufe * 0.015);

				cout<<"\n\n\tBetrag: "<<rabatt;
 
jo mag ja sein.. ich hab ja eh nich so den plan davon

aber wichtig war das wir ne void funktion machen!

naja danke trotzdem ;)
 
Dann kannst du, wie oben bereits erwähnt, besser Referenzen nehmen:
Code:
void rechnen(float, int &);
...
rechnen(umsatz, rabattstufe);
...
void rechnen(float pumsatz, int &rabattstufe)
{
        rabattstufe = (int)(pumsatz / 125);    
}
Die weiteren Punkte gelten weiter. :rolleyes:

Warum auch immer eine void-funktion genommen werden soll... X(
 
Hat den Vorteil dass dann nicht nur ein wert zurückgegeben werden kann sondern die variablen die übergeben werden kannst du auch ändern weil ähnlich den pointern mit der addresse gearbeitet wird.
 
hehe der Carsten ^^ naja einer aus meiner Klasse ^^ der kann auch beurteilen dass unser C++-Lehrer ü-haupt keinen Plan hat von dem was er und beibringt ^^
 
Zurück
Oben