Добавил:
Negorov1337@gmail.com inst:vech.no_17 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб 7 массивы / Лабораторный_практикум_по_программированию_пр.7.doc
Скачиваний:
5
Добавлен:
11.10.2020
Размер:
1.71 Mб
Скачать

InputBox("Введите a(" & I & "," & j & ") элемент")

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

После ввода массива щелкнем на второй командной кнопке «Визуализация матрицы А». В элемент управления ListBox (Список) будет выведен двумерный массив А.

Щелкнем на третьей командной кнопке «Обработка массива». Как было сказано выше, результатов работы этой процедуры мы не увидим, так как переменная s пока хранится в оперативной памяти.

Чтобы увидеть результат, щелкнем на четвертой командной кнопке «Визуализация результата». Результат – сумму всех отрицательных элементов двумерного массива А – мы увидим в элементе управления типа TextBox (Текстовое поле).

Полностью результаты выполнения программного кода при исходной матрице

А= ,

представлены на рисунке 26.

Рис. 26. Результаты работы программного кода вычисления суммы

всех отрицательных элементов двумерного массива

Пример выполнения задания в лабораторной работы

Задание В

Дана матрица А размерностью M × N. Вычислить и напечатать вектор S, компоненты которого являются произведениями нечетных элементов каждой строки (подразумеваются элементы нечётных столбцов).

Вектор S представляет собой одномерный массив, каждый элемент которого равен произведению нечетных элементов каждой строки матрицы А. Количество элементов одномерного массива равно количеству строк двумерного массива А.

Визуальное представление алгоритма изображено на рисунке 27.

Рис. 27. Визуальное представление алгоритма вычисления элементов

вектора S, компоненты которого являются произведениями

нечетных элементов каждой строки матрицы А

Для визуального представления алгоритма используем блоки, представленные в [10], в Приложении Б, в котором указаны обозначение и функциональное назначение некоторых блочных символов графического описания алгоритмов (визуальных алгоритмов).

В блоке 2 вводятся переменные m и n – количество строк матрицы и количество столбцов соответственно.

Далее алгоритм данной задачи представляет собой последовательность из трех детерминированных сложных (вложенных) структурных циклов с управлением по индексу.

Сначала это построчный ввод элементов матрицы (блок 3), т.е. происходит заполнение двумерного массива. Блок 3 представляет собой сложный циклический процесс, т.к. элемент двумерного массива A(I, J) имеет два индекса: индекс строки I и индекс столбца J.

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

В блоке 5 выводится поясняющая надпись к результату – вектору S. При программировании на VBA этот блок можно опустить.

Поскольку необходимо вычислить произведение элементов каждой строки матрицы, то начальное значение произведения нужно задать перед внутренним циклом (блок 7), в котором перебираются и перемножаются элементы строки матрицы. Так как в строке нужно перемножить только элементы нечетных столбцов, то во внутреннем цикле шаг изменения параметра цикла J принимаем равным 2 (блок 8).

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

Программа на языке QBasic

INPUT "Введите размер матрицы"; M, N

DIM A(1 TO M,N), S(1 TO M)

'--- Ввод матрицы

FOR I=1 TO M

FOR J=1 TO N

PRINT "A(";I;",";J;")=";

INPUT A(I, J)

NEXT J

NEXT I

‘---Визуализация исходной матрицы

PRINT SPC(5); "Исходная матрица"

FOR I=1 TO M

FOR J=1 TO N

PRINT TAB(5*J) A(I, J); ' вывод на экран очередного

NEXT J ' элемента матрицы

PRINT

NEXT I

'--- Вычисление и вывод вектора

