AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Anfänger Problem - Psychologietest

Offene Frage von "Smokers"
Ein Thema von Smokers · begonnen am 4. Mai 2007 · letzter Beitrag vom 7. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
Smokers

Registriert seit: 4. Mai 2007
9 Beiträge
 
Delphi 7 Enterprise
 
#1

Anfänger Problem - Psychologietest

  Alt 4. Mai 2007, 09:20
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:
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]= 'dthen depressiv:=depressiv+2 ;
            if frage[(seite+1),1,0]= 'sthen schizoid:=schizoid+2 ;
            if frage[(seite+1),1,0]= 'zthen zwanghaft:=zwanghaft+2 ;
            if frage[(seite+1),1,0]= 'hthen hysterisch:=hysterisch+2 ;
            if frage[(seite+1),1,0]= 'lthen luegen:=luegen+1 ;
            if frage[(seite+1),1,0]= 'dummythen dummy:=dummy+0 ;
            end;

            if radiobutton2.Checked=true then
            begin
            if frage[seite+1,1,0]= 'dthen depressiv:=depressiv+1 ;
            if frage[seite+1,1,0]= 'sthen schizoid:=schizoid+1 ;
            if frage[seite+1,1,0]= 'zthen zwanghaft:=zwanghaft+1 ;
            if frage[seite+1,1,0]= 'hthen hysterisch:=hysterisch+1 ;
            if frage[seite+1,1,0]= 'lthen luegen:=luegen+1 ;
            if frage[seite+1,1,0]= 'dummythen 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.
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.


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.
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#2

Re: Anfänger Problem - Psychologietest

  Alt 4. Mai 2007, 09:41
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:
type
  TFrage = record
    Frage: String;
    Antworten: Array[0..3] of string;
    Zuordnung: Array[0..3] of byte;
  end
So brauchst du nur ein Array[AnzahlDerFragen] of TFrage

Zuordnung sagt, welche Antwort welchem Typ zugeordnet wird, du könntest also zum beispiel folgendes machen:

Delphi-Quellcode:
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]])
Hoffe ich hab das beschrieben was du meinst und es war nicht zun kompliziert
Richard Mahr
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Anfänger Problem - Psychologietest

  Alt 4. Mai 2007, 09:43
Zitat von Smokers:
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.
Du solltest deinen Quelltext mal gescheit formatieren, dann siehst du wahrscheinlich schon von alleine, was falsch ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Smokers

Registriert seit: 4. Mai 2007
9 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Anfänger Problem - Psychologietest

  Alt 4. Mai 2007, 10:07
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 ?
Fragen[0].Antwort[0] := 'Halbvoll'; Es gibt indem Sinne keine Antworten...
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:
Hoffe ich hab das beschrieben was du meinst und es war nicht zun kompliziert
--> nur ein ganz bisschen... aber schon ok so^^
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Anfänger Problem - Psychologietest

  Alt 4. Mai 2007, 10:23
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.
Richard Mahr
  Mit Zitat antworten Zitat
Smokers

Registriert seit: 4. Mai 2007
9 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Anfänger Problem - Psychologietest

  Alt 4. Mai 2007, 10:43
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 ^^
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Anfänger Problem - Psychologietest

  Alt 4. Mai 2007, 10:52
Zitat von Smokers:
okay mal abgesehen von dem Beitrag von Luckie der für einen Anfänger
nicht gerade sehr konsruktiv ist schonmal danke an Tormentor32.
So, findest du? Dann guck dir mal das an:
Delphi-Quellcode:
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]= 'dthen depressiv:=depressiv+2 ;
            if frage[(seite+1),1,0]= 'sthen schizoid:=schizoid+2 ;
            if frage[(seite+1),1,0]= 'zthen zwanghaft:=zwanghaft+2 ;
            if frage[(seite+1),1,0]= 'hthen hysterisch:=hysterisch+2 ;
            if frage[(seite+1),1,0]= 'lthen luegen:=luegen+1 ;
            if frage[(seite+1),1,0]= 'dummythen dummy:=dummy+0 ;
            end;

            if radiobutton2.Checked=true then
            begin
            if frage[seite+1,1,0]= 'dthen depressiv:=depressiv+1 ;
            if frage[seite+1,1,0]= 'sthen schizoid:=schizoid+1 ;
            if frage[seite+1,1,0]= 'zthen zwanghaft:=zwanghaft+1 ;
            if frage[seite+1,1,0]= 'hthen hysterisch:=hysterisch+1 ;
            if frage[seite+1,1,0]= 'lthen luegen:=luegen+1 ;
            if frage[seite+1,1,0]= 'dummythen 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;
Und das:
Delphi-Quellcode:
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] = 'dthen
            depressiv := depressiv + 2;
          if frage[(seite + 1), 1, 0] = 'sthen
            schizoid := schizoid + 2;
          if frage[(seite + 1), 1, 0] = 'zthen
            zwanghaft := zwanghaft + 2;
          if frage[(seite + 1), 1, 0] = 'hthen
            hysterisch := hysterisch + 2;
          if frage[(seite + 1), 1, 0] = 'lthen
            luegen := luegen + 1;
          if frage[(seite + 1), 1, 0] = 'dummythen
            dummy := dummy + 0;
        end;
        if radiobutton2.Checked = true then
        begin
          if frage[seite + 1, 1, 0] = 'dthen
            depressiv := depressiv + 1;
          if frage[seite + 1, 1, 0] = 'sthen
            schizoid := schizoid + 1;
          if frage[seite + 1, 1, 0] = 'zthen
            zwanghaft := zwanghaft + 1;
          if frage[seite + 1, 1, 0] = 'hthen
            hysterisch := hysterisch + 1;
          if frage[seite + 1, 1, 0] = 'lthen
            luegen := luegen + 1;
          if frage[seite + 1, 1, 0] = 'dummythen
            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;
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#8

Re: Anfänger Problem - Psychologietest

  Alt 4. Mai 2007, 11:00
Du solltest jeder Kategorie einen Zahlenwert zuordnen logischerweise:

-depressiver -> 0
-hysterischer -> 1
-zwanghafter -> 2
-schizoider -> 3

Das definierst du dann als Konstanten
Delphi-Quellcode:
const
  depressiv = 0;
  hysterisch = 1;
  zwanghaft = 2;
  schizoid = 3;
Jetzt sieht eine Frage so aus
Delphi-Quellcode:
type
  TFrage = record
    Frage: string;
    Kategorie: byte;
    IndexDerFrageZumGegenrechnen: integer;
    GewaehlteAntwort: byte;
  end;
Jetzt Kannst du zum Beispiel mitFragen[0].Kategorie := hysterisch 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.

Klar soweit?
Richard Mahr
  Mit Zitat antworten Zitat
Smokers

Registriert seit: 4. Mai 2007
9 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Anfänger Problem - Psychologietest

  Alt 4. Mai 2007, 11:15
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.
  Mit Zitat antworten Zitat
Smokers

Registriert seit: 4. Mai 2007
9 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Anfänger Problem - Psychologietest

  Alt 4. Mai 2007, 12:10
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:
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
Allerdings muss ich doch neue var deklarieren oder ? weil die Kategorien sind ja const nichwahr? ^^

( wie gesagt anfänger)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz