Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.11;
Скачать: CL | DM;

Вниз

Как заполнить статический массив записей.   Найти похожие ветки 

 
Kolan ©   (2008-04-09 16:22) [0]

Здравствуйте,
 Мне надо в коде программы захардкодить, так сказать, таблицу соответствия.
 Таблица примерно такая:
 1, 2 соотвтетствуют 3.167
 2, 6 соотвтетствуют 6.453


То есть в строке таблицы есть три числа. Дава целы — ключи и одно с плавающей точкой — значение.

Вопрос как это записать в коде?

Я подумал, что логично использовать для строк таблицы запись вида:
TRec =
 FA, FB: Integer;
 FValue: Double;
end;


А в качестве самой таблицы статитечский массив.

Заполнить такой массив не в ран тайме не знаю.

С массивом Integer проблем нет:
Table: array[0&#1331] of Integer = (0, 1);

Вопросы:
 Как правильно сделать то, что я хочу?
 Если действительно удобно использовать стат массив, то как его записать?


 
Kolan ©   (2008-04-09 16:24) [1]

> 0?

0&#1331 = 0&#133 1


 
Palladin ©   (2008-04-09 16:25) [2]

открываем справочку, идем в index и ищем пунктик "Record constants"


 
clickmaker ©   (2008-04-09 16:26) [3]

ну как-то так
const Table: array[...] of TRec = (
(FA: 1; FB: 2; FValue: 3.167),
...
);

PS. я бы не добавлял F к полям структуры


 
zorik ©   (2008-04-09 16:28) [4]

(FA: 1; FB: 2; Value: 3.167),


 
zorik ©   (2008-04-09 16:30) [5]

не успел


 
Kolan ©   (2008-04-09 16:46) [6]

> Record constants

Насилу нашел — плохой хелп.

Благодарю, разобрался.


 
Kolan ©   (2008-04-09 16:46) [7]

> PS. я бы не добавлял F к полям структуры

Согласен. Так получилось:
 SamplingFrequencyTable: array[0&#1331] of TSamplingFrequencyCorrespondence =
 (
   (DeviceType: $0103; DeviceVersion: $0500; SamplingFrequency: 97656.25/2;),
   (DeviceType: $0104; DeviceVersion: $0300; SamplingFrequency: 97656.25;)
 );


 
Kolan ©   (2008-04-09 18:12) [8]

TDeviceType =
 (
   dtDXS = $0103, {ДХС — что это значит не знает даже тот кто придумал эту аббривеатуру.}
   dtDPS = $0104  {ДПС — анналогично.}
 );

 {Строка таблицы соответствия частоты дискретизации типу и версии.}
 TSamplingFrequencyCorrespondence = record
   DeviceType: TDeviceType;
   DeviceVersion: Word;
   SamplingFrequency: Double;
 end;
const
 {Таблица соответствия частоты дискретизации типу и версии.}
 SamplingFrequencyTable: array[0&#1331] of TSamplingFrequencyCorrespondence =
 (
   (DeviceType: dtDXS; DeviceVersion: $0500; SamplingFrequency: 97656.25/2;),
   (DeviceType: dtDPS; DeviceVersion: $0300; SamplingFrequency: 97656.25;)
 );

Интересно а можно объявить этот массив так, чтобы можно было получать третий параетр напрямую, а не писать функцию поиска с циклом?
То есть как то так: A :=  SamplingFrequencyTable[dtDPS, $0300];
A = 97656.25;


 
Palladin ©   (2008-04-09 18:27) [9]

Type
TDeviceType =
(
  dtDXS = $0103, {ДХС — что это значит не знает даже тот кто придумал эту аббривеатуру.}
  dtDPS = $0104  {ДПС — анналогично.}
);

TSamplingFrequencyCorrespondence = record
  DeviceType: TDeviceType;
  DeviceVersion: Word;
  SamplingFrequency: Double;
end;

PSFC=^TSFC;
TSFC=TSamplingFrequencyCorrespondence; // умру писать полное название

TSFCList=Class
Private
 m_theItems:TStringList;

 Function lcGetCount:Integer;
 Function lcGetItem(p_nIndex:Integer):PSFC;
 Function lcGetItemBy(p_etDevType:TDeviceType;p_nVer:Word):Double;
Public
 Constructor Create;
 Destructor Destroy; Override;

 Property Count:Integer Read lcGetCount;
 Property ByTypeAndVer[etDevType:TDeviceType;nVer:Word]:Double Read lcGetItemBy; Default;
 Property Items[nIndex:Integer]:PSFC Read lcGetItem;

 Function Add(p_rSFC:TSFC):Integer; Overload;
 Function Add(p_rSFC:PSFC):Integer; Overload;
 Procedure Delete(p_nIndex:Integer);
 Procedure Clear;
End;

Function TSFCList.lcGetCount;
Begin
Result:=m_theItems.Count;
End;

Function TSFCList.lcGetItem;
Begin
Result:=PSFC(m_theItems.Objects[p_nIndex]);
End;

Function TSFCList.lcGetItemBy;
Var
n:Integer;
Begin
If Not m_theItems.Find(IntToStr(Integer(p_etDevType))+#9+IntToStr(p_nVer),n)
 Then Raise EListError.Create("а нету")
 Else Result:=Items[n].SamplingFrequency;
End;

Constructor TSFCList.Create;
Begin
m_theItems:=TStringList.Create;
m_theItems.Sorted:=True;
End;

Destructor TSFCList.Destroy;
Begin
Clear;
m_theItems.Free;
End;

Function TSFCList.Add(p_rSFC:TSFC):Integer;
Var
r:PSFC;
Begin
New(r);
r^:=p_rSFC;
Result:=Add(r);
End;

Function TSFCList.Add(p_rSFC:PSFC):Integer;
Var
s:String;
Begin
With p_rSFC^ Do s:=IntToStr(Integer(DeviceType))+#9+IntToStr(DeviceVersion);
If m_theItems.IndexOf(s)<>-1
 Then Raise EListError.Create("а уже есть")
 Else Result:=m_theItems.AddObject(s,TObject(p_rSFC));
End;

Procedure TSFCList.Delete;
Begin
Dispose(PSFC(m_theItems.Objects[p_nIndex]));
m_theItems.Delete(p_nIndex);
End;

Procedure TSFCList.Clear;
Begin
While m_theItems.Count<>0 Do Delete(0);
End;


а заполнять при инициализации приложения...


 
Kolan ©   (2008-04-09 18:30) [10]

> Palladin

Ты это для меня сейчас написал, да? Благодарю, круто, только ну его нафиг, я лучше цикл из 3х строк оставлю :).


 
Kolan ©   (2008-04-09 18:31) [11]

Стыдно даже столько кода пропадает :(&#133


 
Palladin ©   (2008-04-09 18:37) [12]

мне все равно делать нечего... писать то 7-10 минут... да и зря он не пропадет, думаю тем кто сюда заглянет, он будет полезен...


 
Kolan ©   (2008-04-09 18:40) [13]

> // умру писать полное название

Убью за непонятное сокращение. :)


 
Игорь Шевченко ©   (2008-04-09 18:49) [14]


>  m_theItems:TStringList;


Сишников давить!


 
Palladin ©   (2008-04-09 18:56) [15]

так параноидально подробно то тоже называть не нужно

TSamplingFrequencyCorrespondence
TSamplingFreqMapItem

уже проще...

Map - карта соответствий, термин Map из Java, у них там есть класс элементов ключ - значение, очень удобно его использовать в названиях...

MapItem - элемент карты соответствий...


 
Palladin ©   (2008-04-09 18:59) [16]


> Игорь Шевченко ©   (09.04.08 18:49) [14]

:)

я далеко не сишник,

1. понижения видимости аттрибутов и методов в D6 нет, скрыть лишний функционал наследованием не получится, приходится использовать агрегацию
2. а захочу поменяю на другой класс и программист-пользователь даже не заметит.
3. чем тебе эта разновидность "Стратегии" не нравится?


 
Palladin ©   (2008-04-09 19:04) [17]


> Игорь Шевченко ©   (09.04.08 18:49) [14]

аааа... дошло... :))) это ты из-за префикса меня придавить собрался...


 
Игорь Шевченко ©   (2008-04-09 19:06) [18]

