0 votes
in SoSci Survey (dt.) by s080205 (240 points)

Hallo,

mein Problem sieht folgendermaßen aus:

  • Ich erstelle einen Fragebogen mit 60 Trials pro Versuchsperson.
  • In diesen 60 Trias muss jeweils eine Zahl auf einer eigenen Seite zwischen -1,00% und 1,00% in 0,01%er-Schritten angezeigt werden (also -1,00%; -0,99%; - 0,98%; -0,87%; ...usw....; +0,99%; +1,00%).
  • Für jede Versuchsperson sollen 30 Trails negative Zahlen und 30 Trial positive Zahlen enthalten.
  • Am Ende sollte jede der möglichen Zahlen gleich häufig angezeigt worden sein (ziehen und erst zurücklegen, wenn alle Zettel gezogen wurden).
  • Negative Zahlen sollen rot sein, positive Zahlen grün.

Ich habe es bisher immer mit array() und shuffle() oder, wenn es Variablen nur auf einer Seite waren, mit dem Zufallsgenerator gemacht. Allerdings bekomme ich diesen speziellen Fall bisher nicht hin und bin über jede Hilfe sehr Dankbar.

Beste Grüße

1 Answer

+1 vote
by SoSci Survey (302k points)
selected by s080205
 
Best answer

Wenn Sie die Zahlen gleich häufig benötigen, dann werden Sie um einen Zufallsgenerator nicht umhin kommen. Legen Sie derer zwei an: EInen für positive und einen für negative Zahlen. Lassen Sie pro Interview aus jedem Zufallsgenerator 30 ziehen.

MIttels valueList() bekommen Sie dann die Zahlen (wichtig: Sie benötigen die Werte, nicht die Codes) und können sie mittels array_merge() in ein Array zusammenfassen. Dann nochmal mischen und anzeigen. Die Farbe bekommen Sie mit ein wenig CSS-Code hin.

by s080205 (240 points)
reshown by s080205
Vielen Dank für die schnelle Antwort. Ich habe es dank Ihrer Hilfe nun geschafft, die Zahlen anzeigen zu lassen.
Allerdings kann ich keine negativen Zahlen in den Zufallsgenerator legen, weil die Vorzeichen gelöscht werden. Gibt es dafür eine Lösung?
by SoSci Survey (302k points)
Im Zufallsgenerator ist zu unterscheiden zwischen den Inhalten auf den Zetteln und den zugeordneten Codes. Sie können also durchaus einen Zettel 1=-0,99 € in den Zufallsgenerator legen.

Wenn Sie in valueList() dann als dritten Parameter 'label' eingeben, erhalten Sie nicht die 1, sondern die -0,99 €.

Alternativ können Sie sich den Sachverhalt zunutze machen, dass Sie in einem Zufallsgenerator nur positive, im anderen nur negative Zahlen haben. Wenn Sie also den Code als Cent-Betrag verwenden (1=0,01 €), dann können Sie bei den Werten aus dem zweiten Zufallsgenerator ja einfach immer ein negatives Vorzeichen voranstellen.

Die Entscheidung sollten Sie natürlich auch davon anhängig machen, wie Sie die Daten am Ende in der Auswertung benötigen. Vielleicht entscheiden Sie sich also auch für die Codes 1 bis 100 im "negativen" Zufallsgenerator und 102 bis 201 im "positiven". Dann kann man einfach durch Subtraktion von 101 den Cent-Betrag bekommen.
by s080205 (240 points)
edited by s080205
Vielen Dank für die Antwort!
Leider kann ich keine negativen Zahlen eingeben, da das Vorzeichen beim Speichern automatisch gelöscht wird.
Wie kann ich nachträglich ein negatives Vorzeichen voranstellen?
Ich habe schon einiges versucht. Z.B die Zettel *(-1) zu rechen etc.. Leider kommen dann aber immer Fehlermeldungen.

Mein Code sieht bisher so aus:

$pos = valueList('ZU02',  null, 'label');
$neg = valueList('ZU04',  null, 'label');
$zzz = array_merge($pos, $neg);
shuffle($zzz);
html('<p> '.$zzz[0].' </p>');
by SoSci Survey (302k points)
Dass das Minus, es gibt übrigens nicht nur den Bindestrich (-), sondern auch ein "echtes" Minus (−) beim Speichern gelöscht wird, sollte so natürlich nicht sein. Diesen Programmfehler haben wir auf www.soscisurvey.de hiermit behoben.
by s080205 (240 points)
edited by s080205
Vielen Dank, das hat mir sehr geholfen.
Wie kann man nun die negativen Zahlen rot und die positiven Zahlen grün einfärben?
Ich habe es schon mit einem verschiedenen Codes versucht. Mein bisher "bester" Ansatz sieht so aus (Leider scheint er die Zettel nicht als "echte" Zahlen zu erkennen (vielleicht wegen des %-Zeichens?). Es gibt nämlich keine Fehlermeldung und alle Zahlen werden einfach grün):

$pos = valueList('ZU02',  null, 'label');
$neg = valueList('ZU04',  null, 'label');
$zzz = array_merge($pos, $neg);
shuffle($zzz);
registerVariable('zzz');

if ($zzz[0] < 0) {  
  html('<p style="color: red;"> '.$zzz[0].' </p>');
} else {
  html('<p style="color: green;"> '.$zzz[0].' </p>');
  }


edit: Es schein generell Probleme mit Zahlen zwischen 0,01 und 1,00 zu geben. Irgendwie werden die als "kleiner als 0" erkannt. Das ist jedenfalls der Fall, wenn ich es ohne die Prozent Zeichen versuche. Eine Zahl wie -10 wird eingefärbt, eine Zahl wie -0,01 allerdings nicht.
Wenn man die 0 in Anführungszeichen setzt ("0,00") klappt das ganze für eine Seite. Danach aber nicht mehr.
by s080205 (240 points)
reshown by s080205
Habe die Lösung gefunden:
Die 0 muss in Anführungszeichen gesetzt werden... warum auch immer :D
by SoSci Survey (302k points)
Sie verwenden ein Komma und keinen Punkt. Beim Vergleich mit der Zahl 0 versucht PHP, den Wert in eine Zahl zu übersetzen - und diese ist nicht gültig.

Die Musterlösung wäre:

$zahl = $zzz[0];
if ($zahl{0} == '-') {
  // Negative Zahl
}

Die geschweiften Klammern lesen hier das erste Zeichen im String aus.

Alternativ könnten Sie es in eine Zahl überführen, mit der PHP arbeiten kann:

$zahl = (float)str_replace(',', '.', $zzz[0]);
if ($zahl < 0) {
  // negative Zahl
}

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...