Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "Lerneffekt" beim Vokabeltrainer... (https://www.delphipraxis.net/89065-lerneffekt-beim-vokabeltrainer.html)

Sandra121289 25. Mär 2007 15:28


"Lerneffekt" beim Vokabeltrainer...
 
Hallo!
Wir programmieren in der Schule gerade einen Vokabeltrainer und dabei möchte ich gerne nicht einfach nur zufällige Vokabeln abfragen, sondern die, die öfter falsch beantwortet wurden, sollen öfter abgefragt werden. nun habe ich absolut keine idee, wie sich das am besten anstellen lässt.

ich fände es gut, wenn es 2 kategorien von vokabeln gäbe. also die die der benutzer ohne probleme übersetzen kann und die bei denen es noch hapert. wenn der benutzer also eine vokabel aus der "leichten" kategorie nicht mehr weiß, soll diese in die zweite kategorie übergehen und wenn diese wiederum richtig beantwortet wird wieder in die erste übergehen. kann man das mit delphi realisieren?
danke im voraus, sanny :)

Corpsman 25. Mär 2007 15:32

Re: "Lerneffekt" beim Vokabeltrainer...
 
sry, aber ich verstehe nicht ganz,

Suchst du nach einem Programm das das schon kann ? Dann nimmst du evtl Vokabeltrainer von meiner HP

oder willst das selbst machen ?

Nikolas 25. Mär 2007 15:35

Re: "Lerneffekt" beim Vokabeltrainer...
 
Die zentrale Frage ist die, wie du die Vokabeln speicherst. Wenn du z.B. records benutzt, könntest du zwei zusätzzliche Integer einbauen, in denen du festhalten kannst, wie oft die Vokabel falsch beantwortet wurde.

fLaSh11 25. Mär 2007 15:37

Re: "Lerneffekt" beim Vokabeltrainer...
 
Ich denke, er will wissen, wie er es anstellt, dass die der höheren Stufe auch eine höhere Wahrscheinlichkeit haben dranzukommen. ;)

Sandra121289 25. Mär 2007 15:37

Re: "Lerneffekt" beim Vokabeltrainer...
 
Zitat:

Zitat von Nikolas
Die zentrale Frage ist die, wie du die Vokabeln speicherst. Wenn du z.B. records benutzt, könntest du zwei zusätzzliche Integer einbauen, in denen du festhalten kannst, wie oft die Vokabel falsch beantwortet wurde.

naja ich lade die vokabeln aus einer text-datei in eine liste!

Sandra121289 25. Mär 2007 15:38

Re: "Lerneffekt" beim Vokabeltrainer...
 
Zitat:

Zitat von fLaSh11
Ich denke, er will wissen, wie er es anstellt, dass die der höheren Stufe auch eine höhere Wahrscheinlichkeit haben dranzukommen. ;)

ja da hast du recht, aber nur mal so nebenbei, bin weiblich xD

fLaSh11 25. Mär 2007 15:41

Re: "Lerneffekt" beim Vokabeltrainer...
 
Nikolas meinte, du sollst eine Vokabel folgendermaßen definieren:

Delphi-Quellcode:
TVokabel = record
  deutsch: String;
  englisch: String;
  Lektion: Byte;
  Kategorie: Byte;
  //evtl. auch anderst; mit Fehlern, etc.
  //...
end;
P.S.: Der User ;)

Sandra121289 25. Mär 2007 15:46

Re: "Lerneffekt" beim Vokabeltrainer...
 
oi oi oi...mit records hab ich mich noch gar nicht beschäftigt...hab aber auch keine lust jetzt mein ganzes programm über den haufen zu werfen :? ...ich poste mal hier den quelltext rein, vielleicht könnt ihr mir ja so besser helfen:

Delphi-Quellcode:
procedure TForm2.naufgabeClick(Sender: TObject);
var i,art:integer;
begin
listbox1.Items.LoadFromFile('vokabel.txt');
case radiogroup1.itemindex of
  0: art:=1;
  1: art:=2;
  else art:=random(2)+1;
end;
case art of
1:begin
    i:=random(listbox1.Items.Count);
    panel1.Caption:=listbox1.Items.names[i];
    loesung:=listbox1.Items.ValueFromIndex[i];
  end;

2:begin
    i:=random(listbox1.Items.Count);
    panel1.Caption:=listbox1.Items.ValueFromIndex[i];
    loesung:=listbox1.Items.names[i];
  end;
end;
 eingabe.text:='';
 bewertung.caption:='';
 eingabe.setfocus;
end;


procedure TForm2.eingabeKeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then
  begin
    if eingabe.text=loesung then bewertung.caption:='richtig'
                             else bewertung.caption:='falsch';
    naufgabe.setfocus;
    end;

end;

