к оглавлению

Реализация более сложных алгоритмов обработки двумерных массивов

Словосочетание “более сложных алгоритмов” весьма условно. Для студентов специальности 2202 это стандартные, типовые задачи, которые необходимо освоить безусловно!

На этом занятии приведем в электронном виде формулировку задач и их программную реализацию. Вам необходимо вникнуть в суть задачи, при необходимости задать вопрос преподавателю, снять REM и убедиться в ее работе. Безусловно, внести в свои конспекты. Программы приводятся без комментариев с предложением к Вам разобраться самостоятельно и “защитить” понимание их работы.

Итак, задачи.

SCREEN 9: COLOR 14, 1: CLS

RANDOMIZE TIMER

'*******************Оглавление********************

'***1 - от одномерного массива к двумерному*********

'***2 - вспомогательная диагональ квадратной матрицы*****

'***3 - транспонирование прямоугольной матрицы*****

'***4 - поиск равных элементов матрицы*****

'***5 - удаление строки или столбца матрицы*****

'***6 - добавление строки или столбца в матрицу*****

'***7 - формирование симметричной матрицы *****************

'***8 - магический квадрат ********************************

'**Снимайте REM и запускайте по очереди программы

'***Больших Вам успехов! Е.И.************************

1 - Из одномерного к двумерному (понятна задача?). Если нет. Задан одномерный массив, необходимо образовать из его элементов матрицу, считывая элементы массива построчно.

'INPUT "Сколько элементов в одномерном массиве"; n

'DIM a(n)

'3 INPUT "Сколько строк в двумерном массиве"; k

'IF n / k <> n \ k THEN PRINT "Ты не прав, n должно делиться на к": GOTO 3

'DIM b(k, n / k)

'FOR i = 1 TO n

'a(i) = INT(-10 + 20 * RND)

'PRINT a(i);

'NEXT i

'PRINT : PRINT

'p = 0

'FOR i = 1 TO k: FOR j = 1 TO n / k

'p = p + 1: b(i, j) = a(p)

'NEXT j, i

'FOR i = 1 TO k: FOR j = 1 TO n / k

'LOCATE 5 + i * 2, 20 + j * 5: PRINT b(i, j)

'NEXT j, i

'***2 - вспомогательная диагональ квадратной матрицы*****

'n = 4: m = 4

'DIM a(n, m)

'a = -8: b = 9

'REM**** Это заполнение двумерного массива случайными числами*

'FOR i = 1 TO n: FOR j = 1 TO m

'a(i, j) = INT(a + (b - a) * RND)

'NEXT j, i

'*** А это его распечатка *************************

'COLOR 10

'FOR i = 1 TO n: FOR j = 1 TO m

'LOCATE 3 + i * 2, 5 + j * 5: PRINT a(i, j)

'NEXT j, i

'COLOR 14

'****Это один из признаков вспомогательной диагонали *******

'FOR i = 1 TO n: FOR j = 1 TO m

'IF j = n - i + 1 THEN a(i, j) = 0 ELSE a(i, j) = 1

'NEXT j, i

'*******А это еще один***********

'FOR i = 1 TO n: FOR j = 1 TO m

'IF i + j > n + 1 THEN a(i, j) = 1

'IF i + j < n + 1 THEN a(i, j) = -1

'NEXT j, i

'FOR i = 1 TO n: FOR j = 1 TO m

'LOCATE 13 + i * 2, 5 + j * 5: PRINT a(i, j)

'NEXT j, i

'COLOR 14

3 - транспонирование прямоугольной матрицы – замена строк столбцами, столбцов - строками

'INPUT "сколько строк в массиве?"; n

'INPUT "сколько столбцов в массиве?"; m

'DIM a(n, m), b(m, n)

'a = -8: b = 9

'REM**** Это заполнение двумерного массива случайными числами*

'FOR i = 1 TO n: FOR j = 1 TO m

'a(i, j) = INT(a + (b - a) * RND)

'NEXT j, i

'*** А это его распечатка *************************

'COLOR 10

'FOR i = 1 TO n: FOR j = 1 TO m

'LOCATE 3 + i * 2, 1 + j * 5: PRINT a(i, j)

'NEXT j, i

'COLOR 14

'FOR i = 1 TO n: FOR j = 1 TO m

'b(j, i) = a(i, j): NEXT j, i

'SWAP n, m: '****Подумайте, зачем это...*****

'FOR i = 1 TO n: FOR j = 1 TO m

'LOCATE 13 + i * 2, 1 + j * 5: PRINT b(i, j)

'NEXT j, i

'COLOR 14

'***4 - поиск равных элементов матрицы*****

INPUT "сколько строк в массиве?"; n

INPUT "сколько столбцов в массиве?"; m

DIM a(n, m)

INPUT "из какого отрезка a,b брать значения x(i,j)"; a, b

REM**** Поиск равных элементов двумерного массива ********

FOR i = 1 TO n: FOR j = 1 TO m

