Запис з варіантами - це запис, що має довільне число варіантів структур. Вони складаються з необов'язково фіксованої та варіантної частин. Варіантна частина формується за допомогою оператора CASE, який задає особливе поле ознаки, що визначає, який варіант на даний момент буде активізованим. Значенням ознаки в кожний поточний момент виконання програми повинна бути константа, що задає варіант запису і зветься константою вибору.
Формат. TYPE ім'я_типу_запис =RECORD
CASE <поле ознаки>:<Ім'я_типу> OF
<константа вибору 1>:(<поле...:гип>;…);
……………….
<константа вибору М>:(<поле...:тип>;...);
END;
var iм'я_змiнної: Ім'я_типу_запис;
Обсяг пам'яті, необхідний для запису з варіантами, складається з обсягів пам'яті фіксованої частини та максимального із обсягів поля змінної частини.
Приклад запису з фіксованою та варіантною частинами:
TYPE ZAP=RECORD (тип даних - запис)
Number:byte; {фіксована частина}
Articul:integer;
CASE (варіантна частина}
Flag:boolean OF ( поле ознаки варіантів)
true: (price1:integer); (варіант 1: true- константа вибору)
false: (price2:real); (варіант 2: false - константа вибору)
END;
VAR tovar:array(1..10] of zap; (масив записів )
Доступ до елементів варіантної частини запису можливий за умови завдання значення полю ознаки. Згідно з цим значенням вибирається відповідний варіант запису, що позначений відповідною константою вибору в структурі case. Поле ознаки є елементом запису, що визначає варіантну частину, тому після вводу значень елементів замінити значення поля ознаки неможливо без порушення варіантної структури
Масив записів - це послідовність елементів, кожний з яких є запис. Приклад доступу до варіантної частини:
for і:=1 to 10 do
with tovar[j] do
case flag of ( вибір варіантів запису}
true: writeln('Номep: ',number,' артикул ',articul,' ціна ',ргісе1);
false : wrіteln('фірмa: ',firma,' кількість товару: ', kol);
end;