Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11642
Последний выпуск: 19.06.2015

Золотой треугольник

Руслан Богатырев
Журнал "Мир ПК", #07, 2001 год
11.09.2001
TYPE
Proc = POINTER TO ProcDesc; (* класс процедур *)
ProcDesc = RECORD
id : INTEGER; (* номер реализации *)
next: Proc; (* ссылка на следующий *)
END;
Pas = POINTER TO PasDesc;
(* класс процедур для треугольника Паскаля *)
Fib = POINTER TO FibDesc;
(* класс процедур для чисел Фибоначчи *)
PasDesc = RECORD (ProcDesc) proc: Pascaline.ProcType1
END;
FibDesc = RECORD (ProcDesc) proc: Pascaline.ProcType2
END;
List = RECORD (* неоднородный список *)
first: Proc; (* первый элемент *)
this : Proc; (* текущий элемент *)
END;
PROCEDURE ExecThisProc* (VAR isPas: BOOLEAN;
VAR id: INTEGER; VAR p1,p2,f1: SHORTINT;
VAR result: LONGINT);
BEGIN
IF (list.this # NIL) THEN
IF (list.this IS Pas)
(* проверяем динамический тип *) THEN
isPas := TRUE; id := list.this^.id;
result := list.this(Pas)^.proc(pas1,pas2)
(* приводим к типу *)
ELSIF (list.this IS Fib)
(* проверяем динамический тип *) THEN
isPas := FALSE; id := list.this^.id;
result := list.this(Fib)^.proc(fib1)
(* приводим к типу *)
END;
p1 := pas1; p2 := pas2; f1 := fib1;
END;
END ExecThisProc;

Вернуться к статье

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог