Übungen

Aufgabe 1: Eine Liste durchlaufen

Jede natürliche Zahl lässt sich eindeutig als Produkt von Primzahlen darstellen. So kann etwa die Zahl 84 wie folgt dargestellt werden: 84 = 2*2*3*7.

Die Primfaktorzerlegung einer Zahl soll hier mit Hilfe einer Liste dargestellt werden. Für die Zahl 84 ist dies die Liste [2, 2, 3, 7]. Will man aus dieser Zahlenliste die dargestellte Zahl ermitteln, so muss man das Produkt der Listenelemente bestimmen.

Die folgende Funktion produkt leistet diese Produktberechnung.

def produkt(L):
    p = 1
    for z in L:
        p = p * z
    return p

(a) Überzeuge dich mit verschiedenen Testaufrufen, dass die Funktion tatsächlich das Gewünschte leistet.

(b) Kern der Produktberechnung ist die for-Anweisung. Ergänze Ausgabeanweisungen, die die jeweiligen Werte der Variablen z und p ausgeben, um den Berechnungsablauf verfolgen zu können.

(c) Was müsste man abändern, wenn man statt einer Produktberechnung eine Summenberechnung vornehmen wollte?

(d) Eine Funktion anzahl soll bestimmen, wie oft ein übergebenes Element in einer übergebenen Liste vorkommt. Mit einer solchen Funktion könnte man bestimmen, wie oft ein Primfaktor in der Primfaktordarstellung vorkommt.

(e) Die Primfaktorzerlegung einer Zahl kann auch mit Potenzen geschrieben werden: 84 = 22*31*50*71. Eine solche Darstellung mit Potenzen könnte man in Listenform so beschreiben: [[2, 2], [3, 1], [5, 0], [7, 1]]. Wie müsste man die Deklaration der Funktion produkt abändern, damit sie solche Primfaktordarstellungen in entsprechende Zahlen umrechnen kann?

Aufgabe 2: Eine Liste auf eine Eigenschaft untersuchen

(a) Was leistet die folgende Funktion istElement? Kannst du es durch Analyse des Quelltextes erschließen? Überprüfe deine Vermutung durch geeignete Tests.

def istElement(e, L):
    trifftzu = False
    for z in L:
        if z == e:
            trifftzu = True
    return trifftzu

(b) Eine Funktion soll überprüfen, ob eine Zahlenliste nur positive Zahlen enthält.

(c) Eine Funktion soll überprüfen, ob ein Element in einer Liste mehrfach vorkommt.

Aufgabe 3: Eine neue Liste aufbauen

(a) Was leistet die folgende Funktion loeschen? Kannst du es durch Analyse des Quelltextes erschließen? Überprüfe deine Vermutung durch geeignete Tests.

def loeschen(e, L):
    H = []
    for z in L:
        if z != e:
            H = H + [z]
    return H

(b) Eine Funktion soll alle negativen Zahlen aus einer Zahlenliste löschen und diese neue Liste als Ergebnis zurückgeben.

(c) Eine Funktion soll alle Zahlen aus einer Zahlenliste verdoppeln und diese neue Liste als Ergebnis zurückgeben.

Aufgabe 4: Eine Liste über die Elementnummern durchlaufen

(a) Was leistet die folgende Funktion ersteNummer? Kannst du es durch Analyse des Quelltextes erschließen? Überprüfe deine Vermutung durch geeignete Tests.

def ersteNummer(e, L):
    n = -1
    i = 0
    while (i < len(L)) and (n < 0):
        if e == L[i]:
            n = i
        i = i + 1
    return n

(b) Eine Funktion soll die letzte Indexnummer eines Elements in einer Liste zurückgeben.

(c) Eine Funktion soll die Liste aller Indexnummern eines Elements in einer Liste zurückgeben.

Aufgabe 5: Listenoperationen

(a) Was leisten die folgenden Funktionen? Kannst du es durch Analyse des Quelltextes erschließen? Überprüfe deine Vermutung durch geeignete Tests.

def erstes(L):
    return L[0]

def ohneErstes(L):
    return L[1:]

def mitErstem(e, L):
    return ([e]+L)

(b) Entwickle analog die Funktionen letztes, ohneLetztes und mitLetztem.

Aufgabe 6: Eine etwas schwierigere Aufgabe

Entwickle eine Funktion ggt, die aus zwei Primfaktordarstellungen in Listenform (siehe Aufgabe 1) den größten gemeinsamen Teiler der entsprechenden Zahlen bestimmt.

X

Fehler melden

X

Suche