Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужно что-то похожее на array 
:(
    Опции темы
Secandr
Дата 20.4.2005, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 1
Всего: 39



В скриптовых языках аля Perl есть такая конструкция:

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


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

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

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

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



--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Secandr
Дата 20.4.2005, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 1
Всего: 39



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

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

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;



--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.