![]() |
Anfänger Problem - Psychologietest
Also ich habe folgendes vor / bin dabei
einen psychologie Test zu programmieren der bei einer Frage die auf eine bestimmte Weise beantworte wird, halt den Werten: „schizoid“ , „depressiv“, “hysterisch“, “zwanghaft“ und so genannten Lügenfragen. Jedoch habe ich im Moment ein Problem das mich stutzen lässt. Erstmal der Quellcode: das formular wo so ziemlich außer namensabfrage und auswertung abläuft:
Delphi-Quellcode:
So das Problem was gelöst werden muss ist das beim antworten nur bei der Frage : „ frage[3,0,0] “ auch wirklich ein wert zur Variable addiert wird. Bei allen anderen Fragen nicht.
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm2 = class(TForm) Label1: TLabel; Label2: TLabel; label_vorname: TLabel; label_nachname: TLabel; Button1: TButton; label_text: TLabel; Button2: TButton; label_frage: TLabel; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; RadioButton4: TRadioButton; RadioButton5: TRadioButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } schizoid,hysterisch,depressiv,luegen,zwanghaft:integer; Seite:integer; //frage:array of tfrage; frage: array[1..100,0..2,0..2] of string; dummy:integer; end; var Form2: TForm2; implementation uses Unit1, Unit3; {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin form1.close; end; procedure TForm2.FormCreate(Sender: TObject); begin Radiobutton1.Hide; Radiobutton2.Hide; Radiobutton3.Hide; Radiobutton4.Hide; Radiobutton5.Hide; label_text.caption:='Lieber Testteilnehmer,'+#13+#10+'Liebe Testteilnehmerin,'+#13+#10+#13+#10'dies ist ein Test, der Ihr Freizeitverhalten untersuchen wird. Ich bitte Sie, alle Fragen so zu '+#13+#10+'beantworten, dass Ihre Antworten am besten Ihrer Einstellung entsprechen. Neben jeder Frage '+#13+#10+'sehen Sie fünf Antwortmöglichkeiten. Die Kästchen dazwischen geben jeweils Zwischenwerte an,'+#13+#10+' damit Sie ihre Antworten'+#13+#10+'besser abstufen können. Lassen Sie bitte keine Frage aus und entscheiden Sie spontan, welche '+#13+#10+'Antwort am besten zu Ihnen passt.'; Frage[1,0,0]:='Bei Diskussionen halte ich mich her zurück.'; Frage[2,0,0]:='Die meisten Menschen sind mir zu neugierig.'; Frage[3,0,0]:='Ich spiele gerne Fußball.'; Frage[4,0,0]:='Ich werde bestimmt mal im Lotto gewinnen. '; Frage[1,1,0]:='d'; Frage[2,1,0]:='s.'; Frage[3,1,0]:='z'; Frage[4,1,0]:='dummy'; end; procedure TForm2.Button2Click(Sender: TObject); begin case seite of 0:begin label_text.Caption:=''; label_frage.caption:=frage[1,0,0]; Radiobutton1.show; Radiobutton2.show; Radiobutton3.show; Radiobutton4.show; Radiobutton5.show; Seite:=seite+1; end; 1..4: begin if (radiobutton1.Checked=false)AND(radiobutton1.Checked=false)AND(radiobutton2.Checked=false)AND(radiobutton3.Checked=false)AND(radiobutton4.Checked=false)AND(radiobutton5.Checked=false) then begin messagedlg('Du hast keine Auswahl getroffen',mterror,[mbok],1); abort; end else label_frage.caption:=frage[seite+1,0,0]; if radiobutton1.Checked=true then begin if frage[(seite+1),1,0]= 'd' then depressiv:=depressiv+2 ; if frage[(seite+1),1,0]= 's' then schizoid:=schizoid+2 ; if frage[(seite+1),1,0]= 'z' then zwanghaft:=zwanghaft+2 ; if frage[(seite+1),1,0]= 'h' then hysterisch:=hysterisch+2 ; if frage[(seite+1),1,0]= 'l' then luegen:=luegen+1 ; if frage[(seite+1),1,0]= 'dummy' then dummy:=dummy+0 ; end; if radiobutton2.Checked=true then begin if frage[seite+1,1,0]= 'd' then depressiv:=depressiv+1 ; if frage[seite+1,1,0]= 's' then schizoid:=schizoid+1 ; if frage[seite+1,1,0]= 'z' then zwanghaft:=zwanghaft+1 ; if frage[seite+1,1,0]= 'h' then hysterisch:=hysterisch+1 ; if frage[seite+1,1,0]= 'l' then luegen:=luegen+1 ; if frage[seite+1,1,0]= 'dummy' then dummy:=dummy+0 ; end; messagedlg('Depressiv:'+inttostr(depressiv)+', schizoid:'+inttostr(schizoid)+',zwanghaft:'+inttostr(zwanghaft)+',lügen:'+inttostr(luegen)+'.',mtinformation,[mbok],1); Radiobutton1.Checked:=false; Radiobutton2.Checked:=false; Radiobutton3.Checked:=false; Radiobutton4.Checked:=false; Radiobutton5.Checked:=false; seite:=seite+1; end; 5: begin form2.Hide; form3.show; form3.label_depressiv.caption:=inttostr(depressiv); form3.label_schizoid.caption:=inttostr(schizoid); form3.label_zwanghaft.caption:=inttostr(zwanghaft); form3.label_hysterisch.caption:=inttostr(hysterisch); //form3.label_luegen.caption:=inttostr(luegen); end; end; end; end. Erstmal nur wichtig das er die Ergebnisse richtig zählt.... \\\\\\\\ Zur kurzen Erläuterung : 1. ich bin absoluter Anfänger 2. ich bin Anfänger ;) 3. ein array mit 3 dimensionen weil ich in der frage / var irgendwo die frage, die kategorie und später auch noch die gegenfrage abspeichert. |
Re: Anfänger Problem - Psychologietest
Hmm soweit ich das verstanden habe, ist in deinem Fall kein 3Dimensionales Array nötig.
Du kannst das Ganze über einen Record lösen:
Delphi-Quellcode:
So brauchst du nur ein Array[AnzahlDerFragen] of TFrage
type
TFrage = record Frage: String; Antworten: Array[0..3] of string; Zuordnung: Array[0..3] of byte; end Zuordnung sagt, welche Antwort welchem Typ zugeordnet wird, du könntest also zum beispiel folgendes machen:
Delphi-Quellcode:
Hoffe ich hab das beschrieben was du meinst und es war nicht zun kompliziert
var
Fragen: Array[0..99] of TFrage; //..... begin Fragen[0].Frage := 'Glas ist Halbvoll oder halbleer?' Fragen[0].Antwort[0] := 'Halbvoll'; Fragen[0].Antwort[1] := 'Halbleer'; //... Fragen[0].Zuordnung[0] := 1; Fragen[1].Zuordnung[1] := 3; // USW... DU hast ein Array, wo die Anzahl der Jeweiligen Typen drinsteht, so kannst du zum Beispiel inc(Typen[Fragen[AktuelleFrage].Zuordnung[GewählteFrage]]) |
Re: Anfänger Problem - Psychologietest
Zitat:
|
Re: Anfänger Problem - Psychologietest
okay mal abgesehen von dem Beitrag von Luckie der für einen Anfänger
nicht gerade sehr konsruktiv ist schonmal danke an Tormentor32. Also das mit dem Record hab ich soweit gerafft. Allerdings .. Wozu brauche ich ?
Delphi-Quellcode:
Es gibt indem Sinne keine Antworten...
Fragen[0].Antwort[0] := 'Halbvoll';
es läuft nur so ab das man 5 Knöppe hat und ganz links is "trifft sehr stark zu" und ganz rechts "trifft garnicht zu" Sodass beim radiobutton1 für diesen den fragenspezifischen presönlichkeits wert "2" addiert wird. beim Radiobutton2 nurnoch "1" und bei den restlichen garkeine mehr. Daher versteh ich im Moment nicht ganz wo ich die addition zu der bersönlickeitsvariable unterbringe. Zitat:
|
Re: Anfänger Problem - Psychologietest
Hmm dann hab ich dein Quiz ein wenig falsch verstanden...
Bevor ich mir jetzt die Arbeit mache^^ frag ich lieber nochmal nach: Du willst erreichen, dass man bestimmte Fragen beantwortet, indem man quasi eine Zahl zwischen 1 und 5 angibt (Trifft nicht zu bis trifft voll zu). Jede Frage wird einem bestimmten "Menschtyp" zugeordnet und hinterher wird ausgewertet, welcher Menschtyp die meisten Punkte hat. Sehe ich das richtig? Ach übrigens, Luckies Beitrag ist wichtiger als du denkst, denn ein gut durchformatierter Quelltext ist sehr wichtig, und wenn du dein Programm bessispielsweise 2 Jahre lang nicht anguckst, dann kannst du bei einem gut formatiertem Quelltext viel schneller durchblicken. |
Re: Anfänger Problem - Psychologietest
Also ist ein psychologischer Test der darauf abziehlt am ende die Punkte zahl zu ermitteln zuwieviel % oder Punkten man ein :
-depressiver -hysterischer -zwanghafter -schizoider Mensch ist. Man bekommt eine Frage ( so um die 40 sinds ) dann hat man 5 Knöpfe .. so ungefähr (O = radiobutton) trifft sehr stark zu | O O O O O | trifft garnicht zu. wenn man ganz links klickt ( also bei "trifft sehr stark zu" ) soll erzu der gruppe die die Frage angehört 2 Punkte hinzu addieren. Beim 2. Knopf von links nurnoch 1 punkt und die restlichen 3 Knöpfe immer NUll. Beispiel : 1. Bei Diskussionen halte ich mich her zurück. (nicht sichtbar : Kategorie: depressiv) O O O O O ( ich klicke mal den 2. knopf von links an ) --> Auswertung : Du bist : Depressiv : 1 Punkt ------------------------------------------- Das ist die Hauptaufgabe des Programms. Später soll noch hinzukommen das es Vergleichsfragen gibt. z.B. Frage nr. 2 Ich habe schnell Mitleid Frage nr. 34 Ich kann gut mit dem Leid anderer mitfühlen Wenn da beide mit "ja trifft zu" bewertet werden wird das halt gegengerechnet.... aber das erst später.. ^^ Ich hofe war verständlich genug ^^ |
Re: Anfänger Problem - Psychologietest
Zitat:
Delphi-Quellcode:
Und das:
procedure TForm2.Button2Click(Sender: TObject);
begin case seite of 0:begin label_text.Caption:=''; label_frage.caption:=frage[1,0,0]; Radiobutton1.show; Radiobutton2.show; Radiobutton3.show; Radiobutton4.show; Radiobutton5.show; Seite:=seite+1; end; 1..4: begin if (radiobutton1.Checked=false)AND(radiobutton1.Checked=false)AND(radiobutton2.Checked=false)AND(radiobutton3.Checked=false)AND(radiobutton4.Checked=false)AND(radiobutton5.Checked=false) then begin messagedlg('Du hast keine Auswahl getroffen',mterror,[mbok],1); abort; end else label_frage.caption:=frage[seite+1,0,0]; if radiobutton1.Checked=true then begin if frage[(seite+1),1,0]= 'd' then depressiv:=depressiv+2 ; if frage[(seite+1),1,0]= 's' then schizoid:=schizoid+2 ; if frage[(seite+1),1,0]= 'z' then zwanghaft:=zwanghaft+2 ; if frage[(seite+1),1,0]= 'h' then hysterisch:=hysterisch+2 ; if frage[(seite+1),1,0]= 'l' then luegen:=luegen+1 ; if frage[(seite+1),1,0]= 'dummy' then dummy:=dummy+0 ; end; if radiobutton2.Checked=true then begin if frage[seite+1,1,0]= 'd' then depressiv:=depressiv+1 ; if frage[seite+1,1,0]= 's' then schizoid:=schizoid+1 ; if frage[seite+1,1,0]= 'z' then zwanghaft:=zwanghaft+1 ; if frage[seite+1,1,0]= 'h' then hysterisch:=hysterisch+1 ; if frage[seite+1,1,0]= 'l' then luegen:=luegen+1 ; if frage[seite+1,1,0]= 'dummy' then dummy:=dummy+0 ; end; messagedlg('Depressiv:'+inttostr(depressiv)+', schizoid:'+inttostr(schizoid)+',zwanghaft:'+inttostr(zwanghaft)+',lügen:'+inttostr(luegen)+'.',mtinformation,[mbok],1); Radiobutton1.Checked:=false; Radiobutton2.Checked:=false; Radiobutton3.Checked:=false; Radiobutton4.Checked:=false; Radiobutton5.Checked:=false; seite:=seite+1; end; 5: begin form2.Hide; form3.show; form3.label_depressiv.caption:=inttostr(depressiv); form3.label_schizoid.caption:=inttostr(schizoid); form3.label_zwanghaft.caption:=inttostr(zwanghaft); form3.label_hysterisch.caption:=inttostr(hysterisch); //form3.label_luegen.caption:=inttostr(luegen); end; end;
Delphi-Quellcode:
Formatierter Code hilft die Übersicht zu behalten und Fehler zu vermeiden bzw. schnell zu finden. Fehler wie: Falsch verschachteklte Schleifen und Bedingungen, fehlende begins und ends, Fehler in der Logik und im Programmablauf. Und hier im Forum, können auch noch andere ausser dir den Code lesen und verstehen und das willst du ja wohl.
procedure TForm2.Button2Click(Sender: TObject);
begin case seite of 0: begin label_text.Caption := ''; label_frage.caption := frage[1, 0, 0]; Radiobutton1.show; Radiobutton2.show; Radiobutton3.show; Radiobutton4.show; Radiobutton5.show; Seite := seite + 1; end; 1..4: begin if (radiobutton1.Checked = false) and (radiobutton1.Checked = false) and (radiobutton2.Checked = false) and (radiobutton3.Checked = false) and (radiobutton4.Checked = false) and (radiobutton5.Checked = false) then begin messagedlg('Du hast keine Auswahl getroffen', mterror, [mbok], 1); abort; end else label_frage.caption := frage[seite + 1, 0, 0]; if radiobutton1.Checked = true then begin if frage[(seite + 1), 1, 0] = 'd' then depressiv := depressiv + 2; if frage[(seite + 1), 1, 0] = 's' then schizoid := schizoid + 2; if frage[(seite + 1), 1, 0] = 'z' then zwanghaft := zwanghaft + 2; if frage[(seite + 1), 1, 0] = 'h' then hysterisch := hysterisch + 2; if frage[(seite + 1), 1, 0] = 'l' then luegen := luegen + 1; if frage[(seite + 1), 1, 0] = 'dummy' then dummy := dummy + 0; end; if radiobutton2.Checked = true then begin if frage[seite + 1, 1, 0] = 'd' then depressiv := depressiv + 1; if frage[seite + 1, 1, 0] = 's' then schizoid := schizoid + 1; if frage[seite + 1, 1, 0] = 'z' then zwanghaft := zwanghaft + 1; if frage[seite + 1, 1, 0] = 'h' then hysterisch := hysterisch + 1; if frage[seite + 1, 1, 0] = 'l' then luegen := luegen + 1; if frage[seite + 1, 1, 0] = 'dummy' then dummy := dummy + 0; end; messagedlg('Depressiv:' + inttostr(depressiv) + ', schizoid:' + inttostr(schizoid) + ',zwanghaft:' + inttostr(zwanghaft) + ',lügen:' + inttostr(luegen) + '.', mtinformation, [mbok], 1); Radiobutton1.Checked := false; Radiobutton2.Checked := false; Radiobutton3.Checked := false; Radiobutton4.Checked := false; Radiobutton5.Checked := false; seite := seite + 1; end; 5: begin form2.Hide; form3.show; form3.label_depressiv.caption := inttostr(depressiv); form3.label_schizoid.caption := inttostr(schizoid); form3.label_zwanghaft.caption := inttostr(zwanghaft); form3.label_hysterisch.caption := inttostr(hysterisch); //form3.label_luegen.caption:=inttostr(luegen); end; end; end; |
Re: Anfänger Problem - Psychologietest
Du solltest jeder Kategorie einen Zahlenwert zuordnen logischerweise:
-depressiver -> 0 -hysterischer -> 1 -zwanghafter -> 2 -schizoider -> 3 Das definierst du dann als Konstanten
Delphi-Quellcode:
Jetzt sieht eine Frage so aus
const
depressiv = 0; hysterisch = 1; zwanghaft = 2; schizoid = 3;
Delphi-Quellcode:
Jetzt Kannst du zum Beispiel mit
type
TFrage = record Frage: string; Kategorie: byte; IndexDerFrageZumGegenrechnen: integer; GewaehlteAntwort: byte; end;
Delphi-Quellcode:
einfach eine Kategorie zuweisen. In gewählte Antwort wird gespeichert, was der Benutzer gewählt hat, und hinterher, wenn der test fertig ist, kannst du das ganze einfach mit einer Schleife auswerten.
Fragen[0].Kategorie := hysterisch
Klar soweit? :wink: |
Re: Anfänger Problem - Psychologietest
Das war viel konstruktiver =)
Naja ok. Ich finde allerdings deinen Text auch teilweise gewöhnungsbedürftig.^^ Meiner Sieht teilweise aber viel schlimmer aus da hast schon recht was nicht NUR auf 2 Monitore und daher ewig lange Textphrasen, zurück zu führen ist.^^ Klar ich versuch mich zu bessern. Einmal begin und end vergessen hab ich auch gefunden .. allerdings ändert das dass endergebnis nicht wirklich. |
Re: Anfänger Problem - Psychologietest
Danke Tormentor32.
Ich werde das gleich mal wenn ich per VNC zu haus wieder ruff kann versuchen.( Bin auf Arbeit xD ) Ich glaube es verstanden zu haben... ^^ Mirbahnt also die Umsetzung vor Augen...hoff ich: Die Auswertung würde ja dann wiefolgt ablaufen oder?
Delphi-Quellcode:
Allerdings muss ich doch neue var deklarieren oder ? weil die Kategorien sind ja const nichwahr? ^^
case Frage[zaehlvariable].antwort of
1: frage[zaehlvariable].kategorie +2 2: frage[zaehlvariable].kategorie +1 3: frage[zaehlvariable].kategorie +0 4: frage[zaehlvariable].kategorie +0 ( wie gesagt anfänger) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz