"Перевод" от АЛГОЛ

Я только что нашел книгу, которая описывает процедуру, очень похожую на то, что мне нужно сделать. Тем не менее, книга, написанная в 1972 году, демонстрирует решение на ALGOL, в то время как мне нужно написать свой код на более позднем языке. Я пытаюсь выяснить, правильно ли я понимаю, что делает код ALGOL передо мной:

  1. Я прав, что следующий код,

    SL:= FF;

, просто присваивает значение, как, например, sl = ff; заявление будет делать в САС?

  1. Означает ли символ "" возведенный в силу "?

  2. Что такое "реальная процедура"? Это ALGOL-эквивалент подпрограммы в FORTRAN или модуль в SAS?

  3. Ранее в коде я читал, что это массив. Прав ли я тогда, что следующий код,

    for i: 1 step 1 until m do 
    
    begin a[i]:=0;
    
        for j:=1 step 1 until m do
    
        a[i] :=a[i] + ww[j] x slope;
    
        a[i]:=1/a[j];
    

заполняет матрицу a, где i - номер строки, j - номер столбца, а m - (очевидно) i * j?

2 ответа

  1. Да, ":=" присваивает значение переменной

  2. Да, символ "^" означает "возведенный в силу"

  3. "реальная процедура", я полагаю, это "реальная процедура". Это означает процедуру, которая возвращает реальное значение.

  4. В Алголе есть блоки кода. Каждый блок начинается с "начало" и заканчивается "конец". Если вы опускаете начальные и конечные слова, тогда блок - это только одна инструкция. Ваш код здесь неясен.

Я согласен с соседними комментариями с 1 по 3.

Код, приведенный выше, является аномальным по нескольким причинам. Я подозреваю, что были ошибки транскрипции.

Во-первых, спаривание "начало" и "конец" является неполным.

В Алголе начинается.,, end 'pair является ЛИБО составным оператором, ИЛИ, если внутри тоже есть объявления, то это блок.

В этом коде то, что следует "для i:= 1 шаг 1 до тех пор, пока m do" не начинается как составной оператор с "begin", но не видно соответствующего "end". Если мы предположим, что в качестве следующего следующего токена появится "конец", то это завершит составной оператор, управляемый этим предложением "for i:= ...". Все это составное утверждение будет повторяться m раз, когда i содержит последовательные значения от 1 до m.

Вторая аномалия заключается в том, что второй цикл, управляемый 'for j:= ...', присоединяется только к следующему отдельному оператору (вплоть до ';') и суммирует один и тот же набор значений в каждом a[i] и это тогда перезаписано с 1/a[j]! (Я предполагаю, что "slope" - это скалярная переменная, а не функция без параметров, поэтому она предоставляет одно и то же значение при каждом выполнении.)

В-третьих, в Algol не стоит делать какие-либо предположения о значении управляющей переменной в цикле for после его завершения. Во многих реализациях Алгола j здесь будет содержать m + 1. Таким образом, все элементы от [1] до [m] будут содержать 1/a[m + 1]. Может произойти сбой "деления на ноль", если a [m + 1] содержит ноль или если a объявлено как "реальный массив a[1:m];" тогда может произойти сбой с "недопустимым индексом".

Если здесь есть ошибка транскрипции, и мы предполагаем, что окончательное утверждение должно было прочитать a[i]:= 1/a[i], все значения, вычисленные и сохраненные в [1] ... a[m], все равно будут то же самое и есть более быстрые способы кодирования этого!

Я надеюсь, что эта тирада (дольше, чем я надеялся) была полезна.

Другие вопросы по тегам