Übungsaufgabe - Easyshop

Aufgabe C

a)

Frage

Die Operation verarbeiteScan (siehe Struktogramm in Abbildung 2) aktualisiert die Belegung des Einkaufswagens unmittelbar nach jedem erfolgten Scan. Diese Operation wird mehrfach nacheinander mit den in der Abbildung 3 aufgelisteten Parametern aufgerufen. Der Einkaufswagen ist zu Beginn schon mit einigen Artikeln gefüllt.

Stellen Sie in der Abbildung 3 jeweils den Zustand des Stapels warenkorb nach Ablauf der Operation verarbeiteScan dar.

Frage

Aufgrund eines Fehlers kommt es während der Operation verarbeiteScan zu einem Programmabbruch. Zuvor wurde diese mit den Parametern artnr=120 und gewichtsaenderung=-50 im Zustand wk0 des Stapels warenkorb (s. Abb. 3) aufgerufen.

Analysieren Sie das Verhalten der Operation verarbeiteScan für diesen Aufruf

Die Operation verabeiteScan entfernt die obersten Elemente des Stapels solange bis sie das Element mit der Artikelnummer 120 entfernt hat. In diesem Fall ist die 120 nicht im Stapel enthalten, das heißt das Programm wird versuchen das oberste Element des Stapels zu entfernen, obwohl der Stapel bereits leer ist.

Frage

Entwickeln Sie ein verändertes Struktogramm für die Operation verarbeiteScan, sodass diese Situation durch Ausgabe einer entsprechenden Fehlermeldung berücksichtigt wird. Der Stapel warenkorb soll nach Beendigung der Operation wieder in seinem Ursprungszustand vorliegen.

Hinweis: Sie dürfen für die Dokumentation Ihrer Lösung Blöcke des zu verändernden Struktogramms markieren/nummerieren und in verkürzter Form verwenden.

b)

Frage

In Abbildung 4 im Material ist die Arbeitsweise der Operation zusammen anhand eines Beispiels dokumentiert.

Entwickeln Sie ein Struktogramm für die Operation zusammen. Die der Operation übergebenen Stapel werden nach dem Aufruf der Operation nicht weiterverwendet und dürfen daher beliebig verändert werden.

Stack<int> zusammen(Stack<int> s1, Stack<int> s2){
    Stack<int> s3 = new Stack<int>();
    while (s1.Count > 0){
		if (s2.Count > 0){
			if(s1.Peek() < s2.Peek()){
	            s3.Push(s2.Pop());
	        }else{
	            s3.Push(s1.Pop());
	        }
		}
		else
			s3.Push(s1.Pop());		   
    }
    while (s2.Count > 0){
	    s3.Push(s2.Pop());
    }
    while(s3.Count > 0){
        s1.Push(s3.Pop());
    }
    
    return s1;
}

Frage

Erläutern Sie, wie der Algorithmus von zusammen zu verändern ist, wenn die Ausgabe in Form einer Schlange statt eines Stapels erfolgen soll. Auch die zurückgegebene Schlange soll absteigend, mit dem größten Element am Kopf, sortiert sein.

Wenn eine Schlange verwendet werden soll, kann man das Umschichten von s3 nach s1 um die Reihenfolge der Elemente umzukehren entfernen, da bei einer Schlage das first-in-first-out Prinzip greift. Das heißt, dass das größte Element, welches auch als erstes in die Schlange eingereiht wird, auch das Element an der ersten Stelle ist.

Frage

Häufig werden der Operation zusammen sehr unterschiedlich stark gefüllte Stapel übergeben, nur selten sind beide Stapel gleichgroß.

Beurteilen Sie die beiden folgenden Aussagen:

  1. Wenn in einem der beiden Stapel nur ein Artikel enthalten ist, dann benötigt die Operation zusammen für die vollständige Verarbeitung stets nur eine geringe Anzahl von Vergleichen.
  2. Sind in beiden Stapeln zu Beginn jeweils k Elemente enthalten, so werden bei der vollständigen Verarbeitung der Operation zusammen im günstigsten Fall nur k Vergleiche benötigt.
  1. Ja in meiner Implementierung wird nicht verglichen, ob die Elemente größer als einander sind.
  2. nein

c)

d)

Frage

Bestimmen Sie für den Strichcode in Abbildung 7a die zugehörige Artikelnummer.

  1. 48146
  2. 578