Aufgabe 1 Gegeben sei die Prozedur BubbleSort: procedure BubbleSort(var iofeld:tfeld); { Programm sortiert das Eingabefeld iofeld aufsteigend var hilf:integer; i:tindex; j:tindex; vertauscht:boolean; i:=1; repeat vertauscht := false; for j := 1 to N - i do if (iofeld[j]>iofeld[j+1]) then hilf:=iofeld[j]; iofeld[j]:=iofeld[j+1]; iofeld[j+1]:=hilf; vertauscht := true i := i + 1 until ((i=n) or (not vertauscht)) } 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? [Diese Frage ist nicht klausurrelevant] Bester Fall Komplexität: O(n) Durchschnittlicher Fall Komplexität: O(n 2 ) Schlechtester Fall Komplexität: O(n 2 ) 1
Aufgabe 2 procedure transponierematrix (var iomat : tmatrix); {transponiert die quadratische Matrix iomat} var i, j:tzeilespalte; {Zeilen- und Spaltenindex} hilf:integer; for i := 1 to ZEILENSPALTENMAX-1 do for j:= i+1 to ZEILENSPALTENMAX do hilf := iomat [i, j]; iomat [i, j] := iomat [j, i]; iomat [j, i] := hilf end {transponierematrix} 2
Aufgabe 3 function Baumpfad(inWurzel : trefbbknoten; insuchwert : integer):trefelement; {sucht einen Wert im Baum und gibt eine Liste aller Werte auf dem Pfad zum gesuchten Wert zurueck } var BBKnoten : trefbbknoten; LoeschElement, ListenAnfang, ListenEnde: trefelement; gefunden : boolean; BBKnoten := inwurzel; gefunden := false; ListenAnfang := nil; while (BBKnoten <> nil) and (not gefunden) do { 1.) ** Wert von BBKnoten in Liste einfügen ** } if ListenAnfang = nil then { erstes Listenelement erzeugen } new (ListenAnfang); ListenEnde := ListenAnfang end else {neues Listenelement anhaengen} new (ListenEnde^.next); ListenEnde := ListenEnde^.next ListenEnde^.info := BBKnoten^.info; ListenEnde^.next := nil; {2.) ** Suchwert gefunden? Falls nein, Suchbaum weiter durchlaufen ** } if insuchwert = BBKnoten^.info then gefunden := true else if insuchwert < BBKnoten^.info then BBKnoten := BBKnoten^.links else BBKnoten := BBKnoten^.rechts {while} {3.) ** Falls nicht gefunden, aufgebaute Liste loeschen **} if not gefunden then while ListenAnfang <> nil do LoeschElement := ListenAnfang; ListenAnfang := ListenAnfang^.next; dispose(loeschelement) {4.) ** Ergebnisrückgabe **} Baumpfad := ListenAnfang { Baumpfad } 3
Aufgabe 4 procedure BinBaumInorderMax(inWurzel: trefbbknoten; var iomax: integer); {durchlaeuft rekursiv die Knoten eines Binaerbaums in inorder- Reihenfolge und gibt das Maximum der bisher betrachteten info- Werte an jeder Stelle aus} if inwurzel <> nil then BinBaumInorderMax (inwurzel^.links, iomax); {Ist inwurzel das neue Maximum? iomax ggf aktualisieren und dann aktuelles Maximum ausgeben } if inwurzel^.info > iomax then iomax := inwurzel^.info; write(iomax, ' '); BinBaumInorderMax (inwurzel^.rechts, iomax) end {if} {BinBaumInorderMax} 4
Aufgabe 5 T 1.1 = {x N mit x<4 und (3 x) } T 1.2 = {x N mit x>3 und (3 x) } Testdatum (2, false, false) Testdatum (14, false, false) T 2.1 = {x N mit x<4, (3 x) und (9 x) } T 2.2 = {x N mit 3<x<10, (3 x) und (9 x) } T 2.3 = {x N mit x>9, (3 x) und (9 x) } Testdatum (3, true, false) Testdatum (6, true, false) Testdatum (12, true, false) T 3.1 = {x N mit x<10 und (9 x) } T 3.2 = {x N mit x>9 und (9 x) } Testdatum (9, true, true) Testdatum (18, true, true) 5
Lösungenn der Aufgaben zum Studientag 08.01.2012 Aufgabe 6 b) Für einen Zweigüberdeckungstest muss lediglich ein einziger Pfad P durchlaufen werden, nämlich (n start, n init, n while, n do, n while, n tail, n final ). Ein Testdatumm für diesen Pfad ist (1, 1). c) Für einen boundary interior-pfadtest müssen zusätzlich zwei weitere w Pfade durchlaufen werden, nämlich: keinmaliger Schleifendurchlauf: (n start, n init, n while, n tail, n final ), Testdatum T (0,0) und zweimaliger Schleifendurchlauf: (n start, n init, n while, n do, n while, n do, n while, n tail, n final ), Testdatum (11,2). Bei nullmaligemm und einmaligem Schleifendurchlauf kann der Fehler nicht aufgedeckt werden. Beim interior-test wird der Fehler z.b. für die Testdaten (10,1) oder (20,2) nicht aufgedeckt. 6