Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185

Две матрицы изменяются до тех пор, пока не совпадут

03.07.2014, 15:39. Показов 541. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Даны две матрицы размером 7*7. Они заполнены случайными
целыми числами от 0 до 9. Далее из первой матрицы случайно
выбирается элемент и помещается во вторую матрицу на то же
место (те же координаты), которое у него было в первой матрице.
Далее этот элемент заменяет рядом стоящие элементы на самого
себя (пример, если это число 7, то вокруг будут раполагаться
семерки). Далее аналогичным образом поступают со 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
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
80
81
82
83
84
DECLARE FUNCTION Aus% (a%())
DECLARE SUB Auf (i1%, j1%, a1%, a%(), c%())
DEFINT A-D, I-K
OPTION BASE 1
RANDOMIZE TIMER
CLS
DIM a(7, 7)
DIM b(7, 7)
DIM c(0 TO 8, 0 TO 8)
 
FOR i = 1 TO 7
   FOR j = 1 TO 7
      a(i, j) = 10 * RND - .5
      LOCATE i, 3 * j
      PRINT a(i, j)
      b(i, j) = 10 * RND - .5
      LOCATE i, 3 * j + 30
      PRINT b(i, j)
   NEXT j
NEXT i
 
FOR k = 1 TO 2000
   i1 = 7 * RND + .5
   j1 = 7 * RND + .5
   a1 = a(i1, j1)
   CALL Auf(i1, j1, a1, b(), c())
  
   i1 = 7 * RND + .5
   j1 = 7 * RND + .5
   b1 = b(i1, j1)
   CALL Auf(i1, j1, b1, a(), c())
   IF Aus(a()) * Aus(b()) THEN EXIT FOR
NEXT k
 
FOR i = 1 TO 7
   FOR j = 1 TO 7
      LOCATE i + 8, 3 * j
      PRINT a(i, j)
      LOCATE i + 8, 3 * j + 30
      PRINT b(i, j)
   NEXT j
NEXT i
LOCATE 17, 24
PRINT "K = "; k
END
 
SUB Auf (i1, j1, a1, a(), c())
   FOR i = 1 TO 7
      FOR j = 1 TO 7
         c(i, j) = a(i, j)
      NEXT j
   NEXT i
 
   c(i1, j1) = a1
   c(i1, j1 - 1) = a1
   c(i1, j1 + 1) = a1
   c(i1 - 1, j1) = a1
   c(i1 - 1, j1 - 1) = a1
   c(i1 - 1, j1 + 1) = a1
   c(i1 + 1, j1) = a1
   c(i1 + 1, j1 - 1) = a1
   c(i1 + 1, j1 + 1) = a1
 
   FOR i = 1 TO 7
      FOR j = 1 TO 7
         a(i, j) = c(i, j)
      NEXT j
   NEXT i
END SUB
 
DEFINT D, K
FUNCTION Aus (a())
Aus = 1
d = a(1, 1)
FOR i = 1 TO 7
   FOR j = 1 TO 7
      IF a(i, j) <> d THEN
         Aus = 0
         GOTO 200
      END IF
   NEXT j
NEXT i
200
END FUNCTION
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.07.2014, 15:39
Ответы с готовыми решениями:

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

