DEFINT A-Z ' Все числа типа INTEGER
CLS
RANDOMIZE TIMER ' Случайность по таймеру
' Ввод атрибутов матрицы
Re: INPUT "Vvedite kol-vo strok : ", n
INPUT "Vvedite kol-vo stolbcov : ", m
IF n < 2 GOTO Re ' Строк минимум 2
' Наши массивы
DIM A(m, n), S(n)
' Заполняем матрицу
FOR iy = 1 TO n
FOR ix = 1 TO m
A(ix, iy) = (RND * 201) - 100
NEXT
NEXT
' Считаем суммы
FOR iy = 1 TO n
FOR ix = 1 TO m
S(iy) = S(iy) + A(ix, iy)
NEXT
IF S(iy) > 0 THEN k = k + 1: IF k = 1 THEN v = iy
NEXT
' Подготовка к отрисовке смены пункта меню.
Again: CLS
PRINT "Strok :"; n
PRINT "Stolbcov :"; m
' Выводим матрицу + выбранный пункт
FOR iy = 1 TO n
PRINT USING "## ! "; iy; CHR$(222);
IF S(iy) > 0 THEN COLOR 10
IF iy = v AND S(iy) > 0 THEN COLOR 12, 1
FOR ix = 1 TO m
PRINT A(ix, iy);
NEXT: PRINT : COLOR 7, 0
NEXT
' Если кол-во полож. строк больше единицы
IF k > 1 THEN
PRINT STRING$(80, 196)
COLOR 15: PRINT " Viberite stroku dlya perestanovki iz videlennyh"
PRINT " ispolzuya knopki"
COLOR 11: PRINT "[ VVERH ], [ VNIZ ]"
COLOR 15: PRINT " i najmite": COLOR 10: PRINT "[ ENTER ]": COLOR 7
Vb: DO: kb$ = INKEY$ ' Сканируем клавиатуру
IF kb$ = CHR$(0) + "H" THEN
j = v ' В стек выбранный пункт
Minus: j = j - 1: IF j < 1 GOTO Vb ' Находим его перебирая все варианты
IF S(j) < 0 GOTO Minus ' Тут нету ищем дальше
v = j: GOTO Again ' Сменить пункт и перерисовать
ELSEIF kb$ = CHR$(0) + "P" THEN
j = v ' В стек выбранный пункт
Plus: j = j + 1: IF j > n GOTO Vb ' Находим его перебирая все варианты
IF S(j) < 0 GOTO Plus ' Тут нету ищем дальше
v = j: GOTO Again ' Сменить пункт и перерисовать
END IF
LOOP UNTIL kb$ = CHR$(13)
' Меняем строки матрицы
FOR ix = 1 TO m
SWAP A(ix, v), A(ix, n - 1)
NEXT
' Если кол-во полож. строк равно единице
ELSEIF k = 1 THEN
' Меняем строки матрицы
FOR ix = 1 TO m
SWAP A(ix, v), A(ix, n - 1)
NEXT
' Если нету полож. строк
ELSE
COLOR 12: PRINT "Netu strok s pologitelnoj summoi el-tov!!!"
END IF
' Вывод финальной матрицы
IF k > 0 THEN
PRINT STRING$(80, 196)
FOR iy = 1 TO n
IF (iy = v) OR (iy = n - 1) THEN COLOR 14
FOR ix = 1 TO m
PRINT A(ix, iy);
NEXT: PRINT : COLOR 7
NEXT
END IF
Тестирование выполнено в программе QB64 ( Скачать )