Двумерные массивы

  • doc
  • 13.05.2020
Публикация в СМИ для учителей

Публикация в СМИ для учителей

Бесплатное участие. Свидетельство СМИ сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 157. Двумерные массивы.doc

Двумерные массивы

Задание 1. Дана квадратная матрица A(n,n). Ввести с клавиатуры размерность матрицы – n и заполнить все элементы матрицы случайными целыми числами в диапазоне от -10 до 10. Вывести исходную матрицу на экран. Переставить местами элементы главной и побочной диагонали матрицы. Вывести полученную матрицу на экран.

Выполнение.  Программа должна состоять из трех частей: заполнение матрицы случайными числами; перестановка элементов главной и побочной диагонали; и вывод полученной матрицы на экран. Для реализации первой и третьей части потребуется по двум вложенным циклам: внешний цикл обеспечивает перебор номеров строк от 1 до n, а внутренний – перебор номеров элементов внутри каждой строки (столбцов) также от 1 до n.

Для генерации случайных чисел следует использовать функцию rnd(), которая возвращает случайные числа в диапазоне от 0...1. Чтобы расширить диапазон до 20 единиц, следует произвести умножение rnd() * 20. Для смещения диапазона в отрицательную область – вычитание rnd() * 20 – 10. Наконец, для получения целых чисел следует произвести округление round(rnd() * 20  –  10).

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

Для перестановки элементов достаточно одного цикла для перебора номеров строк от 1 до n. Имея номер строки i, номер столбца для элементов на диагоналях легко вычисляется и равен для главной диагонали i, а для побочной ni + 1.

Для перестановки также потребуется вспомогательная переменная t, используемая для временного хранения одного из переставляемых элементов.

 

Программа

 

1      Sub matrix_1() 'Начало подпрограммы (макроса)

2      n = Val(InputBox("Введите размерность матрицы?")) 'Ввод размерности матрицы

3      ReDim a(n, n) 'Описание матрицы и выделение под нее памяти

4      For i = 1 To n 'Начало цикла для перебора номеров строк матрицы

5      For j = 1 To n 'Начало цикла для перебора номеров элементов внутри строки

6      a(i, j) = Round(Rnd() * 20 - 10) 'Заполнение очередного элемента матрицы случайным числом из диапазона -10..10

7      Debug.Print a(i, j); 'Вывод очередного элемента матрицы без перевода текущей позиции на следующую строку экрана

8      Next j 'Окончание цикла для элементов внутри строки

9      Debug.Print 'Перевод текущей позиции на новой строку экрана

10    Next i 'Окончание цикла для строк

11     

12    For i = 1 To n 'Начало цикла для перебора номеров строк матрицы

13    t = a(i, i) 'Запоминание очередного элемента главной диагонали во временной переменной

14    a(i, i) = a(i, n - i + 1) 'Копирование очередного элемента с побочной диагонали на главную

15    a(i, n - i + 1) = t 'Копирование запомненного элемента главной диагонали на побочную

16    Next i 'Окончание цикла для строк

17     

18    Debug.Print "Результирующая матрица:" 'Вывод сообщения о начале результирующей матрицы

19    For i = 1 To n 'Начало цикла для перебора номеров строк матрицы

20    For j = 1 To n 'Начало цикла для перебора номеров элементов внутри строки

21    Debug.Print a(i, j); 'Вывод очередного элемента матрицы без перевода текущей позиции на следующую строку экрана

22    Next j 'Окончание цикла для элементов внутри строки

23    Debug.Print 'Перевод текущей позиции на новой строку экрана

24    Next i 'Перевод текущей позиции на новой строку экрана

25    End Sub 'Окончание подпрограммы

Словесное описание программы

После ввода размерности матрицы (с. 2) и ее описания (с. 3) следуют вложенные циклы (с. 4–10) заполнения матрицы случайными элементами (с. 6) и вывода ее на экран (с. 7). Чтобы элементы матрицы выводились на экран построчно, в конце с. 7 ставится точка с запятой (;). Это приводит к тому, что следующий вызов оператора Debug.Print продолжает печатать в той же строке экрана. По завершению внутреннего цикла, т.е. после последнего элемента каждой строки, выполняется дополнительный пустой оператор Debug.Print (с. 9), который приводит к тому, что следующий за ним вызов Debug.Print уже печатает на новой строке экрана.

