Эти лады-струны просто для примера или всерьёз? Мне кажется странным желание использовать члены перечисления, в названиях которых фигурирует их численные значения.
Чем "лад := 12" хуже чем "лад := лад12"?
Если при вызове функции, может быть не понятным, что к чему
"нота(5, 3)" менее очевидно, чем "нота(лад5, струна3)"
тогда можно назвать функцию как "НотаЛадСтруна(5, 3)"
Вообще, сколько ошибок на этапе компиляции Вы отловили с помощью такой системы типов? Если много, то на Компонентном Паскале можете соорудить эквивалент перечислениям, но с накладными расходами как-то так:
Код:
МОДУЛЬ М;
ТИП
Лад* = ССЫЛКА НА ЗАПИСЬ
зн: ЦЕЛ
КОНЕЦ;
Струна* = ССЫЛКА НА ЗАПИСЬ
зн: ЦЕЛ
КОНЕЦ;
ПЕРЕМ
лад*: РЯД 13 ИЗ Лад;
струна*: РЯД 7 ИЗ Струна;
ПРОЦЕДУРА Инициализация;
ПЕРЕМ и: ЦЕЛ;
НАЧАЛО
ДЛЯ и := 1 ДО 12 ДЕЛАЙ
НОВЫЙ(лад[и]);
лад.зн := и;
КОНЕЦ;
ДЛЯ и := 1 ДО 6 ДЕЛАЙ
НОВЫЙ(струна[и]);
струна.зн := и;
КОНЕЦ
КОНЕЦ Инициализация;
НАЧАЛО
Инициализация
КОНЕЦ М.
...
н := нота(М.лад[5], М.струна[3])
Если перечислений в программе будет нужно много, то замучаетесь, хотя конечно можно подумать о генераторе таких штук.
Кстати, гитары бывают 4-14 струнными, 19-36 ладовыми. Что делать со всем этим добром при жёстко забитых перечислениях?