Aufgabe 1: (RAM zur Berechnung des größten gemeinsamen Teilers)
20
Schreiben Sie ein kommentiertes RAM-Programm, das die folgende Funktion ggT : N × N → N berechnet.ggT(x, y) = { größter gemeinsamer Teiler von x und y, falls x ≠ 0 und y ≠ 0 - max(x, y) , sonst
100%
0 R2<-R1 - R0 // R2 wird der Wert R1-R0 zugewiesen
1 IF R2 > 0 GOTO 3 // Falls R2 > 0 ist die Rechnung richtig und man geht zu 3
2 R2<-R0-R1 // falls nicht (R2 <= r): Minuend und Subtrahend vertauschen
3 R0<-R1
4 R1<-R2
5 IF R1 > 0 GOTO 0 // Falls R1 > 0 ist der GGT noch nicht gefunden -> Iteriere so lange bis GGT gefunden.
6 STOP
Aufgabe 2: (Bestimmen der berechneten Funktion)
20
Bestimmen Sie die von dem folgenden While-Programm berechnete Funktion und geben Sie diese mathematisch exakt an. Begründen Sie Ihre Aussage!
def f6(x):
i = 0
y = 1
z = 1
while (z< x):
i = (i+1)
z = (z+y)
y = (y+y)
return i
50%

1. Die Begründung hat dem Korrektor nicht ausgereicht
2. Alternativ lässt sich die Funktion auch aufgerundet darstellen, jedoch dann ohne '+1'
Aufgabe 3: (Listencodierung)
60
Verwenden Sie die im Skript auf den Seiten 9–10 beschriebene Listencodierung und schreiben Sie ein kommentiertes While-Programm (mit Syntaxprüfer testen!), das folgende Funktionen zum Erstellen und Abfragen von codierten Listen zur Verfügung stellt.- ListCreate(): Liefert den Code der leeren Liste ⟨⟩.
- ListGetLength(l): Falls l der Code einer Liste ist, so wird die Anzahl der Elemente der Liste zurückgegeben. Andernfalls darf sich die Funktion beliebig verhalten.
- ListGetElement(l,i): Falls i ≥ 1 und l der Code einer Liste mit mindestens i Elementen ist, so wird das i-te Listenelement von links zurückgegeben. Andernfalls darf sich die Funktion beliebig verhalten.
- ListAppendElement(l,e): Falls l der Code einer Liste ist und e ≥ 0, so wird das Elemente rechts an die Liste angehängt und der Code der neu entstandenen Liste zurückgegeben. Andernfalls darf sich die Funktion beliebig verhalten.
40%
Teilaufgabe a
def ListCreate():
return 2
Teilaufgabe b
def ListGetLength(l):
r = 0
b = bin(l)
length = binLength(b)
while (length > 0):
bit = getbit(b,length)
if (bit == 2):
r = (r+1)
b = removeNbit(b,length)
b = removeNbit(b,(length-1))
length = (length-2)
return (r-1)
Der restliche Code war nicht sehr "schön".Daher hab ich die 200 verbliebenden Zeilen hier nicht hochgeladen.