Kurs 1613 „Einführung in die imperative Programmierung“ 1

Werbung
Kurs 1613 „Einführung in die imperative Programmierung“
Aufgabe 1
Gegeben sei die Prozedur BubbleSort:
procedure BubbleSort(var ioFeld:tFeld);
{
}
var
hilf:integer;
i:tIndex;
j:tIndex;
vertauscht:boolean;
begin
i:=1;
repeat
vertauscht := false;
for j := 1 to N - i do
begin
if (ioFeld[j]>ioFeld[j+1]) then
begin
hilf:=ioFeld[j];
ioFeld[j]:=ioFeld[j+1];
ioFeld[j+1]:=hilf;
vertauscht := true
end;
end;
i := i + 1
until ((i=N) or (not vertauscht))
end
a) Überlegen Sie sich, was das Programm leistet und wie es dabei vorgeht.
Ergänzen Sie in der Prozedur einen erklärenden Kommentar an der grau eingefärbten Stelle.
b) Was ist die Zeitkomplexität des BubbleSort?
Bester Fall Komplexität:
Durchschnittlicher Fall Komplexität:
Schlechtester Fall Komplexität:
1
Kurs 1613 „Einführung in die imperative Programmierung“
Aufgabe 2
Schreiben Sie eine Pascal-Prozedur transponiereMatrix, die als Parameter eine quadratische
Matrix von integer-Werten erhält und diese Matrix transponiert, also die Zeilen und Spalten der
Matrix vertauscht, wie im folgenden Beispiel gezeigt ist:
Verwenden Sie dazu die folgenden Definitionen:
const
ZEILENSPALTENMAX = 5;
type
tZeileSpalte = 1..ZEILENSPALTENMAX;
tMatrix = array [tZeileSpalte, tZeileSpalte] of integer;
2
Kurs 1613 „Einführung in die imperative Programmierung“
Aufgabe 3
Gegeben seien die folgenden Typdefinitionen für Knoten eines binären Suchbaums und Elemente
einer linearen Liste:
type
tRefBBKnoten = ^tBBKnoten;
tBBKnoten = record
info:integer;
links,
rechts:tRefBBKnoten
end;
tRefElement = ^tElement;
tElement = record
info:integer;
next:tRefElement
end;
Schreiben Sie eine Pascal-Funktion Baumpfad, welche einen nicht leeren Suchbaum sowie einen
Suchwert übergeben bekommt und dazu alle Werte auf dem Suchpfad von der Wurzel des
Suchbaums zum ersten Vorkommen des Suchwerts (jeweils inklusive) in einer Liste ablegt und diese
zurückgibt. Ist der gesuchte Wert nicht im Baum enthalten, so soll eine leere Liste (also ein Zeiger
mit Wert nil) zurückgegeben werden.
Durchlaufen Sie dazu in Ihrer Funktion den Suchbaum iterativ und fügen Sie während des Durchlaufs
die gefundenen Werte hinten an eine (neu zu erstellende) Liste an. Wird der Suchwert nicht
gefunden, ist die aufgebaute Liste wieder komplett zu löschen.
3
Kurs 1613 „Einführung in die imperative Programmierung“
Aufgabe 4
Gegeben seien die folgenden Typdefinitionen für Knoten eines Binärbaums in Pascal:
type
tRefBBKnoten = ^tBBKnoten;
tBBKnoten = record
info:integer;
links,
rechts:tRefBBKnoten
end;
Gesucht ist eine rekursive Pascal-Prozedur, die einen übergebenen Binärbaum in „inorder“Reihenfolge durchläuft (Links-Mitte-Rechts) und dabei eine bestimmte Folge von Zahlen auf die
Standardausgabe schreibt: Bei jedem Knotenbesuch ist das Maximum der Knotenwerte aller bis
dahin durchlaufenen Baumknoten (einschließlich des gerade besuchten) auszugeben.
Für den im Folgenden abgebildeten Baum ergibt sich z.B. die Ausgabe: -2 4 5 6 6 6.
4
Kurs 1613 „Einführung in die imperative Programmierung“
Aufgabe 5
Eine Prozedur, die für eine natürliche Zahl bestimmt, ob diese durch 3 oder durch 9 teilbar ist, soll
einem funktionsorientierten Test unterzogen werden. Bekannt seien die Typdefinitionen sowie der
Prozedurkopf:
type
tNatZahl=1..maxint;
procedure divDreiNeun(inZ:tNatZahl;var outDrei:boolean;
var outNeun:boolean);
{ermittelt, ob die Eingabe inZ durch die Zahlen 3 bzw. 9 teilbar
ist.}
Geben Sie eine für einen Black-Box-Test sinnvolle Zerlegung der Menge der zulässigen
Eingabedaten in Äquivalenzklassen an. Geben Sie hierbei zu jeder Äquivalenzklasse jeweils ein
Testdatum an.
5
Kurs 1613 „Einführung in die imperative Programmierung“
Aufgabe 6
Die Funktion aus Aufgabe 5 benutzt für die Tests auf Teilbarkeit die Quersumme der eingegebenen
Zahl. Für die Berechnung der Quersumme bieten wir als Lösung folgendes Programm an:
program QuersummeF (input, output);
{ soll die Quersumme einer nicht-negativen integer-Zahl berechnen }
type
tNatZahl = 0..maxint;
var
Quer,
Rest : tNatZahl;
begin
readln (Rest);
Quer := 0;
while Rest > 0 do
begin
Quer := Rest mod 10;
Rest := Rest div 10
end;
writeln (Quer)
end. { QuersummeF }
a) Zeichnen Sie den kompakten Kontrollflussgraphen zum Programm QuersummeF.
b) Geben Sie Pfade im Kontrollflussgraphen für einen Zweigüberdeckungstest an. Geben Sie je ein
entsprechendes Testdatum an.
c) Wie unterscheidet sich der boundary interior-Pfadtest (interior-Test mit n=2) für das Programm
QuersummeF vom Zweigüberdeckungstest aus Teil b) dieser Aufgabe? Geben Sie falls nötig weitere
Testdaten an. Ist es möglich, dass auch dieses Testverfahren den Fehler im Programm nicht
aufdeckt? Begründen Sie Ihre Antwort.
6
Herunterladen