Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика_ЗФ / Лабораторный практикум по программированию / Лабораторный_практикум_по_программированию_4

.pdf
Скачиваний:
142
Добавлен:
22.03.2016
Размер:
1.4 Mб
Скачать

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

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

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

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

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

51

Сначала это построчный ввод элементов матрицы (блок 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

52

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

NEXT J

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

NEXT I

PRINT " )"

END

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

2

4

3

5

1

 

 

7

2

1

5

 

А 4

 

 

3

2

8

9

 

1

 

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

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

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

53

Теперь рассмотрим пример разработки программного кода того же примера, используя объектно-ориентированное программирование, реализуемое средствами языка 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 (Над-

пись);

54

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

Caption (Надпись);

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

ListBox1

ListBox2

Рис. 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

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

55

 

 

 

Окончание табл. 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

56

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 пока хранится в оперативной памяти.

57

Чтобы их увидеть, создадим процедуру обработки события 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

58

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

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

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

2

4

3

5

1

 

7

2

1

 

 

А 4

5

 

3

2

8

9

 

1

 

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

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

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

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

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

59

Контрольные вопросы

1.В каких случаях в программировании используются массивы?

2.Дайте определение массива.

3.Назовите характеристики массива.

4.Зачем нужна информация о параметрах массива?

5.Каким образом в программе задается информация о параметрах массива?

6.Приведите пример объявления одномерного массива, двумерного массива.

7.Чему равна по умолчанию нижняя граница каждого индекса в языке Basic?

8.Каким образом определяется нижняя граница индекса массива?

9.Какой оператор используют для задания нижней границы индекса?

10.Что вы знаете об элементе массива и его индексе?

11.Как происходит обращение к элементам массива?

12.Что означает термин «одномерный»? Запишите пример одномерного массива.

13.Что означает термин «двумерный»? Запишите пример двумерного массива.

14.Что означает в двумерном массиве первый индекс, второй индекс?

15.Какие конструкции языка используются в качестве индексов элементов массива?

16.Каким образом выполняется обращение к конкретному элементу массива?

17.Какие значения принимают элементы массива перед запуском программы?

18.Назовите рекомендуемую последовательность шагов при решении задач с использованием массивов.

19.Зачем нужен ввод элементов массива в программе?

20.Какие способы ввода элементов массива в память компьютера (заполнения массива) рассмотрены в этом пособии на языке

QBasic, на VBA?

21.Какие способы вывода элементов массива (визуализации массива) рассмотрены в этом пособии на языке QBasic, на VBA?

22.Укажите ответы, которые получатся в результате работы фрагментов программ, если исходный массив имеет вид –

А(1,-2, 0,-3, 4, 10,-1,-12, 0, 8)

60