?

Log in

No account? Create an account

Ретрокомпьютерное с загадкой - Общество дровосеков Бердичева по изучению Мишны

Aug. 31st, 2017

01:11 pm - Ретрокомпьютерное с загадкой

Previous Entry Share Next Entry

Несколько цитат из книги «СИСТЕМА „БЭСМ-АЛГОЛ“ Методическое руководство по программированию», изд. Министерство обороны Союза ССР, 1970; 100 c.


§5. Оператор присваивания. Оператор этот очень простой, но имеет ряд особенностей.

§12. Процедуры. Оператор процедуры является самым сложным и многообразным оператором входного языка. ...

1. Операторы процедур.
... Категорически запрещается описывать формальный параметр в теле процедуры, т. е. описывать в теле процедуры идентификатор, похожий на идентификатор одного из формальных параметров. Это приведет к неправильной работе процедуры.

2. Процедуры-функции. ... В теле процедуры идентификатор процедуры должен встречаться только в левой части оператора и категорически запрещается использовать его в правой части, т. е. нельзя писать
integer procedure курс(x, y);
begin real a;
a := x/2; курс := 0; курс := курс + a↑4 + y/3;
end;

...

3. Использование символа value. ... Список значений применяется для того, чтобы значения фактических параметров не изменялись после выхода из процедуры, т. е. с каким значением фактического параметра вошли в процедуру, с таким же и вышли.

[Дальше приводится пример передачи массива по значению - S.]

Применение списка значений в процедуре несколько сокращает время ее работы.


Ну и загадочка. Какие значения будет принимать параметр цикла, заголовок которого записан как

for i := 1,5,7 step 1 until 10, i+2 while i < 20 do ... ?

This entry was originally posted at http://spamsink.dreamwidth.org/1059504.html. Please comment there using OpenID.

Comments:

[User Picture]
From:anatbel
Date:August 31st, 2017 09:29 pm (UTC)
(Link)
1, 5, 7, 8, 9, 10, 12, 14, 16, 18.
Какой знак стоит между i и 20 - непонятно. Я исходил из того, что это <.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:August 31st, 2017 10:05 pm (UTC)
(Link)
Если бы было всё так просто, не было бы повода для вопроса.

Там на самом деле для красоты знак U+2A7D LESS-THAN OR SLANTED EQUAL TO - точный эквивалент того, который был в кодировке ГОСТ. Спасибо, раз еще не везде в шрифтах есть, то заменю на просто < во избежание разночтений; это в рамках вопроса не очень существенно.
(Reply) (Parent) (Thread)
[User Picture]
From:move2winnipeg
Date:September 1st, 2017 09:08 am (UTC)
(Link)
Тогда вектор три на десять, например?
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:September 1st, 2017 02:37 pm (UTC)
(Link)
Не настолько изощрённо. i - целое, и общее количество итераций цикла - 10, как в первом ответе.
(Reply) (Parent) (Thread)
[User Picture]
From:dvv
Date:September 1st, 2017 03:46 pm (UTC)
(Link)


Хрен знает… Мне видно. И в Хроме, и в Огнелисе, и в телефоне.



Edited at 2017-09-01 03:49 pm (UTC)
(Reply) (Parent) (Thread)
From:dolovar
Date:September 4th, 2017 05:07 pm (UTC)
(Link)
Подсмотрел решение на dreamwidth.
В принципе, все понятно, кроме +1 между 10 и 13.
(исправлено)
Не туда смотрел. По выходу из until имеем 11, которого не видно. То есть все-равно не понятно, почему +1.

Edited at 2017-09-04 05:13 pm (UTC)
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:September 5th, 2017 06:08 am (UTC)
(Link)
Для того, чтобы узнать, что "A step B until C" кончилось, нужно в очередной раз инкрементировать текущее значение переменной цикла на B, и убедившись, что оно превышает С (или, наоборот, меньше С, если шаг был отрицательным), перейти к следующему элементу итератора или завершить цикл.

Фактически, "А step B until C" - это "синтаксический сахар" для
A, i + B while (if B >= 0 then i <= C else i >= C)


(Reply) (Parent) (Thread)