2015-12-02 7 views
0

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

  1. Правильно ли я, что следующий код,

    сл: = ФФ;

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

  1. Означает ли символ ↑ «поднятый до степени»?

  2. Что такое «настоящая процедура»? Является ли ALGOL эквивалентом подпрограммы в FORTRAN или модуле в SAS?

  3. Раньше в коде я читал, что a - это массив. Я прав, то, что следующий код,

    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]; 
    

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

+1

Этот документ является темой Видемана? –

ответ

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

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

  3. "realprocedure", я полагаю, является «реальной процедурой». То есть процедура, возвращающая реальное значение.

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

1

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

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

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

В Algol, 'начало. , , end '- это простой оператор, OR, если внутри есть декларации, то это блок.

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

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

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

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

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