Aufgaben

Es sind mit Absicht viele, es reicht wenn Sie etwa die Hälfte (gründlich) bearbeiten. Der Rest ist für zu Hause, als Anregung gedacht.

Grün markierte sind das Minimalprogramm, die sollten auf jeden Fall bearbeitet werden. Rot gekennzeichnete sind anspruchsvoller und v.a. für diejenigen gedacht, die schon Programmierkenntnisse mitbringen.

  1. Warmlaufen

  2. Quadrat– und Kubik–Zahlen
    (a) Erstellen Sie ein Programm, das die Quadrat– und Kubik–Zahlen von 1 bis 150 ausgibt und am Ende die Summe der Quadrat– bzw. Kubik–Zahlen

    (b) Demonstrieren Sie folgende mathematische Identität für $n=1..200$:

    \ensuremath{\displaystyle \sum_{i=1}^n i^3 = \left( \sum_{i=1}^n i \right)^2}

  3. Integer vs Strings
    Führen Sie die folgenden Python Anweisungen aus und erklären Sie die Ausgabe bzw. die Unterschiede:
    a = 1
    print (a)
    print (a+a)
    b = '1'
    print (b)
    print (b+b)

  4. Fließkommazahlen
    (a)
    Lassen Sie das Programm TestFloat.py laufen.
    Warum "können Rechner nicht rechnen" ?
    (b)
    Genauigkeit von float Operationen: Reduzieren Sie schrittweise
    eps = 1.
    while (...):
    eps /= 2.

    addieren Sie's zu
    onePlusEps = 1.0 + eps
    solange bis
    if ( onePlusEps == 1.0 ) ...

  5. Fibonacci–Zahlen
    Fibonacci–Zahlen spielen eine wichtige Rolle in der Zahlentheorie und haben viele interessante Eigenschaften. Sie sind definiert als:
    \ensuremath{\displaystyle F_n = F_{n-1} + F_{n-2};\, F_0 = 0, \,F_1 = 1}
    (a) Erstellen Sie eine Liste der Fibonacci–Zahlen.

    (b) Demonstrieren Sie dass gilt:
    \ensuremath{\displaystyle F_{n+1} \cdot F_{n-1} - F_n^2 = (-1)^n}


  6. Bit Operationen
    Programmieren Sie die binäre Ausgabe von Integerzahlen mit Hilfe von Bit Operationen.
    z.B.: 5 -> 101
    Hinweis: Bit 15 in n abfragen mit z.B.: if ( ( ( 1 <<15) & n ) != 0 )

  7. Prim–Zahlen
    (a) Erstellen Sie ein Programm, das testet ob eine gegebene Zahl eine Primzahl ist.
    (b) Erweitern Sie das Programm, so dass es abzählt wieviele Primzahlen es gibt, die kleiner als eine vorgegebene Zahl sind, z.B. $1\,000\,000$.
    Hinweis: Es geht nicht darum einen schnellen Algorithmus zu finden, machen Sie's so simpel wie möglich.
    (c) Sieb des Erasthones ist ein klassisches Verfahren zur Bestimmung aller Primzahlen zwischen \ensuremath{ 2} und \ensuremath{ n}. Der Algorithmus geht folgendermassen: Am Ende bleiben genau die Primzahlen übrig in der Liste. (Tipp: Test auf Vielfaches mit modulo Operator: m%i == 0 )

  8. Lineare Algebra
    (a) Vektoroperationen: Legen Sie 2 Arrays mit den Elementen [ 0.3, 1.8, -2.2 ] bzw [ -2.5, 3.8, 0.4] an und berechnen Sie das Skalarprodukt und das Vektorprodukt.

    (b) Matrixmultiplikation: Schreiben Sie ein Programm zur Multiplikation dieser beiden Matrizen:
    C = [ [ 0.61, 0.24, 1.16 ], [ 0.14, -0.82, 0.92 ], [ -1.25, 0.96, -0.23 ] ]
    D = [ [ 0.40, -0.68, -0.68 ], [ 0.65, -0.75, 0.23 ], [ 0.52, 0.51, 0.31 ] ]

  9. Freier Fall
    Die Bewegungsgleichungen für den freien Fall sind (Erdbeschleunigung $g=9.81 m/s^2$):

    \ensuremath{\displaystyle y = h_0 - \frac{1}{2} g t^2 \, , \quad v = v_0 - g t }

    Berechnen Sie $y$ und $v$ für den freien Fall eines Balles mit $h_0 = 10\, m$ und $v_0 = 0$ für 30 Zeitpunkte von $t = 0 .. 1.5\,s$.

  10. Programmlogik bei Schleifen
    Folgendes Beispiel ist ein funktionierendes Python Programm (übernommen aus Learning Python). In einer Liste soll nach einem bestimmten Wert gesucht werden. Allerdings ist der Stil eher C++/JAVA.


    L = [1, 2, 4, 8, 16, 32, 64]
    X = 5
    
    found = i = 0
    while not found and i < len(L):
        if 2 ** X == L[i]:
            found = 1
        else:
            i = i+1
    
    if found:
        print ('at index ', i)
    else:
        print (X, ' not found')
    

    In Python lässt es sich eleganter lösen, implementieren Sie verschiedene Varianten:

    (a) found und if am Ende sind überflüssig wenn man stattdessen eine while: ... else: Kombination macht.

    (b) for Loop statt while, ohne indexing logic, stattdessen mit L.index(X) Position abfragen.

    (c) in Operator alleine: if X in L: ...

  11. Funktion für Fakultät
    Schreiben Sie eine Funktion fak( n), zur Berechnung der Fakultät $n!$. Bis zu welchem $n$ lässt sich $n!$ für float Typen berechnen ?

  12. Rekursive Funktion
    Ein Paradebeispiel für Rekursion ist Euklid's Algorithmus zur Bestimmung des
    Größten Gemeinsamen Teilers zweier Zahlen \bgroup\color{blue}$GGT( a, b)$\egroup.

    \bgroup\color{blue}$\displaystyle GGT(a,b) = \left\{ \begin{array}{rl} GGT( b, a...
...}\,\mathrm {teilbar\, ist} \\
b & \mathrm {sonst} \end{array} \right.
$\egroup

    Erstellen Sie eine solche Funktion in Python.

  13. Mathematische Funktionen
    In dem Python Module math (siehe Python math oder help(math) im Python Interpreter) sind die Standard mathematischen Funktionen dokumentiert. Zur Benutzung in ihrem Programm zunächst das Modul laden:
    import math und dann den Module-Namen math. voranstellen, also z.B.
    mypi = 4. * math.atan(1.)

    Machen Sie sich mit den Funktionen vertraut, z.B.

  14. Funktionen verwenden
    In fsortmax.py ist eine Funktion definiert, die die 3 grössten Elemente aus einer Liste zurückgeben soll. Leider funktioniert sie nicht. Was ist der Fehler?

  15. Funktionen als Argumente und lambda functions
    (a) Implementieren Sie das vorgestellte Beispiel mit der Nullstellen-Suche, benutzen Sie andere Funktionen,
    \bgroup\color{blue}\ensuremath{\displaystyle e^x - x^{10}}\egroup
    , ...

    (b) Machen Sie analog eine Funktion zur Integration mit Trapez– oder Simpson–Regel und frei wählbarer Zahl von Stützstellen.

  16. Einlesen und Arrays
    In der Datei numbers.dat finden Sie eine Liste mit 100 Fließkommazahlen. Lesen Sie diese ein und

    (a) finden den kleinsten und größten Wert.

    (b) erlauben Sie die Übergabe einer Zahl per Argument und finden Sie die Zahl aus numbers.dat, die am nächsten liegt.

    (c) speichern Sie alle Zahlen in eine Liste von float Zahlen. Sortieren Sie die Liste in absteigender Reihenfolge und geben Sie sie aus.

  17. Files kopieren
    Schreiben Sie ein Programm zum kopieren von Files, z.B.
    python3 FileCopy.py file1.txt file2.txt
    soll file1.txt nach file2.txt kopieren.

  18. Advent of Code 2020 Aufgabe 1
    Gutes Programmier-Training ist das alljährliche advent-of-code. Hier die Einstiegs-Aufgabe aus 2020:
    In aoc1.dat finden Sie Liste von Zahlen.

    (a) Finden Sie die beiden Zahlen deren Summe 2020 ergibt.

    (b) Finden Sie die drei Zahlen deren Summe 2020 ergibt.

  19. Zeilen, Wörter, Zeichen zählen
    Schreiben Sie ein Programm, das die Zahl der Zeilen, Wörter und Zeichen bestimmt für ein File das auf der Kommandozeile angegeben wird, z.B.
    python3 count.py /etc/passwd

  20. String Funktionen
    Für Python Strings sind eine Reihe nützlicher Hilfsfunktionen definiert, siehe https://docs.python.org/3.10/library/stdtypes.html#str.

    In kant.txt finden Sie eine elektronische Fassung von Immanuel Kant's "Kritik der reinen Vernunft".

    (a) Wieviele Zeilen enthält der Text ?

    (b) Finden Sie die String Funktion die Groß-Buchstaben in Klein-Buchstaben umwandelt und transformieren sie damit den ganzen Text.

    (c) Wie oft kommt das Wort Vernunft in dem Text vor ?

  21. Strings und Sequenzen
    Studieren Sie folgende sechs Code-Segmente, d.h. überlegen Sie zunächst welches Ergebnis Sie jeweils erwarten, probieren es dann aus und versuchen es zu verstehen falls die Erwartung nicht eingetroffen ist.


    #
    "aaaaa".count("aaa")
    #
    #
    x = ['a', 'b', 'c', 'd']
    x[0:2] = []
    #
    x = ['a', 'b', 'c', 'd']
    x[0:2] = ['q']
    #
    x = ['a', 'b', 'c', 'd']
    x[0:2] = 'q'
    #
    x = ['a', 'b', 'c', 'd']
    x[0:2] = 99
    #
    x = ['a', 'b', 'c', 'd']
    x[0:2] = [99]
    #
    

  22. Advent-of-Code 2019-4
    https://adventofcode.com, further example: Day 4, 2019.

    Guessing 6–digit password

    Other than the range rule, the following are true:

    (a) How many different passwords within the range given in your puzzle input meet these criteria?

    Further rule: the two adjacent matching digits are not part of a larger group of matching digits.

    (b) How many different passwords within the range given in your puzzle input meet all of the criteria?