В с. 12–16 осуществляется перебор номеров строк с целью последовательного перебора элементов главной и побочной диагоналей с 1-го до n-го. Внутри цикла для каждой пары элементов главной и побочной диагонали, находящихся на одной (i-й) строке, осуществляется перестановка за 3 шага: запоминание элемента главной диагонали во временной переменной (с. 13), копирование элемента с побочной диагонали на главную (с. 14), и копирование запомненного элемента главной диагонали на побочную (с. 15).

Для того чтобы визуально отделить исходную и результирующую матрицу, на экране вывода выводится соответствующая надпись (с. 18). Вывод самой результирующей матрицы осуществляется построчно, аналогично выводу исходной в с. 19–24.

 

Блок-схема

 

 

Задание 2. Дана квадратная матрица A(n,n). Ввести с клавиатуры размерность матрицы – n и заполнить все элементы матрицы случайными целыми числами в диапазоне от -10 до 10. Вывести исходную матрицу на экран. Найти максимум из элементов k-й строки и l-го столбца матрицы.

 

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

Для поиска максимума, как и в предыдущих примерах, следует задать начальное значение – наименьшее из всех возможных для 16-битных чисел значение -32 768. Далее следует организовать перебор всех элементов k-й строки и l-го столбца и сравнение их с переменной max.

Для перебора всех элементов k-й строки следует изменять второй индекс двумерного массива в интервале от 1 до n, а первый индекс держать неизменным и равным k, т.к. первый индекс отвечает за номер строки, а второй – за номер столбца (элемента внутри строки). Аналогично для перебора всех элементов l-го столбца следует изменять первый индекс в интервале от 1 до n, а второй индекс держать неизменным и равным l, т.к. второй индекс отвечает за номер столбца, а первый – за номер строки (элемента внутри столбца).

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

 

Программа

 

26   Sub matrix_2() 'Начало подпрограммы (макроса)

27   n = Val(InputBox("Введите размерность матрицы?")) 'Ввод размерности матрицы

28   ReDim a(n, n) 'Описание матрицы и выделение под нее памяти

29   For i = 1 To n 'Начало цикла для перебора номеров строк матрицы

30   For j = 1 To n 'Начало цикла для перебора номеров элементов внутри строки

31   a(i, j) = Round(Rnd() * 20 - 10) 'Заполнение очередного элемента матрицы случайным числом из диапазона -10..10

32   Debug.Print a(i, j); 'Вывод очередного элемента матрицы без перевода текущей позиции на следующую строку экрана

33   Next j 'Окончание цикла для элементов внутри строки

34   Debug.Print 'Перевод текущей позиции на новой строку экрана

35   Next i 'Окончание цикла для строк

36   k = Val(InputBox("Введите номер строки?")) 'Ввод номера строки

37   l = Val(InputBox("Введите номер столбца?")) 'Ввод номера столбца

38   max = -32768 'Задание начального значения для максимума

39   For i = 1 To n 'Начало цикла для перебора номера элемента внутри строки или столбца

40   If max < a(k, i) Then max = a(k, i) 'Сравнение текущего элемента k-ой строки с максимумом

41   If max < a(i, l) Then max = a(i, l) 'Сравнение текущего элемента l-го столбца с максимумом

42   Next i 'Окончание цикла перебора элементов внутри строки или столбца

43    

44   Debug.Print "Максимум из элементов "; k; "-ой строки и "; l; "-го столбца="; max 'Вывод результата на экран

45   End Sub 'Окончание подпрограммы

Словесное описание программы

После ввода размерности матрицы (с. 2) следуют вложенные циклы заполнения матрицы случайными числами и вывода ее на экран (с. 4–10) (см. описание в предыдущем задании). Номер строки k вводится в с. 11, а столбца l – в с. 12.

Начальное значение для переменной, предназначенной для хранения максимума max задается в с. 13. В с.14–17 следует цикл перебора номера элемента строки или столбца. Внутри цикла в с. 15 сравниваем очередной элемент k-й строки с переменной max, и если он большее max, то записываем его в max. Аналогично в с. 16 сравниваем очередной элемент l-го столбца с переменной max, и если он больше max, то записываем его в max.

В с. 19 выводим результат – найденный максимум на экран.

 

Блок-схема

 

 


Скачано с www.znanio.ru