
27.06.2012, 12:04
|
Прохожий
|
|
Регистрация: 01.08.2010
Сообщения: 10
Репутация: 10
|
|
В общем если интересно или пригодится вдруг:
Код:
procedure TForm1.Button11Click(Sender: TObject);
const
COLUMNS = 7;
var
DataFL: array of array [0..COLUMNS] of Extended;
DataC: array of array [0..1] of Extended;
FdelLmas: array [1..columns]of extended;
f,f2: TextFile;
i, Len,index,j,indexFL: integer;
FdelL: real;
begin
AssignFile(f,'PrilFL.txt'); //читаем файл, где весь масив вещ. чисел
Reset(f);
while not Eof(f) do
begin
Len := Length(DataFL);
SetLength(DataFL, Len + 1);
for i := 0 to columns do
Read(f, DataFL[Len, i]);
Readln(f);
end;
CloseFile(f);
indexfl:=0; form1.Label17.Caption:='К. формы водосбора = ';
label14.Caption:='Параметр Ф = ';
Fz:=Strtofloat(Form1.Edit1.Text); //Получаем зачение F
L:=Strtofloat(Form1.Edit3.Text); //Получаем зачение L
C1:=0;
FdelL:=Fz/L; //Получаем зачение F/L
if Fz>84 then showmessage('Ошибка значения F')
else begin
for i := 0 to Len do
if Fz= Datafl[i,0] then //Значение F только в первом столбце,
begin // если находим такое то запоминаем строку и идем дальше
index:=i;
if FdelL< Datafl[index,1] then indexfl:=1 //тут смотрим на строку и ищем близкий элемент к F/L
else
if fdell>datafl[index,7] then indexfl:=7
else
begin
for j := 1 to columns do begin
if ((FdelL>datafl[index,j]) and (FdelL<=datafl[index,j+1])) then
begin
if (abs(dataFl[index,j]-FdelL) < abs(dataFl[index,j+1]-FdelL)) then
indexFL:=j else indexFL:=j+1; // ну и после нахождения близкого находим его индекс
end; end;
end;
end
else //Если F не найдено, то нужно вычислять дополнительные F/L для него:
begin
if (fz>Datafl[i,0]) and (fz<Datafl[i+1,0]) then //находим между какими строками F
begin
for j:=1 to columns do
begin // интерполяцией вычисляем строку с новыми значениями F/L для этого значения F
FdelLmas[j]:=(((fz-Datafl[i,0])/(Datafl[i+1,0]-Datafl[i,0])*(Datafl[i+1,j]-Datafl[i,j])+Datafl[i,j] ));
end;
if FdelL < (fdellmas[1]) then indexfl:= 1 //тут смотрим на новую строку и ищем близкий элемент к F/L
else
if fdell>fdellmas[columns] then indexfl:=7
else
begin
for j := 1 to columns do
if ((FdelL>fdellmas[j]) and (FdelL<=fdellmas[j+1])) then
begin
if (abs(fdellmas[j]-FdelL) < abs(fdellmas[j+1]-FdelL)) then
indexFL:=j else indexFL:=j+1; // ну и после нахождения близкого находим его индекс
end;
end; end;
end;
case indexfl of //выбираем график близкий к числу
1: label4.caption:='grafik 1';
2: label4.caption:='grafik 2';
3: label4.caption:='grafik 3';
4: label4.caption:='grafik 4';
5: label4.caption:='grafik 5';
6: label4.caption:='grafik 6';
7: label4.caption:='grafik 7';
end; end;
end;
|