Hallo,
ich habe einen Vokabeltrainer programmiert. (Siehe Anhang.)
Bei der Abfrage treten allerdings Fehler auf.
Die Vokabel wird nicht richtig ausgewertet, sodass die anzahl der Falschen Buchstaben verfälscht wird:
Alles anzeigen
Alles anzeigen
Alles anzeigen
Alles anzeigen
Alles anzeigen
Ich glaube, dass die Eingabe nicht richtig übergeben wird.
Hier die Beschreibung, was die Prozedur VergleicheVokabel macht:
Die Vokabel wird auf Kommas und Simikola überprüft.
Dann werden die einzelnen Möglichkeiten in eine Stringliste übergeben.
Dies passiert mit der richtigen Vokabel, sowie mit der Eingabe.
Nun wird jede Möglichkeit der Lösung mit jeder Möglichkeit der Eingabe auf diese Art verglichen:
1. es wird geprüft, ob der jeweilige Buchstabe der Lösungs- mit dem jeweiligen der Eingabemöglichkeit verglichen. Bei Negativem Ausfall wird Fehler inkrementiert.
2. Wenn der Vergleich sich als falsch erweist, wird der Lösungsbuchstabe mit dem jeweilig nächsten der Eingabemöglichkeit verglichen, um eventuell zuviel eingegebene Buchstaben zu berücksichtigen. Daher wird beim einem Positiven Ausfall die Variable Ausgleich Incrementiert (Fehler ist ja schon Inkrementiert worden). Bei einem Negativen Ausfall wird der Lösungsbuchstabe mit dem jeweilig davorstehenden der Eingabemöglichkeit verglichen, um eventuell vergessene Buchstaben zu berücksichtigen. In diesem Fall wird Ausgleich Decrementiert, Fehler aber wieder Dekrementiert, weil Fehler vorher schon Inkrementiert wurde, aber der vorherige Buchstabe schon für einen Fehler gesorgt hat.
Nun sucht sich das Programm zu jeder richtigen Möglichkeit die Eingabemöglichkeit mit den wenigsten Tippfehlern.
Die Fehler werden zusammengerechnet und man hat, theoretisch, die Gesamtanzahl der Tippfehler.
Beim Kompilieren werden keine Fehler, Warnungen oder Hinweise angezeigt.
Ich suche schon seit über einer Woche nach dem Fehler und hoffe auf Hilfe.
ich habe einen Vokabeltrainer programmiert. (Siehe Anhang.)
Bei der Abfrage treten allerdings Fehler auf.
Die Vokabel wird nicht richtig ausgewertet, sodass die anzahl der Falschen Buchstaben verfälscht wird:
Quellcode
- procedure TForm1.Button6Click(Sender: TObject);
- var auswahl, gessum: integer;
- sprach1, sprach2, eingabe: string;
- richtanz: Boolean;
- label 1;
- begin
- ZaeleNochAbzuFr(nochabzufr, gessum);
- RandomVokabel(nochabzufr, auswahl);
- if gessum > 0 then
- begin
- ChangeVokabel(auswahl, radiogroup1.ItemIndex, sprache1, sprache2, sprach1,sprach2);
- 1:
- begin
- FrageAb(Vokabel1, Sprach1, Sprach2, Eingabe);
- VergleicheVokabel(eingabe, vokabel2, checkbox1.checked, fehler, richtanz);
- if (not richtanz) and (eingabe <> '') then goto 1;
- if eingabe <> '' then
- begin
- ShowMessage(sprach1 + ' - '+ sprach2 +#10#13+ vokabel1 + ' - '+vokabel2+#10#13+'Es werden noch '+inttostr(gessum)+' Vokabeln abgefragt.'+#10#13+'Du hast '+inttostr(fehler) {Hier zeigt sich der Fehler.} +' falsche Buchstaben eingegeben.');
- end;
- end;
- end;
- end;
Quellcode
- procedure TForm1.VergleicheVokabel (Vokabel1, Vokabel2: String; FilterLeerZeichen: Boolean; var Fehler: Integer; var KonnteVergleichen: Boolean);
- var i, j, gesamtfehler: Integer;
- Moeglichkeiten, Moeglichkeiten1, fehlerpromoegl: TStringList;
- begin
- gesamtfehler:=0;
- Moeglichkeiten := TStringlist.Create;
- Moeglichkeiten1 := TStringlist.Create;
- fehlerpromoegl := TStringlist.Create;
- GetMoeglichkeiten(Eingabe, filterleerzeichen, Moeglichkeiten);
- GetMoeglichkeiten(Vokabel2, filterleerzeichen, Moeglichkeiten1);
- KonnteVergleichen := Moeglichkeiten.Count=Moeglichkeiten1.Count;
- if KonnteVergleichen then
- begin
- //Vergleiche
- for i := 0 to Moeglichkeiten.Count-1 do
- begin
- for j := 0 to moeglichkeiten1.count-1 do
- begin
- fehler:=0;
- VergleicheMoeglichkeit(Moeglichkeiten1[i], moeglichkeiten[j], Fehler);
- FehlerProMoegl.Add(inttostr(fehler));
- end;
- end;
- end;
- for i := 0 to moeglichkeiten.count-1 do
- begin
- fehler := StrToInt(FehlerProMoegl[i*moeglichkeiten.count]);
- for j := 0 to moeglichkeiten1.count-1 do
- begin
- if StrToInt(FehlerProMoegl[i*moeglichkeiten.count+j]) < fehler then fehler := StrToInt(FehlerProMoegl[i*moeglichkeiten.count+j]);
- end;
- inc(GesamtFehler, Fehler);
- end;
- fehler := gesamtfehler;
- end;
Quellcode
- procedure TForm1.GetMoeglichkeiten (Vokabel: String; LeerzFiltern: Boolean; Var Moeglichkeiten: TStringlist);
- var i: Integer;
- Moeglichkeit, Filter: String;
- begin
- Filter:='';
- if leerzfiltern then
- begin
- for i := 1 to Length(Vokabel) do
- begin
- if vokabel[i] <> '' then Filter:=filter+vokabel[i];
- end;
- Vokabel := filter;
- end;
- for i := 1 to Length(Vokabel) do
- begin
- if (Vokabel[i]<>',') and (vokabel[i] <> ';') then Moeglichkeit := Moeglichkeit + Vokabel[i]
- else
- begin
- Moeglichkeiten.Add(Moeglichkeit);
- Moeglichkeit:='';
- end;
- end;
- Moeglichkeiten.Add(Moeglichkeit);
- Moeglichkeit:='';
- end;
Quellcode
- procedure TForm1.VergleicheMoeglichkeit (Moegl1, Moegl2: String; var Fehler: integer);
- var i, ausgleich: Integer;
- begin
- ausgleich := 0;
- Fehler := 0;
- for i := 1 to length(moegl1) do
- begin
- if i+ausgleich > length(moegl2) then inc(fehler) else
- begin
- if UpperCase(moegl1[i]) <> UpperCase(moegl2[i + ausgleich]) then
- begin
- inc(Fehler);
- if uppercase(moegl1[i]) = uppercase(moegl2[i + ausgleich - 1]) then
- begin
- dec(ausgleich);
- dec(fehler);
- end
- else
- if uppercase(moegl1[i]) = uppercase(moegl2[i + ausgleich + 1]) then
- begin
- inc(ausgleich)
- end;
- end;
- end;
- end;
- end;
Quellcode
- procedure TForm1.ChangeVokabel(auswahl, WasZuWas: integer; sprache1, sprache2: string; var sprach1, sprach2: string);
- begin
- case WasZuWas of
- 0: begin
- vokabel1 := vokabelnf1[auswahl]; sprach1 := sprache1;
- vokabel2 := vokabelnf2[auswahl]; sprach2 := sprache2;
- end;
- 1: begin
- vokabel2 := vokabelnf1[auswahl]; sprach2 := sprache1;
- vokabel1 := vokabelnf2[auswahl]; sprach1 := sprache2;
- end;
- 2: begin
- case random(2) of
- 0: begin
- vokabel1 := vokabelnf1[auswahl]; sprach1 := sprache1;
- vokabel2 := vokabelnf2[auswahl]; sprach2 := sprache2;
- end;
- 1: begin
- vokabel2 := vokabelnf1[auswahl]; sprach2 := sprache1;
- vokabel1 := vokabelnf2[auswahl]; sprach1 := sprache2;
- end;
- end;
- end;
- end;
- end;
Quellcode
Ich glaube, dass die Eingabe nicht richtig übergeben wird.
Hier die Beschreibung, was die Prozedur VergleicheVokabel macht:
Die Vokabel wird auf Kommas und Simikola überprüft.
Dann werden die einzelnen Möglichkeiten in eine Stringliste übergeben.
Dies passiert mit der richtigen Vokabel, sowie mit der Eingabe.
Nun wird jede Möglichkeit der Lösung mit jeder Möglichkeit der Eingabe auf diese Art verglichen:
1. es wird geprüft, ob der jeweilige Buchstabe der Lösungs- mit dem jeweiligen der Eingabemöglichkeit verglichen. Bei Negativem Ausfall wird Fehler inkrementiert.
2. Wenn der Vergleich sich als falsch erweist, wird der Lösungsbuchstabe mit dem jeweilig nächsten der Eingabemöglichkeit verglichen, um eventuell zuviel eingegebene Buchstaben zu berücksichtigen. Daher wird beim einem Positiven Ausfall die Variable Ausgleich Incrementiert (Fehler ist ja schon Inkrementiert worden). Bei einem Negativen Ausfall wird der Lösungsbuchstabe mit dem jeweilig davorstehenden der Eingabemöglichkeit verglichen, um eventuell vergessene Buchstaben zu berücksichtigen. In diesem Fall wird Ausgleich Decrementiert, Fehler aber wieder Dekrementiert, weil Fehler vorher schon Inkrementiert wurde, aber der vorherige Buchstabe schon für einen Fehler gesorgt hat.
Nun sucht sich das Programm zu jeder richtigen Möglichkeit die Eingabemöglichkeit mit den wenigsten Tippfehlern.
Die Fehler werden zusammengerechnet und man hat, theoretisch, die Gesamtanzahl der Tippfehler.
Beim Kompilieren werden keine Fehler, Warnungen oder Hinweise angezeigt.
Ich suche schon seit über einer Woche nach dem Fehler und hoffe auf Hilfe.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von blender ()