procedure TForm2.FormCreate(Sender: TObject);
begin
randomize;
end;

end.

fLaSh11 25. Mär 2007 15:57

Re: "Lerneffekt" beim Vokabeltrainer...
 
Delphi-Quellcode:
listbox1.Items.LoadFromFile('vokabel.txt');
???
Wo liegt die Datei? Im Stammverzeichnis der Exe?
Dann mach das leiber so:
Delphi-Quellcode:
listbox1.Items.LoadFromFile(ExtractFilePath(ParamStr(0))+'vokabel.txt');
und außerdem wär's so noch besser :)
Delphi-Quellcode:
if FileExtsts(ExtractFilePath(ParamStr(0))+'vokabel.txt') then
  listbox1.Items.LoadFromFile(ExtractFilePath(ParamStr(0))+'vokabel.txt')
else
  //Vokabeldatei nicht vorhanden!

Sandra121289 25. Mär 2007 16:00

Re: "Lerneffekt" beim Vokabeltrainer...
 
danke für die hilfe flash! :-D
bin aber auch noch blutige anfängerin wenns um delphi geht, lerne das erst seit 3 monaten!
mein hauptproblem ist aber leider immer noch nicht gelöst :?

grenzgaenger 25. Mär 2007 16:04

Re: "Lerneffekt" beim Vokabeltrainer...
 
also, so kommst du nicht weiter. du musst deine datenhaltung umstellen, wie oben gesagt und damit funktioniert dein access in deiner string list nicht mehr. für die neue datenhaltung hast du folgende möglichkeiten:
  • .ini file
  • .xml file
  • datenbank
  • typisierte datei mit records
  • untypisierte datei mit zusätzlichen trennzeichen
du musst einfach 1, 2 daten mitgeben, damit du speichern kannst, ob etwas richtig oder nicht richtig beantwortet wurde, wie sonnst könntest du (ohne information) bestimmen, ob etwas angezeigt werden soll oder nicht? du kennst doch das alte EDV sprichwort: "Und weiss ich nicht mehr weiter, dann setz ich mir 'nen Schalter". und genau, das musst du jetzt hier tun.

wünsch dir noch viel glück und erfolg.

Sandra121289 25. Mär 2007 16:13

Re: "Lerneffekt" beim Vokabeltrainer...
 
okay, dann stell ich das halt um...wenn ich nun für jede vokabel gespeichert hab, wie oft diese falsch beantwortet wurde, wie kann ich dann die wahrscheinlichkeit der abfrage erhöhen?^^

grenzgaenger 25. Mär 2007 16:22

Re: "Lerneffekt" beim Vokabeltrainer...
 
Liste der Anhänge anzeigen (Anzahl: 3)
nach der lernpsychologie soll man die nicht gewussten punkte täglich wiederholen, die gewussten dann in jeweils einem grösserem zeitabstand, bis sie sitzen. daher benötigst du felder für
  • (1) wann das letzte mal richtig beantwortet
  • (2) wie oft richtig beantwortet
zu eins: du selektierst dir nur die vokabeln, welche nicht richtig beantwortet wurden. damit hast du automatisch diejenigen öfters, welche du nicht gewusst hast. wenn du dann die abfrage machst, speicherst du mit ab, ob die vokabel richtig beantwortet wurde (counter erhöhen) und das entsprechende datum. wenn sie falsch beantwortet wurde, setzt du den counter wieder auf 0

zu zwei: je nach den level (counter) addierst du die entsprechenden tage hinzu (zum datum der letzten abfrage). ist dieses errechnete datum <= syst-datum, dann kommen die vokabeln wieder dran.

das heisst, du brauchst zwei zusätzliche felder bei deinen vokabeln (a) datum und (b) counter. counter ist normal ein integer, das datum sollte in einer definierten form gespeichert werden, damit es auch auf einem anderen rechner funktioniert.

wünsch dir noch viel spass und hoffe, es hilft ein wenig.

fLaSh11 25. Mär 2007 16:24

Re: "Lerneffekt" beim Vokabeltrainer...
 
Ich hätte ne andere Lösung:

Nehmen wir an, du hast 2 Kategorien.
1=oft richtig
2=oft falsch
(oder so ähnlich)

Dann (unter Berücksichtigung, wieviele Vokabeln in den Kategorien jeweils sind!) sagst du z.B. dass Kategorie 2 zweimal mehr als 1 abgefragt wird.
Du machst also
Delphi-Quellcode:
x:=random(100);
if x<33 then //Kategorie 1
if x>=33 then //Kategorie 2
und wenn du festgestellt hast, welche Kategorie du abfragst, ratest du noch die Vokabeln in der Kategorie.

Aber Achtung: Nicht dass in Kategorie 2 nur eine Vokabel hockt und die 6 von 10 mal abgefragt wird O.o

