к оглавлению

Двумерные массивы: определение, заполнение, печать

В первом семестре в курсе математики Вас знакомили с определителями и матрицами. Матрица – прямоугольная таблица элементов одинаковой природы, каждый элемент матрицы имеет двойной индекс: первый – номер строки, второй – номер столбца. Если число строк равно числу столбцов, то такую матрицу будем называть квадратной. В учебной литературе принято параметр строк (первый индекс элемента матрицы) обозначать переменной i, параметр столбцов – второй индекс – j. Естественно, двумерные массивы будем заполнять, распечатывать и обрабатывать во вложенных циклах.

Когда Вы вычисляли определители, то использовали понятия главной и вспомогательной диагоналей. Сформулируем признаки элементов, принадлежащих основной и вспомогательной диагоналям, а также понятия НАД и ПОД соответствующими диагоналями. Если индексы равны, то такой элемент принадлежит главной диагонали. Если i > j, то элемент находится ПОД главной диагональю, если i < j, то такой элемент – над главной диагональю. Нетрудно видеть, что если индексы удовлетворяют условию i = n – j + 1, то элемент принадлежит вспомогательной диагонали. Если i < n – j + 1, то элемент – над вспомогательной диагональю, в противном случае – под вспомогательной диагональю.

Изучение материала – не простого, но важного – начнем с знакомства и конспектирования очередной электронной лекции.

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

SCREEN 9: COLOR 14, 1: CLS : RANDOMIZE TIMER

‘********* Заполнение и вывод двумерного массива **********

'********* Примеры простейших задач на двумерные массивы **********

'*Двумерный массив - это матрица, содержащая n строк и m cтолбцов *

'* Первый индекс - номер строки, 2-ой - столбца **********

REM**** Это задание, определение двумерного массива ********

PRINT TAB(10); : INPUT "Сколько строк в массиве?"; n

PRINT TAB(10); : INPUT "Сколько столбцов в массиве?"; m

DIM x(n, m)

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

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

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

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

NEXT j, i

'*****************************************************

'***А так его можно ввести с клавиатуры************

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

'PRINT "x("; i; ","; j; ") ="; : INPUT x(i, j)'NEXT j, i

'***А так его можно ввести с помощью DATA-READ ************

'***Располагайте элементы построчно(!), их должно быть nxm ************

'DATA 2,6,-8,6,4,6,7,8,9,0,6,8

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

'READ x(i, j)

'NEXT j, i

'* Элементы массива можно определить и по заданной формуле **

'*** ************ Например

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

'x(i, j) = (i ^ 3 - SQR(j + 1)) / (i + j)

'NEXT j, i

CLS

'*** А это программка распечатки двумерного массива ********

COLOR 10FOR i = 1 TO n: FOR j = 1 TO mLOCATE 3 + i * 2, 20 + j * 5: PRINT x(i, j)

NEXT j, i

COLOR 14

'*********************************************************

'*** Хорошо разберитесь с тем, что выше ****

'*** А далее, собственно, решение Ваших задач *******************

'** Как только начнете решать свою задачу, сохраните файл под другим именем*

'** Здесь формулируйте задачу **************

'** Приведу пример. Из произвольного двумерного массива вывести на печать

'** значения и индексы наибольшего и наименьшего элементов

'* Массив уже заполнен одним из приведенных способов

min = x(1, 1): max = x(1, 1): mi = 1: mj = 1: bi = 1: bj = 1

‘FOR i = 1 TO n

FOR j = 1 TO m

‘IF x(i, j) < min THEN min = x(i, j): mi = i: mj = j

‘IF x(i, j) > max THEN max = x(i, j): bi = i: bj = j

‘NEXT j

NEXT i

‘PRINT

'**** Выводим ответ *****************************

‘PRINT TAB(10); : PRINT "Максимальный элемент x("; bi; ","; bj; ") ="; max

‘PRINT TAB(10); : PRINT "Минимальный элемент x("; mi; ","; mj; ") ="; min

END

Рассмотрим еще одну задачу. Окрасить элементы матрицы по какому-либо признаку

'********Окраска элементов массива по какому-либо признаку**

SCREEN 9: COLOR 14, 1: CLS : RANDOMIZE TIMER

PRINT TAB(10); : INPUT "Введите размерность квадратной матрицы"; n

DIM x(n, n)

a = -9: b = 9

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

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

NEXT j, i

COLOR 14, 1

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

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

NEXT j, i

COLOR 14

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

LOCATE 13 + i * 2, 20 + j * 5: IF i = n - j + 1 THEN COLOR 14: PRINT x(i, j)

LOCATE 13 + i * 2, 20 + j * 5: IF i < n - j + 1 THEN COLOR 4: PRINT x(i, j)

LOCATE 13 + i * 2, 20 + j * 5: IF i > n - j + 1 THEN COLOR 7: PRINT x(i, j)

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

NEXT j, i

'* Еще простейшие задачи, перепишите их в конспект, решайте ***********

'* их сейчас, решайте дома, консультируйтесь друг с другом *************

'* Итак, задан двумерный массив, содержащий положительные ***

'** и отрицательные элементы, заполните и распечатайте его ********

'*1) Найти сумму его элементов, найти суммы положительных, отрицательных *

'*2) Найти сумму элементов главной диагонали *******************

'*3) Найти сумму элементов, стоящих под (над) главной диагональю ****

'*4) Найти количество положительных (отрицательных) элементов **************

'*5) Элементы над главной диагональю заменить единицами *******************

'*6) Заменить отрицательные элементы их модулями *******************

'*7) Вывести на печать вместе с индексами элементы, кратные трем ********

'* Огромных Вам успехов в освоении двумерных массивов ****

Следующее занятие будет посвящено именно таким задачам.

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

  • Актуализировали понятия определителя и матрицы;
  • Усвоили, что элементы двумерных массивов имеют двойной индекс – первый указывает на номер строки элемента, второй – на номер столбца;
  • Научились определять двумерные массивы, присваивать им значения;
  • Научились выводить на печать двумерные массивы в естественном виде – в виде матрицы;
  • Рассмотрели примеры задач на обработку двумерных массивов;
  • Самостоятельно программно реализовали алгоритмы по обработке одномерных массивов;
  • Получили задачи для самостоятельной разработки.

Знаете ли Вы, что Программный сниппет (англ. snippet — фрагмент, отрывок) в практике программирования — небольшой фрагмент исходного кода или текста, пригодный для повторного использования. Сниппеты не являются заменой процедур, функций или других подобных понятий структурного программирования. Они обычно используются для более лёгкой читаемости кода функций, которые без их использования выглядят слишком перегруженными деталями, или для устранения повторения одного и того же общего участка кода. Интегрированные среды разработки (IDE) содержат встроенные средства для ввода конструкций языка. Например, в Microsoft Visual Studio, Borland Developer Studio, для этого необходимо ввести ключевое слово и нажать определённую клавишную комбинацию. В IDE Geany существует специальный файл snippets.conf (путь к файлу: /home/user/.config/geany) позволяющий создавать свои сниппеты. Другие программы, такие как Macromedia Dreamweaver и Zend Studio, позволяют использовать сниппеты в Веб-программировании.
НОВОСТИ ФОРУМА

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


Рыцари теории эфира
 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