# Rechnen mit Python

## Python Compiler
+ [Online-Compiler](https://www.programiz.com/python-programming/online-compiler/)
+ [Programmierumgebung Thonny](https://thonny.org)


## Kürzen eines Bruchs
Programmiere mit Python ein Programm, das einen Bruch (rationale Zahl) kürzt. Dazu benötigt man den ggT: Hier ist der Algorithmus für den ggT: 

[![ggT.drawio.png](https://bookstack.jb-net.eu/uploads/images/gallery/2025-01/scaled-1680-/GLcaot7UHgyi2uzV-ggt-drawio.png)](https://bookstack.jb-net.eu/uploads/images/gallery/2025-01/GLcaot7UHgyi2uzV-ggt-drawio.png)

Dann muss der Zähler und Nenner nur noch durch den ggT geteilt werden. Das benötigt ihr dazu: Die Informationen gibt es im Unterricht. Hier ist das Grundgerüst für dein Programm: 

```
def ggt(x,y):
    """
    Die Funktion berechnet den größten gemeinsamen Teiler aus den beiden
    Parametern x und y.
    """
    while x!=y:
        #Dein Code
    return x

def kuerzen(x,y):
    """
    Diese Funktion kürzt den Bruch x/y:
    """
    g=ggt(x,y)
    #Dein Code
    ergebnis= str(int(x))+ '/'+ str(int(y))
    return ergebnis

print ("Der Bruch lautet gekürzt: ", kuerzen(65,135))

```

## Fakultät
Als nächstes berechnen wir die Fakultät. ACHTUNG: Zum Ausprobieren wählt keine großen Zahlen, da der Rechner schnell überfordert sein wird. Die Fakultät ist folgendermaßen definiert: 

<div drawio-diagram="151"><img src="https://bookstack.jb-net.eu/uploads/images/drawio/2025-12/MGeUvurpwd0Adgp2-drawing-3-1764749434.png"></div>

Um das zu berechnen, können wir einfach folgenden Algorithmus verwenden: 
<div drawio-diagram="129"><img src="https://bookstack.jb-net.eu/uploads/images/drawio/2024-12/KUIVJJjwetii9PZD-drawing-3-1734517163.png"></div>

## Fibonacci-Folge
Für diejenigen, die schnell fertig sind, gibt es noch die Fibonaccifolge, die folgendermaßen definiert ist: 0,1,1,2,3,5,8,13… . Na, wie geht es wohl weiter?

## Ackermann-Funktion


<div drawio-diagram="83"><img src="https://bookstack.jb-net.eu/uploads/images/drawio/2024-01/NfUtguwlEp7eGEpL-drawing-3-1704872335.png"></div>
Die Ackermann-Funktion gilt nur für Ganzzahlen >=0!

Folgendermaßen kann diese Funktion umgesetzt werden: 
```
#### Die Ackermann-Funktion, umgesetzt in Python
import sys
sys.setrecursionlimit(10000) # Das Limit für Rekursion in Python ist 1000. Das ist schnell erreicht.

def ackermann(m,n):
  # Für den ersten Fall, dass m=0 ist, wird das Ergebnis n+1 zurückgegeben.
  # Schreibe hier deinen Code für diesen Fall.

  # Für den zweiten Fall, dass m>=1 und n=0 ist, wird als Ergebnis der erneute Aufruf der Funktion übergeben mit den beiden Parametern: ackermann(m-1,1)
  # Schreibe hier den Code für diesen Fall.

  # Für den dritten Fall gilt, dass m und n >= 1 sind. In diesem Fall ist das Ergebnis ackermann(m-1, ackermann(m,n-1))
  Schreibe hier deinen Code für den dritten Fall.

```
**Teste zunächst mit Zahlen <=4!!**