PUT(F) EOF=FALSE PASCAL PM DUMP STACK IS SPOILED
Leo, is it startindex must be less than or equal to endindex?
From: Leo B.
To: БЭСМ-6
Sent: Friday, June 16, 2017 2:28 PM
Subject: [besm-6] Ошибки-ловушки при программировании на Паскале
Что напечатает, если скомпилируется, эта программа:--
PROGRAM MAIN(OUTPUT);
TYPE STRING=PACKED ARRAY[1..0]OF CHAR;
VAR L: STRING;
BEGIN WRITELN(L) END.
А эта?
PROGRAM MAIN(OUTPUT);
TYPE STRING=PACKED ARRAY[2..0]OF CHAR;
VAR L: STRING;
BEGIN WRITELN(L) END.
Leo
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+unsubscribe@googlegroups.com.
18 июня 2017 г., в 23:43, Leo B. <leo...@gmail.com> написал(а):
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
--
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+unsubscribe@googlegroups.com.
--
Delphi такое просто не компилирует (тип STRING заменен на STRING1)
TYPE STRING1=PACKED ARRAY[1..0]OF CHAR;
[Error] Project2.dpr(3): Low bound exceeds high bound
00001 1 0 PROGRAM MAIN(OUTPUT); 00001 2 1 VAR P5, M5, P3, M3: INTEGER; 00007 3 2 BEGIN 00010 4 2 P5:=5; P3:=3; M5:=-5; M3:=-3; 00014 5 2 WRITELN(’ 5 MOD 3 | -5 MOD 3 | 5 MOD -3 | -5 MOD -3’); 00017 6 2 WRITELN(’ CONST’, 5 MOD 3, -5 MOD 3, 5 MOD (-3), -5 MOD (-3)); 00032 7 2 WRITELN(’ VAR ’, P5 MOD P3, M5 MOD P3, P5 MOD M3, M5 MOD M3); 00063 8 0 END. *EXECUTE 5 MOD 3 | -5 MOD 3 | 5 MOD -3 | -5 MOD -3 CONST 2 -2 -1 1 VAR 2 1 -1 -2
Пояснение:
Вычисление модуля работает честно (знак соответствует знаку делителя) при делении
переменных, а сам компилятор вычисляет константные выражения уникальным способом:
ни в одном известном википедии языке программирования нет операции остатка/модуля,
знак результата которой соответствовал бы знаку произведения:
https://en.wikipedia.org/wiki/Modulo_operation
Leo
Да. Все правильно. Ни String, ни Integer нерезервируемые слова. Однако Делфи выделяет String, как служебное слово.Но вопрос другой.Предыстория - где-то в 80-82 году был написан Краб для СМ-4 (PDP-11) на Паскале. Текстов не осталось.Паскаль был Виртовский, т.е. на нем было очень сложно программировать реальные системы.Вопрос - как Вы думаете, как описывался файл в оперативной памяти (.... array of char)?Я не помню, хотя сам многое писал.
00001 1 0 PROGRAM MAIN(OUTPUT); 00001 2 1 VAR I:INTEGER; 00007 3 2 FUNCTION FOO:INTEGER; BEGIN FOO := 0 END; 00017 4 2 PROCEDURE BAR(I : INTEGER); BEGIN END; ******41 HET ЗAПЯT ИЛИ CKOБKИ ИЛИ MAЛO ПAPAMETPOB 00025 5 2 BEGIN BAR(FOO + 1); ***** 0 00040 6 0 END.
00001 1 0 PROGRAM MAIN(OUTPUT); 00001 2 1 VAR I:INTEGER; 00007 3 2 FUNCTION FOO:INTEGER; BEGIN FOO := 0 END; 00017 4 2 PROCEDURE BAR(I : INTEGER); BEGIN END; 00025 5 2 BEGIN BAR(1 + FOO); 00042 6 0 END.
компилируется успешно. Интересно, это у Вирта ошибка или у Пирина.
--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+unsubscribe@googlegroups.com.
6 авг. 2017 г., в 23:14, Leo B. <leo...@gmail.com> написал(а):
--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
00001 1 0 PROGRAM MAIN(OUTPUT); 00007 2 2 BEGIN 00031 3 0 IF TRUE OR FALSE THEN WRITELN(’GOOD’) ELSE WRITELN(’BAD’) END. *EXECUTE GOOD
00001 1 0 PROGRAM MAIN(OUTPUT); 00007 2 2 BEGIN 00032 3 0 IF (1=1) OR FALSE THEN WRITELN(’GOOD’) ELSE WRITELN(’BAD’) END. *EXECUTE BAD
--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+unsubscribe@googlegroups.com.
Когда писали ту систему, Кеша занимался поддержкой компилятора и, ЕМНИП, довольно оперативно устранял все замечания.
00001 1 1 PROGRAM MAIN(OUTPUT);VAR A,B,C:REAL; 00007 2 2 BEGIN 00010 3 2 A := 10000015.0; 00011 4 2 B := 10000007.0; 00012 5 2 C := 10000000.0; 00013 6 2 WRITELN(A = B, B = C, A > C); 00042 7 0 END. *EXECUTE TRUE TRUE TRUE
00001 1 1 PROGRAM MAIN(OUTPUT);VAR A,B,C:REAL; 00007 2 2 BEGIN (*=R-*) 00010 3 2 A := 10000015.0; 00011 4 2 B := 10000007.0; 00012 5 2 C := 10000000.0; 00013 6 2 WRITELN(A = B, B = C, A > C); 00046 7 0 END. *EXECUTE FALSE FALSE TRUE
00001 1 1 PROGRAM MAIN(OUTPUT);VAR A,B,C:тип; 00007 2 2 BEGIN 00010 3 2 A := значение_1; 00011 4 2 B := значение_2; 00012 5 2 C := значение_3; 00013 6 2 WRITELN(A > B, B > C, C > A); 00050 7 0 END. *EXECUTE TRUE TRUE TRUE
00001 1 0 PROGRAM MAIN(OUTPUT); 00001 2 1 VAR A,B,C:ALFA; 00007 3 2 BEGIN 00010 4 2 A := ’_000_000_000_000_000_000’; 00011 5 2 B := ’_200_000_000_000_000_000’; 00012 6 2 C := ’_177_377_377_377_377_377’; 00013 7 2 WRITELN(A > B, B > C, C > A); 00050 8 0 END. *EXECUTE TRUE TRUE TRUE
5 марта 2025 г., в 03:07, Leo B. <leo...@gmail.com> написал(а):
--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/besm6/35fb1575-7c7f-43ba-ac81-95ef2a417a5en%40googlegroups.com.
вроде это где-то было описано… я про паскаль-автокод… потому и не падало :)