2013-10-12 4 views
0

У меня есть следующая проблема.Algol60 пропущенный целочисленный элемент массива как параметр - ошибка плохой тип

Когда я пытаюсь запустить код с Arun file.obj (я составил с algol.exe файла)

BEGIN 

    INTEGER PROCEDURE fun(tab,index,lower,upper); 
     INTEGER tab,index,lower,upper; 
    BEGIN 
     INTEGER t; 
     text (1, "Start"); 
     t := 0; 

     FOR index := lower STEP 1 UNTIL upper DO 
      t := t + tab; 

     fun := t; 

    END; 

    INTEGER ARRAY t[1:10]; 
    INTEGER i,result,lower,upper; 

    lower := 1; 
    upper := 10; 

    FOR i := 1 STEP 1 UNTIL 10 DO 
     t[i] := i; 

    i := 1; 

    result := fun(t[i],i,lower,upper); 
END FINISH; 

Я все еще получаю ошибку:

ERROR 3 
ADD PBASE PROC LOC 
07D4 0886 1 13 
083A 0842 0 115 

Компилятор Я использую «Продукт Rogalgol Algol60» фирмы RHA (Minisystems) Ltd.

Ошибка 3 означает «3 Процедура, называемая там, где фактический и формальный типы параметров не совпадают».

Но я не понимаю, почему. Причиной ошибки является t [i] (если я перехожу к i - это нормально).

Кто-то знает, что я делаю неправильно?

компилировать код на DOSBox (Linux)

ответ

1

Проблема заключается в том, что индекс массива целых чисел, которые вы передаете в вашей процедуре не то же самое, как целое число, которое он ожидает. Я не могу вспомнить, что такое целочисленный массив, но я думаю, что это не целые числа ... Признаться, я никогда их не использую, но не могу вспомнить, почему. Возможно, из-за ограничений, подобных этому. Я придерживаюсь реальных массивов и EBCDIC.

Вы можете почти наверняка исправить это, указав новое целое число j; вставка "j: = t [i];" перед вашим призывом «весело»; затем вызывает «fun» с «j», а не t [i].

Кстати, вы можете захотеть сделать массив (и цикл «для») нулевым. ALGOL в основном относится к нулю, и я думаю, что он может сэкономить память, если вы пойдете с потоком.

Позвольте мне знать, если это помогает ....

+0

К сожалению в течение очень долгого времени отклика, но у меня было несладко;) Да, конечно, это работает, но, возможно, я бы не сказал, что я имел в виду, чтобы сделать , Я хотел бы сделать устройство Дженсена. Этот код (с небольшими изменениями - другие функции для печати) хорошо работает с [NASE A60] (http://www.bertnase.de/a60/). Интересно, если это только разница в реализации или ошибка. – tpsa