i

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

Neue Datei - records.rkt
Um einen Überblick über die teilnehmenden Schüler:innen behalten zu können und die Daten der Schüler:innen anschließend verarbeiten zu können wollen die Wissenschaftler:innen Racket verwenden. Der Name der Schüler:innen soll gemeinsam mit dem Alter in einem Datum gespeichert werden. Hierfür legen sie den Record 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

Bestehende Datei - records.rkt

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.

Suche

v
100.137.2.3.1 Nutzung von Records
Kopieren durch Anklicken

Rückmeldung geben