Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Station - Wiederholte Abläufe

Das Begüßungsproblem

Kira und Kari werden demnächst 18 Jahre alt. Alle ihre Freunde sollen zu einer riesigen Fete kommen. Damit alle sich kennenlernen, soll jeder jeden erst einmal begrüßen.

Kira: "Das kann lange dauern. Ich habe insgesamt 63 Personen eingeladen."

Kari: "Bei mir kommen nochmal 48 Personen dazu. Mit uns beiden sind wir dann 113 Personen. Hoffentlich ist die Fete nicht vorbei, wenn alle sich begrüßt haben."

Begrüßungen

Aufgabe 1

(a) Bestimme die Anzahl der Begrüßungen, wenn 6 Personen sich zu einer Fete treffen.

(b) Wenn man die Anzahl der Begrüßungen bei 113 Personen bestimmen möchte, dann braucht man hierzu eine Strategie, z.B.: Angenommen, die 113 Personen kommen alle der Reihe nach zur Fete. Die 1. Person muss niemanden begrüßen, die 2. Person muss nur eine Person begrüßen, die 3. Person muss dann 2 Personen begrüßen, die 4. Person muss schon 3 Personen begrüßen usw..". Wie könnte man nach dieser Strategie die gesuchte Anzahl berechnen?

Wiederholte Abläufe

Die Berechnungen zum Begrüßungsproblem sollen automatisiert werden. Ein erster Lösungsansatz könnte so aussehen:

# Initialisierung der Variablen
zaehlerPersonen = 0
summeBegruessungen = 0
# Person 1 kommt zur Fete
zaehlerPersonen = zaehlerPersonen + 1
summeBegruessungen = summeBegruessungen + (zaehlerPersonen-1)
# Person 2 kommt zur Fete
zaehlerPersonen = zaehlerPersonen + 1
summeBegruessungen = summeBegruessungen + (zaehlerPersonen-1)
# Person 3 kommt zur Fete
zaehlerPersonen = zaehlerPersonen + 1
summeBegruessungen = summeBegruessungen + (zaehlerPersonen-1)
# Person 4 kommt zur Fete
zaehlerPersonen = zaehlerPersonen + 1
summeBegruessungen = summeBegruessungen + (zaehlerPersonen-1)
# Person 5 kommt zur Fete
zaehlerPersonen = zaehlerPersonen + 1
summeBegruessungen = summeBegruessungen + (zaehlerPersonen-1)
# Person 6 kommt zur Fete
zaehlerPersonen = zaehlerPersonen + 1
summeBegruessungen = summeBegruessungen + (zaehlerPersonen-1)
# Ausgabe
print('Anzahl der Begruessungen:', summeBegruessungen)

Aufgabe 2

(a) Warum berechnet die oben gezeigte Anweisungsfolge die gesuchte Anzahl von Begrüßungen? Warum ist es geschickt, die Berechnungen wie im gezeigten Programm nicht mit konkreten Zahlen, sondern allgemein mit Variablen anzulegen?

(b) Wie müsste man das Programm ergänzen, um das Begrüßungsproblem für 113 Personen zu lösen? Welche Nachteile hätte ein solches Programm?

Ablaufmodellierung

Der wiederholte Ablauf der Berechnungen lässt sich sehr gut mit einem Flussdiagramm verdeutlichen:

Flussdiagramm

Mit einem Struktogramm kann man die die Ablauflogik weiter strukturieren.:

Struktogramm

Aufgabe 3

Erläutere die Diagramme. Begründe exemplarisch mit einer Trace-Tabelle, warum sie ein Verfahren zur Bestimmung der Anzahl der Begrüßungen korrekt beschreiben.

Anweisung/Bedingung anzahlPersonen zaehlerPersonen summeBegruessungen
Eingabe: anzahlPersonen 3    
setze zaehlerPersonen auf 0      
setze summeBegruessungen auf 0      
zaehlerPersonen < anzahlPersonen: True      
erhöhe zaehlerPersonen um 1      
erhöhe summeBegruessungen um (zaehlerPersonen-1)      
zaehlerPersonen < anzahlPersonen: ...      
erhöhe zaehlerPersonen um 1      
erhöhe summeBegruessungen um (zaehlerPersonen-1)      
zaehlerPersonen < anzahlPersonen: ...      
erhöhe zaehlerPersonen um 1      
erhöhe summeBegruessungen um (zaehlerPersonen-1)      
zaehlerPersonen < anzahlPersonen: ...      
Ausgabe: summeBegruessungen      

Implementierung des Verfahrens

Das beschriebene Verfahren lässt sich mit einer while-Anweisung implementieren:

# Eingabe
anzahlPersonen  = int(input('Anzahl der Personen: '))
# Verarbeitung
zaehlerPersonen = 0
summeBegruessungen = 0
while zaehlerPersonen < anzahlPersonen:
    zaehlerPersonen = zaehlerPersonen + 1
    summeBegruessungen = summeBegruessungen + (zaehlerPersonen-1)
# Ausgabe
print('Anzahl der Begruessungen:', summeBegruessungen)

Aufgabe 4

(a) Teste das Programm mit verschiedenen Eingaben. Überprüfe, ob die ausgegebenen Ergebnisse stimmen.

(b) Vergleiche das Programm mit den oben gezeigten Diagrammen. Erläutere die Entsprechungen.

Aufgabe 5

Bei der Fete von Kira und Kari kam es zu insgesamt 3741 Begrüßungen. Wie viele Personen waren zur Fete gekommen?

(a) Wie muss man das Verfahren / Programm abändern, um das neue Problem zu lösen?

(b) Was ist, wenn jemand die Anzahl der Begrüßungen falsch gezählt hat (z.B. 3739 statt 3741)? Welche Schwierigkeiten könnten beim Durchlaufen der Schleife auftreten? Wie könnte man sie lösen?

X

Fehler melden

X

Suche