Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2010, 17:41   #1
ProgDel
Пользователь
 
Аватар для ProgDel
 
Регистрация: 15.02.2010
Сообщений: 67
По умолчанию Как сократить код DLL

Я написал конвертер величин. Идея там такая: Пользователь выбирает из списка категории типа - длинна, масса, площадь и дт. Во втором списке выбираеться величина из которую надо перевести, а в третем списке находится велечины в которые выполняется перевод. В момент когда выбарается строка третьего списка загружаеться DLL и производит вычисления. Но код бибиотеки слишком большой получается. Как его сократить?
Тут часть кода DLL.
Код:
function ListboxizItemIndex0(ListboxVItemIndex: integer; Iz:real):real;
begin
case ListboxVItemIndex of
0: Result := Iz * 1;           // Аршин
1: Result := Iz * 0.00065618;  // Верста
2: Result := Iz * 17.5;        // Вершок
3: Result := Iz * 7;           // Дициметр
4: Result := Iz * 27.5591;     // Дюйм
5: Result := Iz * 0.0037797;   // Кабельтов
6: Result := Iz * 0.0007;      // Километр
7: Result := Iz * 275.591;     // Линия
8: Result := Iz * 0.7;         // Метр
9: Result := Iz * 700;         // Миллиметр
10: Result := Iz * 3.88889;     // Четверть
11: Result := Iz * 0.00037797;  // Миля морская
12: Result := Iz * 0.00043496;  // Миля сухопутная
13: Result := Iz * 0.328176;   // Сажень
14: Result := Iz * 70;         // Сантиметр
end;
end;

function ListboxizItemIndex1(ListboxVItemIndex: integer; Iz:real):real;
begin
case ListboxVItemIndex of
0: Result := Iz * 1523.97;
1: Result := Iz * 1;
2: Result := Iz * 26669.5;
3: Result := Iz * 10667.8;
4: Result := Iz * 41999.3;
5: Result := Iz * 5.76016;
6: Result := Iz * 1.06678;
7: Result := Iz * 419993;
8: Result := Iz * 1066.78;
9: Result := Iz * 1.06678E6;
10: Result := Iz * 5926.56;
11: Result := Iz * 0.576016;
12: Result := Iz * 0.662867;
13: Result := Iz * 500.132;
14: Result := Iz * 106678;
end;
end;

function ListboxizItemIndex2(ListboxVItemIndex: integer; Iz:real):real;
begin
case ListboxVItemIndex of
0: Result := Iz * 0.0571429;
1: Result := Iz * 3.7496E-5;
2: Result := Iz * 1;
3: Result := Iz * 0.4;
4: Result := Iz * 1.5748;
5: Result := Iz * 0.000215983;
6: Result := Iz * 4E-5;
7: Result := Iz * 15.748;
8: Result := Iz * 0.04;
9: Result := Iz * 40;
10: Result := Iz * 0.222222;
11: Result := Iz * 2.15983e-5;
12: Result := Iz * 2.48548e-5;
13: Result := Iz * 0.0187529;
14: Result := Iz * 4;
end;
end;

function ListboxizItemIndex3(ListboxVItemIndex: integer; Iz:real):real;
begin
case ListboxVItemIndex of
0: Result := Iz * 0.142857;
1: Result := Iz * 9.374E-5;
2: Result := Iz * 2.5;
3: Result := Iz * 1;
4: Result := Iz * 3.93701;
5: Result := Iz * 0.000539957;
6: Result := Iz * 0.0001;
7: Result := Iz * 39.3701;
8: Result := Iz * 0.1;
9: Result := Iz * 100;
10: Result := Iz * 0.4;
11: Result := Iz * 5.39957e-5;
12: Result := Iz * 6.21371e-5;
13: Result := Iz * 0.0468823;
14: Result := Iz * 10;          
end;
end;

function ListboxizItemIndex4(ListboxVItemIndex: integer; Iz:real):real;
begin
case ListboxVItemIndex of
0: Result := Iz * 0.0362857;
1: Result := Iz * 2.38099E-5;
2: Result := Iz * 0.635;
3: Result := Iz * 0.254;
4: Result := Iz * 1;
5: Result := Iz * 0.000137149;
6: Result := Iz * 2.54E-5;
7: Result := Iz * 10;
8: Result := Iz * 0.0254;
9: Result := Iz * 25.4;
10: Result := Iz * 1.5748;
11: Result := Iz * 1.37149e-5;
12: Result := Iz * 1.57828e-5;
13: Result := Iz * 0.0119081;
14: Result := Iz * 2.54;
end;
end;

