spamsink: (Default)
[personal profile] spamsink
Из найденных на диске исходных текстов стандартной математической библиотеки АЛГОЛА-60 (библиотечные процедуры хранились в текстовом виде, по-видимому, в силу каких-то особенностей автора системы, и в кодировке, в точности совпадающей с кодировкой перфокарт, т. е. с битом четности, что было довольно неочевидно при поиске интересностей во всех возможных кодировках), одна содержит довольно забавную диагностику об ошибке. Сейчас в такой манере вычислительные библиотеки с пользователями не общаются.

_REAL _PRОCEDURE ЛАГРАНЖ2(A,Х,У,Х1,Х2,P,П,П1);
_REAL Х1,Х2;_INTEGER P,П,П1;_ARRAУ A,Х,У;
_BEGIN _REAL S,Z,Z1;_INTEGER I,J,J1,К;
_ARRAУ S1[0:20];
_INTEGER Я,Я1;
_IF Х2<A[1]_THEN _BEGIN Z:=Х2;_GО _TО М3;_END ;
_IF Х1<Х[1]_THEN _BEGIN Z:=Х1;_GО _TО М3;_END ;
S:=0;_FOR J1:=1_STEP 1_UNTIL П1_DО
_IF Х2≥A[J1]∧Х2≤A[J1+1]_THEN _GО _TО М1;Z:=Х2;_GО _TО М2;
М1:_FOR I:=1_STEP 1_UNTIL П_DО
_IF Х1≥Х[I]∧Х1≤Х[I+1]_THEN _GО _TО М;Z:=Х1;
_IF Х1≤Х[П]_THEN _GО _TО М;
М2:_IF Х2≤A[П1]_THEN _GО _TО М;
М3:
ОUTPUT(‘T’,‘ПРИ  ОБРАЩЕНИИ  К  ПРОЦЕДУРЕ  ЛАГРАНЖ2  АРГУМЕНТ=’,
‘E’,Z,‘T’,
‘ВЫШЕЛ  ЗА  ПРЕДЕЛЫ  ТАБЛИЦЫ. РАЗБЕРИСЬ  В  ЧЕМ  ДЕЛО, А  Я  ПРЕРЫВАЮ  СЧЕТ. ДО  ВСТРЕЧИ!’);
ОUTPUT(‘×’);
S:=S/0;
М:_IF I≤П-P_THEN J:=I_ELSE J:=П-P;
_IF J1>П1-P_THEN J1:=П1-P;
Я1:=J1;
_FOR Я:=
_STEP 1_UNTIL P_DО _BEGIN
S:=0;
_FOR I:=0_STEP 1_UNTIL P_DО _BEGIN
Z:=Z1:=1;
_FOR К:=0_STEP 1_UNTIL P_DО _BEGIN
_IF К≠I_THEN Z:=Z×(Х1-Х[К+J])/(Х[I+J]-Х[К+J]);
_END ;
S:=S+У[I+J+(J1-1)×П]×Z;_END ;
S1[Я]:=S;J1:=J1+1;_END ;
S:=0;
_FOR I:=0_STEP 1_UNTIL P_DО _BEGIN
Z:=Z1:=1;
_FOR К:=0_STEP 1_UNTIL P_DО _BEGIN
_IF К≠I_THEN Z:=Z×(Х2-A[К+Я1])/(A[I+Я1]-A[К+Я1]);
_END ;
S:=S+S1[I]×Z;_END ;
ЛАГРАНЖ2:=S;
_END 


Необходимое примечание: Название процедуры ЛАГРАНЖ2 вряд ли имеет отношение к точке Лагранжа L2, по направлению к которой сейчас летит телескоп имени Уэбба.

Date: 2022-01-09 09:50 am (UTC)
vak: (Default)
From: [personal profile] vak
Прикольный способ завершения программы.
S:=S/0;

Date: 2022-01-09 10:03 am (UTC)
vak: (Default)
From: [personal profile] vak
Что бы означало М3:0ОUTPUT?
Вроде тут пробел должен быть вместо нуля.

Date: 2022-01-09 01:24 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Вот эти две строки ценные тоже:

М:_IF I≤П-P_THEN J:=I_ELSE J:=П-P;
_IF J1>П1-P_THEN J1:=П1-P;

Date: 2022-01-09 10:03 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

О. Прочитал снова. Нет, все так. Я перепутал J и J1.

Edited Date: 2022-01-09 10:12 pm (UTC)

Date: 2022-01-09 02:39 pm (UTC)
From: [personal profile] dijifi
Сейчас говорит «что-то пошло не так. Попробуйте ещё раз позже»

Date: 2022-01-09 10:41 pm (UTC)
From: [personal profile] dijifi
Это только персонально от эппл суппорт

Date: 2022-01-09 11:19 pm (UTC)
vak: (Default)
From: [personal profile] vak
Попытался было переписать на современный алгол и попробовать выполнить, но упёрся в непонимание, что же тут вычисляется. Какая-то интерполяция по Лагранжу.

Date: 2022-01-10 06:44 am (UTC)
vak: (Default)
From: [personal profile] vak
Возможно, это вычисление определённого интеграла функции, представленной в виде полинома Лагранжа.
Page generated Mar. 5th, 2026 11:35 pm
Powered by Dreamwidth Studios