Direkt zum Inhalt

BPE 7 · J2

Arrays systematisch auswerten

Aus einzelnen Zugriffen werden vollständige Durchläufe: Du summierst, zählst, filterst und bestimmst Extremwerte.

Bildungsplanbezug: BPE 7.1 · interne Lerneinheit 7.1.2

Geschätzte Lernzeit: 55 Minuten

Noch nicht begonnen

Das kannst du danach

  • Eine Folge vollständig durchlaufen
  • Akkumulatoren passend initialisieren
  • Leere Eingaben und negative Werte behandeln
  • Zwischenergebnisse mit einer Schleifeninvariante erklären

Verständlich erklärt

Ein vollständiger Durchlauf verarbeitet jedes Element genau einmal. Für eine Summe startet der Akkumulator bei 0; nach jedem Schritt enthält er die Summe der bereits verarbeiteten Elemente. Diese Aussage ist eine Schleifeninvariante: Sie bleibt an der festgelegten Stelle jedes Schleifendurchlaufs wahr. Ein Zähler beginnt ebenfalls bei 0 und wird nur erhöht, wenn eine Bedingung zutrifft.

Für das Minimum einer nichtleeren Folge eignet sich das erste Element als Startwert; eine künstliche 0 scheitert zum Beispiel bei ausschließlich positiven Werten. Beim Maximum scheitert ein Startwert 0 bei ausschließlich negativen Werten. Für eine leere Liste verlangen unsere Extremwert- und Mittelwertaufgaben None: Es gibt dort keinen solchen Zahlenwert. Der Mittelwert ist Summe geteilt durch Anzahl, also nur bei positiver Anzahl definiert.

Ein Filter legt eine neue Ergebnisliste an und übernimmt passende Werte mit append in ursprünglicher Reihenfolge, einschließlich Wiederholungen. x % 2 == 0 erkennt gerade ganze Zahlen, auch 0 und negative gerade Zahlen. return beendet die gesamte Funktion, nicht nur einen Schleifendurchlauf; gib das Endergebnis erst nach dem vollständigen Durchlauf zurück.

  • Durchlauf
  • Akkumulator
  • Zähler
  • Extremwert
  • Filter
  • Schleifeninvariante

Beispiel

daten = [5, -2, 5]
summe = 0
for wert in daten:
    summe += wert
# Akkumulator nach den Schritten: 5, 3, 8
# Mittelwert: 8 / 3
positiv = []
for wert in daten:
    if wert > 0:
        positiv.append(wert)
# positiv: [5, 5]; daten bleibt unverändert

Typische Fehler

  • Extremwerte pauschal mit 0 initialisieren
  • Bei leerer Folge durch 0 teilen
  • return innerhalb der Schleife zu früh ausführen
  • Beim Filtern Duplikate oder die ursprüngliche Reihenfolge verlieren

Kurz zusammengefasst

Startwert, Aktualisierung und Rückgabe gehören zusammen. Eine klare Invariante erklärt, warum das Ergebnis auch für Randfälle stimmt.

Abi-Bezug

Führe eine Wertetabelle für Akkumulator und Index. Begründe die Initialisierung und benenne die vereinbarte Behandlung leerer Eingaben.

Jetzt selbst ausprobieren

Prüfe deine Lösung automatisch. Bei Bedarf helfen dir ein Tipp und anschließend die Musterlösung.

BPE 7J21 Punkteleicht

Eine Summe protokollieren

Noch nicht begonnen

Aufgabenstellung

Ein Akkumulator startet bei s = 0. Die Werte [3, -2, 5] werden von links nach rechts jeweils mit s += wert addiert. Welche Zahl enthält s am Ende? Antworte nur mit der Zahl.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Starte mit 0 und addiere wirklich jedes Element einmal.
  2. Nach 3 und −2 steht der Akkumulator bei 1; danach kommt noch 5.
Lösung anzeigen
Die Zwischenstände sind 3, 1 und 6. Das negative Element verringert die Summe, wird aber nicht übersprungen.
BPE 7J21 Punkteleicht

Maximum ohne künstliche Null

Noch nicht begonnen

Aufgabenstellung

Für a = [-4, -1, -7] startet maximum = a[0]. Für jeden weiteren Wert wird nur bei wert > maximum ersetzt. Welches Maximum wird zurückgegeben? Antworte nur mit der Zahl.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Bei negativen Zahlen ist die näher an 0 liegende Zahl größer.
  2. 0 kommt in dieser Liste nicht vor und darf nicht als angeblich gefundenes Maximum gelten.