PRINT SPC(5); “Вектор S(";

FOR I=1 TO M

S(I)=1 ' начальное значение i-го элемента вектора

FOR J=1 TO N STEP 2

S(I)=S(I)*A(I,J)

NEXT J

PRINT S(I); ' вывод i-го элемента вектора

NEXT I

PRINT " )"

END

В качестве тестового варианта возьмем матрицу размером 3×5.

Результаты выполнения программы представлены на рисунке 28.

Рис. 28. Результаты выполнения программы вычисления элементов

вектора S, компоненты которого являются произведениями

нечетных элементов каждой строки двумерного массива А

размерностью M × N на экране вывода системы программирования QBasic

Из результатов видно, что элементы вектора S, которые являются произведениями нечетных элементов каждой строки двумерного массива А размерностью M × N, вычислены верно.

Теперь рассмотрим пример разработки программного кода того же примера, используя объектно-ориентированное программирование, реализуемое средствами языка VBA, используя экранные формы.

Создадим графический интерфейс приложения. Чтобы спроектировать наше приложение, нужно взять некоторые стандартные элементы управления, поместить их на форму, затем установить начальные свойства этих элементов и создать код обработки событий, связанных с этими элементами. Подробно последовательность всех этих действий рассмотрена в [10], [11] и [12].

В окне проекта выберите имя проекта, в который требуется добавить форму.

В меню редактора VBA выберите команду Insert (Вставка)\ UserForm. Выводится пустая экранная форма и набор инструментов.

При размещении на экранной форме стандартных элементов управления, в частности командных кнопок, будем придерживаться следующей стандартной последовательности в работе:

  1. ввод элементов массива;

  2. вывод данного массива на экран – визуализация массива (с поясняющей надписью);

  3. обработка элементов массива согласно условию задачи;

  4. вывод результатов, полученных после обработки, на экран (с поясняющей надписью).

Разместим на экранной форме (рис. 29), используя метод «drag-and-drop», следующие стандартные элементы управления:

  • четыре элемента управления типа CommandButton (командная кнопка) – CommandButton1, CommandButton2, CommandButton3 и CommandButton4 для реализации четырех стандартных этапов при решении задач с использованием массивов. Командную кнопку CommandButton1 используем для запуска событийной процедуры ввода исходного двумерного массива А. Расположим в ней надпись «Ввод матрицы А», изменив свойство элемента Caption (Надпись). Командную кнопку CommandButton2 используем для запуска событийной процедуры визуализации исходного двумерного массива B. Расположим в ней надпись «Визуализация матрицы А», изменив свойство элемента Caption (Надпись). Командную кнопку CommandButton3 используем для запуска событийной процедуры суммирования всех отрицательных элементов матрицы A. Расположим в ней надпись «Вычисление вектора», изменив свойство элемента Caption (Надпись). Командную кнопку CommandButton4 используем для запуска событийной процедуры визуализации результата – суммы всех отрицательных элементов матрицы A. Расположим в ней надпись «Визуализация вектора», изменив свойство элемента Caption (Надпись);

  • два элемента типа Label (метка) – Label1, Label2, в которых расположим надписи «Матрица А» и «Вектор S. Индекс. Элемент». Надписи расположим, изменив свойство элементов Caption (Надпись);

  • два элемента управления типа ListBox (Список) . ListBox1 для вывода (визуализации) исходного двумерного массива A и ListBox2 для вывода (визуализации) одномерного массива – вектора S.

Рис. 29. Форма и расположение на ней элементов управления

Зададим новые значения свойств элементам управления, размещенным на форме (рис. 29) согласно общепринятым соглашениям с помощью окна Propeties (Свойства объектов). Значения свойств по умолчанию и новые значения свойств представлены в таблице 4. Форма и расположение на ней элементов управления после задания новых свойств этим элементам представлены на рисунке 30.

Таблица 4

Новые значения свойств элементов управления формы

Элемент

управления

Свойство

Значение

по умолчанию

Новое значение

1

2

3

4

Label (метка)

Name (имя)

Label1

Lbl1

Caption (надпись)

Label1

Матрица А

Label (метка)

Name (имя)

Label2

Lbl2

Caption (надпись)

Label2

Вектор S.

ListBox (список)

Name (имя)

ListBox1

LbxMatrizaA

ListBox (список)

Name (имя)

ListBox2

LbxS

CommandButton

(командная кнопка)

Name(имя)

CommandButton1

CmdVvodA

Caption (надпись)

CommandButton1

Ввод матрицы А

Окончание табл. 4

1

2

3

4

CommandButton

(командная кнопка)

Name(имя)

CommandButton2

CmdVyvodA

Caption (надпись)

CommandButton2

Визуализация матрицы A

CommandButton

(командная кнопка)

Name(имя)

CommandButton3

CmdVektor

Caption (надпись)

CommandButton3

Вычисление вектора

CommandButton

(командная кнопка)

Name(имя)

CommandButton4

CmdRezultat

Caption (надпись)

CommandButton4

Визуализация вектора

Рис. 30. Форма и её элементы управления

после переименования и изменения свойств

Таким образом, в программном коде следует записать четыре процедуры обработки события Click (кликанье левой кнопки мыши) для четырех командных кнопок.

Объявим переменные, используемые во всех процедурах.

Dim m As Integer ‘количество строк матрицы А

Dim n As Integer ‘количество столбцов матрицы А

Dim i As Integer ‘индекс строки

Dim j As Integer ‘индекс столбца

Dim a() As Single ‘объявление двумерного массива (матрицы) А

Dim s() As Single ‘объявление одномерного массива (вектора) S

Сгенерируем процедуру обработки события Click (кликанье левой кнопки мыши) для командной кнопки CmdVvodA с надписью «Ввод матрицы А». Для этого достаточно быстро кликнуть на этой кнопке два раза левой кнопкой мыши. В результате будет создана нужная нам процедура, в которую надо ввести следующий код:

Private Sub CmdVvodA_Click()

m = Val(InputBox("Введите m"))

n = Val(InputBox("Введите n"))

ReDim a(1 To m, 1 To n) As Single

ReDim s(1 To m) As Single

For i = 1 To m

For j = 1 To n

a(i, j) = InputBox("Введите a(" & i & "," & j & ") элемент")

Next j

Next i

End Sub

Пояснения к данной процедуре, предназначенной для ввода двумерного массива А, подробно приведены в разделе «Методические указания к выполнению задания В».

Далее выполняем второй этап работы – вывод исходного двумерного массива А на экран.

Аналогично сгенерируем процедуру обработки события Click (кликанье левой кнопки мыши) для второй командной кнопки CmdVyvodА с надписью «Визуализация матрицы А», в которую введем программный код:

Private Sub CmdVyvodA_Click()

Dim stra As String

For i = 1 To m

stra = ""

For j = 1 To n

stra = stra + " " + Str(a(i, j))

Next j

LbxMatrizaA.AddItem stra

Next i

End Sub

Пояснения к данной процедуре, предназначенной для вывода двумерного массива А на экран, также подробно приведены в разделе «Методические указания к выполнению задания В».

Сгенерируем процедуру обработки события Click (кликанье левой кнопки мыши) для третьей командной кнопки CmdVektor с надписью «Вычисление вектора» и впишем в нее программный код:

Private Sub CmdVektor_Click()

For i = 1 To m

s(i) = 1

For j = 1 To n Step 2

s(i) = s(i) * a(i, j)

Next j

Next i

End Sub

Пояснение. Обработка массива (вычисление элементов вектора S, компоненты которого являются произведениями нечетных элементов каждой строки двумерного массива А размерностью M × N) также организована с помощью вложенной структуры «цикл с параметром».

При «кликанье» левой кнопки мыши на третьей командной кнопке CmdVektor с надписью «Вычисление вектора» результатов работы этой процедуры мы не увидим, так как переменная s пока хранится в оперативной памяти.

Чтобы их увидеть, создадим процедуру обработки события Click для четвертой командной кнопки CmdRezultat с надписью «Визуализация вектора» и впишем в нее программный код.

Private Sub CmdRezultat_Click()

Dim stri As String

Dim strs As String

For i = 1 To m

stri = Str(i)

strs = Str(s(i))

LbxS.AddItem stri & " | " & strs

Next i

End Sub

Пояснение. Элементы одномерного массива S (вектор) выводим в элемент управления список ListBox при помощи оператора

LbxS.AddItem stri & " | " & strs.

Программный код полностью представлен в окне программы VBA на рисунке 31.

Рис. 31. Программный код в окне программы VBA

Запустим приложение, выбрав команду Run Run Sub/UserForm или нажав функциональную клавишу F5. Появится экранная форма (рис. 32).

Рис. 32. Экранная форма после запуска приложения

В качестве тестового варианта возьмем матрицу размером 3×5.

Подробно ход выполнения программного кода рассмотрен в разделе «Методические указания к выполнению задания В».

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

Подробно ход выполнения программного кода рассмотрен в разделе «Методические указания к выполнению задания В».

Полностью результаты выполнения программного кода представлены на рисунке 33.

Рис. 33. Результаты работы программного кода

Соседние файлы в папке лаб 7 массивы