Hallo,
ich habe ein paar Probleme bei der implementation eines Punktezählers. Zu meinem Experiment: Die Versuchspersonen sollen ein Quiz mit 18 Fragen beantworten, wovon 14 single choice Aufgaben darstellen (QE01-QE11, QE15-QE17) und 4 offene Aufgaben sind (CX01-CX04). Die Fragen sollen in 3 Blöcken mit jeweils 6 Fragen präsentiert werden, vor denen in jedem Block jeweils eine von 3 Instruktionen kommt (also hat man am Ende des Experiments alle 3 Instruktionen gesehen, die die Stufen des within-Faktors Anreiz darstellen). Die Reihenfolge der Instruktionen sind randomisiert und auch die Fragen sind über die Blöcke hinweg randomisiert. Dies habe ich gelöst, indem ich jede Frage auf eine Seite platziert habe und die Seiten so randomisiert habe, dass immer eine Instruktionsseite und dann 6 Fragen-Seiten präsentiert werden. Außerdem gibt es im Rahmen einer Between-Bedingung 2 "sets" von Instruktionen Nun würde ich gerne den Probanden nach jedem Block mitteilen, wie viele der 6 Fragen dieses Blocks richtig beantwortet wurden. Ich habe es mit der "Punkte für Antworten Zählen"-Seite geschafft, die Punkte für alle Fragen am Ende zu zählen, wenn ich den Code allerdings an das Ende eines Blockes stelle, dann bekomme ich Fehlermeldungen, da die Antwort der noch nicht beantworteten Fragen noch nicht vorliegt. Das Hauptproblem ist dabei, dass ich erst ermitteln muss, welche Fragen in welchem Block gezeigt wurden und dann müssen entsprechend der Seiten die Fragen bepunktet werden. Wie kann ich also nach jeweils 6 randomisierten Fragen einen Punktestand für genau diese Fragen berichten?
Hier ein Code Beispiel für die Randomisierung der Seiten und Instruktionen, wobei RM01 die Between-Bedingung (Individual vs Competition) zuteilt, RM03 die Abfolge der Instruktionen in set 1, RM04 die Abfolge der Instruktionen in set 2 und RM06 die Seitenabfolge und somit die Abfolge der Fragen:
// Instruktionen für Individual
if (value('RM01') == 1) {
// RM03 wird gezogen
show('RM03');
// Zufällige 1. Darbietung der Stufen des Faktors Anreiz
$withinindv1 = valueList('RM03', [1], 'label');
foreach ($withinindv1 as $kennung) {
text($kennung);
}
}
//Instruktionen für Competition
elseif (value('RM01') == 2) {
// RM04 wird gezogen
show('RM04');
// Zufällige 1. Darbietung der Stufen des Faktors Anreiz
$withincomp1 = valueList('RM04', [1], 'label');
foreach ($withincomp1 as $kennung) {
text($kennung);
}
}
question('RM06'); // Zettel in zufälliger Reihenfolge ziehen
$pages = valueList('RM06', [1, 2, 3, 4, 5, 6], 'label'); // Gezogene Zettel auslesen
setPageOrder($pages, 'INS02'); // Seiten als Seitenabfolge definieren
-> Ähnliche Codes habe ich noch 2 weitere Male, in denen bei $pages die restlichen Seiten angezeigt werden und die anderen Instruktionen dargeboten werden.
Nun hier die aktuelle Punktezähler-Seite, die ich gerne so abändern würde, dass ich nach einem Block die Rückmeldung für die Punktzahl in genau diesem Block rückmelde:
// Definition der Fragen und der korrekten Antworten
$fragen = [
'QE01' => 3,
'QE02' => 2,
'QE03' => 1,
'QE04' => 2,
'QE05' => 2,
'QE06' => 3,
'QE07' => 2,
'QE08' => 1,
'QE09' => 2,
'QE10' => 5,
'QE11' => 4,
'QE15' => 1,
'QE16' => 2,
'QE17' => 4,
'CX01_01' => "5",
'CX02_01' => "47",
'CX03_01' => "4",
'CX04_01' => "29"
];
// Initialisierung einer Zähler-Variable
$points1 = 0;
// Prüfung aller Fragen in einer Schleife
foreach ($fragen as $variable=>$correct) {
// Die Antwort des Teilnehmers abrufen
$answer = value($variable);
// Überprüfen und ggf. einen Punkt zählen
if ($answer == $correct) {
$points1++; // Gleichbedeutend mit $points = $points + 1
}
}
// Das Ergebnis anzeigen ...
html('<p>You have now completed the quiz questions. Overall, you have answered '.$points1.' questions correctly. Please proceed by clicking the next button.</p>');
Ich hoffe die Darstellung der Studie und des Problems war verständlich. Ich freue mich über eine Antwort und Danke für Ihre Hilfe!