Элементы заданной матрицы A(N, N) переписывайте построчно в одномерный массив до тех пор, пока не встретится нулевой элемент.(Матрица задается динами)
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; void main() { int i,j,k,t,mas,mass,N,M; cout&lt;&lt;&quot;Enter n&quot;; ...

вычислять до тех пор, пока не нажмешь '?'
Ребят, помогите дополнить программу. Нужно продолжать вычисления, пока не нажмешь '?' #include &quot;stdafx.h&quot; #include...

4
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
04.07.2014, 16:33  [ТС]
вот ещё задача.
дана квадратная матрица А. построить В ей зеркальную.
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
DIM i AS INTEGER
DIM j AS INTEGER
DEFINT A-B
OPTION BASE 1
CLS
INPUT "N=?"; n
DIM a(n, n)
DIM b(n, n)
 
LOCATE 3, 2 * n + 2
PRINT "A"
FOR i = 1 TO n
   FOR j = 1 TO n
      a(i, j) = 10 * RND
      LOCATE 4 + i, 4 * j - 3
      PRINT USING "####"; a(i, j);
   NEXT j
NEXT i
 
LOCATE 3, 6 * n + 5
PRINT "B"
FOR i = 1 TO n
   FOR j = 1 TO n
      b(i, j) = a(i, n + 1 - j)
      LOCATE i + 4, 4 * n + 4 * j
      PRINT USING "####"; b(i, j);
   NEXT j
NEXT i
END
0
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
05.07.2014, 17:07  [ТС]
дана матрица А, построить матрицу В, которая
получена из матрицы А перемещением элементов
ее периметра на один шаг по часовой стрелке.
пример:
1 2 3 4
2 7 7 5
1 7 7 6
0 9 8 7
а В выглядит так:
2 1 2 3
1 7 7 4
0 7 7 5
9 8 7 6
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
DEFINT A-B, I-K
OPTION BASE 1
RANDOMIZE TIMER
CLS
INPUT "N=?"; n
DIM a(n, n)
DIM b(n, n)
 
FOR i = 1 TO n
   FOR j = 1 TO n
      a(i, j) = 20 * RND - 10
      PRINT USING "####"; a(i, j);
   NEXT j
   PRINT
NEXT i
 
FOR i = 1 TO n
   FOR j = 1 TO n
      IF i = 1 AND j < n THEN
         b(i, j + 1) = a(i, j)
      ELSEIF i < n AND j = n THEN
         b(i + 1, n) = a(i, n)
      ELSEIF i = n AND j > 1 THEN
         b(n, j - 1) = a(n, j)
      ELSEIF i > 1 AND j = 1 THEN
         b(i - 1, 1) = a(i, 1)
      END IF
   NEXT j
NEXT i
 
FOR i = 2 TO n - 1
   FOR j = 2 TO n - 1
      b(i, j) = a(i, j)
   NEXT j
NEXT i
 
PRINT
FOR i = 1 TO n
   FOR j = 1 TO n
      PRINT USING "####"; b(i, j);
   NEXT j
   PRINT
NEXT i
END
0
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
06.07.2014, 17:49  [ТС]
эта программа обобщение предыдущей.
здесь как бы вся матрица поворачивается на один шаг по часовой стрелке.
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
DEFINT A-B, I-N
OPTION BASE 1
RANDOMIZE TIMER
CLS
INPUT "N=?"; n
DIM a(n, n)
DIM b(n, n)
 
FOR i = 1 TO n
   FOR j = 1 TO n
      a(i, j) = 20 * RND - 10
      PRINT USING "####"; a(i, j);
   NEXT j
   PRINT
NEXT i
 
m = FIX(n / 2)
l = m + 1
n1 = n + 1
 
FOR k = 1 TO m
   FOR i = k TO n1 - k
      FOR j = k TO n1 - k
         IF i = k AND j < n1 - k THEN
            b(i, j + 1) = a(i, j)
         ELSEIF i < n1 - k AND j = n1 - k THEN
            b(i + 1, n1 - k) = a(i, n1 - k)
         ELSEIF i = n1 - k AND j > k THEN
            b(n1 - k, j - 1) = a(n1 - k, j)
         ELSEIF i > k AND j = k THEN
            b(i - 1, k) = a(i, k)
         END IF
      NEXT j
   NEXT i
NEXT k
IF n MOD 2 = 1 THEN b(l, l) = a(l, l)
 
PRINT
FOR i = 1 TO n
   FOR j = 1 TO n
      PRINT USING "####"; b(i, j);
   NEXT j
   PRINT
NEXT i
END
0
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
09.07.2014, 07:42  [ТС]
дана квадратная матрица порядка N.
надо преобразовать эту матрицу по следующему правилу,
каждая строка этой матрицы сдвигается на k шагов вправо,
элементы, которые "выходят" из матрицы переходят в начало
следующей строки, а конец матрицы переходит в ее начало.
Чтобы лучше понять посмотрите простой пример
Дано:
1234
5678
9012
3456
Имеем (сдвиг на два шага)
5612
3456
7890
1234
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
DEFINT A-B, I-N
OPTION BASE 1
RANDOMIZE TIMER
CLS
INPUT "N = ?"; n
INPUT "STEP="; k
DIM a(n, n)
DIM b(n * n)
 
FOR i = 1 TO n
   FOR j = 1 TO n
      a(i, j) = n * (i - 1) + j
      PRINT USING "####"; a(i, j);
   NEXT j
   PRINT
NEXT i
 
FOR i = 1 TO n
   FOR j = 1 TO n
      b(n * (i - 1) + j) = a(i, j)
   NEXT j
NEXT i
 
FOR j = 1 TO k
   FOR i = n * n TO 2 STEP -1
      SWAP b(i), b(i - 1)
   NEXT i
NEXT j
 
FOR l = 1 TO n * n
   i = (l - 1) \ n + 1
   j = (l - 1) MOD n + 1
   a(i, j) = b(l)
NEXT l
 
PRINT
FOR i = 1 TO n
   FOR j = 1 TO n
      PRINT USING "####"; a(i, j);
   NEXT j
   PRINT
NEXT i
END
Добавлено через 22 часа 57 минут
еще более сложная программа, все элементы матрицы
смещаются сверху вниз "змейкой", а конец идёт на верх.
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
DEFINT A-B, I-N
OPTION BASE 1
CLS
INPUT "N = ?"; n
INPUT "STEP="; k
DIM a(n, n)
DIM b(n * n)
 
FOR i = 1 TO n
   FOR j = 1 TO n
      IF i MOD 2 = 1 THEN
         a(i, j) = n * (i - 1) + j
         PRINT USING "####"; a(i, j);
      ELSE
         a(i, j) = n * i - (j - 1)
         PRINT USING "####"; a(i, j);
      END IF
   NEXT j
   PRINT
NEXT i
 
FOR i = 1 TO n
   FOR j = 1 TO n
      IF i MOD 2 = 1 THEN
         b(n * (i - 1) + j) = a(i, j)
      ELSE
         b(n * (i - 1) + j) = a(i, n - (j - 1))
      END IF
   NEXT j
NEXT i
 
FOR j = 1 TO k
   FOR i = n * n TO 2 STEP -1
      SWAP b(i), b(i - 1)
   NEXT i
NEXT j
 
FOR l = 1 TO n * n
   i = (l - 1) \ n + 1
   j = (l - 1) MOD n + 1
   a(i, j) = b(l)
NEXT l
 
FOR i = 2 TO n STEP 2
   FOR j = 1 TO n \ 2
      SWAP a(i, j), a(i, n - (j - 1))
   NEXT j
NEXT i
 
PRINT
FOR i = 1 TO n
   FOR j = 1 TO n
      PRINT USING "####"; a(i, j);
   NEXT j
   PRINT
NEXT i
END
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.07.2014, 07:42
Помогаю со студенческими работами здесь

Сделать Button неактивным до тех-пор пока . . .
Как можно сделать неактивным Button, пока хотя-бы 1 символ не введен в Edit ? Заранее спасибо за ответ !

Скрытие доступа к папкам до тех пор пока
Всем привет! Столкнулся с такой ситуацией: на свой сайт добавляю много лендингов, то есть выглядит как то так http://site.com/land1/ и...

Заполнять массив до тех пор пока не ввели k
Заполнять массив до тех пор пока не ввели k. После чего вывести элементы массива до введения k. Помогите пожалуйста!

Просматривать массив до тех пор, пока не встретится 0
Дан массив случайных чисел. Просматривать массив до тех пор, пока не встретится 0, и все четные числа записывать во второй массив. Если в...

Суммировать числа до тех пор, пока не останется 1 число
Почему не работает, и не говорите что 12 строчка. Pascal пишет что там ошибка но ; я поставил program p1; var st,st1:string; ...


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

Или воспользуйтесь поиском по форуму:
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