spamsink: (Default)
[personal profile] spamsink
Жил-был язык Паскаль, в котором Никлаус, да продлятся его дни, Вирт не придумал нормального форматного вывода,
и в первых реализациях языка с помощью встроенной процедуры WRITE целые числа можно было выводить только в десятичном виде (а надо в другом - так пиши процедурку сам).
Но хоть была возможность указывать ширину поля для вывода: WRITE(I:N) печатало число I в поле шириной N символов, обрезая старшие разряды или добавляя слева пробелы, а если N=0, то используя ровно столько символов, сколько надо. N могло быть как константой, так и переменной.

И жили-были советские программисты, которым хотелось видеть числа в виде, приближённом к битовому представлению, без необходимости самостоятельно писать процедурки. 16-ричное представление тогда было непопулярно, поэтому выводили в 8-ричном. А как же указывать в каком виде выводить, чтобы не сильно погрешить против стандарта?

А вот как: во-первых, будем считать, что переменная ширина поля для восьмеричных чисел не нужна; во-вторых, если ширина поля сама задана в восьмеричном виде, то и печатать число нужно в том же виде.

Для удобства пользователей в описании языка не предусматривалось никакого способа вводить восьмеричные числа, поэтому советские программисты, незнакомые с языком Си, придумали формат вида {восьмеричные цифры}B.

Ну и написали, реализовали, добавили фичу в компилятор. Пробуем:

           СИСТЕМА ПАСКАЛЬ ВЕРСИИ 1.7.76

         1. _РRОGRАМ МАIN;
         2. _VАR I:INТЕGЕR;
         3. _ВЕGIN
         4.   _FОR I := 10 _DОWNТО -10 _DО
         5.     WRIТЕLN(I, ’ = ’, I:22В)
         6. _ЕND.

 ПАСКАЛЬ-АВТОКОД 9.(17.05.88)

        10 =                 12
         9 =                 11
         8 =                 10
         7 =                  7
         6 =                  6
         5 =                  5
         4 =                  4
         3 =                  3
         2 =                  2
         1 =                  1
         0 =                  0
        -1 =      619168481189
        -2 =      619168481189
        -3 =      6191684811870
        -4 =      6191684811870
        -5 =      6191684811870
        -6 =      6191684811870
        -7 =      6191684811870
        -8 =      6191684811870
        -9 =      6191684811870
       -10 =      6191684811870
ВСЕ СДЕЛАНО.


Глаза вас не обманывают: у значений -1 и -2 младшая "цифра" - пробел.

Это, пожалуй, всё, что вы хотели узнать о советских программистах сегодня.

(Справедливости ради: официально наличие этой возможности в документации упомянуто не было.)

Date: 2021-06-02 04:36 pm (UTC)
From: [personal profile] dijifi
Буржуйского предрассудка тестировать нет.

Date: 2021-06-02 05:26 pm (UTC)
From: [personal profile] dijifi
Я абсолютно согласен, восьмеричная печать была добавлена для своих собственных нужд, например адресов. Отрицательных адресов не бывает. Интерес программирования на бэсме был и в том, чтобы находить такие прикрученные фичи и их использовать.

Date: 2021-06-02 06:04 pm (UTC)
From: [personal profile] dijifi
Да, странно. Паскаль автокод для меня выглядел загадочным монстром. Мне помнится там были присваивания с аккумулятора? Но практически я все писал только на мониторе.
Edited Date: 2021-06-02 06:06 pm (UTC)

Date: 2021-06-02 06:07 pm (UTC)
From: [personal profile] bowhill
Это как раз халтура, как термин. Не в смысле дополнительный приработок, а как общий советский принцип "и так сойдёт", "на ...сь".
Page generated Apr. 15th, 2026 02:39 am
Powered by Dreamwidth Studios