Словосочетание “более сложных алгоритмов” весьма условно. Для студентов специальности 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 "Строки:"
'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 "Столбцы:"
'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 "Диагонали:"
'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
'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?