Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
11 / 11 / 24
Регистрация: 12.12.2017
Сообщений: 131
Записей в блоге: 2
1

Преобразование квадратной матрицы

19.12.2017, 10:35. Показов 382. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дана квадратная матрица заполненная случайными числами.
Требуется с помощью минимального количества перестановок
вывести на главную диагональ этой матрицы самые большие
элементы (сколько уместится). Программа прилагается.
...
Вопрос.
Изначально была попытка решить эту задачу с помощью иного алгоритма.
1. Были найдены все наибольшие элементы в необходимом количестве и их
индексы
2. А вот перемещение (перестановка) этих элементов на главную диагональ
стала неразрешимой проблемой. Потратив бездну времени, я отказался от
такого "решения" и стал искать более простой алгоритм. Но может кто-то,
обладающий высоким интеллектом сможет сделать то, что мне оказалось
неподвластно.

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
CLS
RANDOMIZE TIMER
CONST n = 6
DIM x(n, n) AS INTEGER
DIM imax(n) AS INTEGER
DIM jmax(n) AS INTEGER
 
FOR i = 1 TO n
FOR j = 1 TO n
   x(i, j) = 40 * RND - 20
   PRINT USING "####"; x(i, j);
NEXT: PRINT
NEXT: PRINT
 
FOR k = 1 TO n
   max = -40
 
   FOR i = 1 TO n
   FOR j = 1 TO n
      IF i <> j THEN
      IF max < x(i, j) THEN
         max = x(i, j)
         imax(k) = i
         jmax(k) = j
      END IF
      END IF
   NEXT j, i
 
   FOR u = k TO n
      i = imax(u)
      j = jmax(u)
 
      IF x(k, k) < x(i, j) THEN
         SWAP x(k, k), x(i, j)
      ELSEIF x(k, k) = x(i, j) AND k < n THEN
         SWAP x(k + 1, k + 1), x(i, j)
      END IF
   NEXT u
NEXT k
 
FOR i = 1 TO n
FOR j = 1 TO n
   PRINT USING "####"; x(i, j);
NEXT: PRINT
NEXT
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2017, 10:35
Ответы с готовыми решениями:

Преобразование квадратной матрицы.
Hазовем допустимым преобразованием матрицы перестановку двух строк или двух столбцов. Дана...

Преобразование квадратной матрицы
Доброго всем времени суток Можно ли как - то с помощью элементарных преобразований квадратной...

Преобразование квадратной матрицы
а) Вычесть из А единичную матрицу; б) сформировать матрицу В, транспонированную по отношению к...

Преобразование Квадратной матрицы
Выполнить над квадратной матрицей А, порядка N последовательность действий, указанную в задании....

2
7 / 7 / 8
Регистрация: 06.03.2016
Сообщений: 19
19.12.2017, 20:05 2
Если в ваш код вставить OPTION BASE 1, могут вылазить ошибки! Почему?
Условие по минимуму перестановок не выполняется. Наверно, второй SWAP лишний.
Вот мой вариант:
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
DEFINT A-Z
OPTION BASE 1
CLS
RANDOMIZE TIMER
CONST n = 6
DIM x(n, n)
 
FOR i = 1 TO n
FOR j = 1 TO n
   x(i, j) = 40 * RND - 20
   PRINT USING "####"; x(i, j);
NEXT: PRINT
NEXT: PRINT
 
DO
    flag = 0
    ' Ищет минимальный элемент главной диагонали
    min = 1
    FOR k = 2 TO n
        IF x(min, min) > x(k, k) THEN
        min = k
        END IF
    NEXT k
    IF om = min THEN EXIT DO ELSE om = min
    ' Ищет максимальный элемент в матрице кроме главной диагонали
    imax = min
    jmax = min
    FOR i = 1 TO n
    FOR j = 1 TO n
        IF x(imax, jmax) < x(i, j) AND i <> j THEN
            imax = i
            jmax = j
        END IF
    NEXT j, i
    ' Перестановка минимального из диагонали с максимальным в остальной матрице
    IF imax <> min OR jmax <> min THEN
        SWAP x(min, min), x(imax, jmax)
        per = per + 1
        flag = 1
    END IF
LOOP UNTIL flag = 0
 
FOR i = 1 TO n
FOR j = 1 TO n
   PRINT USING "####"; x(i, j);
NEXT: PRINT
NEXT
PRINT : PRINT "Perestanovok:"; per
1
11 / 11 / 24
Регистрация: 12.12.2017
Сообщений: 131
Записей в блоге: 2
20.12.2017, 12:25  [ТС] 3
goguandr,
Безусловно, вы человек высокого интеллекта. Я не догадался
искать на диагонали минимальный элемент. А ведь я на этой
диагонали 100 раз споткнулся. Была как-то мысль, что надо
что-то сделать... Но именно вы решили несомненно более сложную
задачу, решили нестандартно. Это сейчас, после вашего решения,
может показаться, что задача лёгкая. Да! Лёгкая, когда она кем-то
в данном случае вами решена. Спасибо, я очень благодарен вам!
Теперь я знаю, что вы способны на многое! Спасибо!
0
20.12.2017, 12:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2017, 12:25
Помогаю со студенческими работами здесь

Преобразование квадратной матрицы
Уважаемые софорумцы,помогите пожалуйста в написании программы,задача звучит так: &quot;Дана квадратная...

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

Транспонирование матрицы. Содержание квадратной матрицы повернуть относительно центра на 90*.
Задача: Содержание квадратной матрицы повернуть относительно центра на 90*. Вот моя версия,...

Для квадратной матрицы определить индексы максимального элемента главной диагонали матрицы
Для квадратной матрицы определить индексы максимального элемента главной диагонали матрицы


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru