Вот что я забубенил! Смысл кода: сделать програмную интерполяцию, т.е. по заданым точкам получить значение в промежуточных.
| Код | // немного пропущено
type tt=record key:integer; value:real; end; att=array[0..10] of tt;
// немного пропущено
procedure interpol(a:att;key:integer;n:integer;var value:real); var min,max,mmin,mmax,i:integer; begin min:=0;mmin:=0; max:=n;mmax:=n;
for i:=0 to n do begin if ((a[i].key<key)and(a[i].key>a[min].key)) then begin mmin:=min;min:=i; end else if ((a[i].key<key)and(a[i].key>a[mmin].key)) then mmin:=i; if ((a[i].key>key)and(a[i].key<a[max].key)) then begin mmax:=max;max:=i; end else if ((a[i].key>key)and(a[i].key<a[mmax].key)) then mmax:=i; end; value:=0; if (key>a[n].key) then begin value:=a[mmin].value + (a[min].value-a[mmin].value)/(a[min].key-a[mmin].key)*(key-a[mmin].key); end else if (key<a[0].key) then begin value:=a[max].value + (a[mmax].value-a[max].value)/(a[mmax].key-a[max].key)*(key-a[max].key); end else begin value:=a[min].value + (a[max].value-a[min].value)/(a[max].key-a[min].key)*(key-a[min].key); end;
end;
procedure TForm1.Button1Click(Sender: TObject); Var a:att; v:real; begin a[0].key:=100;a[0].value:=20; a[1].key:=300;a[1].value:=60; a[2].key:=500;a[2].value:=100; a[3].key:=700;a[3].value:=140; a[4].key:=900;a[4].value:=180; a[5].key:=1100;a[5].value:=220;
interpol(a,strtoint(edit1.Text),5,v); label1.Caption:=FloatToStr(v);
end;
| |