Palladin ©   (09.04.08 18:59) [16]


> я далеко не сишник,


Это ты прокурору будешь рассказывать. Начинать имена private-полей с m_ - это сразу выдает латентного сишника или C#-ника. Кроме того, такой зоопарк названий (в VCL одно, в прикладном коде другое) сильно и ненужно нагружает голову.


 
guav ©   (2008-04-09 19:13) [19]

Сишники не пишут кейводы с большой буквы, нету там таких кейвордов. И префикс T там не нужен.


 
guav ©   (2008-04-09 19:19) [20]

И вообще не сишниковское дело контейнеры изобретать.


 
Kolan ©   (2008-04-09 19:20) [21]

> уже проще&#133

Согласен. Не пришло в голову.


> я далеко не сишник,

Да Паладин вообще оформляет код особым образом, помню спорили &#151; остался при своем мнении :)


 
Palladin ©   (2008-04-09 20:00) [22]


> Начинать имена private-полей с m_ - это сразу выдает латентного сишника

да да. а упражнение: стоя коснутся пальцами рук пальцев ног, выполненного мужчиной сразу выдает в нем латентного гомосексуала.

В моем code convention существует четкое разделение идентификаторов на категории:
1 private и protected члены класса m_
2 параметры процедур/функций/методов p_
3 локальные для процедур/функций/методов (без префиксов)
4 глобальные g_
Зачем мне это нужно и почему это так:
Есть такая вещь в IDE - Code completion, так вот, дабы обратится не суть помня полное название например приватного члена класса мне достаточно набрать m_ и нажать Ctrl-Space. Я вижу все доступные приватные члены класса. В отличии от боландовского F, кода вылезе все что на F. А на кой мне этот поток мусора?
Нужен параметр функции - набирать который долго. Та же операция p_

