unit MainCalcPart;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
procedure VokCalc;
implementation
uses Frame;
procedure VokCalc;
var StrList: TStringList;
iI, kI, lI, jI: Integer;
begin
StrList:= TStringList.Create;
Frame_1.SVoksToDo.Clear;
StrList.Clear;
randomize;
//3 Neue Vokabeln
begin
for iI := 1
to 3
do
begin
If (Frame_1.LastVokIndex+1) <= Frame_1.OverAllVok
then
begin
inc(Frame_1.LastVokIndex);
Frame_1.SVoksToDo.Add(Frame_1.savestring[Frame_1.savestring.IndexOf('
NR' + inttostr(Frame_1.LastVokIndex))+7]);
end;
end;
end;
//5 aus Aktueller Lektion
begin
for iI := 1
to Frame_1.OverAllVok
do
begin
If (strtoint(Frame_1.savestring[(Frame_1.savestring.IndexOf('
NR'+ inttostr(iI)) + 5)]) = Frame_1.acuteLekt)
then
begin
If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]) = (-1)
then
begin
if StrList.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]) = (-1)
then
begin
StrList.Add(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]);
end;
end;
end;
end;
begin
if StrList.Count >= 5
then
begin
Frame_1.SVoksToDo.Add(StrList[random((StrList.Count-1)
div 5)]);
Frame_1.SVoksToDo.Add(StrList[random((StrList.Count-1)
div 5)+ (1*((StrList.Count)
div 5))]);
Frame_1.SVoksToDo.Add(StrList[random((StrList.Count-1)
div 5)+ (2*((StrList.Count)
div 5))]);
Frame_1.SVoksToDo.Add(StrList[random((StrList.Count-1)
div 5)+ (3*((StrList.Count)
div 5))]);
Frame_1.SVoksToDo.Add(StrList[random(((StrList.Count-1)
div 5) + ((StrList.Count)
mod 5)) + (4*((StrList.Count)
div 5))]);
StrList.Clear;
end;
end;
end;
//2 Problemfälle aus akt. Lektion
begin
for Ii := 1
to Frame_1.OverallVok
do
begin
If (strtoint(Frame_1.savestring[(Frame_1.savestring.IndexOf('
NR'+ inttostr(iI)) + 5)]) = Frame_1.acuteLekt)
then
begin
If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]) = (-1)
then
begin
if Frame_1.savestring[Frame_1.savestring.IndexOf('
Nr' + inttostr(iI)) + 1] = '
1'
then
begin
if StrList.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]) = (-1)
then
begin
if ((strtofloat(Frame_1.savestring[Frame_1.savestring.IndexOf('
NR' + inttostr(iI)) + 2])) /
(strtofloat(Frame_1.savestring[Frame_1.savestring.IndexOf('
NR' + inttostr(iI)) + 3]))) <
Frame_1.FailRatio
then
begin
StrList.Add(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]);
end;
end;
end;
end;
end;
end;
begin
if StrList.Count >= 2
then
begin
iI:=random(StrList.Count);
Frame_1.SVoksToDo.Add(StrList[iI]);
repeat
kI:=random(StrList.Count);
Frame_1.SVoksToDo.Add('
es geht');
until kI <> iI;
Frame_1.SVoksToDo.Add(StrList[kI]);
end;
end;
StrList.Clear;
end;
//3 Problemfälle aus letzten beiden Lektionen
begin
for iI := 1
to Frame_1.OverAllVok
do
begin
If ((strtoint(Frame_1.savestring[(Frame_1.savestring.IndexOf('
NR'+ inttostr(iI)) + 5)])) >= Frame_1.acuteLekt -2)
and
((strtoint(Frame_1.savestring[(Frame_1.savestring.IndexOf('
NR'+ inttostr(iI)) + 5)])) < Frame_1.acuteLekt)
then
begin
If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]) = (-1)
then
begin
if Frame_1.savestring[Frame_1.savestring.IndexOf('
Nr' + inttostr(iI)) + 1] = '
1'
then
begin
if StrList.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]) = (-1)
then
begin
if ((strtofloat(Frame_1.savestring[Frame_1.savestring.IndexOf('
NR' + inttostr(iI)) + 2])) /
(strtofloat(Frame_1.savestring[Frame_1.savestring.IndexOf('
NR' + inttostr(iI)) + 3]))) <
(Frame_1.FailRatio - 0.2)
then
begin
StrList.Add(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]);
end;
end;
end;
end;
end;
end;
begin
if StrList.Count >= 3
then
begin
iI:=random(StrList.Count);
Frame_1.SVoksToDo.Add(StrList[iI]);
repeat
kI:=random(StrList.Count);
until kI <> iI;
Frame_1.SVoksToDo.Add(StrList[kI]);
repeat
lI:=random(StrList.Count);
until (lI <> iI)
and (lI <> kI);
Frame_1.SVoksToDo.Add(StrList[lI]);
end;
end;
StrList.Clear;
end;
//2 Zufall
begin
for iI := 1
to Frame_1.OverAllVok
do
begin
If ((strtoint(Frame_1.savestring[(Frame_1.savestring.IndexOf('
NR'+ inttostr(iI)) + 5)])) < Frame_1.acuteLekt)
then
begin
If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]) = (-1)
then
begin
if Frame_1.savestring[Frame_1.savestring.IndexOf('
Nr' + inttostr(iI)) + 1] = '
1'
then
begin
if StrList.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]) = (-1)
then
begin
StrList.Add(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]);
end;
end;
end;
end;
end;
begin
if StrList.Count >= 2
then
begin
iI:=random(StrList.Count);
Frame_1.SVoksToDo.Add(StrList[iI]);
repeat
kI:=random(StrList.Count);
until kI <> iI;
Frame_1.SVoksToDo.Add(StrList[kI]);
end;
end;
StrList.Clear;
end;
// Auffüllen etwaiger Lücken
if Frame_1.SVoksToDo.Count < 15
then
begin
// 2 Zufall
begin
for iI := 1
to Frame_1.OverAllVok
do
begin
If ((strtoint(Frame_1.savestring[(Frame_1.savestring.IndexOf('
NR'+ inttostr(iI)) + 5)])) < Frame_1.acuteLekt)
then
begin
If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]) = (-1)
then
begin
if Frame_1.savestring[Frame_1.savestring.IndexOf('
Nr' + inttostr(iI)) + 1] = '
1'
then
begin
if StrList.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]) = (-1)
then
begin
StrList.Add(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]);
end;
end;
end;
end;
end;
begin
if StrList.Count > 0
then
begin
if Frame_1.SVoksToDO.Count = 1
then
begin
Frame_1.SVoksToDo.Add(StrList[random(StrList.Count)]);
end
else
begin
iI:=random(StrList.Count);
Frame_1.SVoksToDo.Add(StrList[iI-1]);
repeat
kI:=random(StrList.Count);
until kI <> iI;
Frame_1.SVoksToDo.Add(StrList[kI-1]);
end;
end;
begin
iI:=15-Frame_1.SVoksToDo.Count;
if iI >= 1
then
begin
begin
for jI := 1
to iI
do
begin
If not (Frame_1.LastVokIndex > Frame_1.OverAllVok)
then
begin
inc(Frame_1.LastVokIndex);
If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(Frame_1.LastVokIndex))+7]) = (-1)
then
begin
Frame_1.SVoksToDo.Add(Frame_1.savestring[Frame_1.savestring.IndexOf('
NR' + inttostr(Frame_1.LastVokIndex))+7]);
end
else
begin
break;
end;
end
else
begin
break;
end;
end;
If (Frame_1.LastVokIndex > Frame_1.OverAllVok)
then
begin
//Zufälllig
begin
for iI := 1
to Frame_1.OverAllVok
do
begin
If ((strtoint(Frame_1.savestring[(Frame_1.savestring.IndexOf('
NR'+ inttostr(iI)) + 5)])) < Frame_1.acuteLekt)
then
begin
If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]) = (-1)
then
begin
if Frame_1.savestring[Frame_1.savestring.IndexOf('
Nr' + inttostr(iI)) + 1] = '
1'
then
begin
if StrList.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]) = (-1)
then
begin
StrList.Add(Frame_1.savestring[Frame_1.savestring.indexOf('
NR' + inttostr(iI))+7]);
end;
end;
end;
end;
end;
begin
for kI:=1
to (15 - Frame_1.SVoksToDo.count)
do
begin
lI:= random(StrList.Count)+1;
//darum geht's: mache ich die Kommentarzeichen weg, ensteht der error!
// Frame_1.SVoksToDo.Add('buhuuu');
end;
end;
StrList.Clear;
end;
end;
end;
end;
end;
end;
end;
StrList.Clear;
end;
end;
end.