Liebes SoSci-Team,
ich möchte für eine Studie 14 Seiten ('OP1' bis 'OP14') rotieren, auf denen sich jeweils ein Hörbeispiel und die dazugehörige Frage befinden. Die Schwierigkeit ist, dass einige Kombinationen ausgenommen werden sollen, da sich die Hörbeispiele sehr ähneln und nicht direkt nacheinander abgefragt werden sollen.
Aus den Folgenden Paaren (bzw. Tripeln) an Seiten sollen nicht zwei hintereinander in beliebiger Reihenfolge abgefragt werden:
(1, 2)
(3, 4)
(5, 6)
(7, 8)
(9, 10, 13)
(11, 12, 14).
Aktuell beinhaltet mein Code die etwas "unschöne" Variante, dass ich alle Fälle aufzähle, die ausgeschlossen werden sollen. Also jede der oben genannten Kombinationen an allen möglichen Positionen.
Dieser Code steht auf einer Seite; die kommenden Seiten im Fragebogen sind dann OP1 bis OP14.
"
if (!isset($seiten)) {
$seiten = array('OP1','OP2','OP3','OP4','OP5','OP6','OP7','OP8','OP9','OP10','OP11','OP12','OP13','OP14');
shuffle($seiten);
// Solange eine der nicht erwünschten Reihenfolgen vorliegt, mische noch einmal
// while (Bedingung) {Anweisung}
while (
//OP1 und OP2
$seiten[1] == 'OP1' && $seiten[2] = 'OP2'
|| $seiten[1] == 'OP2' && $seiten[2] == 'OP1'
|| $seiten[2] == 'OP1' && $seiten[3] == 'OP2'
|| $seiten[2] == 'OP2' && $seiten[3] == 'OP1'
|| $seiten[3] == 'OP1' && $seiten[4] == 'OP2'
|| $seiten[3] == 'OP2' && $seiten[4] == 'OP1'
|| $seiten[4] == 'OP1' && $seiten[5] == 'OP2'
|| $seiten[4] == 'OP2' && $seiten[5] == 'OP1'
|| $seiten[5] == 'OP1' && $seiten[6] == 'OP2'
|| $seiten[5] == 'OP2' && $seiten[6] == 'OP1'
|| $seiten[6] == 'OP1' && $seiten[7] == 'OP2'
|| $seiten[6] == 'OP2' && $seiten[7] == 'OP1'
|| $seiten[7] == 'OP1' && $seiten[8] == 'OP2'
|| $seiten[7] == 'OP2' && $seiten[8] == 'OP1'
|| $seiten[8] == 'OP1' && $seiten[9] == 'OP2'
|| $seiten[8] == 'OP2' && $seiten[9] == 'OP1'
|| $seiten[9] == 'OP1' && $seiten[10] == 'OP2'
|| $seiten[9] == 'OP2' && $seiten[10] == 'OP1'
|| $seiten[10] == 'OP1' && $seiten[11] == 'OP2'
|| $seiten[10] == 'OP2' && $seiten[11] == 'OP1'
|| $seiten[11] == 'OP1' && $seiten[12] == 'OP2'
|| $seiten[11] == 'OP2' && $seiten[12] == 'OP1'
|| $seiten[12] == 'OP1' && $seiten[13] == 'OP2'
|| $seiten[12] == 'OP2' && $seiten[13] == 'OP1'
|| $seiten[13] == 'OP1' && $seiten[14] == 'OP2'
|| $seiten[13] == 'OP2' && $seiten[14] == 'OP1'
// OP3 und OP4
[...] <-- hier habe ich für mehr Übersichtlichkeit für das Forum gekürzt; Die folgenden Blöcke sind aufgebaut wie der erste.
// OP5 und OP6
[...]
// OP7 und OP8
[...]
// OP9 und OP10
[...]
// OP10 und OP13
[...]
// OP9 und OP13
[...]
// OP11 und OP12
[...]
// OP12 und OP14
[...]
// OP11 und OP14
|| $seiten[1] == 'OP11' && $seiten[2] = 'OP14'
|| $seiten[1] == 'OP14' && $seiten[2] == 'OP11'
|| $seiten[2] == 'OP11' && $seiten[3] == 'OP14'
|| $seiten[2] == 'OP14' && $seiten[3] == 'OP11'
|| $seiten[3] == 'OP11' && $seiten[4] == 'OP14'
|| $seiten[3] == 'OP14' && $seiten[4] == 'OP11'
|| $seiten[4] == 'OP11' && $seiten[5] == 'OP14'
|| $seiten[4] == 'OP14' && $seiten[5] == 'OP11'
|| $seiten[5] == 'OP11' && $seiten[6] == 'OP14'
|| $seiten[5] == 'OP14' && $seiten[6] == 'OP11'
|| $seiten[6] == 'OP11' && $seiten[7] == 'OP14'
|| $seiten[6] == 'OP14' && $seiten[7] == 'OP11'
|| $seiten[7] == 'OP11' && $seiten[8] == 'OP14'
|| $seiten[7] == 'OP14' && $seiten[8] == 'OP11'
|| $seiten[8] == 'OP11' && $seiten[9] == 'OP14'
|| $seiten[8] == 'OP14' && $seiten[9] == 'OP11'
|| $seiten[9] == 'OP11' && $seiten[10] == 'OP14'
|| $seiten[9] == 'OP14' && $seiten[10] == 'OP11'
|| $seiten[10] == 'OP11' && $seiten[11] == 'OP14'
|| $seiten[10] == 'OP14' && $seiten[11] == 'OP11'
|| $seiten[11] == 'OP11' && $seiten[12] == 'OP14'
|| $seiten[11] == 'OP14' && $seiten[12] == 'OP11'
|| $seiten[12] == 'OP11' && $seiten[13] == 'OP14'
|| $seiten[12] == 'OP14' && $seiten[13] == 'OP11'
|| $seiten[13] == 'OP11' && $seiten[14] == 'OP14'
|| $seiten[13] == 'OP14' && $seiten[14] == 'OP11')
{
html( "Hinweis für Programmierung der Rotation: Unerwünschte Reihenfolgen lagen vor, es wurde neu gemischt. ");
$seiten = array('OP1','OP2','OP3','OP4','OP5','OP6','OP7','OP8','OP9','OP10','OP11','OP12','OP13','OP14');
shuffle($seiten);
}
html("Hinweis für Programmierung der Rotation: Es liegen keine unerwünschten Reihenfolgen vor.");
// Die Seite ergänzen, wo es nachher weiter geht
$seiten[] = 'Entsch';
// Reihenfolge zwischenspeichern, um spätere Änderung zu vermeiden
registerVariable('seiten');
}
setPageOrder($seiten);
"
Leider tut es nicht, was es soll: Beim Ausprobieren kommt es trotzdem immer wieder vor, dass zwei Hörbeispiele=Seiten hintereinander abgefragt werden, die eigentlich ausgenommen werden sollten.
Können Sie mir sagen, wo der Fehler liegt? Oder eine andere Möglichkeit nennen, mit der ich die Ausnahmen umsetzen kann?
Vielen Dank, freundliche Grüße!
Nina Düvel