Skip to content

Commit c600221

Browse files
author
dodonator
committed
more typos fixed
1 parent 4d0e60e commit c600221

12 files changed

Lines changed: 53 additions & 96 deletions

Glossar.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Ein Interpreter ist ein Programm, dass Anweisungen in einer Programmiersprache e
99
Ein Compiler übersetzt Programmcode einer höheren **[Programmiersprache](#programmiersprache)** aus einer Datei in eine, vom Computer lesbare Sprache und speichert diese Übersetzung. Somit wird der Programmcode erst in eine Datei geschrieben, was es ermöglicht komplizierteren Code zu schreiben und zu schreiben. Da der Programmcode in Menschen lesbarer Form gespeichert wird, ist es möglich das Programm auf verschiedenen Systemen und an verschiedenen Zeitpunkten auszuführen.
1010
## Level 1:
1111
### Ausdruck
12-
Ein Ausdruck (alternativ: Expression) ist ein grundlegender Bestandteil jedes Programms. Ein Ausdruck beschreibt einen **[Wert](#wert)** durch das Verknüpfen von **[Funktionen](#funktion)** oder **[Operatoren](#operator)** in Verbindung mit Werten oder **[Variabeln](#variable)**. Ein Ausdruck ist dabei immer Bestandteil einer **[Anweisung](#anweisung)**.
12+
Ein Ausdruck (alternativ: Expression) ist ein grundlegender Bestandteil jedes Programms. Ein Ausdruck beschreibt einen **[Wert](#wert)** durch das Verknüpfen von **[Funktionen](#funktion)** oder **[Operatoren](#operator)** in Verbindung mit Werten oder **[Variablen](#variable)**. Ein Ausdruck ist dabei immer Bestandteil einer **[Anweisung](#anweisung)**.
1313
### Anweisung
1414
Eine Anweisung (alternativ: Befehl) ist grundlegender Bestandteil jedes Programms. Eine Anweisung kann verschiedene **[Ausdrücke(#ausdruck)** miteinander durch Funktionsaufrufe oder **[Operatoren](#operator)** verbinden aber auch einer **[Variable](#variable)** zuweisen. Im Allgemeinen enthält eine Codezeile eine Anweisung.
1515
### Variable
@@ -45,13 +45,13 @@ Als Index bezeichnet man die Position, bei 0 beginnend, eines **[Elementes](#ele
4545
Eine Liste ist ein **[Typ](#typ)**, der in Python mitgeliefert wird. In einer Liste können beliebig viele **[Werten](#wert)** mit beliebigen **[Typen](#typ)** gespeichert werden. Dabei kann ein Wert beliebig häufig in der selben Liste auftreten. Ebenso können Werte verschiedenen Typs in der selben Liste gespeichert werden. Häufig werden die Werte in einer Liste als **[Elemente](#element)** bezeichnet. Auf die Elemente einer Liste wird über deren Position in der Liste (ihren **[Index](#index)**) zugegriffen. Die Zählung der Indexe beginnt dabei bei `0`, d.h. das erste Element einer Liste mit `n` Elementen hat den Index `0` und das letzte Element den Index `n-1`. Zu beachten ist, das im Gegensatz zu den Typen **[Integer](#integer)**, **[String](#string)**, **[Float](#float)** und **[Boolean](#boolean)** die Liste ein dynamischer Typ ist.
4646
### Tupel
4747
Ein Tupel ist ein **[Typ](#typ)**, der von Python mitgeliefert wird. Er besitzt ähnliche Eigenschaften wie der Typ **Liste**. Der markante Unterschied zwischen diesen
48-
beiden Typen ist, dass ein Tupel unveränderlich ist, sowohl bezüglich der Anzahl der **[Elemente](#element)** als auch bezgl. der Elemente. Der Zugriff geschieht wie bei dervListe über den **[Index](#index)** eines Elements.
48+
beiden Typen ist, dass ein Tupel unveränderlich ist, sowohl bezüglich der Anzahl der **[Elemente](#element)** als auch bezüglich der Elemente. Der Zugriff geschieht wie bei dervListe über den **[Index](#index)** eines Elements.
4949
### Dictionary
5050
Ein Dictionary ist ein **[Typ](#typ)**, der von Python mitgeliefert wird. Es ist ebenso wie die **[Liste](#liste)** oder das **[Tupel](#tupel)**, ein iterativer Typ. Im Gegensatz zu diesen beiden Typen wird auf ein **[Element](#element)**, dass in einem Dictionary gespeichert wird nicht über einen **[Index](#index)**, sondern über ein Schlüssel zugegriffen.
5151
### Schleife
5252
Eine Schleife ist eine **[Kommandostruktur](#kommandostruktur)** und dient dazu eine Folge von Anweisungen wiederholt auszuführen, bis eine **[Bedingung](#bedingung)** erreicht ist. Diese Bedingung nennt man Abbruchbedingung. In Python gibt es zwei Arten von Schleifen, die in ihren Möglichkeiten gleichwertig sind, sie unterscheiden sich jedoch in der **[Syntax](#syntax)**, und Handhabung.
5353
#### while Schleife
54-
Eine while-Schleife ist eine **[Schleife](#schleife)** , die einen **[boolschen](#boolean)** Ausdruck entgegennimmt, diesen auf Wahrheit prüft und dann einen Codeblock wiederholt ausführt. Nach jedem Durchlauf wird der boolsche Ausdruck erneut geprüft. Sollte der Ausdruck nicht mehr den **[Wert](#wert)** `True`ergeben, wird das Durchlaufen der Schleife beendet.
54+
Eine while-Schleife ist eine **[Schleife](#schleife)** , die einen **[boolschen](#boolean)** Ausdruck entgegennimmt, diesen auf Wahrheit prüft und dann einen Codeblock wiederholt ausführt. Nach jedem Durchlauf wird der boolsche Ausdruck erneut geprüft. Sollte der Ausdruck nicht mehr den **[Wert](#wert)** `True`ergeben, wird das Durchlaufen der Schleife beendet.
5555
#### for Schleife
5656
Eine for-Schleife ist eine **[Schleife](#schleife)** die ein iterierbares **[Objekt](#objekt)** durchläuft. Beispielsweise lassen sich somit **[Strings](#string)**, **[Listen](#liste)**, **[Tupel](#tupel)** oder **[Dictionaries](#dictionary)** durchlaufen. Durch die `range()` **[Funktion](#funktion)** lassen sich sehr Zählschleifen implementieren.
5757
## Level 5:

Home.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ Level 1 beginnt mit dem Programmieren einfacher Programme in Python und klärt G
5454
* Kommentar
5555

5656
### Level 2
57-
Level 2 führt eine erste Kontrollstruktur ein, welche ein wichtiges Element jeder Programmiersprache darstellt. Desweiteren wird ein neuer Typ eingeführt.
57+
Level 2 führt eine erste Kontrollstruktur ein, welche ein wichtiges Element jeder Programmiersprache darstellt. Des Weiteren wird ein neuer Typ eingeführt.
5858
#### Stichwörter:
5959
* Programmablauf
6060
* if-Bedingung
@@ -104,7 +104,7 @@ Dieses Level beschäftigt sich mit Themen, die in bisherigen Level nicht behande
104104

105105
### Level 6
106106

107-
In Level 6 geht es um Konsolenanwendungen. Diese kann man grob in zwei Arten unterteilen:
107+
In Level 6 geht es um Konsolen-Anwendungen. Diese kann man grob in zwei Arten unterteilen:
108108
* Programme, die nur Parameter entgegennehmen und etwas ausgeben
109109
* Programme, die interaktiv arbeiten
110110

@@ -115,7 +115,7 @@ Einfache Formen des letzteren Typs kamen bereits in den vorigen Level vor.
115115
* `curses`
116116

117117
### Level 7 (OOP 1)
118-
Level 7 widmet sich den fortgeschritterenen Bereich der Objektorientierten Programmierung. Dieses Konzept hat auch in vielen anderen Programmiersprachen eine große Bedeutung. In diesen Level werden die Kompetenzen vermittelt um eigene Typen zu definieren, Klassen oder Module zu schreiben, sowie ein grundsätzliches Verständnis von Objektorientierter Programmierung.
118+
Level 7 widmet sich dem Bereich der Objektorientierten Programmierung. Dieses Konzept hat auch in vielen anderen Programmiersprachen eine große Bedeutung. In diesen Level werden die Kompetenzen vermittelt um eigene Typen zu definieren, Klassen oder Module zu schreiben, sowie ein grundsätzliches Verständnis von Objektorientierter Programmierung.
119119

120120
#### Stichwörter:
121121
* Klassen

Level10.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import sys
2626

2727
## `QApplication`-Objekt erstellen
2828

29-
Um überhaupt irgendetwas mit Qt machen zu können, brauchen wir eine Instanz von `QApplication`. (Bei reinen Konsolenanwendungen kann man auch `QCoreApplication` verwenden.)
29+
Um überhaupt irgendetwas mit Qt machen zu können, brauchen wir eine Instanz von `QApplication`. (Bei reinen Konsolen-Anwendungen kann man auch `QCoreApplication` verwenden.)
3030

3131
``` python
3232
app = QApplication(sys.argv)

Level2.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
In Level 1 hast du gelernt Eingaben in der Konsole vom Benutzer entgegen zu nehmen und, diese EIngaben zu verarbeiten und die Ergebnisse dieser Verarbeitung in der Konsole auszugeben.
44

55
In Level 2 wirst die `if`-Bedingung kennenlernen, die es dir ermöglicht Bedingungen zu prüfen, die erfüllt sein müssen, damit ein Codeabschnitt ausgeführt werden kann.
6-
Desweiteren wirst du die `while`-Schleife kennenlernen, welche einen Codeabschnitt wiederholt ausführt, solange eine Bedingung erfüllt ist.
6+
Des Weiteren wirst du die `while`-Schleife kennenlernen, welche einen Codeabschnitt wiederholt ausführt, solange eine Bedingung erfüllt ist.
77
Im Zusammenhang mit der `if`-Bedingung und der `while`-Schleife wirst du den Datentypen `boolean` kennenlernen. Dieser Datentyp beinhaltet Wahrheitswerte.
88
Am Ende des Levels wirst bereits in der Lage sein komplexere Programme umzusetzen.
99

Level3.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Eine Liste wird mit `[]` definiert.
1212
Viele Objekte lassen sich mit `list()`in eine Liste umwandeln, dabei wird eine neue
1313
Liste erstellt.
1414

15-
``` python
15+
``` python
1616
>>> print(list("abcd"))
1717
['a', 'b', 'c', 'd']
1818
```
@@ -224,7 +224,7 @@ Ein Dictionary kann man mit `{}` definieren:
224224
{'eins':'one', 'zwei':'two'}
225225
```
226226
Es ist allerdings auch möglich ein Dictionary über die Funktion `dict()` zu definieren.
227-
Dabei kann man der `dict()` Funktion eine zweidimensionale Liste der Form:
227+
Dabei kann man der `dict()` Funktion eine zweidimensionale Liste der Form:
228228
``` python
229229
a = [[key, value], [key2, value2]]
230230
```
@@ -237,8 +237,8 @@ t = ((key, value), (key2, value2))
237237
#### Zugriff1
238238

239239

240-
Anders als bei Listen und Tupeln, wird auf ein Wert in einem Dictonary nicht über den Index
241-
sondern über den Schlüssel zugegriffen. Praktischerweise ähnelt sich die Syntax dem
240+
Anders als bei Listen und Tupeln, wird auf ein Wert in einem Dictionary nicht über den Index
241+
sondern über den Schlüssel zugegriffen. Praktischerweise ähnelt sich die Syntax dem
242242
Zugriff auf eine Liste oder ein Tupel.
243243
``` python
244244
>>> d = {"eins":"one", "zwei":"two", "drei":"three"}

Level4.md

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,10 @@ text = file_object.read()
3333
file_object.close()
3434
```
3535
Die Methode `read()` liefert dabei einen String zurück, der den Inhalt der Datei enthält.
36-
Alternativ kann auch die Methode `readlines()` benutzt werden. Diese gibt eine Liste von Zeilen
36+
Alternativ kann auch die Methode `readlines()` benutzt werden. Diese gibt eine Liste von Zeilen
3737
zurück.
3838

39-
Wichtig zu beachten ist, dass die Datei gelesen wird, indem ein Zeiger durch sie durch läuft,
40-
was bedeutet, dass nach dem vollständigen Lesen der Datei der Zeiger zurück gesetzt werden
41-
muss, da sonst ein leerer String zurückgegeben werden wird.
39+
Wichtig zu beachten ist, dass die Datei gelesen wird, indem ein Zeiger durch sie durch läuft, was bedeutet, dass nach dem vollständigen Lesen der Datei der Zeiger zurück gesetzt werden muss, da sonst ein leerer String zurückgegeben werden wird.
4240

4341
``` python
4442
filename = "loremipsum.txt"
@@ -69,8 +67,7 @@ file_object.close()
6967
Wenn die Datei mit dem Dateinamen nicht vorhanden ist, wird sie in diesem Modus erstellt.
7068
Wichtig ist, dass die Datei dabei überschrieben wird, falls sie schon vorhanden war.
7169

72-
Es ist auch möglich einzelne Zeilen in die Datei zu schreiben, was grade bei größeren Texten
73-
sinnvoll sein kann.
70+
Es ist auch möglich einzelne Zeilen in die Datei zu schreiben, was grade bei größeren Texten sinnvoll sein kann.
7471

7572
``` python
7673
content = 10*["spam"]
@@ -92,8 +89,7 @@ file_object.close()
9289
```
9390

9491
## An eine Datei anfügen
95-
Beim Anhängen an eine Datei wird beim Öffnen der Datei der Zeiger auf das Dateiende gelegt,
96-
sodass etwas, das in die Datei geschrieben wird, an das Ende der Datei dran gehangen wird.
92+
Beim Anhängen an eine Datei wird beim Öffnen der Datei der Zeiger auf das Dateiende gelegt, sodass etwas, das in die Datei geschrieben wird, an das Ende der Datei dran gehangen wird.
9793

9894
``` python
9995
content = 100*"spam\n"
@@ -104,5 +100,4 @@ file_object.close()
104100
```
105101

106102
Ebenso wie beim Schreiben, wird die Datei erstellt, sollte sie nicht vorhanden sein.
107-
Das Verhalten der Methoden `writeline()`und `writeline()`ist in diesem Modus analog zu ihrem
108-
Verhalten im Schreiben Modus.
103+
Das Verhalten der Methoden `writeline()`und `writeline()`ist in diesem Modus analog zu ihrem Verhalten im Schreiben Modus.

Level4_Aufgaben.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Schreibe ein Programm, dass seinen Quellcode ausgibt.
1717

1818
* einen Integer `n` einliest,
1919
* die Häufigkeitstabelle der Buchstaben aus der, zuvor erstellten, Datei `chars.txt`einliest,
20-
* die `n` häufigsten und die `n` seltesten Buchstaben ausgibt.
20+
* die `n` häufigsten und die `n` seltenen Buchstaben ausgibt.
2121

2222
### c)
2323
**Schreibe ein Programm, dass:**

Level5.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Nun wollen wir unsere Funktion ein wenig aufpeppen, indem wir ihr einen Paramete
3535
``` python
3636
>>> def new_print(text):
3737
... print(text)
38-
...
38+
...
3939
>>> inp_text = input("Eingabe: ")
4040
Testeingabe
4141
>>> new_print(inp_text)
@@ -68,7 +68,7 @@ Diese Unterscheidung ist sehr wichtig, da die Verwendung von mehreren Parametern
6868
``` python
6969
>>> def diff(a, b):
7070
... return a - b
71-
...
71+
...
7272
>>> print(5, 3)
7373
2
7474
>>> print(3, 5)
@@ -80,9 +80,9 @@ Nun möchte ich aber einer Funktion eine beliebige Anzahl an Parametern übergeb
8080

8181
``` python
8282
>>> def string_add(*elemente):
83-
... result = ""
83+
... result = ""
8484
... for e in elemente:
85-
... result += str(e)
85+
... result += str(e)
8686
... return result
8787
...
8888
>>> print( string_add(0, 1, "test"))
@@ -95,7 +95,7 @@ Das `*elemente` steht dabei für ein Tupel und kann innerhalb der Funktion als T
9595
... for summand in more_summands:
9696
... result += summand
9797
... return result
98-
...
98+
...
9999
>>> print( add_int(1, 5, 6) )
100100
12
101101
```
@@ -116,7 +116,7 @@ Es ist auch möglich, eine beliebige Anzahl von keyword arguments zu benutzen. D
116116
>>> def fun(**kwargs):
117117
... print(kwargs.keys())
118118
... print(kwargs.values())
119-
...
119+
...
120120
>>> fun(test1 = "foo", test2 = "test")
121121
dict_keys(['test1', 'test2'])
122122
dict_values(['foo', 'test'])

Rekursion_Vs._Iteration.md

Lines changed: 17 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,22 @@
11
# Rekursion Vs. Iteration
22
## Einleitung
3-
Zum Anfang betrachten wir, was genau Rekursion ist. Im Grunde ist Rekursion
4-
nämlich nur ein Sprachfeature, dass eine Funktion sich selber aufrufen kann.
5-
Jedoch ist eine Programmiersprache auch ohne Rekursion Turing komplett, d.h. ich
6-
kann jedes Programm auch ohne Rekursion implementieren. Das wird unter anderem
7-
dadurch deutlich, dass eine rekursive Funktion beim Übersetzen in Maschinencode
8-
als Schleife ausgeführt wird. Zusammenfassend kann man also sagen:
3+
Zum Anfang betrachten wir, was genau Rekursion ist. Im Grunde ist Rekursion nämlich nur ein Sprachfeature, dass eine Funktion sich selber aufrufen kann. Jedoch ist eine Programmiersprache auch ohne Rekursion Turing komplett, d.h. ich kann jedes Programm auch ohne Rekursion implementieren. Das wird unter anderem dadurch deutlich, dass eine rekursive Funktion beim Übersetzen in Maschinencode als Schleife ausgeführt wird. Zusammenfassend kann man also sagen:
94

105
> Alles was sich iterativ implementieren lässt, lässt sich auch rekursiv
116
> implementieren und anders herum.
127
13-
Rekursion bietet sich an, da viele Algorithmen rekursiv definiert sind und daher
14-
rekursiv leichter zu implementieren sind als iterativ. Damit ist jedoch nicht
15-
gesagt, dass die rekursive Implementierung die effizientere ist.
16-
Ein einfaches Beispiel dafür sind die Fibonacci-Zahlen.
8+
Rekursion bietet sich an, da viele Algorithmen rekursiv definiert sind und daher rekursiv leichter zu implementieren sind als iterativ. Damit ist jedoch nicht gesagt, dass die rekursive Implementierung die effizientere ist. Ein einfaches Beispiel dafür sind die Fibonacci-Zahlen.
179

1810
## Die Fibonacci-Zahlen
19-
Die Fibonacci-Zahlen tauchen in der Natur auf und sind eine relativ schnell
20-
wachsende Zahlenfolge, die folgendermaßen definiert ist:
11+
Die Fibonacci-Zahlen tauchen in der Natur auf und sind eine relativ schnell wachsende Zahlenfolge, die folgendermaßen definiert ist:
2112
```
2213
fib(0) = 1
2314
fib(1) = 1
2415
fib(n) = fib(n-2) + fib(n-1)
2516
```
2617
### Einfache rekursive Implementierung
2718

28-
Die Definition ist eindeutig rekursiv, folglich wäre der simpelste Ansatz diese
29-
Zahlenfolge zu implementieren die folgende:
19+
Die Definition ist eindeutig rekursiv, folglich wäre der simpelste Ansatz diese Zahlenfolge zu implementieren die folgende:
3020
``` python
3121
def fibR(n): # Fibonacci Rekursiv
3222
if n == 0 or n == 1:
@@ -37,13 +27,14 @@ def fibR(n): # Fibonacci Rekursiv
3727
### Probleme
3828

3929
Dieser Code funktioniert, ist leicht zu lesen hat aber einige Nachteile:
30+
4031
#### Rekursionslimit
41-
Der Rekursion ist ein Limit gesetzt, weshalb der Code bei größeren Zahlen in
42-
einen `RecursionError`laufen wird. In diesem Fall passiert dies schon sehr früh,
43-
weil es zwei rekursive Aufrufe in der Funktion gibt.
32+
33+
Der Rekursion ist ein Limit gesetzt, weshalb der Code bei größeren Zahlen in einen `RecursionError`laufen wird. In diesem Fall passiert dies schon sehr früh, weil es zwei rekursive Aufrufe in der Funktion gibt.
34+
4435
#### Laufzeit
45-
Das weitaus größere Problem ist die Laufzeit, denn dadurch, dass fibR(n-2) und
46-
fibR(n-1) aufgerufen werden, wird fibR() immer häufiger aufgerufen:
36+
37+
Das weitaus größere Problem ist die Laufzeit, denn dadurch, dass fibR(n-2) und fibR(n-1) aufgerufen werden, wird fibR() immer häufiger aufgerufen:
4738
```
4839
n = 5
4940
fibR(5) wird 1 mal aufgerufen
@@ -53,15 +44,12 @@ fibR(2) wird 3 mal aufgerufen
5344
fibR(1) wird 5 mal aufgerufen
5445
fibR(0) wird 8 mal aufgerufen
5546
```
56-
Wenn man sich die Anzahl der Aufrufe genau anschaut, stellt man fest dass es
57-
sich um die Fibonaccifolge handelt. Die rekursive Implementation berechnet also
58-
ihre eigene Laufzeit. Da die Fibonaccifolge aber relativ schnell wächst, wächst
59-
auch die Laufzeit relativ schnell.
47+
Wenn man sich die Anzahl der Aufrufe genau anschaut, stellt man fest dass es sich um die Fibonaccifolge handelt. Die rekursive Implementation berechnet also ihre eigene Laufzeit. Da die Fibonaccifolge aber relativ schnell wächst, wächst auch die Laufzeit relativ schnell.
6048

6149
### Lösung
62-
Da jeder Algorithmus sowohl rekursiv, als auch iterativ implementiert werden
63-
kann und die rekursive Implementation Probleme aufwies, versuchen wir jetzt die
64-
Fibonacci Folge iterativ zu implementieren:
50+
51+
Da jeder Algorithmus sowohl rekursiv, als auch iterativ implementiert werden kann und die rekursive Implementation Probleme aufwies, versuchen wir jetzt die Fibonacci Folge iterativ zu implementieren:
52+
6553
```
6654
def fibI(n): # Fibonacci Iterativ
6755
last = 1
@@ -70,13 +58,8 @@ def fibI(n): # Fibonacci Iterativ
7058
current, last = current + last, current
7159
return current
7260
```
73-
Diese Funktion implementiert die Folge iterativ, läuft daher nicht in einen
74-
`RecursionError` benötigt `n` Durchläufe der Schleife, ist also deutlich
75-
schneller als die rekursive Implementierung.
61+
62+
Diese Funktion implementiert die Folge iterativ, läuft daher nicht in einen `RecursionError` benötigt `n` Durchläufe der Schleife, ist also deutlich schneller als die rekursive Implementierung.
7663

7764
### Fazit
78-
Die beiden gezeigten Implementierungen eines einfachen Problems, waren ungefähr
79-
gleich komplex, haben sich aber in der Laufzeit stark unterschieden.
80-
Beide Möglichkeiten der Implementation haben jedoch ihre Vorzüge, weshalb im
81-
Einzelfall entschieden werden muss, mit welcher Methode ein Algorithmus
82-
implementiert wird.
65+
Die beiden gezeigten Implementierungen eines einfachen Problems, waren ungefähr gleich komplex, haben sich aber in der Laufzeit stark unterschieden. Beide Möglichkeiten der Implementation haben jedoch ihre Vorzüge, weshalb im Einzelfall entschieden werden muss, mit welcher Methode ein Algorithmus implementiert wird.

0 commit comments

Comments
 (0)