HILFE: Testat
-
Hallo zusammen,
ich bin ein Mitbewohner von Michael (der diesen Account hier erstellt hat) und ich habe ein ähnliches Problem:Ich habe als Testat eine Aufgabenstellung für ein C-Programm bekommen, für das ich ab Gestern eine Woche zeit habe, allerdings komme ich damit garnicht klar da ich blöderweise schon letztes Semester den Anschluss beim programmieren verloren habe...
Ich würde mich also wahnsinnig darüber freuen wenn sich jemand damit beschäftigen könnte und mir bei gelegenheit (bzw. bis spätestesns an diesem WE) eine schöne lösung austüfteln könnte!!!
Hier die Aufgabenstellung:
Testat C-Programmierung II
Aufgabenstellung:
Der Weinladen von Louis boomt. Sein besonderes Erfolgskonzept hat so eingeschlagen, dass ein Redesign der Weindepot-Software erforderlich ist.
Zur Erinnerung hier die wichtigsten Rahmenbedingungen:
Es gibt drei Kategorien von Kunden:
Kategorie Kunde Preisnachlas
Normalkunde (NK) 0%
Kartenkunde (KK) 5%
Premiumkunde(PK) 10%
Es gibt drei Kategorien von Weinen:
Kategorie Wein Gewinnspanne
Wein zu 6 /Flasche 20%
Wein zu 18€/Flasche 25%
Wein zu 24€/Flasche 30%
d.h. Louis verdient beim Verkauf einer Flasche Wein:
Normalkunde Kartenkunde Premiumkunde
1Flasche zu 6€ 6,00-4,80€ 5,70 -4,80€ 5,40 -4,80€
1Flasche zu 18€ 18,00-13,50€ 17,10 -13,50€ 16,20 -13,50€
1Flasche zu 24€ 24,00-16,80€ 22,80 -16,80€ 21,60 -16,80€
Anmerkung: Louis verkauft seinen Wein nur im 6er-KartonZeiger und Strukturen:
Aufgabe 1.1: Daten einlesen, merken, ausgeben (10Punkte)
Formulieren Sie einen Aufzählungstyp (enumeration) für die Kategorie Kunde (Kennung: ID_NK, ID_KK, ID_PK, Zahlenwerte: 1,2,3).
enum Kategorie { …};
Achten Sie auf die korrekte expliziete Vorbelegung der Integer-Konstanten!
Definieren Sie eine Struktur für die einzulesenden Daten.
Struct Einkauf {
… // Kategorie Kunde (Datentyp enum Kategorie)
… // Einzelpreis Flasche (Datentyp double)
… // Anzahl der 6er-Kartons (Dateityp int)
};
Deklarieren Sie eine Instanz einkauf der Struktur Einkauf
Schreiben Sie ein Hauptprogramm main zum Einlesen der Daten für einen Einkauf.
1. Kategorie Kunde (Datentyp int), mögliche Zahlenwerte: 1,2 oder 3
2. Einzelpreis Flasche (Datentyp double), mögliche Zahlenwerte: 6€, 12€ oder 24€
3. Anzahl der 6er-Kartons (Datentyp int)
Verwenden Sie eine do/while-Anweisung.
Der Benutzerdialog wird mit der Eingabe des zahlenwerts 0 für „Kategorie Kunde“ abgebrochen.
Hinweis:
1. Für die Zuweisung der eingelesenen Daten an die Komponenten der Instanz einkauf verwenden Sie bitte den Punkt-Operator
2. Bei der Komponente „Kategorie Kunde“ ist der cast-Operator von Vorteil:
einkauf.kategorie_kunde = (Kategorie) ivalue;
3. Eine Plausibilitätsprüfung für die Eingabedaten ist hier nicht verlangt
Am Ende eines jeden Schleifendurchlaufs sind die eingelesenen Daten darzustellen (Zugriff per Punkt-Operator).Aufgabe 1.2: Datenausgabe separieren (4 Punkte):
Schreiben Sie eine Funktion ausgabe und ersetzen Sie sie Programmzeile für die Darstellung der eingelesenen Daten durch den passenden Funktionsaufruf.
Die Funktionsschnittstelle sieht wie folgt aus:
void ausgabe (Einkauf*);
Alle Zugriffe auf Strukturkomponenten innerhalb der Funktion ausgabe erfolgen per Komponenten-Operator.Aufgabe 1.3: Dateneingabe separieren (4 Punkte)
Schreibe Sie eine Funktion eingabe und ersetzen Sie die Programmzeilen für das Einlesen der Daten durch den passenden Funktionsaufruf.
Die Funktionsschnittstelle sieht wie folgt aus:
int eingabe (Einkauf*);
Rückgabewert: 0,1,2 oder 3 (Kategorie Kunde)
Der Benutzerdialog im Hauptprogramm main wird bei einem Rückgabewert von 0 abgebrochen.
Alle Zugriffe auf Strukturkomponenten innerhalb der Funktion eingabe erfolgen per Komponenten-Operator.Aufgabe 1.4: Kalkulation (8 Punkte)
Erweitern Sie dir Struktur-Definition um die Komponenten für die Speicherung der Ergebnisdaten.
Struct Einkauf {
…
… // Umsatz (Datentyp double)
… // Einkaufspreis (Datentyp double)
… // Preisnachlas (Datentyp double)
… // Gewinn (Datentyp double)
};
Schreiben Sie eine Funktion calc zur Berechnung der Ergebnisdaten
Die Funktionsschnittstelle sieht wie folgt aus:
void calc (Einkauf*)
Für die Berechnung benötigen Sie noch zwei numerische Vektoren:
double Preisnachlass[] = {0.0 , 5.0 , 10.0};
double Gewinnspanne[] = {20.0 , 25.0 , 30.0};
Die do/while-Anweisung in Ihrem Hauptprogramm sollte wie folgt aussehen:
do
{
// Daten einlesen
if (eingabe(&einkauf) ==0) break;
// Berechnung
calc(&einkauf);
//Ausgabe
ausgabe(&einkauf);
} while (1);Datenzugriff
Aufgabe 2.1: Tagesbilanz einlesen und ausgeben (6 Punkte)
Alle Kundentransaktionen eines Tages sind in einer Datei (einkauf.dat) gespeichert. Louis möchte die Daten am Ende des Tages auswerten.
Schreiben Sie ein Hauptprogramm main zum Einlesen der Daten aus der Datei einkauf.dat
Verwenden Sie die Funktion fopen, fclose und fgets.
Die eingelesenen Daten sollen für die spätere Auswertung gemerkt werden. Dazu benötigen Sie einen Vektor mit 10 Elementen vom Typ Einkauf:
Einkauf ek[10]
Übernehmen Sie folgende Codesequenzen für das Einlesen und merken der Daten:
//Daten einlesen und merken
char line [80];
while (fgets(line,80,fpin) !=NULL)
{
if (!(j<10))break; //Absicherung Speicherverletzung!
if (1==0) i++, ek[j]. kategorie:kunde = (Kategorie) atoi(line);
else if (i==1) i++, ek[j}. einzelpreis = atof(line);
else if (i==2) i++, ek[j].anzahl_6erkartons =atoi(line);
if (i==3) i=0, j++;
}
Der Einlesevorgang wird abgebrochen, sobald das Dateiende erreicht ist.
Hinweise:
1. Jede Zeile der Datei einkauf.dat enthält genau einen Zahlenwert
2. Ein Datenblock (Kategorie Kunde, Einzelpreis Flasche, Anzahl der 6er-Kartons) umfasst drei Zeilen
3. Die Funktion fgets liefert NULL, wenn keine weitere Zeile eingelesen werden kann (Abbruchbedingung s.o.)
Nach dem Schließen der Datei sollen die eingelesenen Daten (ohne Berechnung / Ergebnisdaten) in einer separaten for-Schleife ausgegeben werden.Aufgabe 2.2: Eingelesene Daten inkl. Kalkulation in eine Datei schreiben (4 Punkte)
Schreiben Sie jetzt die eingelesenen Daten inkl. Der Ergebnisdaten in eine Datei einkauf.out.
Zur Kontrolle verwenden Sie bitte folgende Tabelle:
Position Kunde Umsatz Einkaufspreis Preisnachlass Gewinn
1 Normalkunde 216,00 172,80 0,00 43,20
2 Kartenkunde 144,00 115,20 7,20 21,60
3 216,00 162,00 10,80 43,20
4 144,00 100,80 7,20 36,00
5 Premiumkunde36,00 28,80 3,60 3,60
6 216,00 162,00 21,60 32,40
7 576,00 403,20 57,60 115,20
8 Normalkunde 576,00 460,80 0,00 115,20
9 1.080,00 810,00 0,00 270,00
10 1.440,00 1008,00 0,00 432,00
Summe 4644,00 1.112,40Wie gesagt, ich wäre sehr dankbar wenn sich jemeand meinem Problem annehmen könnte und würde auch eine kleine entlohnung anbieten (natürlich nur was im rahmen meines studentenvermögens möglich ist )
Vielen Dank im Voraus!!!
Gruß
Jonas
-
Die Aufgabenstellung ist ja wie Malen-nach-Zahlen.
Wieviel?
-
SeppJ schrieb:
Die Aufgabenstellung ist ja wie Malen-nach-Zahlen.
Naja, wenn du meinst... ich kanns halt nicht...
was willste dafür???
bzw. bei den 1. aufgaben komm ich glaub ich noch eher klar da bin ich grad dran... aber die 2. wär wichtiger!!!
mach halt nen vorschlag ^^Gruß
-
Weiß nicht genau. 50€ Zeitaufwand + 15 € Schmerzensgeld dafür, dass ich es in C machen müsste. Das heißt, jemand der regelmäßiger C programmiert als ich, macht es dir möglicherweise schneller und billiger.
-
Racoon schrieb:
allerdings komme ich damit garnicht klar da ich blöderweise schon letztes Semester den Anschluss beim programmieren verloren habe...
Dann hol es nach verdammt! Was ist bloß los mit den Studenten hier? Kein Schüler würde auf die Idee kommen für seine Hausaufgaben zu blechen, mit der Aussage er sei schon letztes Halbjahr mit der Bruchrechnung nicht zurechtgekommen.
Ich würd's für 50€ machen, aber da sind mit zu viele Vorgaben, bevor ich die alle beachte will ich noch mal 50€ Schmerzensgeld.
Übernehmen Sie folgende Codesequenzen für das Einlesen und merken der Daten:
//Daten einlesen und merken char line [80]; while (fgets(line,80,fpin) !=NULL) { if (!(j<10))break; //Absicherung Speicherverletzung! if (1==0) i++, ek[j]. kategorie:kunde = (Kategorie) atoi(line); else if (i==1) i++, ek[j}. einzelpreis = atof(line); else if (i==2) i++, ek[j].anzahl_6erkartons =atoi(line); if (i==3) i=0, j++; }
Fail?
-
Ägypten?
Soweit ich mich erinnere musste ich beim Testat alles selber machen, heutzutage bekommt man die (übrigens falsche und nichtcompilierbare) Lösung gleich mit in der Aufgabenstellung geliefert?!
Der Aufgabensteller scheint neben erheblichen Problemen mit der Sprache C auch deutlich solche mit Deutsch zu haben.Für 100 Euro mache ich es auch, 50 kann cooky abhaben, wenn er den Code testet.
Frauen WM ist nix für mich, da schreib ich lieber was.
-
Ich mache es gerade mal aus langeweile:-P Wenn niemand schneller ist, bekommst es dann am Ende( natürlich gegen die Bezahlung ), aber soll eigentlich jede Aufgabe( also 1.1, 1.2 etc. ) ein eigenes Projekt sein oder soll das ganze immer erweitert werden? Weil es ja für die einzelnen Aufgaben auch Punkte gibt.
Lg freeG
-
Wow. Double für Geldbeträge. Der Prof/Dozent/... muss ja mächtig was los haben.
-
Ich bin zwar so gut wie fertig, aber da sind echt schräge Vorgaben in der Aufgabenstellung vorhanden, ja es tut fast schon weh so etwas zu schreiben . Von der Qualität der Aufgabe mal ganz abgesehen, so richtig verständlich finde ich sie auch nicht.
Lg freeG
EDIT: So bin fertig, hoffe nur dass ich das auch richtig verstanden habe, da in der Aufgabenstellung ein paar Widersprüche vorhanden waren.