1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | 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 ( Скачать )