a(i, j) = INT(a + (b - a) * RND)

NEXT j, i

COLOR 10

FOR i = 1 TO n: FOR j = 1 TO m

LOCATE 3 + i * 2, 1 + j * 5: PRINT a(i, j)

NEXT j, i

COLOR 14

FOR i = 1 TO n: FOR j = 1 TO m

r = a(i, j)

FOR k = i TO n

FOR q = j + 1 TO m

IF a(k, q) = r THEN PRINT "a("; i; ","; j; ") = a("; k; ", "; q; ") = "; r

NEXT q

NEXT k

NEXT j, i

'***5 - удаление строки или столбца матрицы*****

'INPUT "сколько строк в массиве?"; n

'INPUT "сколько столбцов в массиве?"; m

'DIM a(n, m)

'a = -9: b = 9

'FOR i = 1 TO n: FOR j = 1 TO m

'a(i, j) = INT(a + (b - a) * RND)

'NEXT j, i

'COLOR 10

'FOR i = 1 TO n: FOR j = 1 TO m

'LOCATE 3 + i * 2, 1 + j * 5: PRINT a(i, j)

'NEXT j, i

'COLOR 14

'INPUT "Удалить строку"; t

'FOR i = t TO n - 1: FOR j = 1 TO m

'SWAP a(i, j), a(i + 1, j)

'NEXT j, i

'n = n - 1: FOR i = 1 TO n: FOR j = 1 TO m: a(i, j) = a(i, j): NEXT j, i

'INPUT "Удалить столбец"; t

'FOR j = t TO m - 1: FOR i = 1 TO n: SWAP a(i, j), a(i, j + 1)

'NEXT i, j

'm = m - 1: FOR i = 1 TO n: FOR j = 1 TO m: a(i, j) = a(i, j): NEXT j, i

'FOR i = 1 TO n: FOR j = 1 TO m

'LOCATE 13 + i * 2, 1 + j * 5: PRINT a(i, j)

'NEXT j, i

'COLOR 14

'***6 - добавление строки или столбца в матрицу*****

n = 4: m = 4

'DIM a(n + 1, m)

'a = -8: b = 9

'FOR i = 1 TO n: FOR j = 1 TO m

'a(i, j) = INT(a + (b - a) * RND)

'NEXT j, i

'COLOR 10

'FOR i = 1 TO n: FOR j = 1 TO m

'LOCATE i * 2, 5 + j * 5: PRINT a(i, j)

'NEXT j, i

'COLOR 14

'INPUT "Какую строку вставить"; r

'FOR i = n TO r STEP -1: FOR j = 1 TO m

'SWAP a(i, j), a(i + 1, j)

'NEXT j, i

'PRINT "Введите строку, после набора каждого элемента - Enter"

't = CSRLIN

'FOR j = 1 TO m: LOCATE t, 2 + 3 * j: INPUT a(r, j): NEXT j

'FOR i = 1 TO n + 1: FOR j = 1 TO m

'LOCATE 13 + i * 2, 5 + j * 5: PRINT a(i, j)

'NEXT j, i

'COLOR 14

'*****Самостоятельно разработайте программу вставки столбца********

'***7 - формирование симметричной матрицы *****************

'n = 4: m = 4

'DIM x(n, m)

'a = -10: b = 10

'FOR i = 1 TO n: FOR j = 1 TO m

'x(i, j) = INT(a + (b - a) * RND)

'NEXT j, i

'COLOR 10

'FOR i = 1 TO n: FOR j = 1 TO m

'LOCATE 1 + i * 2, 20 + j * 5: PRINT x(i, j)

'NEXT j, i

'COLOR 14

'*****Матрица называется симметричной, если x(i,j)=x(j,i)***

'FOR i = 1 TO n: FOR j = 1 TO m

'IF i > j THEN x(i, j) = x(j, i)

'NEXT j, i

'FOR i = 1 TO n: FOR j = 1 TO m

'LOCATE 10 + i * 2, 20 + j * 5: PRINT x(i, j)

'NEXT j, i

'*8 - магический квадрат. Это занимательная классическая задача. Вспомните известную картину известного художника.

'*Магический квадрат это квадратная матрица, у которой суммы элементов строк, столбцов и диагоналей РАВНЫ *

'*Это задача уже для олимпиады, постарайтесь разобраться в этой интересной программе

'n = 3: m =3

'DIM a(n, m), s(n ^ 2 + 2)

'a = 1: b = 6

'k = 0

'5 k = k + 1

'LOCATE 1, 35: PRINT k

'FOR i = 1 TO n: FOR j = 1 TO m

'a(i, j) = INT(a + (b - a) * RND)

'NEXT j, i

'COLOR 10

'FOR i = 1 TO n: FOR j = 1 TO m

'LOCATE 2 + i * 2, 15 + j * 5: PRINT a(i, j)

'NEXT j, i

'COLOR 14

'PRINT

'PRINT "Строки:"

'FOR i = 1 TO n:

's = 0: FOR j = 1 TO m: s = s + a(i, j)

'NEXT j

's(i) = s

'PRINT s(i);

'NEXT i

'PRINT

'PRINT "Столбцы:"

'FOR i = 1 TO n:

's = 0: FOR j = 1 TO m: s = s + a(j, i)

'NEXT j

's(n + i) = s

'PRINT s(n + i);

'NEXT i

'PRINT

'PRINT "Диагонали:"

's1 = 0: s2 = 0

'FOR i = 1 TO n:

'FOR j = 1 TO m

'IF i = j THEN s1 = s1 + a(i, j)

'IF i + j = n + 1 THEN s2 = s2 + a(i, j)

'NEXT j: NEXT i

's(2 * N + 1) = s1: s(2 * N + 2) = s2:

'PRINT s1; s2

'PRINT

'FOR i = 2 TO 2 * N + 2:

'IF s(1) <> s(i) THEN 5

'NEXT i

't = a(1, 1)

'FOR i = 1 TO N: FOR j = 1 TO m

'IF a(i, j) = t THEN 10 ELSE END

'10 NEXT j, i

'GOTO 5

'**********************Задача по экономике************************

'*У фирмы три магазина. Известен доход каждого магазина в каждый день первой декады месяца. ОПРЕДЕЛИТЬ

'SCREEN 9: COLOR 1, 14

'RANDOMIZE TIMER: CLS

'DIM a(3, 10)

'FOR i = 1 TO 3

'FOR j = 1 TO 10

'a(i, j) = INT(10 + 50 * RND)

'NEXT j, i

'FOR i = 1 TO 3

'LOCATE 1 + i, 2: PRINT "Магазин №"; i

'FOR j = 1 TO 10

'LOCATE 1, 11 + j * 6: PRINT j; "-е"

'LOCATE 1 + i, 12 + j * 6: PRINT a(i, j)

'NEXT j

'NEXT i

'*1)Какой из магазинов получил максимальный общий доход за 10 дней

's = 0: max = 0: k = 0

'FOR i = 1 TO 3

'FOR j = 1 TO 10

's(i) = s(i) + a(i, j)

'NEXT j

'IF s(i) > max THEN max = s(i): k = i

'NEXT i

'PRINT TAB(7); "Максимальный доход получил"; k; "магазин, он получил"; max; "руб"

'*2)Какого числа фирма получила максимальный общий доход

'w = 0: max = 0: k = 0

'FOR j = 1 TO 10

'FOR i = 1 TO 3

'w(j) = w(j) + a(i, j)

'NEXT i

'IF w(j) > max THEN max = w(j): k = j

'NEXT j

'PRINT TAB(5); "Максимальный доход в размере"; max; "руб фирма получила"; k; "числа данного месяца"

'*3)Какой магазин и какого числа получил максимальный доход за 10 дней

'max = 0: den = 0: mag = 0

'FOR i = 1 TO 3

'FOR j = 1 TO 10

'IF a(i, j) > max THEN max = a(i, j): mag = i: den = j

'NEXT j, i

'PRINT TAB(2); "Магазин №"; mag; "получил максимальный доход в размере"; max; "руб"; den; "числа данного месяца"

'*4)Для каждого магазина, определить какого числа этот магазин получил

'*максимальный доход

'den = 0

'FOR i = 1 TO 3

'max = 0

'FOR j = 1 TO 10

'IF a(i, j) > max THEN max = a(i, j): den = j

'NEXT j

'PRINT TAB(5); "Максимальную сумму в размере"; max; "руб заработал"; i; "магазин за"; den; "день"

'NEXT i

'*5)Для каждого дня, определить какой магазин в этот день получил максимальный

'* доход

'mag = 0

'FOR j = 1 TO 10

'max = 0

'FOR i = 1 TO 3

'IF a(i, j) > max THEN max = a(i, j): mag = i

'NEXT i

'PRINT TAB(5); "В"; j; "день магазин №"; mag; "получил наибольший доход в размере"; max; "руб"

'NEXT j

А теперь получите задания для самостоятельной разработки

19.1Сформировать и вывести на печать квадратную единичную матрицу: элементы главной диагонали равны 1, все другие 0

19.2Вмассиве а(n,n) элементы определяются как a(i,j) = i-j. Определить индексы и вывести на печать нулевые элементы.

19.3В массиве а(5,6) найти разность между суммой элементов второй строки и пятого столбца.

19.4В массиве а(5,4) поменять местами 1 и 2 столбцы, 3 и 4-ый.

19.5Сформировать одномерный массив из элементов массива а(5,5), кратных трем.

19.6Найти число пар равных элементов и вывести их на печать вместе с их индексами. (!)

19.7В квадратной матрице a(n;n) удалить k-ую строку, t-ый столбец, естественно, k<n, t<n.

Какие умения и навыки Вы приобрели на занятии №19?

к оглавлению

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

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution