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

Ваш аккаунт

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

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

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

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

Руслан Богатырев
Журнал "Мир ПК", #07, 2001 год
11.09.2001
PROCEDURE Segment (s,t: SHORTINT): LONGINT;
VAR k: INTEGER;
BEGIN (* обращение к одномерному массиву через
динамические сегменты *)
k := (((s+3) DIV 2)-1) * ((s+2) DIV 2) + t;
(* вычисление индекса *)
ASSERT(pas[k] > 0);
(* проверка на инициализацию элемента *)
RETURN pas[k]
END Segment;
PROCEDURE LoadPas;
VAR s,t,size: SHORTINT; k: INTEGER;
BEGIN (* заполнение массива готовыми значениями *)
FOR k := 0 TO MaxPasINDEX-1 DO
pas[k] := -1;
(* для контроля за заполнением *)
END;
pas[0] := 6;
(* первый элемент знаем *)
k := 1; (* индекс массива pas *) s := 1;
(* номер сегмента *)
REPEAT (* цикл по сегментам *)
size := ((s+4) DIV 2) - 1;
(* кол-во элементов в сегменте *)
t := 0;
(* индекс внутри сегмента *)
WHILE (k < PasCOUNT) & (t < size) DO
(* цикл внутри сегмента *)
IF (t = 0) THEN pas[k] := Segment(s-1,0) + (s+3);
(* ODD - признак нечетности; смотрим посл. эл-ты
четных сегментов *)
ELSIF ~ODD(s) & (t = size-1) THEN
pas[k] := 2*Segment(s-1,size-2);
ELSE pas[k] := Segment(s-1,t-1) + Segment(s-1,t);
END;
INC(t); INC(k)
END;
INC(s);
UNTIL (s > MaxPasINDEX+4);
END LoadPas;
PROCEDURE PascalTriangle2* (i,j: SHORTINT): LONGINT;
VAR k: LONGINT;
BEGIN (* PRE: i >= 0; j >= 0; j <= i; i <= MaxPasINDEX *)
IF (j = 0) OR (j = i) THEN RETURN 1
(* стороны треугольника *)
ELSIF (j = 1) OR (j = i-1) THEN RETURN i
(* диагонали под сторонами *)
ELSE (* j <= i; i > 3; j > 1 *)
IF (j-2 >= ((i DIV 2)-1)) THEN j := i-j END;
(* за счет симметрии *)
k := (((i-1) DIV 2)-1) * ((i-2) DIV 2) + (j-2);
(* нужен индекс *)
RETURN pas[k]
END; (* POST: sBadIndex = FALSE *)
END PascalTriangle2;

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

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

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