Nutzung von Records
Schulexperiment zur Lernwirksamkeit
Wissenschaftler:innen beschäftigen sich ständig damit, Lernprozesse und Unterrichtsmethoden zu verbessern. Ein Forschungsteam möchte herausfinden, ob Schüler:innen das Prinzip von Logikgattern besser verstehen, wenn sie elektronische Schaltkreise selbst bauen oder diese stattdessen am Computer simulieren.
Dafür nehmen Schüler:innen unterschiedlichen Alters an einer Studie teil. Sie werden in zwei Gruppen aufgeteilt: Eine Gruppe arbeitet mit elektronischen Bauteilen und baut die Schaltungen praktisch auf, die andere nutzt eine Simulationssoftware am Rechner.
Vier der teilnehmenden Schüler:innen findest du in der folgenden Liste:
Name | Alter | Gruppe |
---|---|---|
Tan | 14 | elektronische Bauteile |
Mira | 16 | elektronische Bauteile |
Ozan | 17 | Simulationssoftware |
Caro | 15 | Simulationssoftware |
Aufgabe 1: Schüler:innen als Records
schueler
in Racket an:
(define-record schueler
make-schueler
(schueler-name string)
(schueler-alter natural)
)
(a) Übertrage den obigen Record in deine Racket-Datei.
Führe anschließend die untenstehenden REPL Aufrufe an.
Finde die REPL‑Eingabe im Record schueler
.
Welche REPL‑Ausgaben erhältst du für die jeweiligen Eingaben?
> schueler
> make-schueler
> schueler-name
> schueler-alter
Für die Wissenschaftler:innen ist es rechtlich wichtig zu wissen, welche der
Teilnehmenden noch unter 16 Jahre alt sind, da für diese die Erziehungsberechtigten
einen extra Zettel ausfüllen müssen. Sie schreiben daher die Funktion
mind16?
die angibt ob die Schüler:innen bereits 16 sind oder nicht.
;Überprüft ob ein:e Schueler:in mindestens 16 Jahre alt ist
(: mind16? (schueler -> boolean))
(check-expect (mind16? (make-schueler "Tan" 14)) #f)
(check-expect (mind16? (make-schueler "Mira" 16)) #t)
(define mind16?
(lambda (s)
(if [>= (schueler-alter s) 16] #t #f)
))
(b) Übertrage den obigen Record in deine Racket-Datei. An welchen Stellen findest du die in Aufgabe (a) genutzten Eingaben?
Finde anhand der Funktion mind16?
und des Records schueler
heraus
wie die Signaturen der folgenden Funktionen lauten:
make-schueler
schueler-name
schueler-alter
Da die Erziehungsberechtigten der unter 16-Jährigen noch einen extra Zettel ausfüllen müssen,
wollen die Wissenschaftler:innen eine Funktion schreiben die den Namen der übergebenen Schüler:innen
zurückliefert wenn diese:r unter 16 Jahren ist, ansonsten soll einfach ein leerer String zurückgegeben werden.
(c) Schreibe die Funktionen name-unter16
die die beschriebene Funktionalität liefert.
Die Funktion soll unter anderem die folgenden Tests bestehen:
(check-expect (name-unter16 (make-schueler "Tan" 14)) "Tan")
(check-expect (name-unter16 (make-schueler "Mira" 16)) "")
(check-expect (name-unter16 (make-schueler "Caro" 15)) "Caro")
Aufgabe 2: Name
Neben Name und Alter wollen die Wissenschaftler:innen in den Records zudem abbilden ob der:die Schüler:in in der Gruppe ist, die mit elektronischen Bauteilen arbeitet oder mit der Simulationssoftware.
(a) Ergänze die Record-Definition so, dass neben Alter und Name auch die Gruppe gespeichert wird.
Da wir genau zwei Gruppen haben, soll der Eintrag #t
sein, wenn der:die Schüler:in in der
Gruppe ist die mit elektronischen Bauteilen arbeitet und #f
wenn nicht.
Überprüfe dein Ergebnis mit folgendem Ausdruck:
> (make-schueler "Ozan" 17 #f)
Um zu überprüfen wie wirksam die beiden Unterrichtsmethoden sind, sollen die Schüler:innen
jeweils einen Test vor dem Unterricht (Pretest) und einen nach dem Unterricht (Posttest) schreiben.
In beiden Tests gibt es maximal 100 Punkte zu erzielen. Der Unterschied zwischen den beiden Tests soll
den Lernerfolg der Teilnehmenden darstellen.
Dabei werden die folgenden Punkte erzielt:
Name | Alter | Gruppe | Pretest | Posttest |
---|---|---|---|---|
Tan | 14 | elektronische Bauteile | 44 | 76 |
Mira | 16 | elektronische Bauteile | 34 | 74 |
Ozan | 17 | Simulationssoftware | 29 | 81 |
Caro | 15 | Simulationssoftware | 95 | 94 |
Für die Testergebnisse möchten die Wissenschaftler:innen einen weiteren Record erstellen.
Der Record testerg
soll dabei zwei Werte beinhalten, einen für den Pre- und einen für den
Posttest. Zudem sollen der Record schueler
um einen weiteren Wert, den der Testergebnisse, erweitert
werden.
(b) Definiere den Record testerg
und erweitere den Record schueler
entsprechend der obigen
Beschreibung.
Überprüfe dein Ergebnis mit folgendem Ausdruck:
> (make-schueler "Caro" 15 #f (make-testerg 95 94))
(c) Schreibe abschließend eine Funktion test-diff
die die Differenz der Testergebnisse für
die Schüler:innen ausrechnet.
Teste deine Funktion mit den Records der vier Schüler:innen Tan, Mira, Ozan und Caro.