function ListboxizItemIndex5(ListboxVItemIndex: integer; Iz:real):real;
begin
case ListboxVItemIndex of
0: Result := Iz * 264.571;
1: Result := Iz * 0.173606;
2: Result := Iz * 4630;
3: Result := Iz * 1852;
4: Result := Iz * 7291.34;
5: Result := Iz * 1;
6: Result := Iz * 0.1852;
7: Result := Iz * 72913.4;
8: Result := Iz * 185.2;
9: Result := Iz * 185200;
10: Result := Iz * 0.000215983;
11: Result := Iz * 0.1;
12: Result := Iz * 0.115078;
13: Result := Iz * 86.8261;
14: Result := Iz * 18520;
end;
end;

function ListboxizItemIndex6(ListboxVItemIndex: integer; Iz:real):real;
begin
case ListboxVItemIndex of
0: Result := Iz * 1428.57;
1: Result := Iz * 0.9374;
2: Result := Iz * 2500;
3: Result := Iz * 10000;
4: Result := Iz * 39370.1;
5: Result := Iz * 5.399957;
6: Result := Iz * 1;
7: Result := Iz * 393701;
8: Result := Iz * 1000;
9: Result := Iz * 1E6;
10: Result := Iz * 4E-5;
11: Result := Iz * 0.539957;
12: Result := Iz * 0.621371;
13: Result := Iz * 428.823;
14: Result := Iz * 100000;
end;
end;

function ListboxizItemIndex7(ListboxVItemIndex: integer; Iz:real):real;
begin
case ListboxVItemIndex of
0: Result := Iz * 0.00362857;
1: Result := Iz * 2.38099E-6;
2: Result := Iz * 0.0635;
3: Result := Iz * 0.0254;
4: Result := Iz * 0.1;
5: Result := Iz * 1.37149E-5;
6: Result := Iz * 2.54E-6;
7: Result := Iz * 1;
8: Result := Iz * 0.00254;
9: Result := Iz * 2.54;
10: Result := Iz * 15.748;
11: Result := Iz * 1.37149e-6;
12: Result := Iz * 1.57828e-6;
13: Result := Iz * 0.00119081;
14: Result := Iz * 0.254;
end;
end;
ProgDel вне форума Ответить с цитированием
Старый 16.02.2010, 17:45   #2
crystalbit
ГОСТ 2.403-75
Пользователь
 
Аватар для crystalbit
 
Регистрация: 04.05.2009
Сообщений: 92
По умолчанию

Код:
function ListboxizItemIndex0(ListboxVItemIndex: integer; Iz:real):real;
const ts:array[0..14] of real=(1, 0.00065618, и так все 14 значений);
begin
  Result:=ts[ListboxVItemIndex] * Iz;
end;
мой скромный delphi блог
crystalbit вне форума Ответить с цитированием
Старый 16.02.2010, 18:59   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Есть ещё варианты:
1) Сделать 1 функцию, а в ней двумерный массив (как спортивная таблица)
2) Вместо 14 функций создать две. 1-ая переводит всё, например, в аршины, а 2-ая переводит аршины в любую другую систему измерений.
eoln вне форума Ответить с цитированием
Старый 16.02.2010, 21:12   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

два массива коэффициентов (ед ->м и м->ед)
+ функция (ед исх, вел, ед рез): вел рез

рез:=вел * кофф1[ед исх] * кофф2[ед рез];

а если подумать то и одного массива достаточно x и 1/x
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 16.02.2010 в 21:18.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сократить время выполнения макроса? Алексей11111 Microsoft Office Excel 11 01.12.2009 20:04
Как сократить формулу ruavia3 Microsoft Office Excel 18 22.04.2009 16:11
Как можно сократить код jocry Общие вопросы Delphi 2 20.01.2009 08:35
Как сократить время? МАКРОС! jungo Microsoft Office Excel 17 01.05.2008 12:13