«Программирование в среде Visual Basic»
Вид материала | Лабораторная работа |
- Тематическое планирование учебного времени раздела «Введение в программирование» (15, 68.18kb.
- Н. Г. Волчёнков программирование на visual basic 6 Учебное пособие, 128.99kb.
- Краткий курс по изучению языка программирования Visual Basic, 357.37kb.
- Даний курс призначений для тих, хто: ніколи не програмував, але хоче навчитися, 360.9kb.
- Тема урока: Массивы в Visual Basic, 35.5kb.
- Учебное пособие Рекомендовано учебно-методическим советом угаэс уфа-2006, 1339.31kb.
- Язык Visual Basic имеет разнообразные средства визуализации разрабатываемых приложений., 41.17kb.
- Опис модуля назва модуля: Visual Basic для додатків. Код модуля, 40.19kb.
- Myreferatik at ua, 109.55kb.
- Visual Basic Основы работы с базами данных, 1336.88kb.
Общие положения
В VB есть возможность задать свойства объектов программно с помощью оператора With … End With, который выполняет последовательность операторов над одиночным объектом
With объект
[блок операторов]
End With
где объект -имя объекта;
блок операторов - один или несколько операторов, выполняемых над объектом или
.элемент управления.свойство=значение.
Процедура типа Sub.
[Private | Public] Sub имя ([список аргументов])
операторы
End Sub
Обращение к процедуре Sub
Call имя(список аргументов)
или
имя список аргументов
где Public - указывает, что процедура доступна для всех других процедур во всех модулях,
Private - доступна для других процедур только того модуля, в котором она описана;
имя- имя процедуры;
список аргументов- список переменных, которые передаются в процедуру при ее вызове и разделяются запятыми;
операторы - блок операторов, выполняемых в процедуре.
Процедуры Sub, тип которых не указан явно с помощью слов Public или Private, являются общими по умолчанию. Процедура Sub является самостоятельной процедурой, которая может получать аргументы, выполнять последовательность инструкций и изменять значения своих аргументов, но не может применяться в выражении.
Процедуры Function.
[Public | Private] Function имя([список аргументов]) [As тип]
операторы
имя = выражение
End Function
Обращение к процедуре Function осуществляется в выражении по своему имени, за которым следует список аргументов в скобках. Для возврата значения из функции следует присвоить значение имени функции.
где имя- имя процедуры Function, удовлетворяющее стандартным правилам именования переменных.
тип- тип данных значения, возвращаемого процедурой Function, поддерживаются типы или любой определяемый пользователем тип.
выражение -возвращаемое значение процедуры Function.
Однако в отличие от процедуры Sub, когда требуется использовать возвращаемое функцией значение, процедура Function может применяться в правой части выражения, как и любая другая встроенная функция, например, Sqr, Cos или Chr.
Видимость процедур
Переменные и константы характеризуются областью видимости – областью, где они «видны», т.е. доступны для программы. За пределами своей области видимости переменная не может быть использована программой. Область видимости опеределяется двумя обстоятельствами: где она объявлена и какое дополнительное слово стоит при ней:
- в области объявлений, выше начало процедур, то переменная доступна всем процедурам модуля;
- если при этом вместо ключевого слова Dim стоит Public – то переменная доступна для всех модулей и процедур в них.
Пример:
Задан двумерный числовой массив а(n,m), где а - переменная, определяющая имя и элементы массива, n - количество строк массива, m - количество столбцов (квадратная матрица n=m). Решить следующие задачи:
- В каждой строке массива поменять местами диагональный элемент на первый.
- Сформировать одномерный массив b, состоящий из положительных элементов массива a.
- Подсчитать сумму положительных элементов в каждом столбце, результаты вывести в виде одномерного массива s.
- Найти максимальный элемент массива, его номера строки и столбца.
- Заменить все отрицательные элементы максимальным.
Sub Form1_Load() Запуск программы при запуске формы
Dim s() As Integer, b()
Dim a() As Single
n = InputBox("к-во строки:", "Размерность")
m = InputBox("к-во столбцов:", "Размерность")
ReDim a(1 To n, 1 To m)
ReDim s(m), b(n * m)
For i = 1 To n '__________________Ввод элементов двумерного массива
For j = 1 To m
a(i, j) = Int(100 * Rnd - 60) 'генератором
st$ = st$ & Format(a(i, j), "##") & " " ‘формирование строки элементов массива
Debug.Print a(i, j); 'Вывод двумерного массива в окно Отладки
Next j
st$ = st$ & Chr(13)
Debug.Print
Next i
MsgBox "Массив" & Chr(13) & " " & st$
'Задача 1______________________________________________________________
For i = 1 To n
pr = a(i, 1)
a(i, 1) = a(i, i)
a(i, i) = pr
Next i
Debug.Print "замена диагонального на первый"
For i = 1 To n '_____________________вывод двумерного массива в окно Отладки
For j = 1 To m
Debug.Print a(i, j);
Next j
Debug.Print
Next i
'Задача 2_______________________________________________________________
k = 0
For i = 1 To n
For j = 1 To m
If a(i, j) > 0 Then k = k + 1: b(k) = a(i, j)
Next j
Next i
Debug.Print "массив положительных"
For i = 1 To k '___________________вывод одномерного массива
Debug.Print b(i);
Next i
Debug.Print
'Задача 3___________________________________________________________
For j = 1 To m
For i = 1 To n
If a(i,j)>0 Then s(j) = s(j) + a(i, j)
Next i, j
Debug.Print "Суммы в столбцах"
For j = 1 To m '_____________________Вывод одномерного массива
Debug.Print s(j);
Next j
'Задача 4________________________________________________________________
max = a(1, 1)
For i = 1 To n
For j = 1 To m
If a(i, j) >= max Then max = a(i, j): iMax = i: jMax = j
Next j, i
MsgBox "Максимум " & max & Chr(13) & "№стр. " & iMax & Chr(13) & "№столб. " & jMax
Debug.Print "максимальный" & max, iMax, jMax
'Задача 5________________________________________________________________
For i = 1 To n
For j = 1 To m
If a(i, j) <0 Then a(i,j)=max
Next j, i
For i = 1 To n ‘_________________Вывод двумерного массива
For j = 1 To m
st$ = st$ & Format(a(i, j), "##") & " "
Debug.Print a(i, j);
Next j
st$ = st$ & Chr(13)
Debug.Print
Next i
MsgBox "Массив " & Chr(13) & " " & st$
End Sub
Пример формы:
Задан двумерный массив а(n,m), где а - переменная, определяющая имя и элементы массива, n - количество строк массива, m - количество столбцов (для одномерного задаеться только один параметр). Решить следующие задачи:
- Найти 1-ый положительный элемент массива и его номера строки и столбца.
- Заменить все четные элементы на 1-ый положительный.
- Определить среднее арифметическое отрицательных элементов.
Некоторые свойства элементов управления заданы программно с помощью оператора With…End With . Программа заупускается при запуске формы:
Option Base 1
'Объявление глобальных переменных, размерность массива и сам массив
Dim n As Integer, m As Integer
Dim a() As Single .
Private Sub Form_Load()
With Form1
.Caption = "Лаб.работа №5"
.CmdВвод.Caption = "Ввод"
.CmdСброс.Caption = "Сброс"
.CmdВыход.Caption = "Выход"
.CmdВыход.ToolTipText = "Конец работы"
.Chk1.Caption = "на форму"
.Chk1.Value = 2
.Chk2.Caption = "в окно Immediate"
.Chk2.Value = 2
.Chk3.Caption = "в окно сообщения"
.Chk3.Value = 2
.Opt1.Caption = "в ручную"
.Opt2.Caption = "генератором"
.LblУсловие.Caption = ""
.TxtВвод.Locked = True
.CmdЗадача1.Caption = "Найти 1-ое положительное в массиве"
.CmdЗадача2.Caption = "Определить среднеарифметическое отрицательных элементов"
.CmdЗадача3.Caption = "Поменять четные элементы на 1-ый положительный"
.LblЗадача2.AutoSize = True
.LblЗадача2.Caption = ""
.LblЗадача2.WordWrap = False
.LblЗадача3.AutoSize = True
.LblЗадача3.Caption = ""
.LblЗадача3.WordWrap = False
.TxtЗадача1.Locked = True
End With
End Sub
Кнопка Ввод, осуществляет ввод размерности массива, его элементов с помощью генератора случайных чисел или с клавиатуры, а также осуществляет выбор способа вывода массива и вывод (в форму, в окно Отладки, в окно сообщения, одновременно или по выбору):
'Ввод и вывод элементов массива
Private Sub CmdВвод_Click()
n = InputBox("Введите количество строк:")
m = InputBox("Введите количество столбцов:")
ReDim a(n, m)
LblУсловие.Caption = "Задан двумерный массив " & "a(" & n & "," & m & ")"
Call vvod Обращение к процедуре ввода массива
'вывод массива на форму
If Chk1.Value = 1 Then Call vivod_Form Обращение к процедуре вывода на форму
'вывод массива в окно Отладки
If Chk2.Value = 1 Then Call vivod_Immediate …………. в окно Отладки
'Вывод массива в окно сообщения
If Chk3.Value = 1 Then Call vivod_Msg ………….. в окно сообщения
End Sub
Процедура ввода массива
Public Sub vvod()
If Opt1.Value = True Then
'ввод массива в окне сообщения
For i = 1 To n
For j = 1 To m
a(i, j) = InputBox("введите элемент:" & i & "," & j, "Ввод элементов")
Next j, i
ElseIf Opt2.Value = True Then
'ввод массива генератором
For i = 1 To n
For j = 1 To m
a(i, j) = Int(100 * Rnd - 60)
Next j, i
End If
End Sub
Процедуры вывода
Public Sub vivod_Form() 'вывод массива на форму For i = 1 To n For j = 1 To m TxtВвод.Text = TxtВвод.Text & a(i, j) & " " Next j TxtВвод.Text = TxtВвод.Text & Chr(13) + Chr(10) Next i End Sub | Public Sub vivod_Immediate() 'вывод массива в окно Отладки For i = 1 To n For j = 1 To m Debug.Print a(i, j); Next j Debug.Print Next i End Sub | Public Sub vivod_Msg() 'Вывод массива в окно сообщения For i = 1 To n For j = 1 To m st$ = st$ & Format(a(i, j), "##") & " " Next j st$ = st$ & Chr(13) Next i MsgBox "Массив" & Chr(13) & " " & st$ End Sub |
Кнопки решения Задач 1-3
Private Sub CmdЗадача1_Click()
'Нахождения 1-го положительного в массиве
LblЗадача3.Caption = Pol(i1, j1) Функция нахождения 1-го положительного
End Sub
Private Sub CmdЗадача2_Click()
'Нахождение ср.арифметического
'Вывод на форму значения функции Sr
LblЗадача2.Caption = Format(Sr(), "##.###")
End Sub
'замена четных на 1-ый положительный
Private Sub CmdЗадача3_Click()
For i = 1 To m
For j = 1 To n
If a(i, j) Mod 2 = 0 Then a(i, j) = Pol(i1, j1)
TxtЗадача1.Text = TxtЗадача1.Text & a(i, j) & " "
Next j
TxtЗадача1.Text = TxtЗадача1.Text & Chr(13) + Chr(10)
Next i
End Sub
Функции
'Функция нахождения1-го положительного Function Pol(i1, j1) Dim flag As Integer For j = 1 To m flag = 0 For i = 1 To n If a(i, j) > 0 Then flag = 1 Pol = a(i, j): i1 = i: j1 = j Exit For End If Next i If flag = 1 Then Exit For Next j End Function | 'Функция нахождения Sr ср.арифметического Public Function Sr() Dim ko As Integer Dim s As Single For i = 1 To n For j = 1 To m If a(i, j) < 0 Then s = s + a(i, j): ko = ko + 1 Next j Next i Sr = s / ko End Function |
Кнопки Сброс и Выход аналогичны кнопкам в предыдущих лабораторных.