Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.05.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.008 c
15-1206607633
Ламо777
2008-03-27 11:47
2008.05.11
Apache&amp;SSL - перенаправление


15-1206967558
kalexi
2008-03-31 16:45
2008.05.11
Как работают сканеры памяти?


15-1206403811
Hero
2008-03-25 03:10
2008.05.11
Пытаюсь сделать sudoku


6-1185932625
Максимм
2007-08-01 05:43
2008.05.11
Сетевые принтера


4-1188376536
leonidus
2007-08-29 12:35
2008.05.11
Как определить типа сглаживания шрифтов в системе?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский