Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
PAGE 1
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ОДЕСЬКИЙ НАЦІОНАЛЬНИЙ
ПОЛІТЕХНІЧНИЙ УНІВЕРСИТЕТ
МЕТОДИЧНІ ВКАЗІВКИ
ДО ЛАБОРАТОРНИХ РОБІТ ЗА ТЕМОЮ
«Программування мовою Visul Basic»
ЗА КУРСОМ «ВИКОРИСТАННЯ ЕОМ У ІНЖЕНЕРНІЙ ПРАКТИЦІ»
для студентів спеціальності 6.050501, 6.050503
Одесса: ОНПУ, 2009
МІНЕСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ОДЕСЬКИЙ НАЦІОНАЛЬНИЙ
ПОЛІТЕХНІЧНИЙ УНІВЕРСИТЕТ
МЕТОДИЧНІ ВКАЗІВКИ
ДО ЛАБОРАТОРНИХ РОБІТ ЗА ТЕМОЮ
«Программування мовою Visul Basic»
ЗА КУРСОМ «ВИКОРИСТАННЯ ЕОМ У ІНЖЕНЕРНІЙ ПРАКТИЦІ»
для студентів спеціальності 6.050501, 6.050503
Затверджено
на засіданні кафедри ІММЗІС
протокол №2 від 29 вересня 2009р.
Одесса: ОНПУ, 2009
Методічні вказівки до лабораторних робіт за темою «Використання ЕОМ у інженерній практиці» за курсом «Інформатика та комп'ютерна техніка» для студентів спеціальності 6.050501, 6.050503 / Укл. О.В. Ніколаєнко - Одеса: ОНПУ, 2009 31 с.
Укладач: О.В. Ніколаєнко
ЗМІСТ
[1] Введение [2] Теоретическая часть [3] Последовательность выполнения работы [3.1] Основные положения [3.2] Задание к лабораторной работе [3.3] Основные положения [3.4] Элементы формы. [4] ToolTipText [4.1] Задание к лабораторной работе [4.2] Теоретические сведения [4.3] Задание к лабораторной работе [5] Лабораторная работа № 4 [5.1] Теоретические сведения [5.2] Общие положения |
в «Программирование в среде Visual Basic»
Тема: "Знакомство с интегрированной средой редактора Visual Basic"
Цель: ознакомиться со структурой окон редактора, командами, панелью инструментов, приобрести навыки работы в среде - создания форм и элементов управления, модулей и процедур.
Большинство приложений, созданных в Visual Basic, работают в интерактивном режиме, т.е. на экран выводится информация, предназначенная для пользователя программы, и ожидается его ответная реакция в виде ввода данных или команд. Интерактивное приложение в Visual Basic создается на базе формы, являющейся, как правило, основным окном интерфейса, с элементами управления, позволяющими осуществлять взаимодействие с пользователями.
Запуск Visual Basic: Пуск → Программы → Visual Studio → Visual Basic6.0
На экране появляется диалоговое окно New Project (Новый проект), используя которое можно выбрать шаблон для нового проекта, запустить мастера создания проекта или открыть ранее созданный проект Existing (Существующий) или Recent (Недавно созданный) содержит список проектов, открывавшихся недавно.
Рис. 1.1. Окно New Project для выбора типа создаваемого проекта
Создание любого приложения в Visual Basic начинается с создания проекта. Проектом является совокупность файлов, входящих в приложение и хранящих информацию о его компонентах.
После выбора типа проекта переходим непосредственно в инструментальную среду проектирования Visual Basic 6.
Окно среды состоит из нескольких окон (добавить их можно с помощью команды View (Вид) или соответствующих кнопок Панели инструментов).
Главное меню окна содержит следующие основные команды: File (Файл), Edit (Правка), View (Вид), Project (Проект), Format (Формат), Debug (Отладка), Run (Запуск), Query (Запрос), Diagram (Диаграмма), Tools (Сервис), Add-Ins (Надстройки), Window (Окно), Help (Справка).
Рис. 1.2. Главное меню и Панель инструментов Visual Basic 6
Стандартная Панель инструментов расположена под главным меню. Если эта панель отсутствует в главном окне программы, для ее отображения в меню View (Вид) àToolbars (Панели инструментов) àStandard (Стандартная). На стандартной панели инструментов расположены кнопки для вызова наиболее часто употребляемых команд меню.
Рис. 1.3. Окно среды Visual Basic 6
Окно Проекта содержит перечень файлов, входящих в проект. Элементы проекта Форма и Модуль могут вызываться из окна Проекта путем двойного щелчка мыши.
Для каждого выделенного элемента управления существует свое окно Свойств. В окне Свойств можно изменять свойства объектов: тип и размер шрифта, названия и т.д.
Окно Форм является основным рабочим окном, в котором выполняется визуальное проектирование проекта. Вызвать это окно можно View (Вид) à Object (Объект).
С помощью панели Элементов управления на форму перетаскиваются необходимые элементы (Кнопки, Надписи и.т.д.). Затем устанавливаются свойства элементов и формы, на пример, имя элемента: окно Свойств à Captionà новое имя. (У элементов с надписями можно изменить свойство Font (Шрифт: стиль, размер,цвет и т.д.)).
Для работы с формой, т.е. для ввода и вывода данных с помощью формы, назначают кнопкам формы процедуры-события. Для этого необходимо дважды щелкнуть на элементе и ввести текст соответствующей программы.
Управляющие элементы, которые помещают на форму являются объектами. Как любые объекты они обладают свойствами, методами и событиями. При ссылке на свойства/методы элементов имя и имя свойства /метода разделяют точкой.
Окно Программы окно встроенного редактора с удобными средствами ввода исходного кода программы View (Вид) àCode (Код). Для быстрого открытия окна достаточно дважды щелкнуть левой кнопкой мыши, установив указатель на форме приложения. Окна Программы имеет свою панель инструментов: в левом списке можно выбрать элемент управления, а в правом тип события, для реагирования на которое планируется написать подпрограмму.
В окне Отладки отображаются результаты выполнения расчетов, для чего используется конструкция Debug.Print.
Результаты выполнения программ можно получать также в диалоговых окнах, на формах и непосредственно в документах и листах.
Для создания Нового проекта выбираем вкладка New à Standard EXE (или можно выбрать один из типов шаблона проекта) à Открыть или через главное меню File (Файл) àNew Project (Новый проект), а открыть уже существующий - File (Файл) à Open Project (Открыть проект) или одноименной кнопки на стандартной Панели инструментов.
В результате открывается окно Project Form1, содержащее новую форму, с которой можно начинать работать: изменять установленные по умолчанию свойства, помещать в нее элементы управления, используя для этого панель элементов управления, являющуюся основным рабочим инструментом при разработке форм приложения.
Запуск формы осуществляется командой Run (Запуск) либо кнопками на панели инструментов 4.
Каждый объект проекта или весь можно сохранять, удалять и добавлять. Для этого в окне Проекта выделить объект
Сохранить File à Save. При этом образуются несколько файлов проекта формы Form1.frm и кода проекта Project1.vbp.
Удалить выделенный компонент Project (ПК) àRemove.
Добавить - Project (ПК) Add ….
Элемент |
Свойство |
Значение |
Form1 |
Caption |
Решение уравнения |
Label1 |
Caption |
X |
Label2 |
Caption |
Y |
Text1 |
Text |
Пусто |
Text2 |
Text |
Пусто |
Command1 |
Caption |
Вычислить |
Command2 |
Caption |
Выход |
Private Sub Command1_Click()
x% = Text1.Text
y! = Sin(x% ^ 2)+Cos(x%) ^ 2
Text2.Text = y! ' Можно и так Label1.Caption = y
End Sub
Кнопке Выход - Оканчание работы с формой.
Private Sub Command2_Click()
End
End Sub
Private Sub Command1_Click()
Dim x As Integer, y As Single :Rem Описание типов данных
x = Text1.Text
y = Sin(x ^ 2) + Cos(x) ^ 2
Text2.Text = y
Debug.Print y ' Вывод в окно Отладки
End Sub
Private Sub Command1_Click()
Dim x As Integer, y As Single
x=Val(InputBox("Введите значение x", "Окно ввода данных"))
x = Text1.Text
y = Sin(x ^ 2)+Cos(x) ^ 2
Text2.Text = y
Debug.Print y
MsgBox "Проверка", vbInformation, "Окно сообщения"
MsgBox "x=" & x & Chr(13) & "y=" & y, , "Окно вывода"
End Sub
Лабораторная работа № 1
Тема "Программы линейной структуры".
Цель: приобретение навыков создания программ вычислений простых арифметических выражений, изучение типов данных, функциий их ввода и вывода и способов их описания.
Изучить:
Правила написания программ. В каждой строке располагается один или несколько, разделенных : операторов.
Для переноса продолжения строки на другую ставится пробел и знак подчеркивания.
В вещественных числах целыая часть от дробной разделяется точкой.
Комментарии - не выполняемые редактором тексты, строка комментария начинается с ' текст или Rem текст.
В VB все данные относятся к определенному типу, основные из них
Тип данных |
Размер (байт) |
Описание |
Символы описания типов |
Integer |
2 |
Целые числа |
% |
Long |
4 |
Длинные целые числа |
& |
Single |
4 |
Вещественные одинарной точности |
! |
Double |
8 |
Вещественные двойной точности |
# |
String |
10 байт + длина строки |
Строки символов переменной длины |
$ |
String * |
1байт/символ |
Строки символов постоянной длины |
$ |
Boolean |
2 |
Логмческие (булевые ) |
|
Currency |
8 |
Числа в денежном формате |
@ |
Date |
8 |
Знгачения даты и времени |
|
Byte |
1 |
Целые числа (0-255) |
|
Object |
4 |
Объекты (ссылки на объекты) |
|
Variant |
16 |
Тип определяется содержимым |
Описание типов данных. Для описания типов переменных используется оператор
Dim имя As тип [, имя As тип], . . .
где имя имя переменной, набор символов не более 255 символов, должны начинаться с буквы, не может содержать пробел, . ! @ & $ #; не допускается использование повторяющихся имен на одном уровне области определения,
тип - тип переменной (Integer, Long, Currency, Single, Double, Date, String, String*, Object, Variant). По умолчанию переменная получает тип Variant.
Оператор требования обязательного описания переменных, устанавливается в начале процедуры
Option Explicit
Данные могут изменяться в ходе программы (переменные) и не изменяться (константы). Строковые константы беруться в кавычки. По умолчанию численная переменная равна 0, строковая пустая строка.
Операции VB
Арифметические операции |
Операции сравнения |
Логические операции |
|||
^ |
Возведение в степень |
= |
Равно |
Not |
Логическое отрицание |
* / |
Умножение, деление |
<> |
Не равно |
And |
Логическое «И» |
\ |
Целочисленное деление |
< |
Меньше |
Or |
Логическое «ИЛИ» |
Mod |
Деление по модулю |
> |
Больше |
Eqv |
Эквивалентность |
+ - |
Сложение, вычитание |
<= |
Меньше или равно |
Результат логических операций: False (Ложь) или True (Истина) |
|
>= |
Больше или равно |
||||
& или + |
Объединение строк |
Функции преобразования
Val(строка) |
преобразует строку цифровых символов (до первого нецифрового символа) в число |
Str(число) |
преобразует число в строку |
Chr(код символа) |
преобразует код символа в символ |
Арифметические функции
Математическое описание |
Программное описание |
cosx, sinx, tgx, arctgx, |
Cos(x), Sin(x), Tan(x), Atn(x) |
ex, lnx, Öx |
Exp(x), Log(x), Sqr(x) |
Вычисление по модулю |x| |
Abs(x) |
Генерация слачайных чисел |
Randomize, Rnd |
Определение знака |
Sgn(x) |
Выделение целой части |
Fix(x), Int(x) |
Оператор присваивания. Оператор вычисляет выражение и присваивает его переменной
Имя переменной = выражение
Ввод данных осуществляется при помощи функции InputBox, которая выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа String, содержащее текст, введенный в поле.
Вывод данных на экран осуществляется при помощи функции MsgBox, которая выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата
InputBox(сообщение[, заголовок окна])
MsgBox(сообщение[, значки и кнопки][, заголовок окна]),
где сообщение - строковое выражение, отображаемое в диалоговом окне, может содержать нескольких физических строк, для разделения которых допускается использование символа возврата каретки (Chr(13)), символа перевода строки (Chr(10)) или комбинацию этих символов (Chr(13) & Chr(10));
заголовок окна- строковое выражение, отображаемое в строке заголовка диалогового окна, если этот аргумент опущен, в строку заголовка помещается имя приложения;
значки и кнопки - числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку.
Организации вывода данных в окно Отладки
Debug.Print [{Spc(n) | Tab(n)} выражение]
где Print метод;
Spc(n) - указывает количество пробелов n, вставляемых в выводимый текст, Tab(n)- помещает курсор в экранный столбец с номером n;
выражение - переменные, константы числовые или строковые, функции, разделяемые запятыми, точками с запятыми или пробел&пробел. Если этот аргумент опущен, выводится пустая строка.
Элементы управления:
Элемент |
Название и назначение |
Label |
Надпись. Надпись на элементе. |
TextBox |
Поле ввода. Служит для ввода текста пользователем. |
CommandBox |
Кнопка. Для выполнения действий: вычислений, запуск форм |
Некоторые свойства и методы элементов управления:
Элемент |
Свойство |
Описание |
Значение |
Form1 |
Name |
Имя элемента |
Form1 |
Caption |
Надпись на элементе |
Лабораторная работа 1 |
|
Label1 |
Name |
Label1 |
|
Caption |
Решить y=sinx2+cos2x |
||
Label2 |
Name |
Label2 |
|
Caption |
Ввести X= |
||
Label3 |
Name |
Label3 |
|
Caption |
Вывести Y= |
||
TextBox1 |
Name |
Text1 |
|
Text |
Введенный текст |
Пусто |
|
TextBox2 |
Name |
Text1 |
|
Text |
Пусто |
||
CommandButton1 |
Name |
Command1 |
|
Caption |
Вычислить |
||
CommandButton2 |
Name |
Command2 |
|
Caption |
Выход |
||
Метод |
Show |
Отображает форму на экране |
Form1.Show |
Работа строится на основе реакции объекта на какое-либо событие. Любому событию может быть назначена процедура обработки этого события. Источником события чаще всего является пользователь, который вводит данные с клавиатуры, нажимает на кнопки мыши. Автоматическое создание процедуры-обработки события: выбрать объект (на пример, Кнопка) à дважды щелкнуть по объекту появиться заготовка процедуры.
Событие |
Click |
Нажатие на кнопку мыши либо на элементе либо при выборезначения для элемента |
Процедура-событие Sub Command1_Click End sub |
Создать программу вычисления арифметического выражения согласно варианта в виде формы.
Примеры программы см. в лабораторной работе №1.
В программе необходимо: объявить типы данных (согласно варианту), для ввода и вывода переменных использовать функции InputBox, MsgBox, конструкцию Debug.Print.
Лабораторная работа №2
Тема"Программа разветвляющейся структуры".
Цель: приобретение навыков создания программ разветвляющейся структуры, операторов и функций для ее реализации.
Изучить:
Операторы:
Элементы управления: Переключатель (OptionButton); Рисунок (Image).
Метод: SetFocus.
Процедуры-события: сброс данных; работа переключателя.
(Новые свойства приведены ниже в таблице, выделены жирным шрифтом).
Для управления процессом выполнения программы существует множество разного рода управляющих структур, с помощью которых можно организовать ветвление по условию, выбор из нескольких вариантов и т.д.
Условные операторы линейные и блочные - обеспечивает выполнение одного или нескольких операторов, в зависимости от истинности или ложности заданного условия.
Линейный или простой
If условие Then операторы [Else операторы ]
Условный блочный
If условие1 Then
блок операторов1
[ElseIf условие2 Then
блок операторов2
. . . ]
[Else
блок операторовn]
End If
где условие - одно или несколько выражений, принимающее значения True (Истина) или False (Ложь), в условие используют операции сравнения (< > =) и логические операции (And, Or);
операторы - один или несколько операторов, разделяемых двоеточиями, выполняются, если условие имеет значение True.
Оператор выбора Select Case - выполняет одну из нескольких групп операторов в зависимости от значения выражения выбора
Select Case выражение выбора
Case список проверок1
блок операторов1
[Case список проверок2
блок операторов2
. . . ]
[Case Else
блок операторов]
End Select
где выражение выбора - любое числовое или строковое выражение;
список проверок - cписок с разделителями, состоящий из одной или нескольких форм следующего вида:
ключевое слово To задает диапазон значений. Ключевое слово Is с операторами сравнения задает диапазон значений. В каждом предложении Case допускается использование нескольких выражений или диапазонов;
блок операторов - один или несколько операторов.
Вывод результатов вычисления по формату, т.е. отформатированные согласно инструкциям, заданным в описании формата функция
Format(выражение, формат)
где выражение переменная, выражение;
формат - символы, определяющие формат.
Форматы:
0 Выводит цифру или нуль.
# Выводит цифру или не выводит ничего.
. Десятичный разделитель указывает, сколько цифр следует вывести в целой и дробной части форматируемого числа, т.е. слева и справа от десятичного разделителя В качестве десятичного разделителя используется запятая.
E- E+ e- e+ Экспоненциальный формат. Если строка формата содержит хотя бы один прототип цифры (0 или #) справа от символов "E-", "E+", "e-" или "e+", то число выводится в экспоненциальном формате, а между числом и показателем степени помещаются символы "E" или "e". Число цифр в показателе степени определяется числом символов вывода цифры справа от символа экспоненциального формата.
- + $ ( ) Вывод указанного символа.
Пример: Заданы коэффициенты а и в, вычислить функцию y, если
Public Sub lab2() Dim x As Single Dim y As Single Const a As Integer = 3, b As Integer = 2 x = Val(InputBox("x=")) If x < -1 Then y = abs(x) MsgBox "|x|=" & y ElseIf -1 <= x And x <= 1 Then y = a * x MsgBox "a*x=" & y Else y = x ^ b MsgBox "x^b=" & y End If MsgBox “x=” & Format(x,”##.##”) & _ "y=" & Format(y,”0.0000”) & y End Sub |
Public Sub lab2() Dim x As Single: Dim y As Single Const a As Integer = 3, b As Integer = 2 x = Val(InputBox("x=")) Select Case x Case Is < -1 y = Abs(x) MsgBox "|x|=" & y Case -1 To 1 y = a * x MsgBox "a*x=" & y Case Else y = x ^ b MsgBox "x^b=" & y End Select Debug.Print "x=" & Format(x, " 0.0") Debug.Print "y=", Format(y, "##.###") End Sub |
Элемент Переключатель (OptionButton) - имеет два состояния включено и выключено.
Элемент Рисунок (Image) - используется для отображения рисунка на форме.
Пример: Создать форму для задания (см.выше), используя новые элементы и их свойства. Предусмотреть, чтобы при появлении в поле вывода результата, рядом появлялась надпись одного из уравнений системы по которому вычисляется результат.
Элемент |
Свойства |
Описание |
Значение |
Form1 |
Name |
Frm1 |
|
Caption |
Лабораторная … |
||
Icon |
Выбор иконки в заголовке формы |
*.icon, *cur |
|
Label1 |
Name |
LblX |
|
Caption |
Ввести х |
||
Autosize |
Приведение в соответствие размера элемента к длине надписи |
True |
|
Label2 |
Name |
LblY |
|
Caption |
Пусто |
||
TextBox1 |
Name |
TxtX |
|
ToolTipText |
Добавить всплывающее примечание |
Введите Х от -5 до 5 |
|
TextBox2 |
Name |
TxtY |
|
Locked |
Не доступность ввода |
True |
|
CommandButton1 |
Name |
Cmd1 |
|
Caption |
Вычислить |
||
CommandButton2 |
Name |
Cmd2 |
|
Caption |
Сброс |
||
CommandButton3 |
Name |
Cmd3 |
|
Caption |
Выход |
||
OptionButton1 |
Name |
Opt1 |
|
Caption |
Есть картинка |
||
Value |
Состояние переключателя |
True |
|
OptionButton2 |
Name |
Opt2 |
|
Caption |
Нет картинки |
||
Value |
False |
||
Image |
Name |
Img1 |
|
Visible |
Видимость |
True |
|
Picture |
Выбор картинки |
Имя граф. файла |
|
Stretch |
Приведение в соответствие размеров картинки и элемента |
True |
|
Метод |
SetFocus |
Помещает фокус клавиатуры на данный объект |
Процедура-событие нажатия кнопки Вычислить:
Private Sub Cmd1_Click()
Dim x As Single, y As Single
Const a As Single = 3, b As Single = 2
x = Val(TxtX.Text)
Select Case x
Case Is < -1
y = a * x
LblY.Caption = "y=a*x"
Case -1 To 1
y = Abs(x)
LblY.Caption = "y=|x|"
Case Else
y = x ^ b
LblY.Caption = "y=x^b"
End Select
TxtY.Text = y
End Sub
Процедура кнопки Сброса, очищает поля ввода Х и вывода Y и надпись с уравнением, а также активизирует поле ввода Х:
Private Sub Cmd2_Click()
TxtX.Text = ""
TxtY.Text = ""
LblY.Caption = ""
TxtX.SetFocus
End Sub
Процедура нажатия на Переключатель, делает видимой/невидимой картинку:
Private Sub Opt1_Click()
if Opt1.Value = True Then Img1.Visible = True
End Sub
Private Sub Opt2_Click()
if Opt2.Value = True Then Img1.Visible = False
End Sub
Составить программу решения сложной функции (см. варианты задания, колонки "Функция" и "Условие") для различных значений аргумента при следующих условиях:
Вариант |
Реализация разветвляющей структуры |
Вывод результата |
Нечетные |
оператор IF... блочный |
в окно Отладки |
Четные |
оператор Select... |
в диалоговое окно |
(Результаты вывести отформатированными).
Лабораторная работа № 3
Тема "Программа циклической структуры"
Цель: приобретение навыков создания алгоритмов и программ циклической структуры и изучение необходимых для этого операторов и функций .
Изучить:
Общий вид записи и назначение операторов:
Оператор цикла с известным числом повторений For...Next повторяет выполнение группы операторов указанное число раз:
For счетчик = начало To конец [Step шаг]
блок операторов
[Exit For]
[блок операторов]
Next [счетчик]
где счетчик - числовая переменная, используемая в качестве счетчика цикла;
начало - начальное значение переменной счетчик;
конец - конечное значение переменной счетчик;
шаг - значение, на которое изменяется счетчик при каждом выполнении тела цикла, если это значение не задано, по умолчанию шаг равен единице, может быть как положительным, так и отрицательным;
блок операторов - одтн или несколько операторов между For и Next, которые выполняются указанное число раз.
Оператор итерационный Do...Loop повторяет выполнение набора инструкций, пока условие имеет значение истина:
Do [{While | Until} условие]
блок операторов
[Exit Do]
[блок операторов]
Loop[{While | Until} условие]
где условие - числовое выражение или строковое выражение, которое имеет значение True или False, предворяется одним из ключевых слов While или Until;
блок операторов - один или несколько операторов, выполнение которых повторяется, пока условие имеет значение True или пока оно не приобретет значение True.
Альтернативный способ выхода из цикла предоставляет инструкции Exit For и Exit For. В любых местах цикла может размещаться любое число таких инструкций.
Пример:
Написать программу решения задачи лаб.№2 при изменении х в диапазоне [0;2] с шагом 0,2.
1.Ввод значений границ диапазона и шага реализовать с помощью функции ввода. Найти минимальное и максимальное значение функции. Результаты поместить в окно Immediat.
Используя конструкцию For...Next |
Используя конструкцию Do...Loop |
Public Sub lab3() Dim x As Single, xn As Single, xk As Single, dx As Single Dim y As Single , min As Single, max As Single newline = Chr(13) 'ввод данных xn = Val(InputBox("Хначальное")) xk = Val(InputBox("Хконечное")) dx = Val(InputBox("шаг")) 'начальные значения мин и мах min = 10000: max = 0 'вывод заголовка таблицы Debug.Print " X " & " " & " Y " 'начало цикла For x = xn To xk Step dx Select Case x Case Is < -1 y = a * x Case -1 To 1 y = Abs(x) Case Else y = x ^ b End Select 'нахождение мин и мах If min > y Then min = y If max < y Then max = y Debug.Print Format(x, " 0.0") & _ " " & Format(y, " #.##") Next 'вывод мин и мах Debug.Print "min=" + Str(min) + newline + "max=" + Str(max) End Sub |
х = xn Do While x ≤ xk x = x + dx Loop |
2.Создать форму для решения вышеприведенной задачи. Результат табулирования вывести в многостроковое поле (TextBox). Предусмотреть возможность кроме вывода результатов нахождение и вывод в окно сообщения (функция MsgBox) минимального и максимального значений функции. Эту возможность задать с помощью флажков (CheckBox), размещенных в рамке (Frame).
Таблица элементов создаваемой формы и их свойств:
Элемент |
Свойства |
Описание |
Значение |
Form1 |
Name |
Form1 |
|
Caption |
Лабораторная … |
||
Label1 |
Name |
Lbl1 |
|
Caption |
Левая граница |
||
Label2 |
Name |
Lbl2 |
|
Caption |
Правая граница |
||
Label3 |
Name |
Lbl3 |
|
Caption |
Шаг |
||
Label4 |
Name |
Lbl4 |
|
Caption |
Задайте границы диапазона Х |
||
TextBox1 |
Name |
Txt1 |
|
MultiLine |
Поле содержит более одной строки |
True |
|
ScrollBars |
Наличие в поле линий прокруток |
2 3 |
|
TextBox2 |
Name |
Txt2 |
|
Text |
Значение левой границы |
0 |
|
TablIndex |
Порядок выбора объектов |
1 |
|
TextBox3 |
Name |
Txt3 |
|
Text |
Значение правой границы |
2 |
|
TablIndex |
2 |
||
TextBox4 |
Name |
Txt4 |
|
Text |
Значение шага |
0,2 |
|
TablIndex |
3 |
||
CommandButton1 |
Name |
Cmd1 |
|
Caption |
Вычислить |
||
CommandButton2 |
Name |
Cmd2 |
|
Caption |
Сброс |
||
CommandButton3 |
Name |
Cmd3 |
|
Caption |
Выход |
||
Frame |
Name |
Frm1 |
|
Caption |
Вывод: |
||
CheckBox1 |
Name |
Chk1 |
|
Value |
Есть флажок |
1 |
|
Caption |
Числа |
||
CheckBox2 |
Name |
Chk2 |
|
Value |
Флажок серый |
2 |
|
Caption |
Мин и мах |
Процедур нажатия кнопки Вывод (процедуры для кнопок Сброс и Выход см. Лаб.№3):
Private Sub Cmd1_Click()
Dim x As Single, y As Single
Dim min As Single, max As Single
Dim newline As String, space As String
newline = Chr(13) + Chr(10)
'начальные значения мин и мах
min = 1000: max =0
'вывод заголовка таблицы
Txt4.Text = " X " & " " & " Y " & newline
'начало цикла
x = Val(Txt1.Text)
Do While x <= Val(Txt2.Text)
Select Case x
Case Is < -1
y = a * x
Case -1 To 1
y = Abs(x)
Case Else
y = x ^ b
End Select
'нахождение мин и мах
If min > y Then min = y
If max < y Then max = y
'Вывод значений X и Y на форму
If Chk1.Value = 1 Then
Txt4.Text = Txt4.Text & Format(x, " 0.0") & " " & Format(y, " 0.00") & newline
End If
'изменение Х
x = x + Val(Txt3.Text)
Loop
'вывод мин и мах в окно сообщения
If Chk2.Value = 1 Then
MsgBox "min=" & Format(min, "0.00") & newline & _
"max=" & Format(max, "#.##"), vbOKCancel + vbInformation, "Сообщение"
End If
End Sub
Модифицировать программу лабораторной работы №2 таким образом, чтобы вычислялось многократно значение функции при изменении аргумента в указанном диапазоне и с заданным шагом (см. таблицу вариантов).
Реализовать циклическую структуру с помощью:
(в программе предусмотреть выод результатов вычислений в виде таблицы: аргумент и соответствующее значение функции).
Тема "Одномерный массив"
Цель: приобретение навыков создания программ обработки одномерных массивов.
Массив это последовательный, упорядоченный набор однотипных элементов с общим именем. Каждый элемент массива имеет индекс уникальный номер, который заключается в скобки. Массивы в зависимости от количества индексов, могут быть одномерные и многомерные. Как и другие переменные, массивы обязательно объявляются в начале программы с помощью оператора Dim, с указыванием размерности массива. Массивы могут быть динамические и статические, с фиксированной размерностью статические,- динамические размерность которых определяется во время выполнения программы.
Описание массивов
Dim имя (индекс1[,индекс2]) [As тип], …
где имя - имя массива, удовлетворяющее стандартным правилам именования переменных;
индекс1, индекс2 - размерности переменной массива; допускается описание до 60 размерностей; индексы записывается следующим образом:
[нижний1 To] верхний1 [,[нижний2 To] верхний2] ,
если нижний индекс не задан явно, нижняя граница массива определяется оператором Option Base, если отсутствует Option Base, нижняя граница массива равняется нулю;
тип - тип данных массива (Integer, Long, Single, Double, String и т.д.).
Для описания динамических массивов инструкцию Dim записывают с пустыми скобками. После ввода или расчета размерности массива, массив переопределяется оператором ReDim
ReDim имя (индекс1[,индекс2])
Оператор Option Base применяется для задания нижней границы индексов массива
Option Base {0 | 1} По умолчанию используется значение 0.
Оператор Option Base располагается в модуле перед процедурой и должна предшествовать описаниям массивов, включающих размерности.
Оператор цикла For Each...Next повторяет выполнение блока операторов для каждого элемента массива или семейства.
For Each элемент In группа
Блок операторов
[Exit For]
Next [элемент]
где элемент - переменная, используемая для выполнения итераций по элементам семейства или массива, для массива она может быть только переменной типа Variant;
группа - имя семейства объектов или массива (за исключением массивов с определяемыми пользователем типами);
блок операторов - один или несколько операторов, которые выполняются над каждым элементом группы.
При работе с массивами данных возникает необходимость использования вложенных циклов (один цикл For...Next или Do…Loop или For...Each...Next располагается внутри другого):
For I = 1 To 10
For J = 1 To 10
For K = 1 To 10
...
Next K
Next J
Next I
Однако, в случае For...Next счетчик каждого цикла должен иметь уникальное имя, For...Each...Next - каждый элемент цикла должен быть уникальным.
Пример:
Задан одномерный числовой массив Х(n), определить произведение всех чисел массива, минимальное значение, первый отрицательный, его значение и индекс, отсортировать массив по возрастанию.Предусмотреть ввод и вывод элементов массива и результатов расчета.
Option Base 1 задание нижней границі массива =1
Sub lab5()
Объвление типов переменных
Dim n AsInteger, st AsIinteger, i As Integer, Min As Single, P As Single, S As Single
Dim mas As String
Dim x() As Single объявление динамического массива Х
newline = Chr(13)
n = Val(InputBox("Введите к-во элементов в массиве", "Задание размерности массива"))
ReDim x(n) Переопределение размерности массива X
'Ввод элементов массива _______________________________________________________
For i = 1 To n
из диалогового окна
' генератор случайных чисел
x(i) = Val(InputBox("Ввод " & i & "-го _ элемента", "Ввод элементов массива")) |
x(i) = Int(n * Rnd - n / 2) |
' вывод элементов массива в окно Отладки
Debug.Print "X("; i; ")= "; x(i)
Next i
'Расчет произведения_________________________________________________________
P = 1 начальное значение произведения P=1, суммы=0
For i = 1 To n
P = P * x(i)
Next i
Вывод результата в окно Отладки
Debug.Print “Произведение” + P
' Использование оператора For Each… Next
для расчета суммы
обязательно оператор Option Base 1,
For Each element In x
s = s + element
Next
'Поиск минимального элемента _________________________________________________
Min = x(1) Присвоить первоначальное значение = 1-ому элементу
For i = 1 To n
If Min > x(i) Then Min = x(i)
Next i
Поиск первого отрицательного элемента______________________________
For i = 1 To n
If x(i)<0 Then
xotr = x(i ) значение 1-го отрицательного
iotr = I индекс 1-го отрицательного
Exit For досрочный выход из цикла
End If
Next I
Вывод в окно Отладки 1-го отрицательного и его индекса
Debug.Print “1-ое отрицательное”, xotr, “индекс 1-го отрицательного”, iotr
'Вывод элементов массива, минимума и произведения в диалоговое окно ____________
mas = "Введенные числа:"
For i = 1 To n
mas =mas & " " & Str(x(i))
Next i
MsgBox mas, vbOKOnly + vbExclamation, "Элементы массива"
MsgBox "min=" + Str(Min) & newline & "Произведение=" & P, vbInformation, _ "Результаты"
Сортировка массива по возрастанию _________________________
For i = 1 To n - 1
flag = 0 флаг, отмечающий, были ли перестановки
For j = 1 To n 1
Если следующий элемент меньше текущего, тогда меняем местами
If x(j + 1) < x(j) Then
pr = x(j): x(j) = x(j + 1): x(j + 1) = pr перестановка элементов
flag = 1 была перестановка
End If
Next j
если перестановок больше нет, то - досрочный выход из цикла
If flag = 0 Then Exit For
Next i
Debug.Print Вывод пустой строки или переход на другую строку
вывод отсортированного массива в окно Отладки
For i = 1 To n
Debug.Print x(i); в строку
Next
End Sub
Пример для формы:
Задан одномерный числовой массив Х(n), найти сумму и произведение всех чисел массива, а также минимальное и максимальное значения. Создать форму для этой задачи.
В программе предусмотреть возможность ввода размерности массива, а также ввод элементов массива с помощью окон сообщений или генератора случайных чисел. Вывод массива и результатов вычислений предусмотреть либо в окно сообщений либо в окно Просмотра.
Таблица новых свойств элементов создаваемой формы
Элемент |
Свойство |
Описание |
Значение |
CommandButton1 |
Enabled |
Доступность элемента к действиям |
False |
Picture |
Рисунок на кнопке (если Style=1) |
Имя файла |
|
DisablePicture |
Рисунок на кнопке, когда она недоступна (если Enabled = False, Style=1) |
Имя файла |
|
DownPicture |
Рисунок на кнопке, если она нажата (если Style=1) |
Имя файла |
|
Style |
Стиль кнопки |
1 - графический |
|
Label1 |
BorderStyle |
Установление стиля рамки надписи |
1 |
Alignment |
Выравнивание текста в границах элемента |
Center |
|
WordWrap |
Перенос слов (если AutoSize=True ) |
True |
|
Общие свойства элементов |
BackColor ForeColor |
Цвет фона Цвет выводимой информации |
Рис. Форма до и после нажатия на кнопки Ввести массив…
Процедура кнопки Ввести массив…
Ввод элементов массива можно осуществить «вручную» или же с помощью генератора случайных чисел (переключатели «с клавиатуры» и «генератором»).
Нажатия на кнопку Ввести массив… приводит к следующим действиям:
- в диалоговом окне вводится число, определяющее размерность массива, а если выбран «с клавиатуры», то вводятся также последовательно элементы массива,
- кнопки Вывод массива на форму и Вычислить, которые не действовали до этого (надписи на них серым цветом) - активизируются,
- на кнопке Ввести массив… меняется надпись на Массив введен!.
Dim n As Integer, i As Integer
Dim x() As Single
Private Sub CmdVvod_Click()
'Изменение свойств
'кнопкам Проверка ввода и Вычислить
CmdTest.Enabled = True
CmdWork.Enabled = True
n = Val(InputBox("Введите число", "Задание размерности массива"))
ReDim x(n)
If OpbHand.Value = True Then
For i = 1 To n
x(i) = Val(InputBox("Ввод " & i & "-го элемента", "Ввод массива"))
Next i
Else
For i = 1 To n
x(i) = Int(n * Rnd - n / 2)
Next i
End If
CmdVvod.Caption = "Массив введен!"
После ввода массива меняется надпись на кнопке Ввести массив…
End Sub
Процедура кнопки Вывод массива на форму:
Ввыводит элементы введенного массива в Поле ввода.
Private Sub CmdTest_Click()
Dim newline As String, elements As String
newline = Chr(13) + Chr(10)
TxtX.Text = "Элементы массива:" + newline
For i = 1 To n
TxtX.Text = TxtX.Text + Format(x(i), "0.0 ")
Next i
End Sub
Процедура кнопки Вычислить… :
Private Sub CmdWork_Click()
Dim Sum As Single, Product As Single
If ChbSum.Value = 1 Then
Sum = 0
For i = 1 To n
Sum = Sum + x(i)
Next i
LblSum.Caption = Sum
Else
LblSum.Caption = ""
End If
If ChbProduct.Value = 1 Then
Product = 1
For i = 1 To n
Product = Product * x(i)
Next i
LblProduct.Caption = Product
Else
LblProduct.Caption = ""
End If
End Sub
Процедура кнопка Сброс:
производит очистку Поля ввода и Надписей, а также отключение кнопок Вывод массива на форму и Вычислить, возвращает надпись кнопке Ввести массив….:
Private Sub CmdReset_Click()
CmdTest.Enabled = False
CmdWork.Enabled = False
CmdVvod.Caption = "Ввести массив..."
CmdVvod.SetFocus
TxtX.Text = ""
LblSum.Caption = ""
LblProduct.Caption = ""
Sum = 0
Product = 0
For i = 1 To n
x(i) = 0
Next i
End Sub
Процедура кнопки Выход при нажатии кнопки появляется на кнопке рисунок.
Лабораторная работа № 5
Тема "Обработка двумерных массивов"
Цель: приобретение навыков создания программ обработки многомерных массивов и использование процедур.
В 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). Решить следующие задачи:
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 - количество столбцов (для одномерного задаеться только один параметр). Решить следующие задачи:
Некоторые свойства элементов управления заданы программно с помощью оператора 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 |
Кнопки Сброс и Выход аналогичны кнопкам в предыдущих лабораторных.