Стандартная библиотека АЛГОЛа
Jan. 13th, 2022 08:27 amЯ выяснил, как обращаться к стандартной библиотеке АЛГОЛ-БЭСМ-6:
_биб : список имён процедур; _begin ...
Например, при вводе программы
получаем
и выдаётся какой-то разумный результат.
_биб : список имён процедур; _begin ...
Например, при вводе программы
$АЛГО _биб : лагранж2; _begin _real _array a[1:10], x[1:10], y[1:100]; _real r; _integer i; _for i := 1 _step 1 _until 10 _do x[i] := a[i] := i; _for i := 1 _step 1 _until 100 _do y[i] := i; r := лагранж2(a, x, y, 5.5, 5.5, 10, 10, 10); output(`e', r) _end
получаем
CЧET БEЗ KOHTPOЛЯ
1. _BEGIN _REAL _PROCEDURE ЛAГPAHЖ2(A,X,Y,X1,X2,P,П,П1);_REAL X1,X2;_INTEGER P,П,П1;_ARRAY A,X,Y;_BEGIN _REAL S,Z,Z1;_INTEG
ER I,J,J1,K;_ARRAY S1[0:20];_INTEGER Я,Я1;_IF X2<A[1]_THEN _BEGIN Z:=X2;_GO _TO M3;_END ;_IF X1<X[1]_THEN _BEGIN Z:=X1;_GO _TO M
3;_END ;S:=0;_FOR J1:=1_STEP 1_UNTIL П1_DO _IF X2≥A[J1]∧X2≤A[J1+1]_THEN _GO _TO M1;Z:=X2;_GO _TO M2;M1:_FOR I:=1_STEP 1_UNTIL П_
DO _IF X1≥X[I]∧X1≤X[I+1]_THEN _GO _TO M;Z:=X1;_IF X1≤X[П]_THEN _GO _TO M;M2:_IF X2≤A[П1]_THEN _GO _TO M;M3:OUTPUT(‘T’,‘ПPИ OБPA
ЩEHИИ K ПPOЦEДYPE ЛAГPAHЖ2 APГYMEHT=’,‘E’,Z,‘T’,‘BЫШEЛ ЗA ПPEДEЛЫ TAБЛИЦЫ. PAЗБEPИCЬ B ЧEM ДEЛO, A Я ПPEPЫBAЮ CЧET.
ДO BCTPEЧИ!’);OUTPUT(‘×’);S:=S/0;M:_IF I≤П-P_THEN J:=I_ELSE J:=П-P;_IF J1>П1-P_THEN J1:=П1-P;Я1:=J1;_FOR Я:=0_STEP 1_UNTIL P_D
O _BEGIN S:=0;_FOR I:=0_STEP 1_UNTIL P_DO _BEGIN Z:=Z1:=1;_FOR K:=0_STEP 1_UNTIL P_DO _BEGIN _IF K≠I_THEN Z:=Z×(X1-X[K+J])/(X[I+
J]-X[K+J]);_END ;S:=S+Y[I+J+(J1-1)×П]×Z;_END ;S1[Я]:=S;J1:=J1+1;_END ;S:=0;_FOR I:=0_STEP 1_UNTIL P_DO _BEGIN Z:=Z1:=1;_FOR K:=0
_STEP 1_UNTIL P_DO _BEGIN _IF K≠I_THEN Z:=Z×(X2-A[K+Я1])/(A[I+Я1]-A[K+Я1]);_END ;S:=S+S1[I]×Z;_END ;ЛAГPAHЖ2:=S;_END ;
2.
3. _REAL _ARRAY A[1:10], X[1:10], Y[1:100];
4. _REAL R; _INTEGER I;
5. _FOR I := 1 _STEP 1 _UNTIL 10 _DO X[I] := A[I] := I;
6. _FOR I := 1 _STEP 1 _UNTIL 100 _DO Y[I] := I;
7. R := ЛAГPAHЖ2(A, X, Y, 5.5, 5.5, 10, 10, 10);
8. OUTPUT(‘E’, R)
9. _END
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
.5049710695⏨+02
и выдаётся какой-то разумный результат.
no subject
Date: 2022-01-13 05:13 pm (UTC)COBOL был в СССР практически не доступен, а популярность ALGOL и Fortran была большая.
Прошло более 50 лет и ALGOL давно приказал долго жить, особенно после неудачной попытки ALGOL68, а на COBOL в США написано столько программ, что государство и вся банковская система до сих пор не может избавиться от него и уже существуют программы по автоматическому переписыванию существующего COBOL кода на Java. Особенно это актуально при переходе на облачные технологии.
Единственным долгожителем оказался Fortran и только потому, что это был основной язык для ученых. Особенно он популярен у геологов, метеорологов и я даже встречал иерархические базы данных написанные бывшими учеными на Fortran.
Конечно же сегодня в универcитетах никто Fortran и не учит и этот язык давно при смерти, но похороны, в отличии от давно умершего ALGOL и умирающего в конвульсиях COBOL, пока откладываются, но не надолго...
no subject
Date: 2022-01-13 08:40 pm (UTC)Алголы, что 60, что 68, приказали долго жить, потому что они были монструозны для реализатора, отчего весьма неэффективны. Программистам не выпендриваться надо было с передачей параметров по имени, а писать эффективно компилирующиеся программы. А для фортрана, благодаря его простоте, стали писать оптимизирующие компиляторы довольно рано.
no subject
Date: 2022-01-14 02:05 pm (UTC)Естественно, что те кто работал на компьютерах БЭСМ - у них была другая история. Я же про тех кто переходил с машин серии Минск-22 и Минск-32, где были трансляторы ALGOL(назывались по русски - АЛГАМС) на только что появившиеся машины серии ЕС ЭВМ. Отдельно интересная история о том, как я столкнулся с машинами серии СМ ЭВМ, которых передрали с PDP/11 американской компании DEC…
no subject
Date: 2022-01-16 08:46 am (UTC)no subject
Date: 2022-01-16 02:56 pm (UTC)no subject
Date: 2022-01-13 05:34 pm (UTC)Нам преподавали Алгол на первом курсе, и мы даже считали что-то конкретно на Алгол-БЭСМ. Но до библиотек не доходило.
no subject
Date: 2022-01-13 08:57 pm (UTC)Точного синтаксиса я не помнил, и необходимость пробела перед двоеточием хотя и апостериори логична (за подчеркнутым словом должен следовать пробел, но неочевидна). На помощь пришла https://mailcom.com/besm6/docs/BESM-ALGOL.pdf
Библиотека на диске, к сожалению, битая: некоторые имена, типа пресловутой УППBULLM20, позволявшей (во времена, когда ввод по А5 ещё не придумали), вводить в Алгол программы в поколонной набивке, приводят вытаскиванию из библиотеки огромного кирпича, который выглядит прилично, но потом идет "ОШИБКА В ЧЕТНОСТИ" до исчерпания лимита АЦПУ.
no subject
Date: 2022-01-13 09:59 pm (UTC)1. 2. _BEGIN _PROCEDURE ГPAФИK(A)ЧИCЛOTOЧEK:(N)ЛEBПOЗ:(L1)ПPABПOЗ:(L2)BEPTЧEP:(L0)ЛEBX:(X1)ПPABX:(X2)BEPXПOЗ:(M1)HИЖПOЗ:(M2)ГOP ЧEP:(M0)BEPXY:(Y1)HИЖY:(Y2)ШAГГOP:(DL)ШAГBEP:(DM);_VALUE A,N,L1,L2,M1,M2,L0,M0,DL,DM; _ARRAY A;_INTEGER N,L1,L2,M1,M2,L0,M0,D L,DM; _BEGIN _INTEGER _ARRAY B[1:3],B1[2:7],B2[1:7],LT,UT[1:LN(ABS(N)+2)/0.693];_INTEGER I,J,E,L,M,LH,LП,LПH,LK,MП,MK,LL,LM; _PROCEDURE Ф(X,Y,Z);_BEGIN Z:=0;Y[4]:=Y[5]:=Y[6]:=Y[7]:=27; _IF X=0_THEN _GO _TO L;_IF X<0_THEN _BEGIN Y[4]:=11;Y[ 5]:=63;Z:=2;_IF X>-10_THEN _GO _TO L;Z:=3;Y[6]:=63;_GO _TO L_END ; Y[4]:=63;Z:=1;_IF X<10_THEN _GO _TO L;Y[5]:=63;Z:=2;L:_END ; E:=SIGN(Y2-Y1);LK:=L2-L0;LH:=L1-L0-1; LПH:=_IF DL=0_THEN LH_ELSE ENTIER((LH+0.5)/DL)×DL; M:=(M1-M0-1)×E;MK:=(M2 -M0)×E;DM:=DM×E; MП:=_IF DM=0_THEN M_ELSE ENTIER((M+0.5×E)/DM)×DM; _FOR I:=1_STEP 1_UNTIL N_DO _BEGIN A[I,1]:=ENTIE R((A[I,1]-X1)/(X2-X1)×(L2-L1)-L0+L1+0.5); A[I,2]:=ENTIER((A[I,2]-Y1)/(Y2-Y1)×(M2-M1)-M0+M1+0.5)×E_END ; I:=LM:=1;J:=N ;ГN:_IF J-I>1_THEN _BEGIN LП:=(I+J)÷2;LL:=J;L0:=A[LП,1];L2:=A[LП,2];M0:=A[LП,3];_FOR M2:=1,2,3_DO A[LП,M2]:=A[I,M2];_FOR L:=I+1_ STEP 1_UNTIL LL_DO _BEGIN _IF A[L,2]×E>L2×E∨A[L,2]=L2∧A[L,1]>L0_THEN _BEGIN _FOR LL:=LL_STEP -1_UNTIL L_DO _BEGIN _IF A[LL,2]×E< L2×E∨A[LL,2]=L2∧A[LL,1]<L0_THEN _BEGIN _FOR LП:=1,2,3_DO _BEGIN M2:=A[L,LП];A[L,LП]:=A[LL,LП];A[LL,LП]:=M2_END ;LL:=LL-1;_GO _TO ГL_END _END ;LL:=L-1;_GO _TO ГM_END ;ГL:_END ;ГM:_FOR L:=1,2,3_DO A[I,L]:=A[LL,L];A[LL,1]:=L0;A[LL,2]:=L2;A[LL,3]:=M0;_IF LL×2> I+J_THEN _BEGIN LT[LM]:=I;UT[LM]:=LL-1;I:=LL+1_END _ELSE _BEGIN LT[LM]:=LL+1;UT[LM]:=J;J:=LL-1_END ;LM:=LM+1;_GO _TO ГN_END _ELS E _IF I≥J_THEN _GO _TO ГP;_IF A[I,2]×E>A[J,2]×E∨A[I,2]=A[J,2]∧A[I,1]>A[J,1]_THEN _FOR L:=1,2,3_DO _BEGIN M2:=A[I,L];A[I,L]:=A[J, L];A[J,L]:=M2_END ;ГP:LM:=LM-1;_IF LM>0_THEN _BEGIN I:=LT[LM];J:=UT[LM];_GO _TO ГN_END ;J:=0;_FOR I:=1_STEP 1_UNTIL N_DO _BEGIN _IF A[I,1]≤LH∨A[I,1]>LK∨A[I,2]×E≤M×E∨A[I,2]×E>MK×E_THEN _GO _TO Г3;_IF J=0_THEN _BEGIN Г2:J:=J+1;A[J,1]:=A[I,1];A[J,2]: =A[I,2];A[J,3]:=A[I,3]; _GO _TO Г3_END ;_IF A[I,1]≠A[J,1]∨A[I,2]≠A[J,2]_THEN _GO _TO Г2; _IF A[I,3]=A[J,3]_THEN _GO _TO Г 3;A[J,3]:=25;Г3:_END ; I:=1;B[1]:=B1[2]:=B2[1]:=26;B[3]:=27;B2[3]:=34;B1[3]:=B2[2]:=76; OUTPUT(‘/’,M1-1);Г4:MП:=MП+DM;Ф( MП,B1,LM); Г5:OUTPUT(‘B’,L1-1);L:=LH;LП:=LПH;M:=M+E; Г6:LП:=LП+DL;Ф(LП,B2,LL);Г7:L:=L+1;_IF I>J_THEN _GO _TO Г9; _IF A[I,1]≠L∨A[I,2]≠M_THEN _GO _TO Г9;B[2]:=A[I,3];I:=I+1;OUTPUT(‘T’,B[1]);Г8:_IF L≥LK_THEN _GO _TO ГБ; ГA:_GO _TO _IF L=LП_THEN Г6_ELSE Г7; ГБ:OUTPUT(‘/’);_GO _TO _IF M×E<MK×E_THEN (_IF M=MП_THEN Г4_ELSE Г5)_ELSE ГZ;Г9:_GO _TO _IF L=0_THEN (_I F M=MП_THEN ГB_ELSE ГE)_ELSE _IF M=0_THEN (_IF L=LП_THEN ГB_ELSE ГГ)_ELSE _IF M=-1_THEN (_IF L=LП-LL_THEN (_IF I>J_THEN ГЖ_ELSE _IF A[I,2]=M∧A[I,1]≤LП_THEN ГД_ELSE ГЖ)_ELSE ГД)_ELSE _IF M=MП_THEN (_IF L=-LM_THEN (_IF I>J_THEN ГИ_ELSE _IF A[I,2]=M∧A[I,1]<0_ THEN ГД_ELSE ГИ)_ELSE ГД)_ELSE ГД;ГB:OUTPUT(‘T’,‘+’);_GO _TO Г8; ГГ:OUTPUT(‘T’,‘―’);_GO _TO Г8; ГД:OUTPUT(‘B’);_ GO _TO Г8;ГE:OUTPUT(‘T’,‘|’);_GO _TO Г8; ГЖ:_IF LП>LK_THEN _GO _TO ГA;L:=LП;OUTPUT(B2[1],LП);_GO _TO Г6; ГИ:_IF LK<-1_THE N _GO _TO ГA;L:=-1;LП:=-DL;OUTPUT(B1[2],MП);_GO _TO Г6; ГZ:_END ГPAФИK; 3. 4. _REAL _ARRAY A[1:100, 1:3]; _INTEGER I; 5. _FOR I := 1 _STEP 1 _UNTIL 100 _DO _BEGIN 6. A[I,1] := I; A[I,2] := SQRT(I) ; A[I,3] := 25 _END; 7. 8. ГPAФИK(A, 100, 1, 100, 1, 1, 100, 1, 60, 1, 10, 0, 1, 1) 9. 10. _END ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++** + **** + *** + *** + *** + *** + *** + *** + *** + *** + *** + *** + ** + *** + *** + ** + *** + ** + ** + *** + ** + ** + ** + ** + ** + ** + ** + ** + ** + * + ** + ** + * + ** + * + ** + * + * + * + ** + * + * + * + * + + * + * + * + + * + +* + * + + + + + +