
- •Введение. Установка среды программирования
- •2. История языка Basic
- •3. Установка Visual Basic
- •Лабораторная работа №1. Интерфейс Visual Basic. Создание первого проекта
- •Теоретическая часть
- •1 . Первое знакомство
- •5. Стандартная панель инструментов
- •Практическая часть
- •Лабораторная работа №2. Изменение свойств компонентов. Метод Print
- •Теоретическая часть
- •1. Состав панели управления
- •2. Окно свойств и редактора кода
- •3. Свойства элементов управления
- •3.1 Свойства элемента Form
- •3.2 Свойства элемента TextBox
- •3.3. Свойства компонента CommandButton
- •Объект.Print [Список вывода]
- •Объект.Cls Практическая часть
- •Лабораторная работа №3. Работа с простейшим графическим объектом Visual Basic
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №4. Работа с арифметическими выражениями и функциями
- •Теоретическая часть
- •1. Арифметические выражения Visual Basic.
- •2. Встроенные функции Visual Basic
- •3. Функции преобразования
- •Str (число)
- •Val (символьное выражение)
- •Практическая часть
- •Лабораторная работа №5. Решение простейших математических задач с использованием линейных алгоритмов
- •Теоретическая часть
- •1. Типы данных
- •2. Объявление переменных
- •Public / Private / Dim Имя_переменной [As Тип_переменной]
- •Оператор_объявления_типа Строка_интервалов_имен
- •3. Константы Visual Basic
- •4. Область видимости переменной
- •Public / Private / Dim Имя_переменной [As Тип_переменной]
- •Имя_формы.Имя_переменной
- •Практическая часть
- •Лабораторная работа №6. Программирование ветвлений с использованием оператора If
- •Теоретическая часть
- •1. Конструкция If … Then … End If
- •2. Конструкция If … Then … Else … End If
- •3. Конструкция If … Then … Else If… End If
- •Практическая часть
- •Лабораторная работа №7. Программирование ветвлений с использованием оператора Case
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №8. Программирование циклов
- •Теоретическая часть
- •1. Цикл For…Next
- •2. Цикл For Each … Next
- •3. Цикл Do While … Loop
- •4. Цикл Do Until … Loop
- •5. Цикл Do … Loop While
- •6. Цикл Do … Loop Until
- •7. Цикл While … Wend
- •Практическая часть
- •Лабораторная работа №9. Разработка приложений для обработки массивов
- •Теоретическая часть
- •1. Объявление массивов
- •2. Массивы с фиксированной границей и динамические массивы.
- •UBound (имяМассива [, измерение]) Практическая часть
- •Лабораторная работа №10. Разработка приложений с использованием методов рисованИя графических примитивов
- •Теоретическая часть
- •1. Графическая поверхность
- •2. Графические примитивы
- •Практическая часть
- •Лабораторная работа №11. Построение графиков и диаграмм
- •Лабораторная работа №12. Применение пользовательских диалоговых окон
- •Теоретическая часть
- •1. Окно и функция InputBox
- •2. Окно MsgBox
- •MsgBox Текст сообщения [,Константа] [,Заголовок]
- •3. Функция MsgBox()
- •Практическая часть
- •Лабораторная работа №13. Разработка компьютерного теста с использованием Visual Basic
- •Теоретическая часть
- •Лабораторная работа №14. Создание пользовательского меню и панели инструментов
- •Теоретическая часть
- •Call Имя процедуры ([Список Параметров Вызова]),
- •Практическая часть
- •Лабораторная работа №15. Создание текстового редактора
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №16. Разработка мультимедиа-приложений
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №17. Макросы: запись, запуск, чтение
- •Теоретическая часть
- •Обычно макрос содержит следующие элементы.
- •Практическая часть
- •Лабораторная работа №18. Создание форм рабочего листа
- •Теоретическая часть
- •1. Когда необходимо использовать vba в Excel
- •2. Объект Application
- •3. Объект Workbook
- •4. Объект Worksheet
- •5. Объект Range
- •Инициализация и отображение диалогового окна
- •Практическая часть Создание пользовательской формы
- •Создание пользовательской формы
- •Практические задания по программированию на vba
- •Лабораторная работа №19. Создание книги лабораторных работ с автоматизированным выбором страниц книги
- •Практическая часть
- •Лабораторная работа №20. Моделирование процессов
- •Теоретическая часть
- •Лабораторная работа №21. Создание сводных таблиц в vba
- •Теоретическая часть Практическая часть
- •Лабораторная работа №22. Работа с компонентом Chart
- •Теоретическая часть Практическая часть
- •Лабораторная работа №23. Работа с базами данных в Visual Basic
- •Теоретическая часть Практическая часть
- •Лабораторная работа №24. Работа с базами данных в Excel с использованием Visual Basic
- •Теоретическая часть Практическая часть
- •Лабораторная работа №25. Обработка данных на рабочем листе Теоретическая часть Практическая часть
2. Массивы с фиксированной границей и динамические массивы.
Массивы, которые содержат строго определенное количество элементов, называются массивами с фиксированной границей. Массивы, которые содержат переменное количество элементов (т.е. размеры которых могут изменяться в процессе выполнения программы) называются динамическими.
Применение динамических массивов позволяет эффективно управлять памятью компьютера, выделяя память под большой массив лишь на то время, когда этот массив используется, а затем освобождая ее.
Динамический массив создается в следующей последовательности:
1. С помощью ключевых слов, используемых при создании массива фиксированного размера, объявляется массив. Список размерности массива остается пустым, например:
Dim MyArray () As Integer
2. С помощью оператора ReDim указывается размерность массива в виде числа или выражения. Синтаксис оператора ReDim аналогичен синтаксису оператора объявления массива фиксированного размера. Например, размерность массива может быть задана любым из следующих способов:
ReDim MyArray (x)
ReDim MyArray (20)
ReDim MyArray (1 To 20)
Команда ReDim не только изменяет размер массива, но и удаляет из него все старые значения. Это удобно в том случае, если данные больше не нужны и требуется переопределить размерность массива и подготовить его для размещения новых данных.
Чтобы старые значения сохранить, используется ключевое слово Preserve:
ReDim Preserve MyArray (7)
Однако, если новый размер массива меньше, чем количество помещенных в него элементов, слово Preserve не поможет - часть данных все равно будет потеряна.
Массивы можно создавать и заполнять одновременно при помощи встроенной функции Array():
Dim MyArray
MyArray = Array(100, 200, 300, 400, 500)
Указывать размер массива необязательно - он будет автоматически настроен в соответствии с количеством передаваемых элементов.
Очистить массив можно командой Erase:
Erase MyArray
Массив фиксированной длины просто очищается, динамический массив разинициализируется - его придется инициализировать (определять размер) заново.
В динамических массивах часто неизвестно, сколько элементов в массиве. Для определения количества элементов используется функция UBound() (если массив одномерный или программиста интересует размер первого измерения, то измерение передавать не надо):
UBound (имяМассива [, измерение]) Практическая часть
Задание 1. Заполнение массива.
Постановка задачи.
Разработать приложение, которое позволяет заполнить массив путем вода чисел с клавиатуры. Примерный результат работы программы – на Рис.9.1.
Ход работы.
Создайте папку Лабораторная_работа_№9, а в ней папку 9.1.
Запустите программу Microsoft Visual Basic 6.0.
В появившемся окне выберите тип приложения STANDARD.exe и нажмите кнопку «Открыть».
Расположите на форме 2 компонента CommandButton, 2 компонента TextBox и 2 компонента Label.
Установите свойства компонентов согласно Таблице 9.1 или ориентируясь на внешний вид приложения, представленный на Рис.9.1.
Таблица 9.1 – Значения свойств компонентов приложения «Заполнение массива»
Компонент |
Свойство |
Значение |
Form1 |
Caption |
Заполнение одномерного массива |
Name |
frmМассив |
|
MinButton, MaxButton |
False |
|
Command1 |
Caption |
Заполнение массива |
Name |
cmdЗаполнение |
|
Command2 |
Caption |
Очистить |
Name |
cmdОчистка |
|
TextBox1 |
Text |
|
Name |
txtN |
|
TextBox2 |
Text |
|
Name |
txtМассив |
|
ScrollBars |
2 – Vertical |
|
Multiline |
True |
|
Label1 |
Caption |
Количество элементов массива |
Label2 |
Caption |
Исходный массив |
Для всех компонентов свойство Font и Color – по своему усмотрению У компонентов CommandButton свойство Style = 1 Graphical |
Напишите обработчик события по кнопке «Заполнение массива», не забывая объявить переменные в начале программы. После знаков апострофов приведены необходимые комментарии.
Dim a() As Single ' Массив объявлен как динамический
Dim K As String 'строковое числовое данное, введенное в окно InputBox
Dim n As Integer ' n - количество элементов в массиве
Dim i As Integer ' i - счетчик цикла
Private Sub CmdЗаполнить_Click()
n = Val(txtN.Text) ' Вводим количество элементов в массиве
ReDim a (1 To n) ' переопределение массива
txtМассив.Text = ""
For i = 1 To n
K = InputBox("Введите "+Str(i) + " число", "Заполнение массива")
a(i) = Val(K)
txtМассив.Text = txtМассив.Text + " " + Str(a(i))
N
ext
i
End Sub
Напишите самостоятельно обработчик события Click для кнопки «Очистить», используя навыки, полученные при выполнении предыдущих лабораторных работ.
Сохраните проект (выбрав File–Save frmМассив.frm и Save Массив.vbp) в папке 9.1.
Проверьте работоспособность проекта, запустив его на выполнение. Примерный вид приложения во время работы приведен на Рис.9.2.
Создайте exe-файл программы с помощью команды File → Make Массив.exe.
Выйдите из среды Visual Basic.
Запустите на выполнение файл Массив.exe и убедитесь, что проект работает автономно, как любые другие Windows-приложения
Задание 2. Заполнение массива произвольными числами.
Постановка задачи.
Разработать приложение, которое позволяет заполнить массив случайными целыми числами в диапазоне от 0 до 100.
Ход работы.
Создайте в папке Лабораторная_работа_№9 папку 9.2.
Запустите программу Microsoft Visual Basic 6.0.
В появившемся окне выберите тип приложения STANDARD.exe и нажмите кнопку «Открыть».
Расположите на форме 2 компонента CommandButton, 2 компонента TextBox и 2 компонента Label.
Присвойте свойству Name формы значение frmМассив2.
Остальные свойства формы и компонентов оставьте такими же, как в задаче 9.1. Внешний вид формы может остаться таким же, как и в предыдущем задании.
Напишите обработчик события по кнопке «Заполнение массива», не забывая объявить переменные в начале программы. После знаков апострофов приведены необходимые комментарии.
Dim a() As Single ' Массив объявлен как динамический
Dim n As Integer ' n - количество элементов в массиве
Dim i As Integer ' i - счетчик цикла
Private Sub CmdЗаполнить_Click()
n = Val(txtN.Text) ' Вводим количество элементов в массиве
ReDim a (1 To n) ' переопределение массива
txtМассив.Text = ""
Randomize Timer
For i = 1 To n
a(i) = Int(101*Rnd())
txtМассив.Text = txtМассив.Text + " " + Str(a(i))
Next i
End Sub
Напишите самостоятельно обработчик события Click для кнопки «Очистить», используя навыки, полученные при выполнении предыдущих лабораторных работ.
Сохраните проект (выбрав File–Save frmМассив2.frm и Save Массив2.vbp) в папке 9.2.
Проверьте работоспособность проекта, запустив его на выполнение.
Создайте exe-файл программы с помощью команды File → Make Массив2.exe.
Выйдите из среды Visual Basic.
Запустите на выполнение файл Массив2.exe и убедитесь, что проект работает автономно, как любые другие Windows-приложения
Задание 3. Заполнение массива и работа с его элементами.
Постановка задачи.
Разработать приложение, которое:
1) позволяет заполнить массив двумя способами:
- случайными целыми числами в диапазоне, указанном пользователем;
- путем ввода чисел с клавиатуры (не обязательно целых).
2) выполнять с элементами массива различные действия: нахождение максимального и минимального элементов, вычисление суммы элементов и среднего арифметического элементов, а также сортировку по возрастанию и убыванию. Примерный результат работы программы – на Рис.9.3.
Ход работы.
Создайте в папке Лабораторная_работа_№9 папку 9.3.
Запустите программу Microsoft Visual Basic 6.0.
В появившемся окне выберите тип приложения STANDARD.exe и нажмите кнопку «Открыть».
Расположите на форме 8 компонентов CommandButton, 4 компонента TextBox, 1 компонент ComboBox, 11 компонентов Label, 1 компонент Check.
Установите свойства компонентов согласно Таблице 9.2 или ориентируясь на внешний вид приложения, представленный на Рис.9.3 – 9.6 во время этапов проектирования и работы.
Таблица 9.2 – Значения свойств компонентов приложения «Обработка массива»
Компонент |
Свойство |
Значение |
Form1 |
Caption |
Обработка массива |
Name |
frmМассив3 |
|
MinButton, MaxButton |
False |
|
Command1 |
Caption |
Заполнение массива |
Name |
cmdЗаполнение |
|
Command2 |
Caption |
Очистить |
Name |
cmdОчистка |
|
Command3 |
Caption |
Максимальный элемент |
Name |
cmdMax |
|
Command4 |
Caption |
Минимальный элемент |
Name |
cmdMin |
|
Command5 |
Caption |
Сумма элементов |
Name |
cmdSum |
|
Command6 |
Caption |
Среднее арифметическое |
Name |
cmdSrednee |
|
Command7 |
Caption |
Сортировка по возрастанию |
Name |
cmdVozr |
Продолжение таблицы 9.2
Command8 |
Caption |
Сортировка по убыванию |
Name |
cmdUbiv |
|
TextBox1 |
Text |
|
Name |
txtN |
|
TextBox2 |
Text |
|
Name |
txtМассив |
|
ScrollBars |
2 – Vertical |
|
Multiline |
True |
|
TextBox3 |
Text |
|
Name |
txtX |
|
Visible |
False |
|
TextBox4 |
Text |
|
Name |
txtY |
|
Visible |
False |
|
ComboBox1 |
Name |
cboСпособ |
Text |
|
|
List |
Ввод с клавиатуры Случайные числа Случайные числа в указанном диапазоне |
|
Label1 |
Caption |
Введите количество элементов массива |
Label2 |
Caption |
Исходный одномерный массив |
Label3 |
Caption |
Выберите способ заполнения массива |
Label4 |
Caption |
Введите начальное значение диапазона |
Visible |
False |
|
Label5 |
Caption |
Введите конечное значение диапазона |
Visible |
False |
|
Label6..11 |
Caption |
|
Check1 |
Caption |
Целые числа |
Name |
chkЦелые |
|
Visible |
False |
|
Для всех компонентов свойство Font и Color – по своему усмотрению У компонентов CommandButton свойство Style = 1 Graphical У компонентов Text1, Text2,ComboBox1,CommandButton1, Label1, Label2 и Label3 свойство Enabled = true, у остальных = false |
О
бъявите переменные в разделе глобальных переменных. После знаков апострофов приведены необходимые комментарии.
Dim a() As Single ' Объявляем динамический массив
Dim k As String 'строковое числовое данное, введенное в окно InputBox
Dim n As Integer ' n - количество элементов в массиве
Dim i As Integer ' i - счетчик цикла
Dim Max As Single ' переменная для максимального элемента
Dim Min As Single ' переменная для минимального элемента
Dim nMax As Integer ' переменная для номера максимального элемента
Dim nMin As Integer ' переменная для номера минимального элемента
Dim ListIndex As Integer ' переменная для индекса списка
Dim Srednee As Single ' переменная для среднего арифметического элементов
Dim Sum As Single ' переменная для суммы элементов
Dim x As Integer ' переменная для начального значения диапазона
Dim y As Integer ' переменная для конечного значения элемента
Dim m As Integer ' переменная, используемая для сортировки
Dim R As Integer ' переменная, используемая для сортировки
Напишите обработчик события Click для комбинированного списка.
Private Sub cboСпособ_Click()
If cboСпособ.ListIndex = 1 Then 'если выбран пункт "Случайные числа"
chkЦелые.Visible = True
chkЦелые.Enabled = True
End If
If cboСпособ.ListIndex = 2 Then 'если выбран пункт "Случайные числа в указанном диапазоне"
txtX.Visible = True
txtY.Visible = True
Label4.Visible = True
Label5.Visible = True
chkЦелые.Visible = True
chkЦелые.Enabled = True
End If
End Sub
Разберитесь в приведенном ниже коде обработчика события Click для кнопки «Заполнение массива», а затем наберите его:
Private Sub cmdЗаполнение_Click()
Label2.Visible = True
txtМассив.Visible = True
cmdОчистка.Enabled = True
cmdMax.Enabled = True
cmdMin.Enabled = True
cmdSrednee.Enabled = True
cmdSum.Enabled = True
cmdVozr.Enabled = True
cmdUbiv.Enabled = True
n = Val(txtN.Text) ' количество элементов массива
ReDim a(1 To n) 'переопределение массива
Select Case cboСпособ.ListIndex 'выбрать действия в зависимости от значения списка
Case 0 'если выбран пункт "Ввод с клавиатуры", то
txtМассив.Text = ""
For i = 1 To n
k = InputBox("Введите " + Str(i) + " число", "Заполнение массива")
a(i) = Val(k)
txtМассив.Text = txtМассив.Text + " " + Str(a(i))
Next i
Case 1 'если выбран пункт "Случайные числа", то
txtМассив.Text = ""
Randomize Timer
For i = 1 To n
If chkЦелые.Value = 1 Then
a(i) = Int(101 * Rnd())
Else
a(i) = 101 * Rnd()
End If
txtМассив.Text = txtМассив.Text + " " + Str(a(i))
Next i
Case 2 'если выбран пункт "Случайные числа в указанном диапазоне", то
txtМассив.Text = ""
x = Val(txtX.Text)
y = Val(txtY.Text)
Randomize Timer
For i = 1 To n
If chkЦелые.Value = 1 Then
a(i) = Int((Rnd() * (y - x + 1) + x))
Else
a(i) = Rnd() * ((y - x + 1) + x)
End If
txtМассив.Text = txtМассив.Text + " " + Str(a(i))
Next i
End Select
End Sub
Напишите обработчик события по кнопке «Очистить», предварительно проанализировав приведенный ниже программный код:
Private Sub cmdОчистка_Click()
txtX.Text = ""
txtY.Text = ""
txtМассив.Text = ""
txtN.Text = ""
cboСпособ.ListIndex = -1
txtX.Visible = False
txtY.Visible = False
Label4.Visible = False
Label5.Visible = False
chkЦелые.Enabled = False
chkЦелые.Visible = False
Label2.Visible = False
txtМассив.Visible = False
cmdОчистка.Enabled = False
cmdMax.Enabled = False
cmdMin.Enabled = False
cmdSrednee.Enabled = False
cmdSum.Enabled = False
cmdVozr.Enabled = False
cmdUbiv.Enabled = False
Label6.Caption = ""
Label7.Caption = ""
Label8.Caption = ""
Label9.Caption = ""
Label10.Caption = ""
Label11.Caption = ""
End Sub
Сохраните проект (выбрав File–Save frmМассив3.frm и Save Массив3.vbp) в папке 9.3.
Проверьте работоспособность проекта, запустив его на выполнение. Примерный вид приложения во время работы приведен на Рис.9.4 – 9.6.
Создайте exe-файл программы с помощью команды File → Make Обработка массива.exe.
Принцип поиска максимального элемента заключается в сравнении каждого элемента массива со значением в переменной Max и запоминанием в нем элемента, который оказался больше значения Max. Для корректного первого сравнения в качестве начального значения Max можно использовать первый элемент массива, тогда сравнения в цикле начинаются с i = 2. При поиске максимального значения среди элементов массива, удовлетворяющих некоторому условию, например, среди только отрицательных элементов, нельзя в качестве Max использовать первый элемент массива, т.к. A(1) не может быть отрицательным.
Напишите обработчик события для кнопки «Максимальный элемент»:
Private Sub cmdMax_Click()
Max = a(1)
nMax = 1
For i = 2 To n
If a(i) > Max Then
Max = a(i)
nMax = i
End If
Next i
Label6.Caption = "Максимальный элемент: " + Str(Max) + ". Его номер = " + Str(nMax)
End Sub
Проверьте работоспособность написанного кода программы для кнопки «Максимальный элемент».
Напишите самостоятельно обработчик щелчка мыши по кнопке «Минимальный элемент», используя в качестве аналога обработчик щелчка мыши по кнопке «Максимальный элемент».
Напишите обработчик события Click для кнопки «Сумма элементов», используя оператор цикла:
Private Sub cmdSum_Click()
Sum = 0
For i = 1 To n
Sum = Sum + a(i)
Next
Label8.Caption = "Сумма всех элементов = " + Str(Sum)
End Sub
Напишите самостоятельно обработчик события Click для кнопки «Среднее арифметическое», используя оператор цикла и ориентируясь на программный код для кнопки «Сумма элементов».
Сортировка – процедура, часто встречающаяся при программировании массивов. Наиболее распространенные методы сортировки – сортировка методом «пузырька» и методом «выборки». В данном приложении воспользуемся первым методом. Подробно описание различных методов находится в соответствующей лекции.
Напишите обработчик щелчка мыши по кнопке «Сортировка по возрастанию» (после апострофов приведены необходимые комментарии):
Private Sub cmdVozr_Click()
For i = 1 To n 'цикл по числу элементов
nMin = i 'начальный номер элемента для переборки
For m = i + 1 To n 'цикл для нахождения min элемента
If a(m) < a(nMin) Then
nMin = m
End If
R = a(nMin)
a(nMin) = a(i)
a(i) = R
Next
Label10.Caption = Label10.Caption + Str(a(i)) + " "
Next
End Sub
Обработчик щелчка мыши по кнопке «Сортировка по убыванию» напишите самостоятельно, ориентируясь на программный код для кнопки «Сортировка по возрастанию».
Сохраните изменения в проекте и перезапишите exe-файл Обработка массива.exe.
Выйдите из среды Visual Basic.
Запустите на выполнение файл Обработка массива.exe и убедитесь, что проект работает автономно, как любые другие Windows-приложения.
Задание 4. Добавление элементов в массив.
Постановка задачи.
Разработать приложение, которое позволяет включить элемент в заданную позицию массива. Массив заполнить случайными целыми числами в диапазоне от 0 до 100. Примерный вид работающего приложения представлен на Рис.9.7.
Ход работы.
Создайте в папке Лабораторная_работа_№9 папку 9.4.
Запустите программу Microsoft Visual Basic 6.0.
В появившемся окне выберите тип приложения STANDARD.exe и нажмите кнопку «Открыть».
Расположите на форме 2 компонента CommandButton, 4 компонента TextBox, 2 компонента Line и 4 компонента Label.
Установите свойства компонентов согласно Таблице 9.3 или ориентируясь на Рис.9.7.
Таблица 9.3 – Свойства компонентов приложения «Добавление элемента»
Компонент |
Свойство |
Значение |
Form1 |
Caption |
Добавление элемента в массив |
Name |
frmДобавление |
|
MinButton, MaxButton |
False |
|
Icon |
Загрузите любое графическое изображение формата *.ico |
|
Command1 |
Caption |
Генерация массива |
Name |
cmdГенерация |
|
Command2 |
Caption |
Добавить элемент |
Name |
cmdДобавить |
|
Label1 |
Caption |
Исходный массив |
Label2 |
Caption |
Добавить элемент |
Label3 |
Caption |
В позицию |
Label4 |
Caption |
Новый массив |
TextBox1 |
Text |
|
Name |
txtИсходный |
|
Multiline |
True |
|
ScrollBars |
1 - Horizontal |
|
TextBox2 |
Text |
|
Name |
txtElement |
Продолжение таблицы 9.3
TextBox3 |
Text |
|
Name |
txtPosition |
|
TextBox4 |
Text |
|
Name |
txtНовый |
|
Multiline |
True |
|
ScrollBars |
1 - Horizontal |
|
Для всех компонентов свойство Font и Color – по своему усмотрению У компонентов CommandButton свойство Style = 1 Graphical |
Напишите обработчик события по кнопке «Генерация массива», не забывая объявить переменные в начале программы. После знаков апострофов приведены необходимые комментарии.
Dim A() As Integer ' Массив объявлен как динамический
Dim n As Integer ' n - количество элементов в массиве
Dim i As Integer ' i - счетчик цикла
Dim j As Integer
Dim k As Integer
Dim Элемент As Integer ' элемент, который добавляется в массив
Dim Позиция As Integer ' позиция добавления
Private Sub CmdГенерация_Click()
n = Val(InputBox("Количество элементов в массиве","Количество элементов в массиве")) ' Вводим количество элементов в массиве
ReDim a (1 To n+1) ' переопределение массива. Количество элементов n+1
For i = 1 To n
a(i) = Int(Rnd()*101)
txtИсходный.Text = txtИсходный.Text + " " + Str(a(i))
Next i
End Sub
Напишите обработчик события Click для кнопки «Добавить элемент», предварительно проанализировав приведенный ниже программный код:
Private Sub CmdДобавить_Click()
Элемент = Val(txtElement.Text)
Позиция = Val(txtPosition.Text)
For j = n To Позиция Step -1 ' перед добавлением элемента необходимо раздвинуть
' массив, т.е. сдвинуть конец массива на 1 позицию
' перемещение элементов нужно начинать с конца
a(j+1) = a(j)
Next j
A(Позиция) = Элемент
For k = 1 To n+1
txtНовый.Text = txtНовый.Text + Str(a(k)) + " "
Next k
End Sub
Сохраните проект (выбрав File–Save frmДобавление.frm и Save Добавление.vbp) в папке 9.4.
Проверьте работоспособность проекта, запустив его на выполнение.
Создайте exe-файл программы с помощью команды File → Make Добавление в массив.exe.
Выйдите из среды Visual Basic.
Запустите на выполнение файл Добавление в массив.exe и убедитесь, что проект работает автономно, как любые другие Windows-приложения
Задание 5. Создание и заполнение двумерного массива.
Постановка задачи.
Разработать приложение, которое позволяет создать двумерный массив из N случайных целых чисел в диапазоне от 0 до 100 или в указанном диапазоне, а также осуществить с ним следующие операции:
нахождение наибольшего и наименьшего элемента массива;
вычисление суммы всех элементов массива
Примерный вид приложения во время этапов проектирования и различных режимов работы представлен на Рис.9.8 – 9.11.
При обращении к элементам двумерного массива указывается имя массива, а в скобках – два индекса (номер строки и номер столбца).
Ход работы.
Создайте в папке Лабораторная_работа_№9 папку 9.5.
Запустите программу Microsoft Visual Basic 6.0.
В появившемся окне выберите тип приложения STANDARD.exe и нажмите кнопку «Открыть».
Расположите на форме 5 компонентов CommandButton, 4 компонента TextBox, 2 компонента OptionButton и 9 компонентов Label.
Установите свойства компонентов согласно Таблице 9.4 или ориентируясь на Рис.9.8 – 9.11.
Таблица 9.4 – Свойства компонентов приложения «Двумерный массив»
Компонент |
Свойство |
Значение |
Form1 |
Caption |
Двумерный массив |
Name |
frmДвумерный |
|
MinButton, MaxButton |
False |
|
Command1 |
Caption |
Генерация массива |
Name |
cmdГенерация |
|
Command2 |
Caption |
Очистить |
Name |
cmdОчистка |
|
Command3 |
Caption |
Максимальный элемент |
Name |
cmdMax |
|
Command4 |
Caption |
Минимальный элемент |
Name |
cmdMin |
|
Command5 |
Caption |
Сумма элементов |
Name |
cmdSum |
|
TextBox1 |
Text |
|
Name |
txtStroki |
|
TextBox2 |
Text |
|
Name |
txtStolbci |
|
TextBox3 |
Text |
|
Name |
txtA |
|
Visible |
False |
|
TextBox4 |
Text |
|
Name |
txtB |
|
Visible |
False |
|
Label1 |
Caption |
Введите количество строк: |
Label2 |
Caption |
Введите количество столбцов: |
Label3 |
Caption |
Исходный массив |
Label4 |
Caption |
|
Label5 |
Caption |
Начальное значение диапазона |
Visible |
False |
|
Label6 |
Caption |
Конечное значение диапазона |
Visible |
False |
|
Label7 |
Caption |
|
Name |
lblMax |
Продолжение таблицы 9.4
Label8 |
Caption |
|
Name |
lblMin |
|
Label9 |
Caption |
|
Name |
lblSum |
|
OptionButton1 |
Caption |
Случайными числами от 0 до 100 |
OptionButton2 |
Caption |
По выбору пользователя |
Для всех компонентов свойство Font и Color – по своему усмотрению У компонентов CommandButton свойство Style = 1 Graphical У компонентов Text1, Text2, Option1 и Option2 свойство Enabled = true, у остальных компонентов TextBox и CommandButton = false |
Объявите переменные в разделе глобальных описаний:
Dim k(1 To 10, 1 To 10) As Integer ' Массив объявлен как динамический,
'10 - максимальное число строк и столбцов
Dim N As Integer ' N - количество строк в массиве
Dim M As Integer ' M - количество столбцов в массиве
Dim i As Integer ' i - счетчик цикла для строк
Dim j As Integer ' j - счетчик цикла для столбцов
Dim A As Integer ' A – начало диапазона
Dim B As Integer ' B – конец диапазона
Dim Sum As Integer ' сумма элементов
Dim Max As Integer ' максимальный элемент
Dim Min As Integer ' минимальный элемент
Dim Z As Integer ' вспомогательная переменная
Напишите обработчики события Click для переключателей и события Change для текстового поля txtB (конечное значение диапазона). Эти обработчики необходимы для выбора действий программы при различных вариантах выбора переключателей пользователем.
Private Sub Option1_Click() ' если выбран 1 переключатель
cmdГенерация.Enabled = True
cmdОчистка.Enabled = True
Z = 1
End Sub
Private Sub Option2_Click() ' если выбран 2 переключатель
Label5.Visible = True
Label6.Visible = True
txtA.Visible = True
txtB.Visible = True
Z = 2
End Sub
Private Sub txtB_Change() 'при вводе данных кнопки «Генерация» и «Очистка» доступны
cmdГенерация.Enabled = True
cmdОчистка.Enabled = True
End Sub
Напишите обработчик события Click для кнопки «Генерация массива», предварительно проанализировав приведенный ниже программный код:
Private Sub cmdГенерация_Click()
Label3.Visible = True
Label4.Visible = True
N = Val(txtStroki.Text)
M = Val(txtStolbci.Text)
Select Case Z
Case 1
Label4.Caption = ""
Randomize Timer
For i = 1 To N
For j = 1 To M
k(i, j) = Int(Rnd() * 101)
Label4.Caption = Label4.Caption + Str(k(i, j)) + " "
Next j
Label4.Caption = Label4.Caption + Chr(13)
Next i
Case 2
Label4.Caption = ""
A = Val(txtA.Text)
B = Val(txtB.Text)
For i = 1 To N
For j = 1 To M
k(i, j) = Int((Rnd() * (B - A + 1) + A))
Label4.Caption = Label4.Caption + Str(k(i, j)) + " "
Next j
Label4.Caption = Label4.Caption + Chr(13) + " "
Next i
End Select
cmdMax.Enabled = True
cmdMin.Enabled = True
cmdSum.Enabled = True
End Sub
Напишите самостоятельно обработчик события Click для кнопки «Очистить», используя навыки, полученные при выполнении предыдущих лабораторных работ и задания 9.3 лабораторной работы 9.
Сохраните проект (выбрав File–Save frmДвумерный.frm и Save Двумерный.vbp) в папке 9.5.
Проверьте работоспособность проекта, запустив его на выполнение.
Напишите обработчик события Click для кнопки «Максимальный элемент», код которого приведен ниже:
Private Sub cmdMax_Click()
Dim e As Integer, f As Integer 'переменные для местоположения максимального элемента
Max = k(1, 1)
For i = 1 To N
For j = 1 To M
If k(i, j) > Max Then
Max = k(i, j)
e = i
f = j
End If
Next j
Next i
lblMax.Visible = True
lblMax.Caption = "Максимальный элемент: " + Str(Max) + "." + Chr(13) + "Строка - №" + Str(e) + ", Столбец - №" + Str(f)
End Sub
Обработчики события Click для кнопок «Минимальный элемент» и «Сумма элементов» напишите самостоятельно, используя навыки, полученные при выполнении задания 9.3 и код, написанный дл кнопки «Максимальный элемент».
Сохраните изменения в проекте
Создайте exe-файл программы с помощью команды File → Make Двумерный массив.exe.
Выйдите из среды Visual Basic.
Запустите на выполнение файл Двумерный массив.exe и убедитесь, что проект работает автономно, как любые другие Windows-приложения
Подведем итоги
В работе были использованы новые
понятия:
Массив - это упорядоченная последовательность однотипных величин, имеющих общее имя
Структуры данных – это объединение под одним именем нескольких ячеек памяти
Имя массива – имя, используемое для представления массива в программе
Тип данных – тип данных, который используется для элементов массива
Размерность – количество измерений массива
Количество элементов – количество элементов, которое содержится в массиве. Номера элементов в массиве соответствуют их индексам.
Массивы с фиксированной границей - массивы, которые содержат строго определенное количество элементов
Динамические массивы - массивы, которые содержат переменное количество элементов
операторы:
ReDim - указывает размерность массива в виде числа или выражения
Preserve – сохраняет старые значения в динамическом массиве
Erase - очищает массив
функции:
UBound() – используется для определения количества элементов
Задания для самостоятельного выполнения
Составьте конспект по теоретической части лабораторной работы. Выполненное задание покажите преподавателю.
Разработать приложение, аналогичное заданию 9.4, позволяющее удалить элемент с выбранной позиции.
Доработать приложение, разработанное в задании 9.5, включив в него функцию поиска заданного элемента.
Создать приложение, в котором используется массив строк для хранения списка студентов группы. Приложение должно обеспечить ввод фамилий обучаемых с клавиатуры, а при нажатии на управляющую кнопку сортировать все фамилии в алфавитном порядке.
Дан одномерный массив из N чисел. Подсчитать, сколько элементов входит в массив по одному разу.
В одномерном массиве произвольных чисел положительные элементы уменьшить вдвое, а отрицательные заменить значениями их индексов.
Дан одномерный массив из N чисел. Изменить порядок следования элементов в массиве на обратный.
В одномерном массиве из N произвольных чисел найти наибольший элемент среди отрицательных чисел.
В квадратной матрице 3-го порядка подсчитать сумму элементов главной и обратной диагоналей.
В квадратной матрице 4-го порядка определить сумму элементов главной и обратной диагоналей.
В двумерном массиве удалить строку (столбец) с заданным номером.
Вопросы для контроля
1. Что такое массив? Одномерный массив? Двумерный массив?
2. Как объявляется массив в Visual Basic? Приведите примеры.
3. Чем отличается массив с фиксированной границей от динамического массива?
4. Для чего используется оператор ReDim?
5. Что обеспечивают ключевые слова Preserve? Erase? UBound()?