Pseudocode, PAP, Struktogramm
Vorgehensweise
- Aufgabenstellung lesen & verstehen
- Was ist der Zweck des Programms?
- Welche Eingaben, Verarbeitungen und Ausgaben gibt es?
- Eingaben Identifizieren
- Was bekommt die Funktion als Parameter oder von außen übergeben?
- Verarbeitung logisch zerlegen
- Rechenschritte, Bedingungen, Schleifen? Was passiert wann?
- Gibt es Rechenvorschriften wie "abwechselnd mit 1 und 3 gewichten"? Notieren!
- Ergebnis/Ausgabe festlegen
- Was soll am Ende zurückgegeben oder angezeigt werden?
Aufgaben
Für den Onlineversand sollen die Weinflaschen mit Barcode-Aufkleber versehen werden, der nähere Informationen zum Wein enthält. Der Barcode besteht aus zehn Ziffern.
123-456-78-9-p
- Ziffern 1 bis 3: Schlüssel für Region
- Ziffern 4 bis 6: Schlüssel für Rebsorte
- Ziffern 7 - 8: Jahrgang
- Ziffer 9: Geschmacksangabe (lieblich, halbtrocken, trocken ...)
- Dazu kommt an der 10. Stelle eine Prüfziffer p.
Die Prüfziffer soll nach folgender Beschreibung errechnet werden:
- Die einzelnen Ziffern werden alternierend gewichtet von Links nach Rechts mit 1 und 3:
- Ziffer_1 x 1, Ziffer_2 x 3 .... Ziffer_9 * 1
- Die 9 gewichteten Produkte werden addiert.
- Die Prüfziffer ist die Differenz der Summe zum nächstkleineren Vielfachen von 10 (modulo 10)
function ermittlePrüfziffer(int[] barcode)
{
int pruefziffer = 0
für i = 0; i < barcode.laenge; i++
{
wenn (i % 2 = 0)
{
pruefziffer += barcode[i] * 3
} sonst
{
pruefziffer += barcode[i] * 1
}
}
pruefziffer = (10 - (pruefziffer % 10)) % 10
rueckgabe pruefziffer
}
Alle aktuell vorhandenen Barcodes der Weine und deren Jahresabsatz sind in einer zweidimensionalen Tabelle "Absatz" in folgender Form gespeichert:
Region |
Rebsorte |
Jahrgang |
Geschmacksrichtung |
Absatz in Stk. |
123 |
456 |
78 |
9 |
46 |
333 |
125 |
20 |
4 |
998 |
... |
... |
... |
Erstellen Sie auf der Folgeseite eine Funktion "sucheTopseller", die für ein übergebendes Kriterium (0 = Region; 1 = Rebsorte, 2 = Jahrgang; 3 = Geschmacksrichtung) und einen entsprechenden Vorgabewert (z.B. 123 für eine bestimmte Region) den umsatzstärksten Wein ermittelt und den Barcode dieses Weines als Zeichenkette ohne Prüfziffer zurückliefert. Das zweidimensionale Array "Absatz" steht in der Funktion "sucheTopseller" zur Verfügung. Gehen Sie davon aus, dass alle Weine einen unterschiedlichen, positiven Absatz haben.
Hinweis: Für das Zusammenfügen von Zeichenketten kann der + Operator verwendet werden. Gemischte Ausdrücke vom Typ String und Ganzzahl sind möglich.
FUNKTION sucheTopseller(int kriterium, int vorgabe) : STRING
int barcode = 0;
int maxAbsatz = -1;
int maxIndex = -1
VON i = 0 BIS Absatz.laenge
WENN Absatz[i][kriterium] == vorgabe und Absatz[i][4] > maxAbsatz //
maxAbsatz = Absatz[i][4]
maxIndex = i
ENDE WENN
ENDE VON
barcode = barcode + Ansatz[maxIndex][i]
VON i = 1 BIS 3
barcode = barcode + "-" + Absatz[maxIndex][i]
ENDE VON
RUECKGABE barcode
ENDE FUNKTION
Für die Helferlein e.V. soll eine Prozedur entwickelt werden, welche die erbrachten Leistungen und die Aufsummierten Entgelte auflistet. Die Daten sind in einem Journal gespeichert.
Journal (Beispiel)
Datum |
MitgliedID |
LeistungID |
AnzahlStunfrn |
01.04.2021 |
100062 |
100076 |
2 |
11.04.2021 |
100062 |
100076 |
3 |
10.04.2021 |
100062 |
500123 |
1 |
13.04.2021 |
201235 |
200234 |
1 |
14.04.2021 |
201235 |
200234 |
1 |
07.04.2021 |
201235 |
200356 |
1 |
Das Journal ist nach MitgliedID und bei gleicher MitgliedID nach LeistungID sortiert.
Die Ausgabeliste soll wie folgt aufgebaut sein:
Nr |
MitgliedID |
Name |
Vorname |
LeistungID |
Leistung |
AnzahlStunden |
Stundensatz |
Gesamt |
1 |
100062 |
Clausen |
Jens |
100076 |
Gießen |
5 |
6,00 |
30,00 |
2 |
100062 |
Clausen |
Jens |
500123 |
Umgraben |
1 |
6,00 |
6,00 |
Summe |
36,00 |
|||||||
1 |
201235 |
Rader |
Sabrina |
200234 |
Hausputz |
2 |
6,00 |
12,00 |
2 |
201235 |
Rader |
Sabrina |
200356 |
Einkauf |
1 |
6,00 |
6,00 |
Summe |
18,00 | |||||||
Gesamtsumme |
54,00 |
Folgende Funktionen sollen verwendet werden:
hole_satz() : String |
Liest den nächsten Datensatz der Journal-Tabelle in eine Zeichenkette ein. Kann kein Satz mehr gelesen werden, liefert die Funktion den String "". |
lese_m_id(satz:string):Integer |
Ermittelt die MitgliedID aus Satz |
lese_l_id(satz:string):Interger |
Ermittelt die LeistungsID aus Satz |
lese_anz_std(satz: string):Integer |
Ermittelt die Anzahl der Stunden aus Satz |
schreibe_kopf() |
Schreibt die Kopfzeile der Positionen-Tabelle |
schreibe_daten ( nr: Integer, mitgliedid: Integer, leistungid: Integer, anzahlstunden: Integer, stundensatz: Double, summe: Double ) |
Schreibt eine Datenzeile in der geforderten Darstellung. Name, Vorname und Leistung werden automatisch aus mitgliedid und leistungid ermittelt. |
schreibe_summe(summe: Double) |
Schreibt die (berechnete) Summe für ein Mitglied |
schreibe_gsumme(gsumme: Double) |
Schreibt die (berechnete) Gesamtsumme des Journals |
Entwickelt Sie einen Algoritmus für die Prozedur erstelle_liste(stundensatz: Double), der die Liste entsprechend der Vorgabe schreibt und dazu die entsprechenden Werte berechnet. Verwendete Variablen müssen nicht deklariert werden.
erstelle_liste(stundensatz: Double)
printKopf()
datensatz = hole_satz()
zaehler = 0
gesamtsumme = 0;
SOLANGE datensatz != "" Dann
mitglied = lese_m_id(datensatz)
summeMitglied = 0
SOLANGE nächsterDatensatz != "" UND lese_m_id(datensatz) = mitglied
leistung = lese_l_id(datensatz)
stunden = 0;
WENN lese_l_id(datensatz) = lese_l_id(nächsterDatensatz) DANN
summeLeistung += lese_anz_stunden(datensatz) + lese_anz_stunden(nächsterDatensatz) * stundensatz
schreibe_daten(zaehler, lese_m_id(datensatz), lease_l_id(datensatz), lease_anz_stunden(datensatz), stundensatz, summeLeistung)
schreibe_summe(summe)
SONST
summeLeistung += lese_anz_stunden(datensatz) + lese_anz_stunden(nächsterDatensatz) * stundensatz
gesamtsumme = gesamtsumme + summeleistung
ENDE WENN
datensatz = naechsterSatz
WENN get_m_id(datensatz) != get_m_id(naechsterDatensatz)
-----------------------
Eine geplante Stored Procedure soll Folgendes leisten:
- Zunächst werden alle Ferienwohnungen im selben Ort ermittelt und in einer Tabelle gespeichert
- Jede Wohnung aus dieser Tabelle wird anschließend darauf überprüft, ob die Bettenzahl mindestens so groß wie bei der stornierten Wohnung ist und der Preis höchstens um 10% abweicht
- Eine Wohnung, die diese Kriterien nicht erfüllt, wird aus der Tabelle gestrichen
- Sollten anschließend mehr als 3 Wohnungen übrigbleiben, werden alle bis auf die drei preiswertesten gelöscht. (Hier ist der betreffende Preis zu ermitteln.)
- Sollte keine Wohnung übrig bleiben, werden alle Wohnungen aus demselben Land wie die stornierte Wohnung ermittelt und für diese Schritt 2-4 wiederholt.
- Sollte es keine Wohnung in demselben Land mehr geben, erfolgt eine Misserfolgsmeldung
Zeichnen Sie für diese Stored Procedure ein Struktogramm
No Comments