i

Rekursive Verarbeitung

Die Häufigkeit einer Note bestimmen

Wie oft kommt eine Note in einer Notenliste vor? Es gibt keine vordefinierte Listenfunktion, mit der man diese Frage direkt bearbeiten kann. Zur Klärung werden wir daher selbst eine geeignete Funktion entwickeln. Hier eine Modellierung einer hierfür vorgesehenen Funktion anzahl:

Signatur:
anzahl: Int -> List Int -> Int
Beispiele:
anzahl 7 [14,7,12,10,15,4,8,13,10,7,5,2,9,9,12] -> 2
anzahl 1 [14,7,12,10,15,4,8,13,10,7,5,2,9,9,12] -> 0

Aufgabe 1

Zur Konzeption der Funktion anzahl verwenden wir Rekursion. Erkläre die folgenden Reduktionsregel

Rekursionsanfang:

anzahl 7 [] -> 0

Rekursionsschritt - Fall 1:

anzahl 7 [14,7,12,10,15,4,8,13,10,7,5,2,9,9,12] -> 0 + (anzahl 7 [7,12,10,15,4,8,13,10,7,5,2,9,9,12])

Rekursionsschritt - Fall 2:

anzahl 7 [7,12,10,15,4,8,13,10,7,5,2,9,9,12] -> 1 + (anzahl 7 [7,12,10,15,4,8,13,10,7,5,2,9,9,12])

Aufgabe 2

Bei der Implementierung der Reduktionsregeln zur Funktion anzahl verwenden wir Mustervorgaben. Erkläre alle Deitail der folgende Funktionsdefinition. Teste sie anschließend mit geeigneten Funktionsaufrufen.

module Notenliste exposing (..)

anzahl: Int -> List Int -> Int
anzahl element liste =
    case liste of
        [] -> 
            0
        erstes :: restliste ->
            (if element == erstes then 1 else 0) + anzahl element restliste 

Die Häufigkeit mehrerer Note bestimmen

Wie oft kommt eine Note aus einem vorgegebenen Notenbereich in einer Notenliste vor? Ziel ist es, die Berechnung mit einer hierfür geeigneten Funktion haeufigkeit durchzuführen:

Signatur:
haeufigkeit: List Int -> List Int -> Int
Beispiele:
haeufigkeit [6,7,8] [14,7,12,10,15,4,8,13,10,7,5,2,9,9,12] -> 3
haeufigkeit [0] [14,7,12,10,15,4,8,13,10,7,5,2,9,9,12] -> 0

Wir verwenden dabei eine vordefinierte Funktion, mit der man überprüfen kann, ob ein Datenwert in einer Liste als Element vorkommt.

> import Notenliste exposing (..)
> notenliste
[14,7,12,10,15,4,8,13,10,7,5,2,9,9,12]
    : List Int
> List.member 7 notenliste
True : Bool
> List.member 6 notenliste
False : Bool

Aufgabe 3

Entwickle eine Funktionsdefinition für die Funktion haeufigkeit. Du kannst diese Funktion analog zur Funktion anzahl implementieren.

Eine Häufigkeitsverteilung bestimmen

Meist will man eine Übersicht erstellen, aus der hervorgeht, wie oft welche Note in der Notenliste vorkommt. Ziel ist es, die Bestimmung einer solchen Übersicht mit einer Funktion verteilung durchzuführen:

Signatur:
verteilung: List Int -> List Int -> List ( Int, Int )
Beispiele:
> verteilung [15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0] [14,7,12,10,15,4,8,13,10,7,5,2,9,9,12] ->
[(15,1),(14,1),(13,1),(12,2),(11,0),(10,2),(9,2),(8,1),(7,2),(6,0),(5,1),(4,1),(3,0),(2,1),(1,0),(0,0)]

Aufgabe 4

Entwickle eine Funktionsdefinition für die Funktion verteilung.

Suche

v
110.2.9.1.1.4
inf-schule.de/fp_elm_alteversion/elm_programme/listen/notenliste/lernstrecke/verarbeitenrekursiv
inf-schule.de/110.2.9.1.1.4
inf-schule.de/@/page/xZXiL92xJS9b4gX0

Rückmeldung geben