Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8

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

09.08.2016, 09:15. Показов 1090. Ответов 4
Метки нет (Все метки)

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

Задача пока не решена.
Ищется подходящий алгоритм
Кто может что-нибудь подсказать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.08.2016, 09:15
Ответы с готовыми решениями:

Массив: Получить новую матрицу следующим способом: умножением Min каждой строки первой матрицы на Max соответствующего столбца второй
Пусть даны две вещественные матрицы порядка N. Получить новую матрицу следующим способом: умножением минимального элемента каждой строки...

Найти max и min элементы массива y и сформировать массив z из элементов массива y, находящихся между max и min y. Записать массив z в обратном порядке
Дан массив Х{80 элементов}. Вычислить {y}_{i}=sin\sqrt{{x}_{i}}+{cos}^{2}{{x}_{1}}^{2} Найти max и min элементы массива y и...

Упорядочить массив по убыванию элементов второй строки и напечатать max и min элементы матрицы
1. Введите массив N и определите, есть ли в нем элементы с одинако-выми значениями 2. Дан двумерный массив вещественных чисел....

4
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
09.08.2016, 16:03
Лучший ответ Сообщение было отмечено echs как решение

Решение

Алгоритм по 3му варианту:
Находим максимальное число в первой матрице, находим минимальное число во второй матрице, запоминаем их индексы.
Если max1 >min2, то меняем числа.
Повторять до тех пор, пока max1>min2
Т.к. матрицы небольшого размера, то и сравнений будет немного.
Максимально возможное кол-во сравнений 5*5*2*25 = 1250

По второму варианту:
Находим медиану двух массивов, в зависимости от чисел используем сортировку или если используются целые числа вспомогательный массив.
Далее используем медиану для обмена между массивами.
Сложность может возникнуть с ситуацией, когда несколько чисел равны медиане, то нужно правильно составить алгоритм разделения чисел между матрицами.
Если используется пузырьковая сортировка для поиска медианы, то это уже 50*49/2 = 1225 итераций, плюс доп. алгоритм по обмену числами. Если используются целые числа (например от 1 до 100), то количество итераций при поиске медианы может быть существенно меньше.

Скорее всего, задачу нужно решить так, чтобы было как можно меньше обменов чисел между матрицами, поэтому вариант 1 не подходит.

Самый простой вариант - 3й, через поиск мин и макс элементы матриц.

Добавлено через 8 минут
пример (писал на vba, но должен работать в QBasic)
Вывод массивов сделайте самостоятельно
QBasic/QuickBASIC
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
DIM a(1 TO 5, 1 TO 5) AS LONG, b(1 TO 5, 1 TO 5) AS LONG
DIM i AS LONG, j AS LONG, min AS LONG, max AS LONG
DIM x1 AS LONG, x2 AS LONG, y1 AS LONG, y2 AS LONG
 
RANDOMIZE TIMER
FOR i = 1 TO 5
FOR j = 1 TO 5
    a(i, j) = INT(RND * 100 + 1)
    b(i, j) = INT(RND * 100 + 1)
NEXT j, i
 
'вывод результата
'Cells(1, 1).Resize(5, 5) = a
'Cells(1, 7).Resize(5, 5) = b
DO
    FOR i = 1 TO 5
    FOR j = 1 TO 5
        IF i = 1 AND j = 1 THEN
            max = a(i, j)
            x1 = i
            y1 = j
            min = b(i, j)
            x2 = i
            y2 = j
        ELSE
            IF max < a(i, j) THEN
                max = a(i, j)
                x1 = i
                y1 = j
            END IF
            IF min > b(i, j) THEN
                min = b(i, j)
                x2 = i
                y2 = j
            END IF
        END IF
    NEXT j, i
    IF max > min THEN
        a(x1, y1) = min
        b(x2, y2) = max
    ELSE
        EXIT DO
    END IF
LOOP
'вывод результата
'Cells(7, 1).Resize(5, 5) = a
'Cells(7, 7).Resize(5, 5) = b
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
09.08.2016, 17:26  [ТС]
m-ch
Вы правы. Ваше предложение самое наилучшее
Назовем его Вариант 4. Ибо в третьем варианте я
планировал просто обмен значениями без поиска
минимальных и максимальных значений. Отсюда и
возникала неопределенность.

Добавлено через 1 час 8 минут
Вариант программы, решающей эту задачу

QBasic/QuickBASIC
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
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
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
10.08.2016, 07:21
Лучший ответ Сообщение было отмечено echs как решение

Решение

geh, чем не устроил мой код?
в Вашем коде в строке 27 цикл по обмену выполняется 25 раз
Но возможно и не нужно столько раз выполнять обмены, это может привести к ситуации, когда будет произведен не нужный обмен и максимальный элемент первой матрицы будет больше минимального элемента второй матрицы.

Проверка Вашего кода показывает, что может получится не правильная работа макроса.
Просто протестируйте, первую матрицу заполните единицами, вторую двойками и посмотрите результат.

Другие вопросы:
Зачем randomize выводить в отдельную процедуру?
Почему массивы начинаются с нулевого элемента, а не с первого?
Почему используете вещественные переменные, а не целые?
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
10.08.2016, 07:47  [ТС]
m-ch
У Вас классный код! Много лучше моего!
Но.
1. Я предпочитаю вводить в программу процедуры. Мне так
больше нравится. Процедура RAND - это конечно перегиб.
2. Теперь серьезно
Вы указали на мою большую ошибку. При обмене элементами
я не поставил условие проверки, надеясь на то, что максимум
будет больше минимума. А этого, КАК ВЫ ВЕРНО ПОДМЕТИЛИ,
может и не быть!
3. Вещественные числа?
Ну это для программы особой роли не играет
4. Определение матрицы с нуля?
Я это просмотрел. А потом матрицы маленькие. Тут на них не
сэкономишь. Но вы все-равно правы.
Я Вам очень благодарен за Ваш интерес к этой теме. Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.08.2016, 07:47
Помогаю со студенческими работами здесь

Найти max элемент в первой половине массива и min во второй
Найти МАХ элемент из первой половины массива и МИН – из второй половины массива.

Массив заполнить случайными числами и вывести max и min. Выводится только max
Задание такое: Массив заполняется случайными числами потом если нет повторяющихся max и min должно вывести просто max и min ищет норм но...

Найти разницу между min и max числами
нужно найти разницу между min и max числами безумно нужна помощь! Добавлено через 52 минуты ну уж простите!! я тут как...

Переписать простые числа из матрицы A в массив B, из массива удалить числа между max и min элементами
переписать простые числа из матрицы целых чисел A в массив B. Из массива B удалить числа, расположенные между максимальным и минимальными...

Найти max и min, если min левее max, то среднее арифметическое между ними
#include &lt;iostream.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; void main() { int n,a; int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru