Программа на процедуру SUB

Помогите решить задачу по Qbasic Пытался сделать сам не выходитВот сама задача: Помогите решить задачу на qbasic1)Найти сумму отрицательных элементов матрицы которые находятся ниже главной диагонали.Рассчитать используя процедуру SUB.Подскажите где ошибка
DECLARE SUB Summa (Sum!)
CLS
INPUT "kol-vo strok"; m%
INPUT "kol-vo stolbtsov"; n%
DIM A!(m%, n%)
FOR i% = 1 TO m%
FOR j% = 1 TO n%
INPUT "vvedite element"; A!(i%, j%)
NEXT: PRINT : NEXT
PRINT "matrica"
FOR i% = 1 TO m%
FOR j% = 1 TO n%
PRINT A!(i%, j%);
NEXT: PRINT : NEXT
CALL Summa(Sum!)
END
 
SUB Summa (Sum!)
FOR i% = 1 TO m%: FOR j% = 1 TO n%
IF i% > j% AND (A!(i%, j%)) < 0 THEN Sum! = Sum! + A!(i%, j%)
NEXT: NEXT
PRINT "Summ="; Sum!
END SUB
1 ответ

У вас в качестве параметра процедуры используется переменная Sum! , которой в главной части модуля нет вообщеПеременные m% и n% являются локальными, то есть в процедуре Summa их использовать смысла нету (т.к там - это уже другие переменные и они равны 0), поэтому нужно объявить их глобальными (видимыми в любой части модуля) или передать в качестве параметров процедуре. Сама матрица тоже объявлена только в главной части модуля (в процедуре её видно не будет). Поэтому её тоже нужно объявить глобальной или передать в качестве параметров процедуре.
DECLARE SUB Summa (A!())
CLS
DIM SHARED m%  
DIM SHARED n%
INPUT "kol-vo strok"; m%
INPUT "kol-vo stolbtsov"; n%
DIM A!(m%, n%)
FOR i% = 1 TO m%
FOR j% = 1 TO n%
INPUT "vvedite element"; A!(i%, j%)
NEXT: PRINT : NEXT
PRINT "matrica"
FOR i% = 1 TO m%
FOR j% = 1 TO n%
PRINT A!(i%, j%);
NEXT: PRINT : NEXT
CALL Summa(A!())
END
 
SUB Summa (A!())
Sum! = 0
FOR i% = 1 TO m%: FOR j% = 1 TO n%
IF (i% > j%) AND ((A!(i%, j%)) < 0) THEN Sum! = Sum! + A!(i%, j%)
NEXT: NEXT
PRINT "Summ="; Sum!
END SUB