Массив: Произвести между матрицами обмен числами так, чтобы max первой матрицы не превышало min второй - QBasic

Узнай цену своей работы

Формулировка задачи:

Условие Даны две квадратные матрицы А() и В() размером 5×5 Он заполнены случайными числами Требуется произвести между матрицами обмен числами так, чтобы максимальное число первой матрицы не превышало минимального числа второй матрицы. Решение Вариант 1 Можно ввести еще один линейный массив и сбросить на него все элементы обоих матриц. Отсортировать этот массив и просто поделить его элементы между двумя матрицами. Примечание Не подходит из-за сортировки. Сортировки нет в условии. Вариант 2 Надо найти средний элемент. То есть такой, где число элементов больших данного было бы равно числу элементов меньших данного Вопрос. Но как найти такой элемент? Вариант 3 Тотальное сравнение элементов обоих матриц и обмен этими элементами Вопрос. Сколько должно быть сравнений? Где гарантия, что задача будет решена? Задача пока не решена. Ищется подходящий алгоритм Кто может что-нибудь подсказать?

Решение задачи: «Массив: Произвести между матрицами обмен числами так, чтобы max первой матрицы не превышало min второй»

textual
Листинг программы
DECLARE SUB RAND ()
DECLARE SUB minn (x!(), min!, im!, jm!)
DECLARE SUB maxx (x!(), max!, im!, jm!)
CLS
RAND
DIM SHARED n
 
n = 5
DIM A(n, n)
DIM B(n, n)
 
FOR i = 1 TO n
FOR j = 1 TO n
   A(i, j) = FIX(40 * RND) - 20
   LOCATE i, 5 * j - 2
   PRINT A(i, j);
NEXT j, i
 
FOR i = 1 TO n
FOR j = 1 TO n
   B(i, j) = FIX(40 * RND) - 20
   LOCATE i, 5 * j + 30
   PRINT B(i, j);
NEXT j, i
PRINT : PRINT
 
FOR k = 1 TO n * n
   CALL maxx(A(), max, i1, j1)
   CALL minn(B(), min, i2, j2)
   SWAP A(i1, j1), B(i2, j2)
NEXT
 
FOR i = 1 TO n
FOR j = 1 TO n
   LOCATE i + 6, 5 * j - 2
   PRINT A(i, j);
NEXT j, i
 
FOR i = 1 TO n
FOR j = 1 TO n
   LOCATE i + 6, 5 * j + 30
   PRINT B(i, j);
NEXT j, i
END
 
SUB maxx (x(), max, im, jm)
   max = x(1, 1)
   im = 1
   jm = 1
 
   FOR i = 1 TO n
   FOR j = 1 TO n
      IF max < x(i, j) THEN
         max = x(i, j)
         im = i
         jm = j
      END IF
   NEXT j, i
END SUB
 
SUB minn (x(), min, im, jm)
   mix = x(1, 1)
   im = 1
   jm = 1
 
   FOR i = 1 TO n
   FOR j = 1 TO n
      IF mix > x(i, j) THEN
         mix = x(i, j)
         im = i
         jm = j
      END IF
   NEXT j, i
END SUB
 
SUB RAND
   RANDOMIZE TIMER
END SUB

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.5 из 5
Похожие ответы