динамические структуры в паскале

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

Naeel Maqsudov, спасибо большое за код! Программа работает замечательно.

Однако, позволь кое-что уточнить. У меня есть вопросы по следующей конструкции:

Код: Выделить всё

getnumberstatus = (gnOk,gnStop,gnErr);
Насколько я понял это относится к разделу type :confused:

При вводе чисел с клавиатуры, может возникнуть 3 ситуации:

1) Ввод прошел нормально (gnOk) до пустой строки (gnStop);
2) При вводе произошла ошибка, т.е. было введено не число (gnErr);
3) Была введена пустая строка (сразу gnStop);

Я все правильно понял?

Однако я такую конструкцию вижу впервые. Не мог бы ты сказать ее название или объяснить синтаксис ? :rolleyes:
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Это называется перечислимый тип данных.
Формально получается вроде бы как 3 константы со значениями gnOk=0, gnStop=1...
Но в отличие от констант к ним можно применять функции Ord, Asc, Succ и Pred.
Основное назначение перечислимого типа это
1) сделать код более наглядным и читаемым
2) переложить на компилятор больше проверок на соответствие типов данных
Перечислимый тип хорош в качестве индекссов массивов и в операциях с множествами.

Код: Выделить всё

type 
  ...
  TMonths = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);
  TMonthlyValues = array[Jan..Dec] of TOtherType;
var
  MonthlyValues : TonthlyValues;
  Summer: set of TMonths;
  AMonth: TMonths;
begin
  AMonth:=Apr;
  MonthlyValues[AMonth]:=...;
  Summer:=[Jun, Jul, Aug];
  if AMonth in Summer then wiriteln('Wow! It is summer!');
  .....
end;
Ответить