Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Нужно что-то похожее на array


Автор: Secandr 20.4.2005, 08:43
В скриптовых языках аля Perl есть такая конструкция:

Цитата
$a{1000}=2;
$a{1000000}=3;


при этом будет создан массив из двух элементов.

Как сделать такое в делфи?

Единственое что приходит на ум сделать такую структуру:
Код

a[0].key:=1000;
a[0].value:=2;
a[1].key:=1000000;
a[1].value:=3;

Автор: Secandr 20.4.2005, 10:00
Вот что я забубенил!
Смысл кода: сделать програмную интерполяцию, т.е. по заданым точкам получить значение в промежуточных.
Код

// немного пропущено

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;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)