Автор: ZBEP
Дата сообщения: 11.12.2010 02:56
Обнаружил то ли баг, то ли косяк в способе реализации, ток хз как объяснить правильно.
Выложу часть кода, может, кто разберется.
Код: var
Form2: TForm2;
NPred,NPrep,NChas:array [0..50,0..100,1..6,1..6]of string;
SP:array [1..100] of TEdit;
SB:array [1..100] of TRadioButton;
IniFile: TIniFile;
...
var n,i:integer;
begin
IniFile:=TIniFile.Create(extractfilepath(paramstr(0))+'Data\BD.ini');
for n:=1 to 30 do
for i:=1 to 100 do
begin
ZPred[i,n]:=IniFile.ReadString('Предмет_'+inttostr(i),inttostr(n),'');
ZPrep[i,n]:=IniFile.ReadString('Преподаватель_'+inttostr(i),inttostr(n),'');
ZChas[i,n]:=IniFile.ReadString('Часы_'+inttostr(i),inttostr(n),'');
end;
...
function sIF(F:TForm;Zna1,Zna2:String;Ned,Den,Yro:integer):integer;
var Rez,Grp1:integer;
begin
for Grp1:=1 to 100 do
if(Zna1=NPred[Ned,Grp1,Den,Yro])or(Zna2=NPrep[Ned,Grp1,Den,Yro])then Rez:=1;
if rez=1 then Result:=0 else Result:=1;
end;
procedure TForm2.SpeedButton3Click(Sender: TObject);
var nre,n,np,Ned,Grp,Den,Yro:integer;
begin
for n:=1 to 100 do
if SB[n].Checked=true then nre:=n;
for np:=1 to 30 do
for Yro:=1 to 6 do
for Grp:=1 to 100 do
for Ned:=1 to 50 do
for Den:=1 to 6 do
begin
if (sIF(Form1,ZPred[Grp,np],ZPrep[Grp,np],Ned,Den,Yro)=1)and(NPred[Ned,Grp,Den,Yro]='') then
begin
NPred[Ned,Grp,Den,Yro]:=ZPred[Grp,np];
NPrep[Ned,Grp,Den,Yro]:=ZPrep[Grp,np];
end;
nre:=strtoint(inttostr(nre)); //
nre:=strtoint(inttostr(nre)); //Если это стереть, то работает некорректно.
nre:=strtoint(inttostr(nre)); //Если заменить на sleep, то все равно будет работать не корректно.
nre:=strtoint(inttostr(nre)); //Да и намного дольше.
nre:=strtoint(inttostr(nre)); //Если цикл уменьшить к примеру со 100 до 2
nre:=strtoint(inttostr(nre)); //То все нормально работает, но необходимо 100
nre:=strtoint(inttostr(nre)); //Конечно не обязательно именно так делать.
nre:=strtoint(inttostr(nre)); //Это первое, что пришло на ум.
end;