C++ Klausuraufgabe Rabatttabelle CPP01

Algorithmus, Baumdurchlauf, Compiler, Interpreter...; Cobol, Pascal, C/C++, Java & Co.
Antworten
wiede
Mitglied
Mitglied
Beiträge: 15
Registriert: 27.04.13 14:27

Hallo, vielleicht kann mir ja irgendjemand bei dieser Aufgabe weiterhelfen, die vor kurzem mal in einer CPP01 Klausur dran kam und an der ich nun schon eine Weile sitze und nicht weiterkomme. (Die Aufgabe kam auch schon in Java-Klausuren dran)

Also die Aufgabe hieß folgendermaßen: Das Programm enthält die Klasse Artikel mit den Attributen int Preis, int Artikelnummer und eine zweidimensionale Rabatttabelle mit 2 Zeilen und 5 Spalten, in der in der ersten Zeile angegeben wird um welchen Kundentyp es sich handelt (1,2,3,4,5) und in der zweiten, wie viel Rabatt der jeweilige Kundentyp bekommt (1%, 3%, 5%, 10%, 20%). Das Programm soll den Endpreis eines Artikels für den jew. Kundentyp ausgeben.

programmiert habe ich bislang folgendes:

class Artikel
{
private:

int m_preis;
int m_artnr;
int m_rabatttabelle [2][5];

public:

Artikel (int preis, int artnr, int rabatttabelle [2][5]={1,2,3,4,5,1,3,5,10,20}): // so, habe ich nun bis zu dieser Stelle schon etwas falsch gemacht? Darf das Array so im Konstrukor stehen?

m_preis (preis),
m_artnr (artnr),
m_rabatttabelle (rabatttabelle)
{}

double berechneEndpreis

return // ????????


//Ich stehe nun vor dem Problem mit den Werten in der Tabelle zu rechnen. Ich finde zwar überall ausführliche Anleitungen dazu, wie man Arrays ausgibt, sortiert, etc., aber nirgendwo steht was zu dieser Thematik hier.
B. Eng. Wirtschaftsingenieurwesen
Benutzeravatar
stwaidele
Forums-Profi
Forums-Profi
Beiträge: 247
Registriert: 27.02.12 08:57
Kontaktdaten:

Genau diese Aufgabe wurde gestern schon einmal an mich herangetragen, allerdings war das Rabattarray da nicht als zweidimensional vorgegeben.

Ich würde das so machen:

Code: Alles auswählen

#include <iostream>
using namespace std;

class Artikel {
private:
	int artno;
	int preis;
	int staffel[5] = {1, 3, 5, 10, 20};

public:
	// Konstruktoren
	Artikel () {}
	Artikel (int n, int p) {
		artno = n;
		preis = p;
	}

	// Getter
	int getPreis() {
		// Ohne Rabatt
		return preis;
	}
	int getPreis(int kt) {
		// Mit Rabatt
		return preis * (100 - staffel[kt-1]) / 100;
	}
};

int main(int argc, char* argv[])
{
	Artikel artikel(1, 100);
	
	cout << artikel.getPreis() << "\n";
	cout << artikel.getPreis(1) << "\n";
	cout << artikel.getPreis(2) << "\n";
	cout << artikel.getPreis(3) << "\n";
	cout << artikel.getPreis(4) << "\n";
	cout << artikel.getPreis(5) << "\n";

	return 0;
}
Also mit einem eindimensionalen Array für die Rabatte. Dann kann man den Prozentsatz direkt lesen und in Rechnungen verwenden. Danach hattest du ja auch gefragt.

Als Alternative mit zweidimensionalem Array könnte man in die erste Zeile die Kundentypen schreiben. Diese müssen dann auch anders nummeriert werden. In der zweiten Zeile steht dann der Rabattsatz. Um diesen zu ermitteln muss man durch das Array durchlaufen, bis man den Kundentyp gefunden hat. Hier mein Vorschlag dazu:

Code: Alles auswählen

#include <iostream>
using namespace std;

class Artikel {
private:
	int artno;
	int preis;
	int staffel[2][5];
	
	int getRabatt(int kt) {
		// Normalerweise kein Rabatt
		int r = 0;
		for (int i=0; i<5; i++) {
			// Falls in der ersten Zeile der Kundentyp übereinstimmt
			if (staffel[0][i]==kt) {
				// dann wird aus der zweiten Zeile der Rabattsatz gelesen
				r = staffel[1][i];
			}
		}
		return r;
	}
	
public:
	// Konstruktoren
	Artikel () {}
	Artikel (int n, int p) {
		artno = n;
		preis = p;
		
		staffel[0][0] = 1;
		staffel[0][1] = 2;
		staffel[0][2] = 3;
		staffel[0][3] = 4;
		staffel[0][4] = 42;

		staffel[1][0] = 1;
		staffel[1][1] = 3;
		staffel[1][2] = 5;
		staffel[1][3] = 10;
		staffel[1][4] = 20;
	}

	// Getter
	int getPreis() {
		// Ohne Rabatt
		return preis;
	}
	int getPreis(int kt) {
		// Mit Rabatt
		return preis * (100 - getRabatt(kt)) / 100;
	}
};

int main(int argc, char* argv[])
{
	Artikel artikel(1, 100);
	
	cout << artikel.getPreis() << "\n";
	cout << artikel.getPreis(1) << "\n";
	cout << artikel.getPreis(2) << "\n";
	cout << artikel.getPreis(3) << "\n";
	cout << artikel.getPreis(4) << "\n";
	cout << artikel.getPreis(5) << "\n";
	cout << artikel.getPreis(42) << "\n";
	
	return 0;
}
Optimal wäre natürlich, eine eigene Klasse für die Rabattstaffel, aber danach wurde ja nicht gefragt.
Done: B.Sc. Wirtschaftsinformatik (AKAD)
Todo: M.Sc. Wirtschaftsinformatik (FU Hagen)
Alle Beiträge sind sofern nicht anders vermerkt meine persönliche Meinung
wiede
Mitglied
Mitglied
Beiträge: 15
Registriert: 27.04.13 14:27

wow, super. Danke. Da wäre ich nie drauf gekommen.
B. Eng. Wirtschaftsingenieurwesen
Antworten