Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Описание выполнения всех заданий по VB.doc
Скачиваний:
1
Добавлен:
21.07.2019
Размер:
1.89 Mб
Скачать

Описание выполнения Задания 4.

Название работы: Задание 4.

Тема задания: “Обработка одномерных и двумерных массивов”.

Цель задания: Освоение типовых алгоритмов обработки массивов и матриц, а также использование этих алгоритмов для решения практических задач в соответствии с индивидуальным заданием. Ознакомление с элементом управления MSFlexGrid.

В этом задании нужно решить 2 задачи. В качестве примера ниже решаются следующие задачи:

1. Обработка одномерных массивов:

Найти 3 наибольших элементов массива. При совпадении других

элементов с третьим список расширить.

2. Обработка двумерных массивов (матриц):

Определить номера строк матрицы, в которых максимальный элемент

строки стоит в правой ее половине.

Решение обеих задач производится на одной форме. Создаем на дискете папку “Задание_4”, в которой нужно будет сохранить проект с 4-м заданием.

Открываем новый проект и размещаем на форме метку и 3 командные кнопки. Нам потребуется также элемент MSFlexGrid. Его на панели элементов нет. Чтобы вызвать его на панель элементов управления, нужно выполнить: “Проект\ Компоненты” и в открывшемся окне щелкнуть на значке квадратика, стоящего левее строки “Microsoft FlexGrid Control 6”. Затем щелкнуть в том же окне на “Применить” и “Ok”. После этого пиктограмма элемента появится на панели элементов управления. Размещаем его на форме и изменяем его имя на fg.

Теперь нам нужно разместить поверх элемента MSFlexGrid элемент Frame. Он должен быть такого же размера, как и элемент MSFlexGrid, т.е. должен полностью закрывать собой элемент MSFlexGrid. При прорисовке элемента Frame нужно, чтобы точка начала прорисовки находилась вне элемента MSFlexGrid. На элементе Frame размещаем 2 метки и 2 элемента ListBox.

Таблица свойств формы и расположенных на ней элементов управления

Объект

Свойство

Значение свойства

Форма

Name

Caption

Font

frmZ4r

Обработка одномерных и двумерных массивов

Times New Roman, жирный, размер 12

Метка

Name

Caption

Alignment

Font

Label1

Выводится условие текущей задачи

0-левая привязка

Times New Roman, жирный, размер 12

Командная кнопка

Name

Caption

Font

Command1

Задача № 1

Times New Roman, обычный, размер 10

Командная кнопка

Name

Caption

Font

Command2

Задача № 2

Times New Roman, обычный, размер 10

Командная кнопка

Name

Caption

Font

Command3

Выход

Times New Roman, обычный, размер 10

MSFlexGrid

Name

fg

Фрейм

Name

Frame1

Метка на контейнере

Name

Caption

Alignment

Font

Label2

Исходный массив

2-центровка

Times New Roman, жирный, размер 10

Метка на контейнере

Name

Caption

Alignment

Font

Label3

Результат

2-центровка

Times New Roman, жирный, размер 10

Список на контейнере

Name

List1

Список на контейнере

Name

List2

Вид формы до размещения на ней контейнера Frame:

Вид формы после размещения на ней контейнера Frame:

Процедуры формы frmZ4:

Процедура решения 1-ой задачи:

Private Sub Command1_Click()

Dim a%(), ind%(), max%, i%, j%, k%, n%, f%

Label1 = " Найти 3 элемента массива, имеющие " & _

"наибольшие значения. При совпадении других элементов " & _

"с третьим список расширить."

Frame1.Visible = True: fg.Visible = False

List1.Clear

n = InputBox("Введите размерность массива")

ReDim a(1 To n), ind(1 To n)

Randomize

For i = 1 To n

a(i) = Rnd * 25

List1.AddItem Str(a(i))

Next i

For i = 1 To 3

max = -32767

For j = 1 To n

f = 0

For k = 1 To i

If j = ind(k) Then f = 1

Next k

If a(j) >= max And f = 0 Then

max = a(j)

ind(i) = j

End If

Next j

List2.AddItem Str(max)

Next i

k = 0

For i = 1 To n

If Str(a(i)) = List2.List(2) Then k = k + 1

Next i

For i = 1 To k - 1

List2.AddItem List2.List(2)

Next i

End Sub

Вид формы с результатом решения 1-ой задачи.

Процедура решения 2-ой задачи:

Private Sub Command2_Click()

Dim ar%(), m%, n%, i%, i_max%, j%, j_max%, max%

Label1 = " Определить номера строк матрицы, в которых " & _

"максимальный элемент строки стоит в правой ее половине."

Frame1.Visible = False: fg.Visible = True

m = InputBox("Введите количество строк матрицы")

n = InputBox("Введите количество столбцов матрицы")

ReDim ar(1 To m, 1 To n)

fg.Cols = n + 1: fg.Rows = m + 1

' Задаем параметры строк элемента NSFlexGrid и нумеруем его строки

For i = 0 To m

fg.RowHeight(i) = fg.Height / (m + 2)

If i > 0 Then fg.TextMatrix(i, 0) = i

Next i

' Задаем параметры столбцов элемента NSFlexGrid и нумеруем их

For j = 0 To n

fg.ColWidth(j) = fg.Width / (n + 2)

If j > 0 Then fg.TextMatrix(0, j) = j

Next j

' Вводим элементы матрицы и отображаем их в NSFlexGrid

Randomize

For i = 1 To m

For j = 1 To n

ar(i, j) = Int(Rnd * 100)

fg.TextMatrix(i, j) = Str(ar(i, j))

Next j, i

' Р Е Ш А Е М З А Д А Ч У:

For i = 1 To m

max = ar(i, 1)

For j = 2 To n

If ar(i, j) > max Then max = ar(i, j): j_max = j

Next j

If j_max > n / 2 Then

fg.Row = i: fg.Col = j_max

fg.CellBackColor = vbGreen

End If

Next i

End Sub

Вид формы с результатом решения 2-ой задачи.

Процедура завершения работы приложения:

Private Sub Command3_Click()

End

End Sub

Как обычно добавляем к проекту форму-заставку frmZ4z. После ее разработки запускаем приложение на выполнение.

Вопросы для защиты Задания 4.

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

MSFlexGrid.

2. Как добавить элемент MSFlexGrid на панель элементов управления?

3. Как выделить цветом отдельную ячейку элемента MSFlexGrid?

4. Какие существуют способы заполнения списка ListBox ( на этапах run и

design)?

5. В чем отличие в добавлении новых элементов в уже существующий список

ListBox с помощью свойства List и метода AddItem?

6. Отличие в предназначении цикла с параметром от итерационных циклов.

7. Как досрочно выйти из цикла с параметром и из итерационных циклов

любого типа?

8. В чем отличия итерационных циклов с предусловием и постусловием?

9. В чем отличия в работе итерационных циклов, в конструкции которых

используются ключевые слова While и Until?

10. Какие виды массивов существуют и как они объявляются?

11. Как переопределить размерность массива с сохранением его

содержимого?

12. Назначение функции Rnd и оператора Randomize.

Желаю успешной защиты Задания 4!