В двумерном массиве перед последней строкой вставить строку с положительной суммой элементов.подскажите как посчитать сумму элементов строки и как их поменять местами, а если таких строк будет несколько, то можно было бы выбрать любую из них.- QBasic(Бейсик)

  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 ( Скачать )

Leave a Comment