Ещё улучшение рантайм-библиотеки Паскаля
Mar. 11th, 2025 08:38 amКак мы выяснили в 2019 году, если оператор построения множеств с переменными границами использовался в операторе вывода не в первом аргументе, например,
значение этого аргумента и всех последующих не печаталось, но бывало и аварийное завершение.
Не прошло и 6 лет, как я разобрался. 12 регистр - указатель на текущий файл - нельзя использовать при вычислении выражений: на случай, если выражение записано в операторе write с несколькими аргументами, в котором случае между аргументами он ради экономии не переустанавливается.
В процедуре, конструирующей множества с переменными границами, видим:
Если внести правки, указанные в комментариях, всё работает штатно.
program main(output);
var a, b:integer;
begin
a := 1; b := 20;
writeln(' expect true: ', 5 in [a..b]);
end.
значение этого аргумента и всех последующих не печаталось, но бывало и аварийное завершение.
Не прошло и 6 лет, как я разобрался. 12 регистр - указатель на текущий файл - нельзя использовать при вычислении выражений: на случай, если выражение записано в операторе write с несколькими аргументами, в котором случае между аргументами он ради экономии не переустанавливается.
В процедуре, конструирующей множества с переменными границами, видим:
p/pi : , name, . dtran /01.06.84/
, ntr , 3
15 , a-x , -1
, u1a , *0005b
, sti , 14
, ati , 12 . надо , ati, 10
1 , xta , 24b
14 , asn , 64-47
12 , asn , 64 . надо 10, asn, 64
13 , uj ,
*0005b : 15 , utm , -1
, xta ,
13 , uj ,
, end ,
Если внести правки, указанные в комментариях, всё работает штатно.