Lösung anzeigen
Der Startwert ist −4. −1 ist größer und ersetzt ihn; −7 ist kleiner und ändert nichts. Ergebnis: −1.
BPE 7J22 Punktemittel

Eine Summe mit Akkumulator bilden

Noch nicht begonnen

Aufgabenstellung

Implementiere summe(a) für eine Liste ganzer Zahlen mit einem Durchlauf und Akkumulator. Für [] gilt Ergebnis 0. Die Eingabe bleibt unverändert.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. 0 ist der passende Startwert, weil die Addition damit noch keinen Wert beiträgt.
  2. return gehört hinter die Schleife; sonst werden spätere Elemente nicht mehr addiert.
Lösung anzeigen
def summe(a):
    gesamt = 0
    for wert in a:
        gesamt += wert
    return gesamt
BPE 7J22 Punktemittel

Werte oberhalb einer Grenze zählen

Noch nicht begonnen

Aufgabenstellung

anzahl_groesser(a, grenze) zählt die Werte, die streng größer als grenze sind. Gleiche Werte zählen nicht. Jede passende Position zählt, auch bei Wiederholungen. Eingabe unverändert lassen.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Der Zähler steigt um 1, nicht um den Wert selbst.
  2. Die Grenze ist ausgeschlossen: Verwende >, nicht >=.
Lösung anzeigen
def anzahl_groesser(a, grenze):
    anzahl = 0
    for wert in a:
        if wert > grenze:
            anzahl += 1
    return anzahl
BPE 7J22 Punktemittel

Ein Minimum mit definiertem Leerfall

Noch nicht begonnen

Aufgabenstellung

minimum(a) liefert den kleinsten Zahlenwert, bei leerer Liste None. Initialisiere bei nichtleerer Eingabe mit einem vorhandenen Wert und durchlaufe die Liste. Eingabe nicht verändern.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Prüfe den Leerfall, bevor du a[0] liest.
  2. Ein Startwert 0 wäre bei [8, 3, 6] falsch, weil 0 gar nicht vorkommt.
Lösung anzeigen
def minimum(a):
    if len(a) == 0:
        return None
    kleinster = a[0]
    for wert in a:
        if wert < kleinster:
            kleinster = wert
    return kleinster
BPE 7J22 Punktemittel

Einen Mittelwert berechnen

Noch nicht begonnen

Aufgabenstellung

mittelwert(a) liefert die Summe der Zahlen geteilt durch ihre Anzahl. Bei [] liefere None. Verwende normale Division /, keine Ganzzahldivision. Die Eingabe bleibt unverändert.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Für eine leere Liste ist die Anzahl 0; beende diesen Fall vor der Division.
  2. Berechne erst die vollständige Summe und teile dann durch len(a).
Lösung anzeigen
def mittelwert(a):
    if len(a) == 0:
        return None
    gesamt = 0
    for wert in a:
        gesamt += wert
    return gesamt / len(a)
BPE 7J23 Punkteanspruchsvoll

Gerade Werte in Reihenfolge übernehmen

Noch nicht begonnen

Aufgabenstellung

filter_gerade(a) liefert eine neue Liste aller geraden ganzen Zahlen aus a. Behalte Reihenfolge und Wiederholungen. Auch 0 und negative gerade Zahlen gehören dazu. Eingabe nicht verändern.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Die Bedingung wert % 2 == 0 erkennt auch 0 und negative gerade Zahlen.
  2. Hänge Treffer beim Durchlauf direkt an; Sortieren oder eine Menge würden die geforderte Folge verändern.
Lösung anzeigen
def filter_gerade(a):
    ergebnis = []
    for wert in a:
        if wert % 2 == 0:
            ergebnis.append(wert)
    return ergebnis
BPE 7J23 Punkteanspruchsvoll

Was eine Summeninvariante aussagt

Noch nicht begonnen

Aufgabenstellung

Eine Schleife hat die ersten k Elemente einer Zahlenliste addiert; der Akkumulator begann bei 0. Welche Aussagen gelten direkt nach diesen k Schritten? Wähle alle richtigen Antworten.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Eine Invariante beschreibt den erreichten Zwischenstand, nicht vorzeitig das fertige Ergebnis.
  2. Teste die Behauptung „immer größer“ mit einem negativen nächsten Element.
Lösung anzeigen
Der Akkumulator beschreibt genau den verarbeiteten Präfix. Für k = 0 ist dieser leer; bei negativen Elementen kann die Summe sinken.

Lektionsabschluss

Bearbeite Aufgaben, um deine Auswertung zu sehen.