bitsetter 25. Mär 2007 19:16

Re: "Lerneffekt" beim Vokabeltrainer...
 
Hallo,

du könntest eine Art von Problemliste erstellen, in der die Position der "Problemfälle" in deiner Vokabelliste bzw deiner ListBox steht.

Delphi-Quellcode:
...
  private
    ProblemListe: TList;
    ProblemPos: ^Integer;
  public
...

procedure TForm2.FormCreate(Sender: TObject);
begin
  ProblemListe:= TList.Create;
  randomize;
end;

procedure TForm2.FormDestroy(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to Pred(ProblemListe.Count) do
  begin
    ProblemPos := ProblemListe.Items[i];
    Dispose(ProblemPos);
  end;
  ProblemListe.Free;
end;

procedure TForm2.eingabeKeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then
  begin
    if eingabe.text=loesung then
      bewertung.caption:='richtig'
    else
    begin
      bewertung.caption:='falsch';
      New(ProblemPos);
      ProblemPos^ := 2;//Beispiel (Position in der ListBox)
      ProblemListe.Add(ProblemPos);//Problem Position hinzufügen
    end;
    naufgabe.setfocus;
  end;
end;

procedure TForm2.naufgabeClick(Sender: TObject);
var i,art:integer;
begin
  listbox1.Items.LoadFromFile('vokabel.txt');

  if ProblemListe.Count> 0 then
  begin
    i:= Random(ProblemListe.Count);
    //panel1.Caption:=listbox1.Items.Strings[PInteger(ProblemListe.Items[i])^];
    panel1.Caption:=listbox1.Items.names[PInteger(ProblemListe.Items[i])^];
    loesung:=listbox1.Items.ValueFromIndex[PInteger(ProblemListe.Items[i])^];
  end;
...
end;

Sandra121289 26. Mär 2007 15:18

Re: "Lerneffekt" beim Vokabeltrainer...
 
so bei mir hat sich jetzt ne ganze menge im quelltext verändert, aber bekomme ein paar fehlermeldungen :( helft ihr mir bitte sie auszumerzen? das was neu dazugekommen ist hab ich zur besseren übersicht als kommentar gekennzeichnet!

Bekomme bei der delete-funktion die Fehlermeldung "not enough actual parameters", und bei den beiden if-and-then-Anweisungen "incompatible types". keine ahnung woran es liegen kann!!
Delphi-Quellcode:
procedure TForm2.naufgabeClick(Sender: TObject);
var art:integer;
begin
listbox1.Items.LoadFromFile('vokabel.txt');
case radiogroup1.itemindex of
  0: art:=1;
  1: art:=2;
  2: art:=random(2)+1;
  else showmessage('Bitte erst die Art der Vokabelabfrage bestimmen!');
end;

//if listbox2.items.count>3 then
//begin
//  x:=random(100);
//  if x<33 then i:=random(listbox1.Items.Count);
//  if x>=33 then i:=random(listbox2.items.count);
//end
//else i:=random(listbox1.Items.Count);

case art of
1:begin
    panel1.Caption:=listbox1.Items.names[i];
    loesung:=listbox1.Items.ValueFromIndex[i];
  end;

2:begin
    panel1.Caption:=listbox1.Items.ValueFromIndex[i];
    loesung:=listbox1.Items.names[i];
  end;
end;
 eingabe.text:='';
 bewertung.caption:='';
 eingabe.setfocus;
end;


procedure TForm2.eingabeKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
  begin
    if eingabe.text=loesung then bewertung.caption:='richtig'
                             else bewertung.caption:='falsch';
    naufgabe.setfocus;
    if eingabe.text=loesung then bewertung.font.color:= clgreen
                        else bewertung.font.Color:=clred;
    if eingabe.text=loesung then richtig:=richtig+1
                        else falsch:=falsch+1;
                        gesamt:=gesamt+1;
auswertung.caption:='Gesamt:'+inttostr(gesamt)+'richtig:'+inttostr(richtig)+'falsch:'+inttostr(falsch);
   end;
//if eingabe.text<>loesung and pos(listbox1.Items[i], listbox2.Items)><-1 then //listbox2.items.add(listbox1.Items[i]);
//if i=random(listbox2.items.count) and eingabe.text=loesung then
//listbox2.items.Delete[i];
//end;

procedure TForm2.FormCreate(Sender: TObject);
begin
randomize;
end;


end.

kalmi01 26. Mär 2007 15:25

Re: "Lerneffekt" beim Vokabeltrainer...
 
probiers mal so:
Delphi-Quellcode:
if (eingabe.text<>loesung) and (pos(listbox1.Items[i], listbox2.Items)>0)
then listbox2.items.add(listbox1.Items[i]);
if (i=random(listbox2.items.count)) and (eingabe.text=loesung)
then listbox2.items[i].Delete;

Sandra121289 26. Mär 2007 15:31

Re: "Lerneffekt" beim Vokabeltrainer...
 
geht auch nicht...wieder inkompatible typen und das item[i].delete funzt so nicht.."record,object und class type required" :?
trotzdem danke für den versuch kalmi01

Klaus01 26. Mär 2007 15:38

Re: "Lerneffekt" beim Vokabeltrainer...
 
Delphi-Quellcode:
pos(listbox1.Items[i], listbox2.Items)><-1
sollte es nicht so heißen:

Delphi-Quellcode:
pos(listbox1.Items[i], listbox2.Items) <> -1
Grüße
Klaus

Sandra121289 26. Mär 2007 15:40

Re: "Lerneffekt" beim Vokabeltrainer...
 
stimmt klaus01...aber die fehlermeldungen bleiben :(

Klaus01 26. Mär 2007 15:49

Re: "Lerneffekt" beim Vokabeltrainer...
 
Delphi-Quellcode:
and (pos(listbox1.Items[i], listbox2.Items)>0)
sollte das nicht so sein?

Delphi-Quellcode:
and (pos(listbox1.Items[i], listbox2.Items.text)>0)
Grüße
Klaus

kalmi01 26. Mär 2007 15:51

Re: "Lerneffekt" beim Vokabeltrainer...
 
Delphi-Quellcode:
pos(listbox1.Items[i], listbox2.Items)
Pos sucht doch nur Strings in Strings
und nicht ListBox-Items in Listboxen.
Das Ergebnis von Pos ist positiv, aber nicht -1

Sandra121289 26. Mär 2007 15:55

Re: "Lerneffekt" beim Vokabeltrainer...
 
Zitat:

Zitat von Klaus01
Delphi-Quellcode:
and (pos(listbox1.Items[i], listbox2.Items)>0)
sollte das nicht so sein?

Delphi-Quellcode:
and (pos(listbox1.Items[i], listbox2.Items.text)>0)
Grüße
Klaus

nein so sollte es nicht sein :roll:
listbox.items.text gibt es nicht! und die pos funktion liefert -1 wenn der eintrag nicht vorhanden ist. und das ist es was ich bezwecken will. wenn der eintrag in der liste nicht vorhanden ist, soll dieser hinzugefügt werden.

Klaus01 26. Mär 2007 15:57

Re: "Lerneffekt" beim Vokabeltrainer...
 
Also diese Beispiel funktioneirt bei mir:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:Byte;
begin
  i:=2;
  if pos(listbox1.Items[i],listbox2.Items.Text) > 0 then
    begin
      showMessage(listbox1.Items[i]);
    end;
end;
pos liefert 0 zurück wenn der String nicht in dem anderen String vorhanden ist.
Bitte einmal die Delphi Hilfe konsultieren.

Grüße
Klaus

Sandra121289 26. Mär 2007 16:01

Re: "Lerneffekt" beim Vokabeltrainer...
 
okay...das stimmt..hatte das mit irgendwas verwechselt...aber items.text gibts doch trotzdem nicht, oder? :?

Edit: du hast ja recht klaus01...mit items.text ist jetzt die eine fehlermeldung verschwunden
:-D danke! :angel2: bleibt nur noch "not enough actual parameters" bei der delete funktion..

Sandra121289 26. Mär 2007 16:09

Re: "Lerneffekt" beim Vokabeltrainer...
 
okay, der rest hat sich auch geklärt! hatte die falschen klammern benutzt.
bei delete muss man runde klammern benutzen :wall:
also
Delphi-Quellcode:
listbox1.items.delete(i);

SLATER_LT 26. Mär 2007 17:58

Re: "Lerneffekt" beim Vokabeltrainer...
 
Jetzt wo schon alles läuft isses vielleicht zu spät für ne andere Idee, aber ich wollt kurz erzählen, wie ich das mal gelöst habe.

Ich habe eine Ampel mit rot gelb und grün neben die Vokabel gemalt, die gerade abgefragt wird. Am Anfang sind alle auf "gelb". Wenn die Vokabel sofort richig ist, wechselt die Ampel auf grün und die Vokabel wird nicht mehr abgefragt. Ist die Eingabe falsch, wechselt die Ampel auf rot. Kommt die Vokabel wieder zum Abfragen dran, muss man durch direktes richtig eingeben erstmal auf gelb und nochmaliges richtig eingeben auf grün kommen.

Also wird zu jeder Vokabel "Fremdwort", deutsche Bedeutung, Status (1, 2 oder 3 für die Farbe der Ampel) gespeichert.

So macht es sogar (fast) Spaß, die Vokabeln zu lernen ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 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-2025 by Thomas Breitkreuz