Второй момент: Я четко вижу, в методе передается параметрами два идентификатора, значения которых я должен приравнять к private или protected членам класса вот и пишем

m_nVar1:=p_nVar1;
m_strVar2:=p_strVar2;


позже возвращаясь к этому коду я сразу моментально для себя делаю вывод, ага, идет назначение приватным членам класса значений переданных параметрами. А не: мля!!!! чего же я тут кому присвоил то!!! и не лезу по Ctrl-Click по всем переменным, где же они объявлены то...

все эти категории обеспечивают наиболее лаконичную самодокументацию кода...

этот кусочек моего code convetion только для переменные и в сокращенном виде ) он оформления не касается... хотите доводов по оформлению? их есть у меня. по желанию выскажусь.


 
Игорь Шевченко ©   (2008-04-09 20:56) [23]

Palladin ©   (09.04.08 20:00) [22]


> этот кусочек моего code convetion только для переменные
> и в сокращенном виде ) он оформления не касается... хотите
> доводов по оформлению? их есть у меня. по желанию выскажусь.
>


Видишь ли, у Борланда тоже есть code conventions, и у этих conventions есть одна приятная особенность - они более распространены. Следовательно легче читаются и воспринимаются. Когда человек пишет для себя или для узкого круга лиц - проблем нету, когда эти conventions выходят наружу вот тут и начинается ступор восприятия. Будь подобный код написан на .Net-овском языке, я б слова не сказал - там они все с m_ начинаются.
А по собственному опыту - заниматься, пытаясь понять логику программы, переводом чужой конвенции в привычную - это делать двойную работу.
Какими бы благими намерениями не была выстлана чужая конвенция.


 
Palladin ©   (2008-04-09 21:15) [24]


> Игорь Шевченко ©   (09.04.08 20:56) [23]

Ну это уже другая опера. Convensions борланда это ее. Пришел в мою команду - будь добр постигни мою. Я приду в другую команду подчиненным - постигну их правила. Приду ведущим - гляну на состяние дел и либо оставлю текущие, либо, если все жестоко требует рефакторинга, переведу на свои. Многие соглашаются, что они энергономичней (по моему так пишется :) )и оптимальней как при работе в среде так и самодокументировании.
Ну а зоопарк. Не знаю. Благодаря этому зоопарку я вижу где мое, а где нет.


 
Игорь Шевченко ©   (2008-04-09 21:52) [25]

Palladin ©   (09.04.08 21:15) [24]


> Пришел в мою команду - будь добр постигни мою.


А скажи, если Delphi чего сгенерирует по Code Completion, ты тоже на свой лад потом переписываешь ?

Много лет я писал if foo then begin - старая сишная привычка, даже основание имелось для такого написания - строчек меньше выходит. С тех пор, как перешел на D2006, пишу
if foo then
begin

ПОТОМУ ЧТО ОНО МНЕ САМО ПРЕДЛАГАЕТ. А исправлять за сгенерированным - нунафиг, есть более интересные занятия.


 
Игорь Шевченко ©   (2008-04-09 21:52) [26]

Я конечно понимаю, что это все религия, но тем не менее :)


 
Palladin ©   (2008-04-09 23:17) [27]

) ну так это сразу понятно было, что религия началась...
а по поводу


> А скажи, если Delphi чего сгенерирует по Code Completion, ты тоже на свой лад потом переписываешь ?

