Показать сообщение отдельно
  #5  
Старый 27.06.2012, 12:04
IzIFRag IzIFRag вне форума
Прохожий
 
Регистрация: 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;
Ответить с цитированием