Форум: "Начинающим";
Текущий архив: 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Գ] of Integer = (0, 1);
Вопросы:
Как правильно сделать то, что я хочу?
Если действительно удобно использовать стат массив, то как его записать?
← →
Kolan © (2008-04-09 16:24) [1]> 0?
0Գ = 0… 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Գ] 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Գ] 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]Стыдно даже столько кода пропадает :(…
← →
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]> уже проще…
Согласен. Не пришло в голову.
> я далеко не сишник,
Да Паладин вообще оформляет код особым образом, помню спорили — остался при своем мнении :)
← →
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 ставится без моего ведома не там где мне нужно.
Есть такое, когда ошибка, или не дописано что-то… :(
> недостатками ради новых достатков
Честно, недостатков не так много, а вот без RenameMethod рефакторинга жить тяжело. Особенно если чужой код изучаешь…
← →
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 очень сильно выигрывает перед ними
Там есть один бооольшой «-» — она не компилит Delphi.
> на 2007 хотелось бы глянуть
Если честно, то та версия что у меня есть для ознакомления (без декбрьских (или как там они называются) апдейтов) работает так, что я вернулся на BDS2006.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.05.11;
Скачать: [xml.tar.bz2];
Память: 0.59 MB
Время: 0.008 c