Смотря что она генерирует. Модули форм я не трогаю. Как сгенерило так сгенерило. Мухи отдельно котлеты отдельно. Т.е., опять же, при возврате в прошлое по прошествии времени, прекрасно видно, что среда, а что я. Как completion генерирует по Ctrl-Alt-C меня не устраивает, потому не пользуюсь. Соответственно отключу все остальные нововведения completion"а в среде, выше чем d8... вот только мучают меня сильные сомнения в необходимости ухода с d6 выше чем d7...

Я не написал ни одной серьезной программы на другом ЯВУ и семейству Turbo паскаля посвятил всю свою жизнь. Больно видеть как все особенности и изюминки этого семейства расстворяются в создаваемом ширпотребе для армии посредственностей...

Посмотрим что наваяет cg. Пока не впечатляет...


 
Игорь Шевченко ©   (2008-04-10 00:12) [28]

Palladin ©   (09.04.08 23:17) [27]


> Больно видеть как все особенности и изюминки этого семейства
> расстворяются в создаваемом ширпотребе для армии посредственностей.
> ..


Тут я с тобой сильно не согласен, потому что среда с каждым выпуском (исключая D2005) делает работу программиста более удобной, избавляя его от рутинной работы. Мне удобно, когда код частично формируется за меня, избавляя от необходимости писать сначала объявление свойства в классе, а потом его реализацию, пусть даже простым копированием - я на эти действия не трачу времени.

А посредственности, поверь, могут на любом языке писать.


> Я не написал ни одной серьезной программы на другом ЯВУ


У меня разнообразие языков было несколько больше, но я не видел среды, аналогичной Delphi, где можно было бы с той же степенью удобства реализовывать свои замыслы. Может, я прошел мимо Visual Basic"а - говорят, там тоже удобно.


 
Anatoly Podgoretsky ©   (2008-04-10 00:20) [29]

> Игорь Шевченко  (10.04.2008 00:12:28)  [28]

Там пожалуй удобнее, я радовался когда свой сайт писал для ASP.NET


 
Германн ©   (2008-04-10 00:39) [30]


> Игорь Шевченко ©   (09.04.08 21:52) [25]
>
> Palladin ©   (09.04.08 21:15) [24]
>
>
> > Пришел в мою команду - будь добр постигни мою.
>
>
> А скажи, если Delphi чего сгенерирует по Code Completion

А я этот самый КодКомпишн так и не сумел переварить (((
И всякий раз хочется использовать ненормативную лексику, когда вышеназванный проявляет свою активность в BDS2006. Или я просто не смог настроить BDS2006. Я ею пользуюсь очень редко.


 
Игорь Шевченко ©   (2008-04-10 00:48) [31]

Германн ©   (10.04.08 00:39) [30]

Это наверное ты Code Templates имеешь в виду ? Когда пишешь if а оно тебе в if <и сюда курсор встает> then


 
Palladin ©   (2008-04-10 00:59) [32]


> Тут я с тобой сильно не согласен, потому что среда с каждым выпуском (исключая D2005) делает работу программиста более удобной, избавляя его от рутинной работы.

да я тут сам с собой бываю несогласен... с одной стороны давит наследие прошлого. то бишь сила привычки. с другой стороны: разик попробовал - да фу нафик, второй - да вроде и не так отвратительно, но лучше по старому... и так раз за разиком и ты уже готов смирится с недостатками ради новых достатков. вот и боязно...


> У меня разнообразие языков было несколько больше

не, ну я не говорил что ничего сложнее Hello World я на другом не писал. :)
Много рассматривал, много реализовывал залипушек, академических задач...
но все время возвращался к паскалю.

Сильно впечатлило множественное наследование в С++. Местами такие вещи красивые решения можно забабахать. Но, нестрогость языка оттолкнула... да и множественное наследование гораздо больше приятная фича, чем суровая жизненная необходимость

Не менее сильно впечатлил Java концепцией: все что вижу - экземпляр класса чего-то, однако параноидально это :) но вынес я оттуда не мало

в новые времена: как серьезнейшую альтернативу delphi начал изучать c#, но еклмн, ну как так смогли испортачить чудесную концепцию - несовместимостью между реализациями, что для меня подставило под сомнение всю концепцию...

в общем вывод один: надо двигаться дальше, но страшно.


 
Германн ©   (2008-04-10 01:02) [33]


> Игорь Шевченко ©   (10.04.08 00:48) [31]
>
> Германн ©   (10.04.08 00:39) [30]
>
> Это наверное ты Code Templates имеешь в виду ? Когда пишешь
> if а оно тебе в if <и сюда курсор встает> then
>

Нет. (Наверно нет).  У меня очень мало практики в BDS, но меня напрягали случаи, когда end ставится без моего ведома не там где мне нужно. Точного примера сейчас не дам, но в следущий раз запомню и приведу пример.

P.S. Я бы и сейчас бы попробовал. Но у меня дома BDS установлен в другой ОС. А с ней есть проблемы, с которыми нужно разбираться серьёзно. Вплоть до переустановки. А на это у меня нет пока времени.


 
Игорь Шевченко ©   (2008-04-10 11:19) [34]

Palladin ©   (10.04.08 00:59) [32]


> не, ну я не говорил что ничего сложнее Hello World я на
> другом не писал. :)


Так вот откуда в мире столько hello, world-ов ! :)


> Сильно впечатлило множественное наследование в С++. Местами
> такие вещи красивые решения можно забабахать. Но, нестрогость
> языка оттолкнула... да и множественное наследование гораздо
> больше приятная фича, чем суровая жизненная необходимость


Ну не знаю. Множественное наследование использовал очень редко, по необходимости, соответственно, необходимость возникала редко.
С другой стороны директиву absolute в паскале не использовал вовсе - за ненадобностью.


> в новые времена: как серьезнейшую альтернативу delphi начал
> изучать c#, но еклмн, ну как так смогли испортачить чудесную
> концепцию - несовместимостью между реализациями, что для
> меня подставило под сомнение всю концепцию...


Если не затруднит - о какой несовместимости идет речь ?


 
Kolan ©   (2008-04-10 11:24) [35]

> У меня очень мало практики в BDS, но меня напрягали случаи,
> когда end ставится без моего ведома не там где мне нужно.

Есть такое, когда ошибка, или не дописано что-то&#133 :(


> недостатками ради новых достатков

Честно, недостатков не так много, а вот без RenameMethod рефакторинга жить тяжело. Особенно если чужой код изучаешь&#133


 
Palladin ©   (2008-04-10 12:10) [36]


> Если не затруднит - о какой несовместимости идет речь ?

да это я резко перешел от C#, как такового, к .NET в целом :) так сказать 2 пишем 1 в уме... несовместимость сред исполнения 1.х и 2...


> Честно, недостатков не так много,

когда смотрел 2005, 2006 BDS2.0 было много недостатков... VS очень сильно выигрывает перед ними.... выше еще не смотрел, на 2007 хотелось бы глянуть...


 
Anatoly Podgoretsky ©   (2008-04-10 13:05) [37]

> Palladin  (10.04.2008 12:10:36)  [36]

Не стоит, тот же 2005/2006 с исправлеными ошибками. Подожди когда Юникод появится, а может и 64 бита.


 
Игорь Шевченко ©   (2008-04-10 13:21) [38]

Palladin ©   (10.04.08 12:10) [36]


> да это я резко перешел от C#, как такового, к .NET в целом
> :) так сказать 2 пишем 1 в уме... несовместимость сред исполнения
> 1.х и 2...


Не так их много, как кажется, несовместимостей :)


> VS очень сильно выигрывает перед ними....


Опять же, не скажу, что сильно. Во-первых другой язык, другие каноны, во-вторых (и самое неудобное) - кнопки другие! Жать F5 вместо F9 - ну не могу я привыкнуть :)


 
DiamondShark ©   (2008-04-10 14:13) [39]


> кнопки другие! Жать F5 вместо F9 - ну не могу я привыкнуть
> :)

Не надо привыкать. Кнопки переопределяются.


 
Kolan ©   (2008-04-10 14:16) [40]

> VS очень сильно выигрывает перед ними

Там есть один бооольшой &laquo;-&raquo; &#151; она не компилит Delphi.


> на 2007 хотелось бы глянуть

Если честно, то та версия что у меня есть для ознакомления (без декбрьских (или как там они называются) апдейтов) работает так, что я вернулся на BDS2006.



Страницы: 1 2 вся ветка

Текущий архив: 2008.05.11;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.017 c
2-1207943501
Megabyte
2008-04-11 23:51
2008.05.11
Скрытый ввод - готовый компонент


3-1196078709
Тимур
2007-11-26 15:05
2008.05.11
SQL.ADD выдает ошибку


15-1206194716
@!!ex
2008-03-22 17:05
2008.05.11
Надежность JAVA-приложения


2-1208159878
antonn (work)
2008-04-14 11:57
2008.05.11
int64 и перевод в строку


15-1206587384
slider007
2008-03-27 06:09
2008.05.11
С днем рождения ! 27 марта 2008 четверг