Министерство сельского хозяйства Российской Федерации
Департамент кадровой политики и образования
Федеральное государственное образовательное учреждение высшего профессионального образования
Мичуринский государственный аграрный университет
Кафедра информатики
для самостоятельной работы студентов
Основные возможности
VISUAL BASIC
Мичуринск 2006
Методическое пособие разработано старшим преподавателем кафедры информатики Маковой Н.Е. на основании требований государственного стандарта высших учебных заведений.
Пособие предназначено для студентов: 080502 - Экономика и организация в АПК, 080109 - Бухгалтерский учет, анализ и аудит, 080105 - Финансы и кредит, 080504 – Государственное и муниципальное управление.
Рецензент: ст. преподаватель кафедры математического моделирования экономических систем Ширяева Г.Б.
Рассмотрено на заседании кафедры информатики:
протокол № от мая 2006 г.
Литература
1. Назаров С.В., Мельников П.П. Программирование на MS Visual Basic – М.: Финансы и статистика, 2003 г.
2. Лукин С.Н. Visual Basic. Самоучитель для начинающих. – М.: “Диалог - МИФИ”, 2004г.
3. Информатика. Базовый курс. / под ред. Симоновича. – СПб.: Питер, 2001.
Visual Basic – мощная объектно-ориентированная система программирования, которая применяется как профессионалами при разработке сложных современных приложений, так и пользователями (например, при подготовке макросов для Excel и Word).
Эта система визуального объектно-ориентированного программирования (ООП) позволяет существенно упростить значительную часть программистской работы – создание интерфейса прикладной программы. Кроме того, Visual Basic поддерживает событийно-управляемое программирование. Его основной смысл: вместо описания каждого шага программы программист лишь указывает, как реагировать на различные события: нажатие кнопки, щелчок кнопкой мыши по объекту в окне, перемещение мыши и т.д. Т.о., работая в Visual Basic, разработчик программы создает не одну большую программу, а приложение, состоящее из совокупности взаимодействующих микропрограмм (процедур), управляемых пользователем.
В основе ООП, управляемого событиями, лежат понятия класс, инкапсуляция, объект, событие.
В Visual Basic объектом являются элементы пользовательского интерфейса, которые создаются на Форме пользователя. Доступ к объекту при ООП возможен только через его методы и свойства.
Каждый объект является представителем некоторого класса однотипных объектов, т.е. объект является экземпляром класса. Класс определяет общие для всех объектов методы и свойства.
Работа с любым объектом заключается в следующем:
· задание свойств объекта
· получение значений свойств объекта
· выполнение методов объекта
Свойства представляют собой характеристики (атрибуты), присущие объектам (например, размер шрифта, название и др.).
Объект, с одной стороны обладает определенными свойствами, которые характеризуют его состояние в данный момент времени, а, с другой стороны, над ним возможны операции, которые приводят к изменению этих свойств. Т.о., объект объединяет в себе как описывающие его данные (свойства), так и средства обработки этих данных (методы). Инкапсуляцией называется объединение в объекте его свойств и возможных над ним операций (методов).
Объекты характеризуются свойствами. Изменять свойство объектов можно с помощью операторов присваивания. Обращение к свойству объекта:
ОБЪЕКТ.ИМЯ_СВОЙСТВА
Свойство представляет собой разнообразные характеристики объекта, такие как размер, цвет, положение на экране или состояние объекта, например, доступность или видимость. Чтобы изменить характеристику объекта, надо просто изменить значение свойств:
ОБЪЕКТ.ИМЯ_СВОЙСТВА = ЗНАЧЕНИЕ
Например:
TextBox1.Text = " " – очистить (присвоить пустое значение) полю ввода номер один.
Для того, чтобы объект выполнил какую-нибудь операцию, необходимо задать метод.
Методы – это программные процедуры, реализующие некоторый алгоритм, который определяет взаимодействие объектов класса с внешней средой.
В ООП используется определенная форма записи при работе с объектами. Вызов метода, выполняющего действия над тем или другим объектом, записывается следующим образом:
ОБЪЕКТ.МЕТОД
Например:
Form1.Show – показать форму;
Form2.Hide – скрыть форму,
Application.Quit – выйти из приложения.
Практически все в реальной жизни можно описать с помощью терминологии объектов, свойств и методов. Возьмите себя в качестве примера. ВЫ – объект под названием Человек. Ваши свойства включают такие "параметры": Имя, Рост, Вес, Цвет глаз, Цвет волос, Возраст и т.д. Некоторые "методы", которые вы можете выполнять: Спать, Учиться, Бегать и Программировать.
Событие представляет собой действие, распознаваемое объектом (например, щелчок мышью или нажатие клавиши, перемещение мыши или выход из программы), для которого можно запрограммировать отклик, т.е. реакцию объекта на произошедшее событие.
В языке Visual Basic для каждого объекта определен набор стандартных событий. Познакомиться с основными объектами, свойствами, методами и событиями VB вы можете в ПРИЛОЖЕНИИ 3.
Если пользователь нажимает на кнопку, то это событие, на это событие должен быть отклик, т.е. выполнение какой-либо программы. Такая программа называется процедурой обработки событий и имеет стандартное имя. Если такой отклик не создан (не написана соответствующая процедура), то система никак не будет реагировать на это событие. Т.о., вашей задачей является разработка программного кода процедур для обработки различных событий, которые являются важными с точки зрения функционирования программы.
Синтаксис записи процедуры обработки событий:
Sub Объект(1)_Событие()
Объект(2).Свойство=ЗначениеСвойства
Объект(3).Метод
End Sub
Современный программист, работающий в средах визуальной разработки программ, выполняет три этапа:
1) на первом этапе он вручную расставляет на экране компьютера объекты, которые будут выполнять его программу;
2) на втором этапе пишет программу;
3) на третьем этапе запускает ее, исправляет ошибки и снова запускает. И так до тех пор, пока все не заработает нормально. Этот процесс называется отладкой.
На первом этапе работа программиста напоминает работу конструктора-проектировщика, и часто из-за этого продукт работы программиста называют не программой, а проектом.
Запуск программы осуществляется одним из обычных способов, характерных для Windows:
- Через систему иерархически организованных меню: <Start> - папка Программы – папка Microsoft Visual Basic - пиктограмма Visual Basic.
- Щелчком мыши по ярлыку VB.
В результате запуска на экране появляется главное окно Visual Basic, в центре которого вы видите другое окно - приглашение начать создавать новый проект. Если приглашение не появилось, то щелкните по пункту меню File, а затем выберите в выпавшем меню пункт Add Project - и оно появится.

Вам предлагается выбрать тип проекта, который вы хотите создавать. Пока нам достаточно стандартного типа. Щелкните в окне приглашения в закладке New по значку Standard EXE, а затем по кнопке Open.
Интерфейс Visual Basic состоит из следующих компонентов:
· меню;
· панели инструментов;
· окно проекта;
· окно форм;
· окно свойств;
· окно редактирования кода.

Строка меню обеспечивает доступ к большинству команд, управляющих средой программирования. Меню и команды работают в соответствии со стандартными соглашениями, общими для всех приложений Windows. Все нужные вам на первых порах пункты главного меню среды вы можете посмотреть в ПРИЛОЖЕНИИ 1. Для понимания дальнейшего отметим, что в среде можно одновременно работать с несколькими проектами.
ПАНЕЛИ ИНСТРУМЕНТОВ
Под строкой меню расположена строка инструментов, представляющая собой набор кнопок, являющихся ярлыками для команд, с помощью которых осуществляется работа в среде VB. В правой части панели - 2 пары чисел. Это свойства Left, Top, Width и Height выделенного объекта.
ОКНО ПРОЕКТА (Project Explorer)
В этом окне представлена иерархическая структура файлов форм и модулей текущего проекта. Сложные проекты могут состоять из многих форм и других элементов, взаимосвязь которых удобно видеть в этом окне.
В верхней части окна можно видеть три кнопки. Левая и средняя из них удобны для быстрого переключения между формой и окном кода
ОКНО ФОРМ
Что вас на картинке больше всего должно интересовать - так это серый прямоугольник в точечку, расположенный в центре на белом фоне. Это так называемая форма. Форма - это пустой стол, на котором мы будем расставлять объекты. Сетка используется для облегчения размещения и выравнивания элементов управления. Если сетка на поверхности формы отсутствует, то ее можно вывести командой Сервис ® Параметры вкладка Общие (Tools, Options, General). Когда вы запустите проект, форма станет окном Windows.
Наиболее часто используемые свойства объекта Form:
Name – возвращает имя пользовательской формы
Caption – возвращает текст, отображаемый в строке заголовка формы
BackColor – возвращает цвет фона формы
ForeColor – цвет текста и линий, рисуемых на объекте
Appearance – внешний вид: 3D (трехмерный) или Flat (плоский)
BorderStyle – устанавливает тип границы. Здесь 6 вариантов, и завидуют они не только стилем границы, но и количеством кнопок на форме, и возможностью изменять размеры формы в режиме [run].
MaxButton – кнопка максимизации – квадратик в правом верхнем углу формы
MinButton – кнопка минимизации – горизонтальная черточка в правом верхнем углу формы.
Moveable – можно ли двигать – если установить это свойство в False, то в режиме [run] нельзя будет таскать форму по экрану за заголовок. Хотя можно перетаскивать ее границы.
WindowState – определяет, в каком виде возникает форма при запуске проекта: 0 – в нормальном, 1 – в минимизированном (на панели задач Windows) или 2 – максимизированном (во весь экран).
Visible – видимый; если установить False, то элемент управления перестанет быть виден в режиме работы. Но будет слушаться программу.
Enabled – в рабочем состоянии; если установить False, то элемент управления виден будет, но он не будет работать и им нельзя будет пользоваться.
Picture – указывает рисунок, отображаемый как фон формы
Left, Top – возвращают местоположение верхнего левого угла формы в пунктах
Height, Width – возвращают высоту и ширину формы в пунктах
StartUpPosition – возвращает значение, определяющее положение формы при ее первом отображении на экране. Допустимые значения:
· Manual (начальное значение не устанавливается);
· CenterOwner (выравнивание по центру объекта, к которому принадлежит форма);
· CenterScreen (выравнивание по центру экрана);
· Windows Defalt (положение верхнего левого угла экрана).
Наиболее часто используемые методы объекта Form:
Show – отображает форму на экране
Hide – закрывает форму
Move – изменяет положение и размер формы
PrintForm – печатает изображение формы
Основные события объекта Form:
Initilize – происходит при отображении формы на экране
Terminate – происходит при закрытии формы
ОКНО ЭЛЕМЕНТОВ УПРАВЛЕНИЯ (Toolbox)
Чтобы создать проект, нам нужны объекты. И Visual Basic нам их предоставляет. В левой части главного окна Visual Basic мы видим вертикальную серую панель. Это Toolbox (блок, или палитра, элементов управления), то есть набор наиболее популярных стандартных объектов, применяемых при создании проектов на Visual Basic. Чтобы познакомиться с названием какого-нибудь элемента, поместите на него мышиный курсор, не нажимая.
|
Элемент управления |
Имя |
Кнопка |
Описание |
|
Надпись |
Label |
|
Статическая область текста, обычно содержащая какую-либо поясняющую информацию |
|
Поле |
TextBox |
|
Поле для ввода текста |
|
Кнопка |
CommandButton |
|
Командная кнопка |
|
Список |
ListBox |
|
Применяется для хранения списка значений. |
|
Поле со списком (Раскрывающийся список) |
ComboBox |
|
Сочетает в себе возможности списка и поля ввода. В отличие от предыдущего, отображает только один элемент списка. |
|
Полоса прокрутки |
ScrolBar |
|
Для прокручивания информации в окне или для изменения значений какой-нибудь величины. |
|
Переключатель |
OptionButton |
|
Позволяет выбрать один из нескольких взаимоисключающих параметров или действий. В группе переключателей можно выбрать только один. |
|
Флажок |
CheckBox |
|
Предоставляет пользователю возможность выбора. Обычно имеет два состояния: установленное и сброшенное. В группе флажков можно установить один, несколько или все. |
|
Рамка |
Frame |
|
Используется для визуального объединения каких-либо элементов управления в группу |
|
Рисунок |
Image |
|
Позволяет вставлять графические элементы (файлы .bmp, .cur, .gif, .ico, .jpg, .wmf) в экранные формы. |
|
Линия |
Line |
|
Рисует отрезок прямой. |
|
Фигура |
Shape |
|
Можно рисовать прямоугольник, овал, круг в зависимости от значения свойства Shape. |
|
Картинка |
PictureBox |
|
Предназначен для размещения картинок. |
|
Таймер |
Timer |
|
Через каждые Interval секунд создает событие (импульс), которое запускает процедуру Timer1_Timer. |
Если Toolbox вашего компьютера слишком узкий и на нем не помещаются все элементы, вы можете для его расширения "перетащить" мышкой его границу.
ОКНО СВОЙСТВ (Properties)
В окне свойств перечисляются основные установки свойств выбранной формы или
элемента управления. Для просмотра свойств выбранного объекта надо выполнить
команду Вид
®
Окно свойств (Windows
®
Properties)
или нажатием кнопки
.
Окно свойств состоит из двух составных частей: верхней и рабочей. В верхней части располагается раскрывающийся список, из которого можно выбрать любой элемент управления текущей формы или саму форму. Рабочая часть состоит из двух вкладок: По алфавиту (Alphabetic) и По категориям (Categorized). В обеих вкладках свойство Name будет первым. Изменяются значения свойств либо выбором нужного свойства из раскрывающегося списка, либо вводом с клавиатуры значения свойств в соответствующее поле.
ОКНО РЕДАКТИРОВАНИЯ КОДА (Code)
Окно редактирования кода служит в качестве редактора для ввода и изменения кода процедур. Два раскрывающихся списка в верхней части окна облегчают ориентацию в созданных процедурах. Левый раскрывающийся список позволяет выбирать управляющий элемент или форму, а правый – содержит список событий, допустимых для выбранного в левом списке объекта.
С помощью пункта меню View можно вывести на экран следующие окна.
ОКНО ПРОСМОТРА ОБЪЕКТОВ (Object Browser)
Делится на два вертикальных списка. В левом приведены типы (классы) объектов VB. Если выделить в нем какой-то объект, например, TextBox, то в правом списке можно видеть свойства этого объекта, события, которые могут происходить с этим объектом, и т.н. методы, ему принадлежащие. Свойств здесь больше, чем в окне свойств, т.к. здесь приведены и те свойства, которые имеют смысл только в режиме [run]. Например, свойство SelText объекта TextBox, которое выдает фрагмент текста, выделенного нами в текстовом поле. Object Browser - довольно удобный способ увидеть, что "умеет" делать любой объект и что можно делать с ним.
ОКНО МАКЕТА ФОРМЫ (Form Layout)
Позволяет вручную задавать позицию формы на экране.
ОКНО Color Palette
Позволяет удобно раскрашивать объекты и текст в режиме проектирования.
Многие окна имеют привычку при сближении состыковываться. Сделано это для удобства программистов, но поначалу может восприниматься как неудобство. Вы можете отменить это свойство Tools ® Options ® Docking и убрав оттуда флажки.
Возьмем кнопку (CommandButton) и поместим ее на форму. Для этого щелкнем по кнопке, а затем проведем мышкой внутри формы небольшую "рамочку". Отпустите мышь. На месте рамочки возникнет кнопка с надписью Command1.
По краям кнопки вы увидите 8 черных квадратиков – маркеров изменения размеров. Если щелкнуть по форме мимо кнопки, они пропадут, если снова щелкнуть по кнопке - появятся. Только не надо пока двойных щелчков. Перетащите мышкой любой из маркеров - размеры кнопки изменятся. Можно таскать кнопку по форме, если "ухватиться" мышью не за маркер, а за любое место внутри кнопки. Чтобы уничтожить кнопку, щелкните по ней правой клавишей мыши и в выскочившем контекстном меню выберите опцию Delete. Проделайте все это. А теперь, если вы ее уничтожили, снова создайте.
Аналогичным образом поместим на форму объект
текстовое поле
(TextBox).
Теперь у нас на форме 2 объекта.
Обратите внимание на слово [design] (проектирование) в заголовке главного окна Visual Basic. Оно говорит о том, что в настоящий момент Visual Basic находится в режиме проектирования, во время которого мы можем собирать наш проект (1-й этап) и писать для него программу (2-й этап).
Пока мы с вами создаем то, сами не знаем что. Ведь никакой задачи мы перед собой не поставили. Тем не менее перескочим через 2-й этап (составление программы) и сразу выполним 3-й этап, то есть запустим наш проект на выполнение. Для этого щелкнем мышкой по кнопке Start на панели инструментов (не путать с блоком элементов управления).
Что мы видим? Форма немного изменилась, пропали точки, она потеряла связь с главным окном Visual Basic и ведет себя как независимое окно. Для убедительности сверните на панель задач главное окно Visual Basic. Теперь форма одна царит на экране. Ее можно таскать по всему экрану, ухватившись за заголовок, и ее значок вы можете видеть на панели задач Windows. Она надлежащим образом реагирует на щелчки по кнопкам в ее правом верхнем углу. Если подвести острие курсора к краю или углу формы, то можно менять ее размеры. А вот размеры кнопки и текстового поля мы не можем больше менять. Зато теперь на кнопку можно нажимать мышкой. Нажимаем. Ничего не происходит. Естественно: мы ведь не написали программу, объясняющую компьютеру, что нужно делать при нажатии на кнопку.
В текстовое поле теперь можно вводить текст и как угодно там его менять. Но и это без толку. Компьютер никак не реагирует, что бы мы там ни написали. Причина та же.
Если вы при несвернутом главном окне Visual Basic случайно щелкнете по нему мышкой мимо формы, то форма пропадет из виду, так как будет загорожена главным окном. Не беда: щелчок по значку формы на панели задач Windows вернет ее на передний план.
Обратите внимание на слово [run] (бег, работа) в заголовке главного окна Visual Basic. Оно говорит о том, что в настоящий момент Visual Basic находится в режиме работы, то есть в режиме выполнения проекта (3-й этап), во время которого мы ни собирать проект (1-й этап), ни писать для него программу (2-й этап) не можем.
Итак, мы видим, что без программы наш проект не стоит ни гроша. Завершим выполнение проекта кнопкой End, на панели инструментов или щелкнув по крестику в правом верхнем углу формы. Visual Basic вышел из режима [run] и вернулся в режим [design]. Теперь в проекте можно что-нибудь поменять и снова его запустить. И так далее.
Прикажем компьютеру при нажатии кнопки поменять цвет формы на красный. Команда (оператор) для этого пишется так:
Form1.BackColor = vbRed
Разберем, что здесь написано.
Form1 - это имя нашей формы (его дал Visual Basic, и мы пока не будем его менять).
BackColor - цвет фона (пока он серый).
vbRed - это красный цвет (Red - красный, vb - Visual Basic).
Visual Basic воспримет наш оператор как приказ поменять цвет формы на красный. Теперь как нам сделать, чтобы компьютер выполнил этот оператор именно при нажатии на кнопку, а не в какой-либо другой момент? Проверьте, находимся ли мы в режиме проектирования [design]. Сделайте двойной щелчок по кнопке Command1. Перед вами возникнет окно программного кода или просто окно кода. Чтобы мы не спутались, в заголовке окна присутствует слово [Code].
Будем называть кодом любой текст программы. Таким образом, в окно кода будем записывать всю программу нашего проекта (большие проекты могут использовать несколько окон кода).
Мы видим, что в окне кода уже что-то написано. Строку Private Sub Command1_Click() можно вольно перевести как "Что делать, если щелкнуть (по-английски - Click) мышкой по кнопке Command1". Слово Private переводится как "локальный", и о его смысле поговорим позже. Слово Sub обозначает "процедура". Таким образом, более точно эту строку переводим так: "Локальная процедура, в которой компьютеру пишется инструкция, что делать, если человек мышкой нажмет на кнопку Command1".
Ниже оставлено свободное место, и там уже мигает курсор, приглашая нас вводить туда какие нам угодно операторы. Они-то и будут выполнены при щелчке по кнопке. Еще ниже находится строка End Sub, что означает "конец процедуры".
Таким образом, мы видим перед собой не что иное, как заготовку процедуры, которая должна выполниться при щелчке по кнопке Command1.
Введите с клавиатуры на свободное место наш оператор Form1.BackColor = vbRed. Вы не имеете права допустить ни малейшей ошибки в строке. Даже лишний пробел может быть ошибкой.
Кстати, Visual Basic очень услужлив. Когда вы введете точку, он (чтобы вам не утомлять свои персты вводом слова BackColor) развернет перед вами список всех уместных после точки слов. Вам останется только сделать двойной щелчок на нужном слове.
Если вы случайно щелкнете мышкой мимо окна кода, оно может пропасть из виду. Не беда. Ваши действия: View®Code.
Если же окно кода загораживает от вас форму, а вам хочется что-нибудь в ней сделать, то ваши действия: View®Object.
Но вот ввод оператора закончен. Перед вами готовая процедура.
Пришла пора снова запускать проект. Щелкните кнопку Start. На экране опять появляется знакомый вид формы с кнопкой и текстовым полем. Щелкните по кнопке. Если раньше компьютер никак не реагировал на это, то теперь форма стала красной. Поздравляю! Ваш первый проект заработал. Щелкните еще раз. Ничего не изменилось. Естественно. Завершим выполнение проекта кнопкой End.
А теперь нам пора сохранить проект при помощи File®Save Project, только помните, что проект сохраняется не в один, а в несколько файлов, поэтому обязательно для каждого проекта создавайте свою папку. Visual Basic предложит вам стандартные имена для сохраняемых файлов. Пока не меняйте их.
Сохранив проект, вы можете спокойно выйти из Visual Basic, щелкнув по крестику в правом верхнем углу главного окна. Чтобы продолжить через некоторое время работу над проектом, запустите Visual Basic и загрузите (откройте) сохраненный проект при помощи File®Open Project.
Если вы хотите начать новый проект, то выполните File®New Project.
Через некоторое время у вас накопится несколько сохраненных проектов. Вот вы поработали с одним из них и хотите, не выходя из Visual Basic, поработать с другим. Пока у вас еще мало опыта, я рекомендую такой порядок действий:
• Сохраните проект.
• Удалите его из главного окна Visual Basic (не с диска, конечно) -File®Remove Project. Теперь в главном окне Visual Basic и в окне Project Explorer у вас должно быть пусто. Заголовок Project Explorer должен быть таким: Project - No Open Projects.
• Откройте другой проект при помощи File®Open Project или создайте новый при помощи File®New Project.
Если вы попытаетесь открыть или создать другой проект, не сохранив старый, Visual Basic предложит вам его сохранить и после сохранения автоматически удалит из среды. Если вы по ошибке вместо FiIe®Open Project или File®New Project выполните File®Add project, то старый проект не будет удален и в главном окне Visual Basic вы будете иметь вместо одного сразу 2 проекта. Вы это сразу же заметите, взглянув в окно Project Explorer. Иногда иметь 2 проекта удобно, иногда просто необходимо, но пока вам будет не повернуться в такой тесноте. Если это все же произошло, жмите File®Remove Project, отвечая отказом на предложения сохранить проект, пока главное окно Visual Basic не опустеет.
Часто новый проект, который мы создаем, бывает похож на старый, и удобнее не новый создавать, а старый переделывать. Можно копировать папку старого проекта, затем открыть копию проекта и переделывать ее в новый проект.
Если вы при вводе кода в окно где-то ошиблись, то Visual Basic при запуске или сделает что-нибудь не то (например, покрасит форму в черный цвет), или даст вам знать об ошибке специальным сообщением. Сообщения могут возникать как в режиме проектирования, так и в режиме работы. Сейчас имеет смысл потренироваться. Давайте будем специально допускать ошибки и смотреть, что будет:
Form1.BackColor = vbRedd
Visual Basic вообще не заметит этой ошибки и покрасит форму не в тот цвет. Завершите работу проекта и исправьте ошибку.
Private Sub Command1_Clictk()
И этой ошибки Visual Basic не заметит. Просто при нажатии на кнопку ничего краситься не будет.
Form1.BackColo = vbRed
Visual Basic не заметит этой ошибки до тех пор, пока вы в режиме работы не нажмете на кнопку. Тогда он выдаст сообщение об ошибке, и выделит подозрительное место в программе. Вы можете нажать Help, и тогда Visual Basic подробнее пояснит, что он имел в виду. Но пока смысл пояснения вряд ли до вас дойдет. Нажимайте ОК, и Visual Basic выделит желтым заголовок подозрительной процедуры. Завершите работу проекта и исправьте ошибку.
Foоrm1. BackColor = vbRed
И этой ошибки Visual Basic не заметит до тех пор, пока вы в режиме работы не нажмете на кнопку. В окне сообщения об ошибке нажмите Debug, тогда Visual Basic выделит подозрительную строчку в программе. Завершите работу проекта и исправьте ошибку.
Form1.BackColor = = vbRed
А вот эту ошибку Visual Basic заметит еще в режиме проектирования, как только вы попытаетесь убрать курсор из ошибочной строки в другое место. Подозрительное место будет выделено. Жмите ОК и исправляйте ошибку.
Кстати, когда вы убираете курсор из вводимой строки, Бейсику кажется, что вы закончили с ней работу. Он проверяет ее на наличие грамматических ошибок и, если не находит, немного изменяет ее внешний вид, приводя к стандартному.
Итак, вы сохранили свой первый проект. Закройте его — File®Remove Project. Скопируйте папку проекта тут же, рядышком. Над копией будем продолжать работать.
Пусть при щелчке по кнопке происходит что-нибудь еще, кроме окрашивания формы. Например, изменяется размер шрифта в текстовом поле. Для этого достаточно в окне кода дописать следующий оператор:
Text1.FontSize = 16
Здесь Text1 - имя текстового поля, FontSize - размер шрифта. Наш оператор можно перевести так: сделать размер шрифта текстового поля Textl равным 16.
При щелчке по кнопке Visual Basic выполняет по порядку все операторы процедуры между строками Private Sub Command1_Click() и End Sub. Запустим проект кнопкой Start. Убедимся, что оба оператора выполнились. Поскольку компьютер работает очень быстро, нам будет казаться, что оба оператора выполнились одновременно. Но это не так: сначала поменялся цвет формы, а уж затем размер шрифта.
Продолжим работу. Пусть при нажатии на кнопку, кроме всего прочего, в текстовом поле появляется текст Теперь форма красная. Для этого достаточно в окне кода дописать еще 1 оператор:
Text1.Text = "Теперь форма красная"
Здесь Text1 - имя текстового поля, Text - его свойство, а именно текстовое содержимое этого поля.
После каждого изменения в окне кода проверяйте, как работает проект.
Создадим на форме еще одну кнопку. Ее имя - Command2. Пусть при щелчке по ней форма окрашивается в желтый цвет (vbYellow), размер шрифта становится равным 12, в текстовом поле появляется текст Теперь форма желтая.
Для этого так же, как и в случае с кнопкой Command1, сделаем по кнопке Command2 двойной щелчок мышкой. Перед нами снова окно кода, но в нем появилась заготовка другой процедуры, то есть новое приглашение - для ввода операторов, реагирующих на щелчок кнопки Command2. Введем их. Теперь содержимое окно кода такое:
Private Sub Command1_Click()
Form1.BackColor = vbRed
Text1.FontSize = 16
Text1.Text = "Теперь форма красная"
End Sub
Private Sub Command2_Click()
Form1.BackColor = vbYellow
Text1.FontSize = 12
Text1.Text = "Теперь форма желтая"
End Sub
Запустите проект. Пощелкайте по кнопкам.
Какая же программа без своего меню! Нашему маленькому проекту оно, вроде бы, ни к чему, но все равно интересно и полезно сделать хотя бы простенькое. Пусть оно выглядит так, как на рисунке.

Задачу поставим такую: щелкнув по пункту Настройка цвета, мы должны увидеть выпадающее меню из двух пунктов. Щелкнув по пункту Синий этого выпавшего меню, мы красим форму в синий цвет, щелкнув по пункту Зеленый - в зеленый.
Щелкнув по пункту О программе, мы вызываем сообщение с кратким описанием программы.
Нам предстоит создать меню, а затем заставить его работать.
Создаем меню. Чтобы его создать, достаточно в главном меню Visual Basic выбрать Tools - Menu Editor (Инструменты - Редактор Меню). Перед вами возникнет диалоговое окно.

Начнем с настройки цвета. Введем в поле Caption (Название) текст Настройка цвета. Это для того, чтобы пункт меню с этим текстом появился на форме. По мере ввода этот текст возникает и в поле, расположенном ниже.
Теперь придумаем этому пункту имя, например пункт_меню_Настрой-ка_цвета, и введем его в поле Name (Имя). Это чтобы пункт меню мог заработать. Если хотите вызывать этот пункт не только мышкой, но и с клавиатуры, выберите что-нибудь из списка Shortcut (Быстрая клавиша).
Щелкните по кнопке Next (Дальше) и займитесь пунктом Синий, дав ему имя пункт_меню_Синий.
Щелкните по кнопке Next и займитесь пунктом Зеленый, дав ему имя пункт_меню_Зеленый.
Щелкните по кнопке Next и займитесь пунктом О программе, дав ему имя пункт_меню_О_программе.
В результате в окне возникает список из четырех пунктов.

Теперь нужно объяснить компьютеру, что пункты Синий и Зеленый входят внутрь пункта Настройка цвета. Для этого выделим их по очереди и сдвинем направо кнопкой ®.
Если у вас что-то не получается, то вы все же можете добиться своего, используя все клавиши, показанные на картинке. Стрелки сдвигают выделенный пункт меню, Delete удаляет, Insert вставляет новый пункт.
Все в порядке - внешний вид меню готов. Запустите проект. Вы видите, что меню появилось на форме. Пощелкайте по пунктам. Естественно, ничего не происходит. Для того чтобы происходило, нужно заставить меню работать, а для этого нужно для каждого пункта написать свою процедуру.
Заставляем меню работать. В режиме проектирования выберем пункт меню Синий и щелкнем по нему. В окне кода появляется заготовка процедуры:
Private Sub пункт_меню_Синий_Сlick()
End Sub
Вы уже наверняка догадались, что это приглашение объяснить компьютеру, что нужно делать при выборе пункта Синий. Для этого подойдет оператор
Forml.BackColor = vbBlue
который красит форму в синий цвет.
Аналогично программируем пункт Зеленый. А сообщение о программе обеспечит оператор
MsgBox ("Программа создана в 2006 году")
Запустите проект и проверьте, как он работает.
Создадим простое приложение – цифровые часы, внешний вид которых показан ни рисунке. Часы должны показывать дату и время. Эта информация обновляется при щелчке по кнопке с надписью "Нажми". По нажатию на кнопку "Выход" форма скрывается с экрана.
Порядок выполнения работы.
1. Создайте новый проект и сохраните его под именем "часы".
2. Сделайте форму активной и установите значения свойств данного объекта:
Caption (заголовок) – Первое задание
Height (высота) - 3000
Width (ширина) - 3500
StartUpPosition (местоположение на экране при выводе) – 2 (CenterScreen)
3. Для вывода текущей даты и времени добавьте в форму элемент управления Label (надпись). Установите для этого объекта следующие значения свойств:

Caption (заголовок) – Дата и время
Font (шрифт) – Verdana, курсив, 14 (можно на свое усмотрение)
Alignment (расположение текста в поле) – 2 (выравнивание по центру)
Border Style – 1
4. Добавьте в форме кнопку для запуска программы, применив элемент управления CommandButton (кнопка). Установите значения свойств:
Caption (заголовок) – Нажми
Font (шрифт) – Verdana, жирный курсив, 12 (можно на свое усмотрение)
5. Добавьте в форме командную кнопку для закрытия формы, применив элемент управления CommandButton. Установите следующие значения свойств:
Caption (заголовок) – Выход
Font (шрифт) – Tahoma, обычный, 12 (можно на свое усмотрение)
Переходим к написанию программ для каждой кнопки.
6. В форме дважды щелкните на кнопке "Нажми", чтобы вывести заготовку программы, связанную с командной кнопкой.
Для каждого события, которое может произойти с объектом (в данном случае с командной кнопкой), предусмотрена соответствующая событийная процедура. Вот некоторые события, которые могут произойти с кнопкой управления:
Click – пользователь щелкнул на кнопке управления
MouseMove – пользователь перемещает указатель мыши на кнопку
MouseDown – нажатие на левую кнопку мыши
MouseUp – отпускание левой кнопки мыши
Мы должны щелкнуть по кнопке мыши, чтобы появились дата и время, поэтому выберем событие Click. Программа начинается с заголовка Private Sub (локальная процедура), и заканчивается предложением End Sub (конец процедуры). Между этими предложениями вставляется текст программы:
Label1.Caption = Now
где Label1 – это объект, Caption – свойство, Now – значение свойства.
7. Теперь запрограммируем кнопку "Выход". Для этого дважды по ней щелкните и вставьте следующую строку в программу:
Form1.Hide
где Form1- это объект, Hide – это метод.
8.
Для запуска программы выберите
Run
® Start,
или F5,
или кнопку
на панели
инструментов.
9. Сохраните проект.
В последующих заданиях используются всего три элемента управления: Надпись, Кнопка и Рисунок. Рассмотрим эти элементы и их основные свойства.
Label (Надпись)
Создается с помощью кнопки Label (Надпись) панели элементов управления. В основном Label используется для отображения надписей, например, заголовков, не имеющих свойства Caption. Надпись не может быть изменена пользователем, но код программы во время ее выполнения может управлять текстом надписи. Основные свойства этого элемента управления:
AutoSize – допустимые значения: True (устанавливается режим автоматического изменения размера поля так, чтобы весь вводимый текст помещался в нем) или False (устанавливается фиксированный размер поля)
Font – шрифт;
Font Style – стиль шрифта. Может быть ОБЫЧНЫМ (Regular), КУРСИВНЫМ (Italic), ПОЛУЖИРНЫМ (Bold) и ПОЛУЖИРНЫМ КУРСИВНЫМ (Bold Italic).
BackColor – цвет кнопки
Caption – текст, отображаемый в надписи
Alignment – расположение текста на объекте: 0 – выравнивание влево; 1 – выравнивание вправо; 2 – выравнивание по центру;.
Visible (видимый) – допустимые значения: True (поле отображается во время выполнения программы) или False (в противном случае)
Wordwrap - допустимые значения: True (устанавливается режим автоматического переноса) или False (в противном случае)
CommandButton (Кнопка)
Используется в основном для инициирования выполнения некоторых действий, вызываемых нажатием кнопки, например, запуск программы или остановка ее выполнения, печать результатов, вывод данных в форму и т.д. основные свойства элемента управления CommandButton:
Caption – текст, отображаемый на кнопке
Visible (видимый) – допустимые значения: True (кнопка отображается во время выполнения программы) или False (в противном случае)
ToolTipText - всплывающая подсказка.
Picture – Внедряет на поверхность кнопки картинку. Например: CommandButton1.Picture = LoadPicture ("c:\my_doc\Круг.bmp")
Cancel - допустимые значения: True (устанавливаются отменяющие функции для кнопки, т.е. нажатие клавиши <Esc> приводит к тем же результатам, что и нажатие кнопки) или False (в противном случае)
PictureBox (Рисунок)
Используется для отображения графических файлов. Картинку можно вставить только программным путем через свойства объекта. При помощи методов PictureBox можно печатать информацию прямо на картинке и рисовать по ней. Некоторые свойства, используемые для управления выводом изображения:
AutoSize – допустимые значения: True (рисунок автоматически изменяет размер для того, чтобы отобразить изображение целиком) или False (в противном случае)
BackColor – цвет фона. В том случае, если размер внедренного рисунка меньше области, которую вы нарисовали, цвет фона можно закрасить.
BorderStyle – допустимые значения: 0 – рамка вокруг рисунка отсутствует, 1 – рамка вокруг рисунка одинарная.
Picture (задает отображаемый графический файл) – надо указать полное имя отображаемого графического файла
1. Разработайте приложение "Обо мне", внешний вид диалогового окна показан на рисунке. В форме должны выводиться ваши любимые группа, кино и персонаж по нажатию на соответствующие кнопки в форме. По нажатию на кнопку "Выход" форма скрывается с экрана.

2. Измените диалоговое окно таким образом, чтобы каждый ответ выводился в отдельном окне. Один из вариантов представлен на рисунке.

3. Разработайте приложение "Обо мне 2", внешний вид диалогового окна показан на рисунке. В форме должны выводиться ваши фамилия, имя и дата вашего рождения, по нажатию на кнопку "Информация", для которой сделайте всплывающую подсказку. По нажатию на кнопку "Выход" форма закрывается. Для вывода рисунка в форме используйте элемент PictureBox.

2. Что такое проект?
3. Каков синтаксис команды присвоения значения свойству объекта?
4. Поясните назначение свойства Alignment.
5. Для чего служит окно Object Browser?
6. Для чего служат флажки, переключатели, список, поле со списком?
7. Можно ли изменять значения свойств надписи Caption при исполнении проекта?
8. Истинно ли утверждение: сетка на экранной форме, которая видна в режиме проектирования, также видна и при выполнении формы?
Как и любой другой язык, Visual Basic имеет свой алфавит. В него входят:
• прописные и строчные буквы латинского алфавита;
• прописные и строчные буквы кириллицы;
• цифры от 0 до 9;
• символ подчеркивания "_".
Из этих символов конструируются идентификаторы - имена переменных, констант, процедур, функций, меток переходов, а также имена типов. Кроме этих символов в состав алфавита также входят:
• неизображаемые символы (пробел, табуляция, переход на новую строку);
• специальные символы, участвующие в построении конструкций языка: +, - ,* ,/, \, ^, =, >, <, [, ], (,),.,:, {,},', &, @;
• составные символы, воспринимаемые как один символ: <=,>=, <>
Разделители в составных символах недопустимы.
Программа на VB – это последовательность операторов.
Для того чтобы сделать программу легко читаемой, используют комментарии (пояснения к тексту программы). Существует два способа ввода комментариев: применение апострофа ('), который можно поставить в любом месте строки, и зарезервированное слово Rem вместо апострофа. Например:
1) С помощью оператора REM:
REM произвольный_текст
2) С помощью апострофа’:
’ произвольный_текст
Иногда оператор получается такой длинный, что не умещается на экране. Перенос длинного оператора на другую строку осуществляется комбинацией пробела и подчеркивания. Например:
Результат.Text = Val(Число1.Text) _
+Val(Число2.Text)
Запись нескольких операторов в одной строке возможна, если разделить их двоеточием. Это приятно экономит место по вертикали экрана. Например:
А = 5 : В$ = "Символ Т" : rm = 1+exp(5.2)
Переменная содержит данные, которые могут изменяться в процессе выполнения программы. Данные бывают количественные и качественные.
Тип данных переменных показывает, данные какого типа позволяет сохранить переменная. Для представления количественных данных используют числа, а для описания качественных данных используется текстовое представление информации в виде символов. Принципиальное различие между этими двумя типами данных заключается в способах их обработки. С числовыми данными можно проводить арифметические операции. Для символьных данных существуют специальные функции обработки.
Типы данных
|
Тип |
Объем памяти (байт) |
Диапазон значений |
|
Byte (байт) |
1 байт |
Целые числа от 0 до 255 |
|
Integer (целое) |
2 байта |
От –32 768 до 32 767 |
|
Long Integer (длинное целое) |
4 байта |
Целые числа двойной длины от –2 147 483 648 до 2 147 483 647 |
|
Single (одинарной точности) |
4 байта |
Для отрицательных значений от –3,4Е38 до –1,4Е-45. Для положительных – от 1,4Е-45 до 3,4Е38 |
|
Double (двойной точности) |
8 байт |
Для отрицательных - от –1,79Е308 до –4,94Е-342. Для положительных – от 4,94Е-324 до 1,794Е308 |
|
Boolean (логический) |
2 байта |
True (Истина) или False (Ложь) |
|
Currency (денежный) |
8 байт |
От –992 337 203 685 477,5808 до 992 337 203 685 477,5807 |
|
Date (дата и время) |
8 байт |
От 1.01.100 до 31.12.9999 |
|
String (строка) |
1 байт на каждый символ |
От 0 до 2 млрд. символов |
|
Variant (универсальный числовой) |
16 байт |
Любое числовое значение из диапазона Double |
|
Variant (универсальный числовой) |
22 байта + 1 байт на символ |
Тот же диапазон, что и для строкового типа с переменной длиной |
В каждой системе программирования есть разделы описания данных. В языке VB описание данных начинается с оператора
DIM имя_переменной As тип_переменной
Например: Dim a As Single
Переводится: переменная а как десятичная дробь обычной точности
Имя переменной должно начинаться с буквы и может содержать буквы, цифры и другие символы. Имя не может содержать пробелы, точки, запятые, восклицательный знак (!) и символы @, &, $, #. Имя должно состоять не более чем из 255 символов.
Пример объявления переменных:
DIM A as Integer, B as Byte, C as String
Переменная А определена как целое число, которое должно быть не больше 32767 и не меньше –32768; переменная В определена как целое положительное число, которое должно быть не больше 255, а в переменной С может храниться текстовая информация.
Как мы можем задать значение той или иной переменной величине? Это можно сделать с помощью оператора присваивания:
Переменная (или свойство объекта) = Выражение
Эта команда выполняется в два шага:
1) Вычисляется значение выражения, указанного в правой части команды;
2) Это значение присваивается переменной, записанной в левой части команды.
Например:
А = 6*х + 3
Form1.BackColor = vbRed
Y = a + b + Form1.Width
Обратите внимание: тип переменной в левой части должен совпадать с типом выражения в правой части! И еще: слева от знака равенства не может стоять число или выражение!
Обратите внимание еще на один важный момент. Компьютер обязательно должен знать численные значения величин, входящих в выражение. Вычисляя правую часть оператора присваивания (например, y = a + b + 1), компьютер должен обязательно заранее знать, чему равны переменные, из которых эта правая часть состоит (a и b). Ответственность за это знание лежит полностью на программисте. Если же, значение переменной нигде ранее в программе не оговаривается, VB будет считать его равным нулю.
Оператор присваивания служит также для изменения значения переменных. Если в процессе выполнения программы переменной присваивается новое значение, то старое – стирается безвозвратно. Например, в результате выполнения командной строки
k=10 : k = 25 : k=4
в ячейке памяти k будет находиться 4. При выполнении следующей строки
f = 30 : f = f + 4
значение переменной f будет равно 34. Оператор f = f + 4 просто увеличивает число в ячейке f на 4.
Упражнение 2.1. Создайте небольшую программку:
Sub Form_Load ()
Dim Имя As String
Имя = InputBox("Введите Ваше имя")
MsgBox "Привет, " & Имя
End Sub
Запустите процедуру на выполнение. На экране появится окно ввода. Так работает оператор InputBox. Впишите в текстовое поле свое имя и нажмите клавишу <ОК>. Окно ввода закроется и на экране появится окно сообщения MsgBox, содержащее Ваше имя.
Можно не указывать тип переменных в операторе DIM, тогда VB применит тип данных по умолчанию – Variant. С одной стороны это удобно, но вы должны определять тип данных по нескольким причинам:
· Экономия ресурсов памяти. Ни один тип не требует 16 или 22 байта для сохранения значений переменных.
· VB по разному обрабатывает данные разных типов. Поэтому, не объявляя тип данных, вы можете получить результат, отличающийся от ожидаемого.
· Время выполнения процедур VB зависит от типов данных.
Чтобы по нашей человеческой рассеянности какая-нибудь переменная не проскочила в программу необъявленной, поручим VB выдавать соответствующее сообщение при нашей попытке запустить проект с необъявленными переменными: [Tools ® Options ® Editor ® Require Variable Declaration]. Отныне в коде любого создаваемого вами проекта будет появляться строка Option Explicit, что означает требование обязательно объявлять переменные этого проекта.
Упражнение 2.2. Создадим пользовательскую форму, в которой будет выводиться время начала и окончания работы одной и той же программы, но:
- в первом случае типы переменных в этой программе не будут объявляться;
- во втором случае типы переменных мы объявим.
1. Создайте пользовательскую форму с именем "Проверка типов" по образцу.

2. Напишите программу для кнопки "Запуск программы":
Sub Command1_Click ()
Dim Начало_работы_процедуры
Dim Окончание_работы_процедуры
Dim I, k
Начало_работы_процедуры = Time
For I = 1 To 10000000
k = k + 1
Next I
Окончание_работы_процедуры = Time
Label2.Caption = Начало_работы_процедуры
Label4.Caption = Окончание_работы_процедуры
End Sub
В этой программе мы используем новую функцию Time, которая определяет текущее время; а также оператор цикла, в котором значение переменной изменяется (увеличивается) от 1 до 10000000.
3. Запустите программу. Подождите несколько секунд, пока не появится результат. Обратите внимание на разницу во времени от начала до конца выполнения процедуры.
4. Отредактируйте текст программы, указав типы переменных.
Sub Command1_Click ()
Dim Начало_работы_процедуры as Date
Dim Окончание_работы_процедуры as Date
Dim I As Long, k As Long
Начало_работы_процедуры = Time
For I = 1 To 10000000
k = k + 1
Next I
Окончание_работы_процедуры = Time
Label2.Caption = Начало_работы_процедуры
Label4.Caption = Окончание_работы_процедуры
End Sub
5. Запустите программу. Сделайте выводы.
Как вы уже узнали, переменные используются для хранения данных, которые могут изменяться в процессе выполнения процедуры. Если надо хранить постоянную информацию, не изменяющуюся при выполнении процедуры, то применяются константы. Для объявления констант и их значений используется следующий оператор:
CONST имя_константы As тип_данных = значение
При объявлении констант используются те же типы данных, что и при объявлении переменных. Пример:
CONST Годы_учебы As Byte = 11
Переменные и константы можно объявлять в двух местах:
- внутри процедуры;
- в верхней части модуля, которая называется областью общих объявлений
Область объявления переменных определяет область их видимости. Если переменные объявлены в процедуре, то только эта процедура их видит и знает. Другие процедуры не могут использовать эти переменные и их значения. Такие переменные называются локальными (private), т.к. они определены (локализованы) в конкретной процедуре.
Если вы хотите, чтобы значения определенных переменных и констант были доступны всем процедурам данного модуля, для этого надо их объявлять в области общих объявлений модуля. Тогда все процедуры, определенные в данном модуле, могут использовать эти переменные и константы. Такие переменные и константы видимы на уровне модуля.
- Существует еще третий уровень видимости, который называется глобальным (public).
Переменные и константы этого уровня видимости можно использовать в любой процедуре любого модуля вашего приложения. Применение глобальных переменных очень эффективно во многих практических ситуациях, но необходимо знать, что они находятся в памяти компьютера все время выполнения приложения и, следовательно, потребляют системные ресурсы. Для создания глобальных переменных используется оператор Public, который имеет следующий синтаксис:
Public имя_переменной As тип_данных
Для объявления глобальной константы применяется оператор вида
Public Const имя_константы As тип_данных = значение
В программах можно использовать стандартный набор операций над данными. Имеются три основных типа операций:
· Математические операции, выполняются над числами;
· Операции отношения;
· Логические операции
К математическим операциям относятся операции: сложения (+), вычитания (-), умножения (*), деления (/), целочисленного деления (\), остаток от деления по модулю (MOD), возведения в степень (^).
К операциям отношения относятся операции: меньше (<), больше (>), меньше или равно (<=), больше или равно (>=), не равно (<>), равно (=).
К основным логическим операциям относятся операции: логического умножения (AND, И), логического сложения (OR, ИЛИ), логического отрицания (NOT, НЕ) и др.
В VB имеется большой набор встроенных функций, которые разделяются на категории. Примеры наиболее распространенных функций приведены в ПРИЛОЖЕНИИ 2.
Из констант, переменных и встроенных функций, с помощью скобок и знаков арифметических операций можно составлять арифметические выражения. Частным случаем выражения может быть просто одиночный элемент, т.е. константа, переменная или обращение к встроенной функции. Например:
· Y
· 21
· (a + b)*c
· sin(t)
· Int (Rnd*100) + 1
Функция генерации случайных чисел Rnd – это функция, которую мы часто будем применять в работе. Функция генерирует числа между 0 и 1. Функция Int возвращает целую часть аргумента (в данном случае – произведение случайного числа на 100 и отбрасывает дробную часть аргумента). Результат – числа от 1 до 100.
Функция MsgBox (Окно сообщений) служит для организации диалоговых окон, содержащих какие-либо сообщения.

После появления на экране, окно сообщений ждет, пока пользователь щелкнет на одной из кнопок, присутствующих в окне. Синтаксис этой функции следующий:
MsgBox (Текст [, Кнопки] [, Заголовок])
где:
Текст – единственный обязательный аргумент этой функции. Значением этого аргумента является строка текста, которая появляется как сообщений в диалоговом окне. Эта строка текста должна быть заключена в кавычки. Текст может содержать до 1024 символов. Использование круглых скобок в синтаксисе MsgBox указывает на то, что в данном случае MsgBoxявляется функцией, возвращающее какое-либо значение. Если скобки опущены, то для VB это признак того, что данное выражение значение не возвращает.
Кнопки – это аргумент, который является целым числом и может быть представлен как сумма двух слагаемых: Кнопки = Опция1 + Опция2. Если не указан аргумент Кнопки, то VB предполагает, что в диалоговом окне сообщения присутствует только кнопка ОК. Аргумент Кнопки позволяет управлять следующими параметрами окна сообщения:
· Количество кнопок в окне;
· Типы кнопок и их размещение в окне:
· Пиктограмма, отображаемая в окне.
Значение Опция1 устанавливает число и тип кнопок в Окне сообщения. Значение Опция2 определяет вид сообщения и пиктограмму, которая помещается в Окно сообщения.
|
Значения Опция1 |
Набор кнопок |
|
Значения Опция2 |
Вид сообщения |
Пиктограмма |
|
0 |
ОК |
|
16 |
Критическое сообщение |
|
|
1 |
ОК, Отмена |
|
32 |
Вопрос |
|
|
2 |
Стоп, Повтор, Пропустить |
|
48 |
Предупреждение |
|
|
3 |
Да, Нет, Отмена |
|
64 |
Информация |
|
|
4 |
Да, Нет |
|
|
|
|
|
5 |
Повтор, Отмена |
|
|
|
|
Для создания конечного значения аргумента Кнопка можно использовать только одно значение из каждой опции, сложив их значения.
Заголовок позволяет задать текст, помещаемый в строке заголовка диалогового окна сообщения.
Примеры Окон сообщений представлены на следующем рисунке.
|
|
|
|
MsgBox "Нужно ли продолжать игру?", 36, "Вопрос" |
MsgBox "Неверно, у вас еще одна попытка", 48, "Предупреждение" |
|
|
|
|
MsgBox "Поздравляю Вас!", 64, "Информация" |
MsgBox "Ошибка! Работа программы прерывается", 17, "Критическое сообщение" |
Мы рассматриваем MsgBox как функцию, это подразумевает, что она должна возвращать значение. В таблице представлен список значений, возвращаемых функцией MsgBox. Возвращаемое значение зависит от того, на какой кнопке щелкнул пользователь в окне сообщения.
|
Значение |
Нажатая кнопка |
|
Значение |
Нажатая кнопка |
|
1 |
ОК |
|
5 |
Пропустить |
|
2 |
Отмена |
|
6 |
Да |
|
3 |
Стоп |
|
7 |
Нет |
|
4 |
Повтор |
|
|
|
Функция InputBox (Окно ввода) применяется для ввода чисел или текста. Эта функция отображает диалоговое окно ввода, содержащее поле ввода и поясняющий текст:
Переменная = InputBox (Приглашение [, Заголовок] [, НачЗначение])
где:
Переменная – строковая переменная, в которой хранится значение, возвращаемое функцией InputBox();
Приглашение – это любой текст, который должен находиться в Окне ввода. Его назначение – сообщить пользователю, какую информацию он должен ввести в специальное поле ввода, находящееся в этом окне.
Заголовок – это надпись в строке заголовка Окна ввода.
НачЗначение – это значение, которое будет отображаться (по умолчанию) в поле ввода, пока пользователь не введет свое значение. Если этот аргумент опустить, то поле ввода отображается пустым.
Возвращаемым значением данной функции является информация, вводимая пользователем. Возвращаемое значение можно использовать в окнах сообщений, применить в вычислениях и т.д. VB автоматически приписывает этой информации тип Variant. Например:
X = InputBox ("Введите число", "Какое число задумал компьютер?")

Если надо объединить несколько текстовых строк в одну, используется символ конкатенации & (амперсенд). С помощью амперсенда можно объединять и числовые значения. При этом числа сначала будут преобразованы в строки. Результат тоже будет строкой.
Упражнение 2.3.
Пример объединения строк показан на примере небольшой программы расчета площади прямоугольника. Стороны прямоугольника вводятся через окна ввода. Результат выполнения программы выводится через окно сообщений

Sub Form_Load ()
Dim Storona1 As Single, Storona2 As Single, Rezultat As Single
Storona1 = InputBox("Введите первую сторону прямоугольника", "Площадь_ прямоугольника")
Storona2 = InputBox("Введите вторую сторону прямоугольника", "Площадь_ прямоугольника")
Rezultat = Storona1 * Storona2
MsgBox "Площадь прямоугольника = " & Rezultat & " квадратных_ сантиметров"
End Sub
Для отображения выходных данных программы в форме или на принтере может быть использована команда Print. Эта команда имеет следующий синтаксис:
Print выражение
где выражение может быть свойством, текстовым или числовым значением в процедуре, списком переменных.
В последнем случае в качестве разделителей элементов в списке можно использовать запятую или точку с запятой. При использовании точки с запятой элементы располагаются вплотную друг к другу, а при использовании запятой отделяются длиной поля табуляции. Текстовые переменные заключаются в кавычки.
Для того чтобы отправить данные на подключенный принтер, нужно использовать команду Print для объекта Printer.
Можно пользоваться оператором Debug.Print, который выводит результат в услужливо возникающем окне Immediate. Например:
Debug.Print t, n, z
С помощью этого оператора можно форматировать результат в нужном для вас виде. Например, рассмотрим фрагмент программы:
а = 2457642345034.78 : b = 0.00000000037645 : y = a/b: Debug.Print y
Прикиньте без компьютера, каков будет результат. Ясно, что очень большое число. Вот оно: 6,52846950467467Е+21.
VB, видя, что вы работаете с очень большими (маленькими) числами, представляет результат в экспоненциальном формате. Все, что стоит слева от Е, нужно умножить на 10 в степени, которая указана после Е.
Если вы не хотите видеть числа в таком формате, вы можете приказать компьютеру показывать результат в нормальном виде. Для этого в операторе Debug.Print нужно вместо y написать Format (y, "0.0000"). Это означает, что вы хотите видеть дробную часть, состоящую из 4 цифр, а целую часть VB вам покажет в любом случае. Вот результат: 6528469504674670000000,0000.
Определите длину окружности С и площадь S круга, ограниченного этой окружностью, если радиус равен R. Определите удаление L центра окружности от начала координат O. Координаты центра окружности равны X и Y. Разработайте диалоговое окно для ввода исходных данных и вывода результатов. В диалоговом окне расположите рисунок задания. Рисунок подготовьте в графическом редакторе MSPaint и сохраните в своей папке. При подготовке рисунка установите следующие размеры: высота – 250 точек, ширина – 200 точек. Для установки атрибутов рабочего поля в MSPaint требуется выполнить команду меню графического редактора [Рисунок - Атрибуты].

Порядок выполнения работы.
Создайте новый файл. В этой задаче мы используем элемент управления TextBox. Через эти текстовые поля мы будем вводить исходные данные, а выводить результаты будем, используя элемент управления Label, так как в этом поле нельзя исправить выведенный результат.
· Для отображения рисунка при построении используется элемент управления Image1.
· Для ввода значения X используется текстовое поле – TextBox1.
· Для ввода значения Y используется текстовое поле – TextBox2.
· Для ввода значения R используется текстовое поле – TextBox3.
· Для вывода длины окружности С используется надпись – Label10.
· Для вывода площади круга S используется надпись – Label11.
· Для вывода удаления центра L используется надпись – Label12.
Расчет и вывод результатов должен осуществляться по нажатию на кнопку "Запуск" в форме. Программа для кнопки "Запуск":
Sub Command1_Click ()
'Объявление переменных
Dim R As Single, X As Single, Y As Single, C As Single, S As Single, _
L As Single, Pi As Single
Pi = 3.14
'Преобразование данных считанных из текстовых полей в числовые
X = Val(Text1)
Y = Val(Text2)
R = Val(Text3)
'Вычисление значений
C = 2 * Pi * R
S = Pi * R * R
L = Sqr(X ^ 2 + Y ^ 2)
'Вывод результатов
Label10.Caption = Str(C)
Label11.Caption = Str(S)
Label12.Caption = Str(L)
End Sub
Разберем программу.
Первая строка – отзыв кнопки Command1 на щелчок мыши.
Объявление переменных
В программе все переменные мы объявили как Single, т.е. вещественные одинарной точности, т.к. предполагается, что координаты центра окружности и радиус должны быть не только целыми, но вещественными. Результаты тоже будут вещественными.
Преобразование данных считанных из текстовых полей в числовые
Поля TextBox при вводе хранят данные символьного типа, т.е. координаты центра окружности и радиус – это символы, но в дальнейшем эти данные должны участвовать в вычислениях, поэтому необходимо преобразовать их в числа, с помощью функции Val и присвоить числовые значения переменным X,Y и R
Вычисление значений
В этих строках вычисляются длина окружности – С, площадь круга – S, удаление центра окружности от начала координат – L.
Вывод результатов
Вычисленные значения хранятся в числовом формате. Для вывода результатов в текстовые поля преобразуем их в символы, применив функцию преобразования форматов Str.
Далее напишите программу для кнопки "Выход". По нажатию на эту кнопку форма должна скрываться с экрана.
1.
Создайте приложение вычисления периметра и площади треугольника. Площадь
треугольника
S
рассчитывается по формуле Герона: Р=(А+В+С)/2;
,
где А, В, С – стороны треугольника, Р – полупериметр треугольника.
Разработайте диалоговое окно для ввода исходных данных и вывода результатов. В диалоговом окне расположите рисунок задания. Напишите программу для кнопки "Выход". По нажатию на эту кнопку форма должна скрываться с экрана.
2. Пусть экранная форма вашего приложения содержит три текстовых поля и командную кнопку "Пуск". После нажатия на эту кнопку последовательно появляются Окна для ввода (см. рис.) вашей фамилии, имени и отчества. После ввода данных все три текстовых поля пользовательской формы должны быть заполнены.
|
|
|
|
|
|
После ввода данных все три текстовые поля будут заполнены. Экранная форма примет вид:

3. Дополните программу таким образом, чтобы введенная информация отображалась как в экранной форме, так и в окне вывода.

4. Разработайте приложение вычисления объемов цилиндра и конуса, которые имеют одинаковую высоту Н и одинаковый радиус основания R. Разработайте диалоговое окно для ввода исходных данных и вывода результатов. В диалоговом окне расположите рисунок задания. Объем цилиндра вычисляется по формуле V = pR2H, а объем конуса – по формуле V = 1/3pR2H, где p = 3,14.

5. Подошло время провести ремонт вашей комнаты – оклеить стены новыми обоями. Необходимо вычислить площадь стен комнаты и посчитать нужное количество необходимых для ремонта материалов – рулонов обоев. Разработайте приложение для ввода исходных данных и вывода результатов. В диалоговом окне расположите рисунок задания.
Напишите программу для кнопки "Выход". По нажатию на эту кнопку форма должна скрываться с экрана.

Измените созданное выше приложение с учетом площади дверей и окон, которые обоями оклеивать не нужно.
6. Создайте приложение для нахождения суммы цифр заданного трехзначного целого числа k.
7. Создайте приложение для нахождения произведения цифр заданного четырехзначного числа n.
8. Создайте приложение Калькулятор, которое должно выполнять функции простейшего калькулятора (выполнять четыре арифметических действия). Работа приложения заключается в следующем. После появления диалогового окна в текстовые поля можно вводить числа, а по нажатию на одну из кнопок арифметических действий происходит вычисление, и результат отображается в одноименном текстовом поле. По нажатию на кнопку "Очистить" происходит стирание значений в текстовых полях. Сохраните проект.

9. Создайте приложение для подсчета количества дней, прошедших с начала третьего тысячелетия. Форма при запуске не имеет ни одной надписи и выгладит следующим образом:

После нажатия на кнопку "Выполни" внешний вид формы преображается:

10. Создайте приложение для подсчета количества дней, прошедших со дня вашего рождения. В форме предусмотрите текстовое поле для ввода даты своего рождения.
11. Создайте приложение для вычисления значений функции. В текстовые поля вводятся значения аргументов. При нажатии на кнопку «Старт» в поле «Результат» появляется значение функции.
|
Вариант |
Функция |
Тестовые значения аргументов |
|
1 |
|
x = 1,7; c = 2,1; m = 0,7 |
|
2 |
|
x = 1,7; a = 0,5; b = 1,08 |
|
3 |
|
x = 0,3; a = 0,5; b = 2,9 |
|
4 |
|
x = 0,3; a = 0,5; b = 2,9 |
|
5 |
|
x = 1,4; a = 0,5; b = 3,1 |
|
6 |
|
x = 1,4; a = 0,5; b = 3,1 |
|
7 |
|
x = 0,61; a = 0,3; b = 0,9 |
|
8 |
|
x = 0,61; a = 0,3; b = 0,9 |
|
9 |
|
x = 2,2; a = 10,2; b = 9,2 |
|
10 |
|
x = 2,2; a = 10,2; c = 0,5 |
2. Переменную какого типа необходимо использовать для хранения целых чисел из диапазона от 0 до 100?
3. Какое максимальное количество символов можно использовать при задании имен процедур, переменных и констант?
4. Истинно или ложно следующее утверждение: имя процедуры может начинаться с числа?
5. Какую функциональную клавишу следует нажать для выполнения процедуры в редакторе Visual Basic?
6. Где объявляют глобальные переменные?
7. Истинно или ложно следующее утверждение: константы можно определить только в процедуре?
8. Объявите переменную Name как строковую.
9. Верно ли указаны имена переменных: Кол#дней; 5Клеток; Фамилия_Имя; Оценки; Названия&Предметов ?
10. Где можно применять окна сообщений?
11. Как можно объединить несколько строк?
12. Какой тип данных возвращаемого значения окна сообщений?
13. Что можно делать со значением, возвращаемым функцией InputBox?
14. Какие установки можно задать для окна сообщений с помощью аргумента Кнопки?
15. Какие значения имеют слагаемые Опция1 и Опция2 аргумента Кнопки функции MsgBox в следующем примере:

16. Укажите старшинство выполнения операций при вычислении арифметического выражения.
17. Как задать тип переменной в программе?
18. Назвать последовательность действий при выполнении арифметического оператора присваивания. Допустимо ли использование величин разных типов в арифметическом выражении?
“Штатная” работа программы – последовательное исполнение команд действия в порядке их расположения в исходном тексте. Очень часто в зависимости от некоторых условий нам приходится изменять последовательность выполнения команд действия.
Выбор (ветвление) в Visual Basic осуществляют в основном 3 оператора:
· безусловный переход GOTO
· условный переход IF...THEN...ELSE
· множественный выбор (переключатели) SELECT CASE
Оператор безусловного перехода предназначен для задания перехода на указанную строку внутри программы:
GOTO номер_строки или метка
По этой команде управление безусловно передается команде, помеченной номером строки или меткой. Метка – набор символов, начинающийся с буквы, может содержать любое количество букв и цифр и должен заканчиваться двоеточием. Например:
IF IsNumeric(Text1.Text) = False THEN GOTO Ошибка
. . .
Ошибка: MsgBox "Ошибка при вводе чисел!"
В приведенном примере выполняется проверка введения числа в поле ввода номер один. Если введено не число, то осуществляется переход на строку с меткой Ошибка, и на экран выводится сообщение.
Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие:
Если условие истинно, то выполняется блок_команд_1, в противном случае выполняется блок_команд_2.
Например:
'Если А больше или равно В, то удваивается значение числовой переменной А, а если А меньше В, удваивается значение числовой переменной В
If A>=B Then A=A*2 Else B=B*2
Допускается также использование формы синтаксиса в виде блока:
блок команд_1
[ELSEIF условие_2 THEN
блок команд_2
. . .
[ELSE
блок команд_n ]…]
END IF
Пример. Рассчитаем сумму, которую должен заплатить клиент за сеанс игры в большой теннис. Если клиент постоянный, то ему предоставляется скидка 5 %. Флажок номер один фиксирует клиент постоянный или нет. Стоимость одного часа составляет 600 руб. Сеанс может длиться несколько часов.
'Сумма – оплата за сеанс
'Стоимость сеанса хранится в переменной Стоимость
'Часы – указывают, сколько длился сеанс
If Form1.CheckBox1.Value = True Then
Сумма=Стоимость*Часы – Стоимость*Часы*0.05
ELSE Сумма = Стоимость*Часы
END IF
Переключатель позволяет сделать выбор из нескольких альтернативных вариантов в зависимости от значения условного выражения:
SELECT CASE Выражение
CASE Значение_1 'Оператор, выполняемый при совпадении _
Значения_1 и значения Выражения
CASE Значение_2
…
CASE Значение_N
В операторе Select Case можно использовать операции отношения. Для этого надо включить в выражение ключевое слово Is или ключевое слово То. Ключевое слово Is дает указание компилятору сравнить значение проверяемой переменной со значением выражения, следующего за ключевым словом Is. Ключевое слово То задает диапазон значений. Например, нижеприведенный код фрагмента программы, использующий оператор Select Case, позволяет выставить оценку исходя из общего количества набранных баллов:
Select Case ПравильныйОтвет.Text
Case 8 То 10 'Если сумма баллов в диапазоне 8-10
Балл.Text = «Отлично»
Case 6 To 7 'Если сумма баллов в диапазоне 6-7
Балл.Text = «Хорошо»
Case 4 То 5 'Если сумма баллов в диапазоне 4-5
Балл.Text = «Удовлетворительно»
Case Is < 4 'Если сумма баллов меньше 4
Балл.Text = «Неудовлетворительно»
End Select
Упражнение 3.1.
Составим программу «Угадай число», в которой компьютер играет с пользователем в следующую игру: компьютер «Задумывает» целое число (допустим, одну из пяти цифр – от 1 до 5); пользователь пытается угадать это число. Если ему это удается, появляется сообщение об успехе пользователя. В диалоговом окне предусмотрено текстовое поле для ввода числа игрока, угадывающего число компьютера. Вывод сообщения о неудаче происходит через окно вывода сообщений. Примерный вид графического интерфейса представлен на рисунке.

При решении этой задачи могут возникнуть определенные трудности. Давайте вспомним, что такое процедура и программный модуль.
Процедура – это программа, привязанная к определенному событию.
Программный модуль – это совокупность процедур.
Приложение (проект) – это совокупность модулей.
Мы знаем, что все те программы, которые мы до сих пор составляли, начинаются с ключевого слова Private Sub.
Слово Sub - это сокращение слова subroutine – подпрограмма. В языке VB так обозначаются любые процедуры. Слово указывает на то, что мы имеем дело с так называемой локальной процедурой. Локальная процедура доступна только внутри данного модуля и не может быть вызвана из других модулей приложения.
То есть применительно к нашему заданию получается, что компьютер “задумывает” число по нажатию на кнопку «Старт» и в этой же процедуре задуманное число присваивается какой-то переменной. Но данная процедура локальная и поэтому переменная с задуманным числом доступна только внутри этой процедуры. Пользователь же вводит угадываемое число в текстовое поле после нажатия на кнопку «Старт». Это число присваивается другой переменной, которая доступна только в своей локальной процедуре. Возникает вопрос: как же эти две переменные сравнить?
Мы знаем, что для объявления переменных внутри локальных процедур используется ключевое слово Dim. Для объявления же глобальных переменных (это переменная, которая может использоваться в разных модулях проекта) применяется слово Publiс. Поэтому текст программы будет выглядеть следующим образом.
Public N1 As Integer
Private Sub Command1_Click()
Randomize Timer
N1 = 1 + Int(Rnd * 5)
End Sub
Private Sub Command2_Click()
Dim N2 As Integer
N2 = Val(Text1.Text)
If N2 = N1 Then MsgBox "Поздравляю Вас! Вы угадали!", 64, "Результат"
End Sub
Сохраните проект.
Упражнение 3.2. Управление и перемещение элементов управления

При создании экранной формы объекту управления Image1 необходимо присвоить следующие свойства:
BorderStyle – 0
Picture – вызвать построитель и указать путь к рисунку. Рисунок можно взять в галерее пакета Microsoft Office,
Visible – True
Приведенная ниже программа позволяет реализовать описанные выше действия. Самостоятельно разберитесь в этой программе (используйте Приложение 3 в конце методички).
Private Sub Command1_Click()
If Image1.Top > 0 And Image1.Left > 0 Then
Image1.Move Image1.Left - 5, Image1.Top - 6
Else
Image1.Visible = False
End If
End Sub
Private Sub Command2_Click()
Image1.Height = Image1.Height + 3
Image1.Width = Image1.Width + 3
End Sub
Результат выполнения программы показан на рисунке.

Создадим приложение, имитирующее игровой автомат. Игра начинается по нажатию на кнопку "Играем". После нажатия появляются три одноразрядных десятичных числа. Если хотя бы одно из них равно 7, то вы выиграли, и появляется изображение стопки банкнот. Если же ни одно из трех выпавших чисел не равно 7, то изображение банкнот не появляется. Диалоговое окно данной задачи показано ни рисунке.
![]()

Выполнение работы.
1. Создайте на форме следующие элементы:
· Command1 – кнопка для начала игры;
· Command2 – кнопка для закрытия формы;
· Label1, Label2, Label3 – окна для вывода случайных цифр;
· Label4 – метка для названия игры;
· Label5 – метка для вывода фамилии и группы;
· Image1 – окно для вывода рисунка в случае выигрыша.
2. Установите значения свойств для первых трех надписей Label1, Label2, Label3. Свойства надписей будут одинаковые, поэтому задайте их для группы объектов. Одновременно выделите все три надписи. Для этого выделите первую надпись, а затем, удерживая нажатой клавишу Shift, выделите вторую и третью надпись. Три выделенных вами объекта образуют группу. Установите следующие значения свойств:
Font – Verdana, жирный, 24 (можно на свое усмотрение);
BorderStyle - 1
Alignment - 2
3. Установите значения свойств для надписей Label4 и Label5 самостоятельно.
4. Установите следующие значения свойств для рисунка Image1:
BorderStyle – 1;
Picture (задает отображаемый графический файл) – вызвать построитель и указать путь к рисунку;
Visible (видимость) – False (это свойство будет действовать в процессе выполнения программы, а не на стадии разработки);
Stretch (масштабирование рисунка) – True.
5. Напишите программу для кнопки Играть. Программа выполняет три задачи:
1) Скрывает стопку банкнот;
2) Создает три случайных числа для вывода в окнах надписей;
3) Показывает рисунок при появлении числа семь.
Каждый раз после щелчка на кнопке «Играем» выполняется программа:
|
Private Sub Command1_Click() |
Начало программы |
|
Randomize Timer |
Инициализация датчика случайных чисел. Используется для генерации различных значений при каждом новом запуске программы. |
|
Image1.Visible = False |
Скрыть рисунок. Установив свойство False, стираем рисунок, который может остаться от предыдущей игры. |
|
Label1.Caption = Int(Rnd*10) |
Эти три строки генерируют случайные числа между 0 и 1. Функция Int возвращает целую часть аргумента (в данном случае – произведение случайного числа на 10). Затем случайные числа присваиваются названиям первых трех надписей, после чего они появляются на экране в форме. |
|
Label2.Caption = Int(Rnd*10) |
|
|
Label3.Caption = Int(Rnd*10) |
|
|
If (Label1.Caption = 7) Or (Label2.Caption = 7) Or (Label3.Caption = 7) Then Image1.Visible = True |
В этой строке проверяется, нет ли семерок среди полученных трех случайных чисел. Если хотя бы одна семерка есть, деньги делаются видимыми. |
|
End Sub |
Конец программы |
6. Напишите программу для кнопки «Выход».
Вид законченного диалогового окна приведен ниже на рисунке.

1. Создайте приложение, в результате работы которого будет известно, принадлежит ли точка с координатами (X, Y) прямоугольнику с координатами (X1, Y1) и (Х2, Y2). Разработайте диалоговое окно для ввода исходных данных и вывода результатов. В диалоговом окне расположите рисунок задания.
2. Создайте приложение, в результате работы которого будет известно, принадлежит ли точка с координатами (X,Y) замкнутому кругу с радиусом R и с центром в начале координат. Разработайте диалоговое окно для ввода исходных данных и вывода результатов. В диалоговом окне расположите рисунок задания.
3. Найти наименьшее из трех чисел.
4. Переменной k присвоить номер четверти плоскости, в которой находится точка с координатами x и y. (xy¹0)
5. Используя встроенные диалоговые окна (InputBox и MsgBox) напишите программу, реализующую диалог компьютера с вами:
Компьютер: «Как Вас зовут?»
Пользователь: Name (вводит свое имя)
Компьютер: «Привет, Name» (введенное имя)
«Сколько Вам лет?»
Пользователь: ГГ (вводит число лет)
Если ГГ (число лет) < 20, то компьютер выдает сообщение «Уже немало, Name», в противном случае компьютер сообщает: «Вы прекрасно выглядите для своих ГГ лет»
6. Заданы три числа x, y, z. Если x<0, то Р задать как максимальное из y, z; если x³0, то Р задать как минимальное из y, z.
7. Ученик вводит с клавиатуры букву русского алфавита. Компьютер должен сказать, какой звук обозначает эта буква – гласный, согласный звонкий, согласный глухой или какой-нибудь другой.
8. Доработайте приложение «Калькулятор»:
· введите операцию возведения чисел в квадрат;
· предусмотрите проверку при делении на ноль;
· выводите сообщение об ошибке при делении на ноль в окне вывода;
· пусть при нажатии на клавишу вычитания, эта клавиша прыгает куда-нибудь совсем в другое место калькулятора и на ней вместо минуса появляется текст типа «Я устала вычитать!» или «Не трогай меня – я нервная!». При нажатии на клавишу «Очистить», клавиша вычитания скромно возвращается на место и принимает свой прежний вид.
9. Создайте приложение для нахождения корней линейного уравнения ax = b.
10. Создайте приложение для нахождения корней квадратного уравнения ax2 + bx + c = 0.
11. Определить, равна ли сумма двух первых цифр заданного четырехзначного числа сумме двух его последних цифр.
12. Определить, равен ли квадрат заданного числа кубу суммы цифр этого числа.
13. Заданы три числа a, b, c. Программа должна определить, можно ли построить треугольник из сторон длиной a, b, c.
14. Заданы три числа a, b, c, предположительно являющиеся длинами сторон треугольника. Определить, будет ли полученный треугольник прямоугольным.
15. Измените программу «Угадай число», в которой компьютер играет с пользователем в следующую игру: компьютер «задумывает» целое число (допустим, от 1 до 10); пользователь пытается угадать это число, но при этом компьютер должен подсказывать пользователю, какое число в следующей попытке ему вводить – больше или меньше предыдущего. Когда число будет угадано, должно появиться сообщение об «успехе» пользователя. Количество попыток не должно превышать трех. Если за три попытки число не было угадано, то должно выдаваться сообщение о том, что пользователь проиграл, а также должно выводиться в специально подготовленное текстовое поле число, которое «задумал» компьютер.
16. Во время летних каникул вы устроились работать на предприятие быстрого питания. По договору вы должны работать 5 дней в неделю. Количество рабочих часов в день не фиксировано, а оговаривается с администрацией предприятия. Разработайте форму и напишите программу, которая позволяет вводить для пяти дней недели количество часов, отработанных в эти дни (для каждого рабочего дня количество часов вводится с помощью окна ввода). Программа должна выводить в окно формы сообщение с суммарным количеством рабочих часов за неделю. Программа должна рассчитать недельную зарплату при условии почасовой оплаты. Предположим, что минимальная оплата рабочего часа составляет 6€. В форме предусмотрите окно для ввода оплаты рабочего часа и окно для вывода вашей недельной зарплаты. В программе предусмотрите пересчет вашей недельной зарплаты из евро в рубли, с учетом текущего курса евро. Для этого в форме подготовьте окна для ввода курса евро и вывода пересчитанной зарплаты.
17. Разработайте форму, через которую осуществляется ввод:
· названия покупаемого товара;
· количество покупаемого товара;
· цена товара за единицу.
Рассчитайте и выведите в этой же форме стоимость товара без скидки. Предположим, в магазине действует 5% скидка на товар, стоимость которого превышает 1000 рублей. В форме должен быть предусмотрен вывод скидки в рублях и вывод стоимости покупки с учетом скидки. В форме подготовьте кнопку для очистки всех полей с целью ввода новой информации.
18. Вам уже приходилось двигать изображение в Упражнении 3.2. Несколько изменим задачу:
а) заставьте изображение непрерывно плавно двигаться налево, вверх, вниз;
б) пусть непрерывно движущееся изображение через некоторое время остановится;
19. Создайте приложение для вычисления значений функции. В текстовые поля вводятся значения аргументов. При нажатии на кнопку «Старт» в поле «Результат» появляется значение функции. Сохраните проект.
|
Вариант |
Функция |
Условие |
Аргументы |
|
1 |
|
t < 0,1 t = 0,1 t > 0,1 |
a = 2,5 b = 0,4 |
|
2 |
|
|
a = 0,3 n = 10 |
|
3 |
|
i <4 4 £ i £ 6 i > 6 |
a = 2,1 b = 1,8 c = -20,5 |
|
4 |
|
x > 1 x £ 1 |
a = 0,9 |
|
5 |
|
x < 0,5 x = 0,5 x > 0,5 |
t= 2,2 |
Цикл - это оператор или группа операторов, которые программа выполняет многократно.
В Visual Basic существуют два основных типа циклов - циклы со счетчиком (с известным числом повторений) и циклы с условием. Циклы со счетчиком используют в тех случаях, когда необходимо выполнить некоторые действия определенное число раз. Циклы с условием применяются тогда, когда некоторые действия в программе должны повторяться до тех пор, пока выполняется определенное условие, или до тех пор, пока не будет выполнено определенное условие.
Циклы со счетчиком. Циклы со счетчиком (с известным числом повторений) в Visual Basic еще называют циклами For или циклами For ... Next. Так они называются потому, что начало и конец этих циклов определяются операторами For и Next. Синтаксис цикла For—Next таков:
For Счетчик=НачЗначение То КонечноеЗначение [Step Шаг]
операторы
[Exit For]
Next [Счетчик]
где:
· For - ключевое слово Visual Basic, обозначающее начало цикла;
· Счетчик - переменная, определенная в качестве счетчика цикла;
· НачалъноеЗначение - число, задающее начальное значение счетчика;
· То - ключевое слово Visual Basic, разделяющее НачЗначение и КонечноеЗначение;
· КонечноеЗначение - число, задающее значение счетчика, при котором цикл завершается;
· Step - ключевое слово Visual Basic, используемое для задания шага цикла, необязательный аргумент;
· Шаг - число, задающее шаг цикла, т.е. значение, на которое увеличивается (или уменьшается) значение счетчика на каждом шаге. Это число может быть отрицательным;
· Exit For - оператор досрочного выхода из цикла (необязательный);
· Next - ключевое слово Visual Basic, обозначающее конец цикла.
В начале цикла For ...Next определяется переменная-счетчик, а также начальное и конечное значения этой переменной. В самом начале выполнения цикла переменная-счетчик устанавливается в начальное значение. Каждый раз, когда программа, пройдя через цикл, возвращается к его началу, значение счетчика увеличивается. Если используется ключевое слово Step, то переменная-счетчик изменяется в соответствии с числом, указанным после этого слова. Например:
For I = 0 То 10 Step 2 'Значение I будет увеличиваться на 2
Если ключевое слово Step отсутствует, то значение шага равно единице.
Каждый раз, когда значение переменной-счетчика изменяется, оно сравнивается с заданным конечным значением счетчика. Если значение счетчика превышает конечное значение, программа сразу выходит из цикла и переходит к той строке кода, которая следует за циклом.
Цикл For . . . Next может быть прерван досрочно, например, при достижении какого-либо условия. Для этого в нужном месте цикла нужно поместить оператор Exit For,
Подсчитаем сумму четных чисел в промежутке от 1 до 50 с помощью оператора FOR…NEXT.
S = 0 ‘ начальное значение cуммы
FOR i = 2 TO 50 STEP 2
S = S + i
NEXT
PRINT “Сумма четных чисел S =”; S
После завершения цикла управление передается команде, следующей за NEXT.
С помощью FOR…NEXT можно организовать вложенные циклы – каждый со своим FOR, NEXT и счетчиком:
FOR i = …
FOR j =…
…
NEXT j
NEXT i
Циклы с условием. Главной особенностью циклов с условием является условие, которое может быть любым выражением, принимающим значение True или False. В Visual Basic есть два основных цикла Do ... Loop - с условием, вводимым ключевым словом While, и с условием, вводимым ключевым словом Until. Оба они могут быть с предусловием или с постусловием.
Циклы Do While | Until имеют следующий синтаксис:
|
Цикл с предусловием |
Цикл с постусловием |
|
|
Do While|Until Выражение Операторы Loop |
Do Операторы Loop While|Until Выражение |
|
где:
• Do- ключевое слово;
• While \ Until - ключевые слова, указывающие тип цикла;
• Выражение - выражение условия, принимающее значение True или False;
• Loop - ключевое слово, указывающее на окончание цикла.
Цикл Do While выполняется до тех пор, пока выражение условия имеет значение True.
Цикл Do Until выполняется до тех пор, пока выражение условия имеет значение False.
Подсчитаем сумму четных чисел в промежутке от 1 до 50 с помощью цикла DO…LOOP .
|
1) S = 0 : i = 2 DO WHILE i < = 50 S = S + i i = i + 2 LOOP PRINT “S =”; S
|
2) S = 0 : i = 2 DO UNTIL i > 50 S = S + i i = i + 2 LOOP PRINT “S =”; S
|
|
3) S = 0 : i = 2 DO S = S + i i = i + 2 LOOP WHILE i < = 50 PRINT “S =”; S
|
4) S = 0 : i = 2 DO S = S + i i = i + 2 LOOP UNTIL i > 50 PRINT “S =”; S
|
Иногда бывает необходимо прервать цикл Do ... Loop, если выполняется какое-либо дополнительное условие. Это может быть сделано с помощью оператора Exit Do:
Используя цикл с условием, можно организовать бесконечный цикл. Иногда это бывает необходимо, а порой это происходит из-за ошибки пользователя. Для создания бесконечного цикла условное выражение должно быть таким, которое никогда не выполнится или выполняется всегда. Выйти из такого бесконечного цикла и прервать работу программы можно, нажав комбинацию клавиш [Ctrl+Break].
Примерный вид программы:
Private Sub Form_Load()
v = 20: t = 0: h = 100: s = 0
Do
s = v * t
h = 100 - 9.81 * t ^ 2 / 2
Debug.Print Format(t, "0.0"), s, Format(h, "0.000")
t = t + 0.2
Loop Until h < 0
End Sub
В результате в окне Immediate должна появиться таблица значений t, s, h.
Каждому программисту известны такие слова, как счетчик, сумматор, вложенные циклы, и другие подобные понятия, описывающие элементарную технику программирования. Без них не обходится ни одна реальная программа, и если мы хотим идти дальше, то нам без них не обойтись. Рассмотри, как программировать типичные задачи, в том числе и те, что используют упомянутые понятия.
Вычислительная циклическая программа
Задача. Во дворце 40 залов. Известны длина, ширина и высота каждого зала. Вычислить площадь пола и объем каждого зала.
Сначала напишем фрагмент для одного зала:
X = InputBox (“Введите длину”)
Y = InputBox (“Введите ширину”)
Z = InputBox (“Введите высоту”)
S = X * Y ‘Площадь пола
V = S * Z ‘Объем
Debug.Print “Площадь пола =”; S, “Объем зала =”; V
Для решения задачи этот фрагмент нужно выполнить 40 раз, для чего вполне естественно использовать оператор For…Next:
Private Sub Command1_Click()
For i = 1 To 40
X = InputBox (“Введите длину”)
Y = InputBox (“Введите ширину”)
Z = InputBox (“Введите высоту”)
S = X * Y ‘Площадь пола
V = S * Z ‘Объем
Debug.Print “Площадь пола =”; S, “Объем зала =”; V
Next i
End Sub
Чтобы программа подходила для любого числа залов, нужно вместо
For i = 1 To 40
написать
N = InputBox(“Сколько залов во дворце?”)
For i = 1 To N
Роль ошибок
Мы знаем, что по ошибочной программе компьютер выдает ошибочные результаты. Например, если в нашей программе мы вместо V = S * Z напишем V = S + Z, то результаты будут такими:
Площадь пола=300 Объем зала=304
Площадь пола=600 Объем зала=605
Площадь пола=50 Объем зала=53
Если же случайно вместо For i = 1 To N написать For i = 2 To N, то результаты будут такими:
Площадь пола=300 Объем зала=1200
Площадь пола=600 Объем зала=3000
На этом программа закончит работу и не спросит размеров третьего зала. Вам не кажется странным, что она посчитала 1-ый и 2-ой залы, а не 2-ой и 3-ий? Если кажется, то учтите, что пользователь ничего не знает об ошибке в программе, а компьютер не говорит ему, размеры какого по счету зала ему нужно вводить.
Определите, что напечатает компьютер:
а) если строку For i = 1 To N поместить на три строки ниже, а именно перед строкой S = X * Y;
б) если поменять местами строки Debug.Print и Next.
Счетчики
Задача 1. В компьютер с клавиатуры вводятся числа. Компьютер после кода каждого числа должен напечатать, сколько среди них уже введено положительных чисел.
Фрагмент, решающий задачу:
с = 0 ‘Обнуляем счетчик
m: a = InputBox(“Введите очередное число”)
If a > 0 Then c = c + 1
Debug.Print “Из них положительных - ”, c
Goto m
Здесь мы используем переменную с, которая выполняет роль счетчика положительных чисел. Сердце счетчика – оператор с = с+1. Именно он в нужный момент увеличивает счетчик на 1. Но и без If a > 0 Then тоже никак нельзя. Если бы его не было, то с подсчитывал бы все числа без разбору, то есть был бы обычным счетчиком циклов. В нашем же фрагменте увеличение с на 1 выполняется не всегда, а лишь при положительном а.
В сложных программах не забывайте обнулять счетчик перед входом в цикл, а не то он начнет считать вам не с нуля, а бог знает с чего. Как бы вам понравилось, если бы таксист в начале поездки не обнулил счетчик?
В нашем фрагменте значения счетчика печатаются при каждом выполнении цикла. Изменим задачу.
Задача 2. В компьютер вводится ровно 200 чисел. Компьютер должен подсчитать и 1 раз напечатать, сколько среди них положительных чисел.
Программа:
Private Sub Command2_Click()
с = 0 ‘Обнуляем счетчик
For i = 1 To 200
a = InputBox(“Введите очередное число”)
If a > 0 Then c = c + 1
Next i
Debug.Print “Из них положительных - ”, c
End Sub
Путь рассуждений здесь тот же, что и в первой задаче. В результате применения оператора For тело цикла выполняется ровно 200 раз, благодаря чему счетчик с накапливает нужное значение. Оператор Debug.Print выполняется только 1 раз и печатает последнее накопленное значение, потому что в ячейке с будет находиться именно оно.
Определите самостоятельно, что будет, если:
а) вместо с=0 написать с=10;
б) вместо с=с+1 написать с=с+2;
в) строки Next и Debug.Print поменять местами;
г) строки с=0 и For поменять местами;
строки For и InputBox поменять местами.
В следующей программе мы используем уже 2 счетчика. Изменим задачу.
Задача 3. В компьютер вводится ровно 200 чисел. Компьютер должен подсчитать и 1 раз напечатать, сколько среди них положительных чисел и сколько нулей.
Программа:
Private Sub Command3_Click()
с_полож = 0 ‘Обнуляем счетчик положительных чисел
с_нулей = 0 ‘Обнуляем счетчик нулей
For i = 1 To 200
a = InputBox(“Введите очередное число”)
If a > 0 Then c_полож = c_полож + 1
If a = 0 Then c_ нулей = c_ нулей + 1
Next i
Debug.Print “Из них положительных - ”; c_полож, “Нулей -”; с_нулей
End Sub
Задача 4. В компьютер один за другим вводятся произвольные символы. Ввод заканчивается символом /. Подсчитать, какой процент от общего числа введенных символов составляют символ W и символ : по отдельности.
Здесь мы организуем 3 счетчика одновременно: cW – для подсчета букв W, cDv – для подсчета двоеточий, а также i – счетчик общего числа введенных символов, кроме /.
Программа:
Private Sub Command4_Click()
Dim a As Integer, cW As Integer, cDv As Integer
Dim procent_W As Integer, procent_Dv As Integer
Dim simvol As String
i = 0: cW = 0: cDv = 0 'Обнуляем все 3 счетчика
Do
simvol = InputBox("Введите символ ")
If simvol <> "/" Then i = i + 1 'Если это не /, то "посчитай" его
Select Case simvol
Case "W"
cW = cW + 1 ‘Если это W, то увеличь счетчик символов W
Case ":"
cDv = cDv + 1 ‘Если это :, то увеличь счетчик символов :
Case "/"
Exit Do ‘Если это /, то завершай работу цикла
End Select
Loop
procent_W = Round(100 * cW / i) ‘Вычисляй процент символов W
procent_Dv = Round(100 * cDv / i) ' Вычисляй процент символов :
Debug.Print procent_W, procent_Dv
End Sub
Сумматоры
Сумматор – это переменная величина, в которой вы подсчитываете сумму чего-либо. Если вы поняли идею счетчика, то понять идею сумматора вам будет нетрудно. Посмотрим, как будет работать следующий фрагмент программы:
s = 0 ‘Обнуляем сумматор
m: a = InputBox(“Введите очередное число”)
s = s + a ‘Увеличиваем сумматор
Debud.Print “Сумма = ”; s
Goto m
В ячейке s накапливается сумма вводимых чисел а, поэтому назовем эту ячейку сумматором. Отличие сумматора от счетчика в том, что счетчик увеличивается на 1 оператором с=с+1, а сумматор – на суммируемое число оператором s=s+a.
Задача. В компьютер вводится N чисел. Вычислить и 1 раз напечатать их сумму.
Программа:
Private Sub Command2_Click()
N = InputBox(“Сколько чисел будем складывать?”)
s = 0
For i = 1 To N
a = InputBox(“Введите очередное число”)
s = s + a
Next i
Debud.Print “Сумма = ”; s
End Sub
Пусть N = 2, а равно 5 и 3. Тогда по этой программе VB напечатает 8. Что он напечатает, если:
а) вместо s=0 написать s=10;
б) вместо s=s+a написать s=s+a+1;
в) строки Next и Debud.Print поменять местами;
г) строки s=0 и For поменять местами;
д) строки For и InputBox поменять местами;
е) строки s=s+a и Next поменять местами;
Вложение циклов в разветвления и наоборот
Реальная процедура на VB может представлять собой сложную мозаику из циклических и разветвляющихся частей, вложенных друг в друга. Для тренировки определите, что напечатает следующий фрагмент:
Private Sub Command1_Click()
For i = 1 To 5
a = 9
If i*i = a Then
For k = 5 To 8
Debug.Print k;
Next k
Else
Debug.Print 1997
End If
Next i
End Sub
Здесь внутрь For i = 1 To 5 вложен If i*i = a, а внутрь него вложен For k = 5 To 8. Ответ:
1997
1997
5 6 7 8 1997
1997
Вложенные циклы
Вложенные циклы, или цикл внутри цикла, - весьма распространенная конструкция при программировании.
Поставим себе задачу – напечатать таблицу умножения в таком виде:
|
2*2=4 |
2*3=6 |
2*4=8 |
2*5=10 |
2*6=12 |
2*7=14 |
2*8=16 |
2*9=18 |
|
3*2=6 |
3*3=9 |
3*4=12 |
3*5=15 |
3*6=18 |
3*7=21 |
3*8=24 |
3*9=27 |
|
4*2=8 |
4*3=12 |
4*4=16 |
4*5=20 |
4*6=24 |
4*7=28 |
4*8=32 |
4*9=36 |
|
5*2=10 |
5*3=15 |
5*4=20 |
5*5=25 |
5*6=30 |
5*7=35 |
5*8=40 |
5*9=45 |
|
6*2=12 |
6*3=18 |
6*4=24 |
6*5=30 |
6*6=36 |
6*7=42 |
6*8=48 |
6*9=54 |
|
7*2=14 |
7*3=21 |
7*4=28 |
7*5=35 |
7*6=42 |
7*7=49 |
7*8=56 |
7*9=63 |
|
8*2=16 |
8*3=24 |
8*4=32 |
8*5=40 |
8*6=48 |
8*7=56 |
8*8=64 |
8*9=72 |
|
9*2=18 |
9*3=27 |
9*4=36 |
9*5=45 |
9*6=54 |
9*7=63 |
9*8=72 |
9*9=81 |
Начнем с малого. Пусть нужно напечатать
2*2=4
Вот фрагмент_1 программы:
a = 2
b=2
proizv = a*b
Print a, “*”, b, “=”, proizv
Усложним задачу. Попробуем заставить компьютер напечатать первую строку таблицы:
|
2*2=4 |
2*3=6 |
2*4=8 |
2*5=10 |
2*6=12 |
2*7=14 |
2*8=16 |
2*9=18 |
Замечаем, что здесь нам нужно решить 8 элементарных задач на вычисление произведения. Первую из которых решает фрагмент_1. Все они очень похожи и различаются лишь значением второго сомножителя. Т.о., для решения каждой из восьми задач подошел бы наш фрагмент_1, если бы в операторе b=2 вместо двойки стояла нужная цифра. В данном случае идеально подходит оператор For.
Фрагмент_2:
a = 2
For b=2 To 9
proizv = a*b
Print a; “*”; b; “=”; proizv;
Next b
Следующая ступень усложнения – последняя – напечатать не одну строку таблицы, а восемь. Для этого фрагмент_2 должен быть выполнен 8 раз, каждый раз с новым значением а. Чтобы этого достичь, “обнимем” фрагмент_2 оператором For точно также, как мы обнимали фрагмент_1.
Фрагмент_3:
For а=2 To 9
For b=2 To 9
proizv = a*b
Print a; “*”; b; “=”; proizv,
Next b
Next а
В цикл добавили пустой Print, чтобы после окончания очередной строки печать начиналась с новой. А чтобы результаты были выровнены по столбцам, в конце оператора Print точку с запятой поменяли на запятую. Столбцы будут расположены на расстоянии 14 символов друг от друга. Желательно поменять шрифт (свойство Font) формы на Courier, потому что у этого шрифта в отличие от многих других символы имеют одинаковую ширину.
В целом программа иллюстрирует идею вложенных циклов. У нас тело внешнего цикла выполняется 8 раз, а тело внутреннего – 64 раза, т.к. на каждое выполнение внешнего цикла, внутренний выполняется 8 раз.
Поиск максимального из чисел
Задача программисту. Найти максимальное из вводимых в компьютер чисел.
Задача рыбаку. Принести домой самую большую из выловленных рыб.
Решение рыбака. Рыбак приготовил для самой большой рыбы пустое ведро. Первую пойманную рыбу рыбак не глядя бросает в это ведро. Каждую следующую рыбу он сравнивает с той, что в ведре. Если она больше, то он бросает ее в ведро, а ту, что была там раньше, выпускает в реку.
Решение программиста. Программист приготовил для самого большого числа ячейку и придумал ей название, скажем max. Первое число программист не глядя вводит в эту ячейку. Каждое следующее число (назовем его а) он сравнивает с max. Если оно больше, то он присваивает переменной max значение этого числа.
Напишем программу для определения максимального из N вводимых чисел:
Private Sub Command1_Click()
N = InputBox(“Введите количество чисел”)
max = InputBox(“Введите число”)
For i = 2 To N
a = InputBox(“Введите число”)
If a > max Then max = a
Next i
Debug.Print max
End Sub
1. Напечатать таблицу соответствия между весом в фунтах и весом в килограммах для значений 1, 2, …, 10 фунтов (1 фунт = 453 г.)
2. Напечатать таблицу перевода 1, 2, …, 20 долларов США в рубли по текущему курсу (значение курса вводится с клавиатуры).
3. Одноклеточная амеба каждые 3 часа делится на 2 клетки. Определить, сколько клеток будет через 3, 6, 9, …, 24 часа, если первоначально была одна амеба.
4. Вычислить сумму:
a) первых пятидесяти натуральных чисел;
b) всех целых чисел от -10 до В (значение В вводится с клавиатуры).
5. Вычислить произведение:
a) всех целых чисел от А до 20 (значение А вводится с клавиатуры, 1 £ А £ 20);
b) нечетных чисел от 1 до 21 включительно.
6. Вычислить среднее арифметическое:
a) всех целых чисел от 1 до 1000;
b) всех целых чисел от А до В (значения А и В вводятся с клавиатуры, А £ 200)
7. Вычислить факториал натурального числа n (n! = 1×2×3×…×n) .
8. Даны натуральное число n и целые числа a1, a2, … , an. Определить:
a) Сумму тех чисел, которые больше Р;
b) Произведение тех чисел, которые кратны трем;
c) Количество пар соседних чисел ai, равных между собой.
9. Ввести n чисел. Определить, сколько среди них положительных и отрицательных.
10. Ввести n положительных чисел. Найти
a) наибольшее из них;
b) наименьшее из них;
c) наибольшее и наименьшее из них.
11. Ввести n положительных чисел. Найти
a) Номер наибольшего из них. Если таких чисел несколько, то должен быть найден номер последнего из них.
b) Номер наименьшего из них. Если таких чисел несколько, то должен быть найден номер первого из них.
c) Номер наибольшего и номер наименьшего из них. Если таких чисел несколько, то должны быть найдены номера последних из них.
12. Ввести n чисел. Определить, сколько среди них превосходит первое число.
13. Начав тренировки, спортсмен в 1-ый день пробежал 10 км. Каждый следующий день он увеличивал дневную норму на 10 % от нормы предыдущего дня.
a) Определить пробег лыжника за второй, третий, …, десятый день тренировок.
b) Какой суммарный путь пробежал спортсмен за первые 7 дней ?
c) Через сколько дней спортсмен будет пробегать в день больше 20 км. ?
d) Через сколько дней спортсмен пробежит суммарный путь в 100 км.?
14. Известны данные о температуре воздуха в течение месяца. Определить, сколько было дней за месяц с самой низкой температурой.
15. Составить программу табулирования функции от одного аргумента (вычисление значений функции при изменении значения аргумента в заданном диапазоне с шагом Dx)
|
Вариант |
Функция |
Условие |
Исходные данные |
Диапазон и шаг |
|
1 |
|
t < 0,1 t = 0,1 t > 0,1 |
a = 2,5 b = 0,4 |
t Î [-1;1] Dt = 0,2 |
|
2 |
|
|
a = 0,3 n = 10 |
i Î [1;10] Di = 1 |
|
3 |
|
i <4 4 £ i £ 6 i > 6 |
a = 2,1 b = 1,8 c = -20,5 |
i Î [0;12] Di = 1 |
|
4 |
|
x > 1 x £ 1 |
a = 0,9 |
x Î [0,8;2] Dx = 0,1 |
|
5 |
|
x < 0,5 x = 0,5 x > 0,5 |
t= 2,2 |
x Î [0,2;2] Dx = 0,2 |
Графикой у компьютерщиков принято называть все то, что связано с рисунками и изображениями.
Средства VB, предназначенные для работы с графикой, позволяют помещать в форму графические изображения трех типов:
1. растровые графические изображения (картинки, фотографии и т.п.)
2. рисунки, создаваемые самим пользователем с помощью графических объектов управления Line и Shape.
3. рисунки, создаваемые пользователем с помощью графических методов VB.
Несколько слов о системе координат. В школе вы привыкли к такой системе координат, как на рисунке слева. А на экране компьютера применяется такая, как на рисунке справа. Как видите, ось y направлена вниз. Это не очень привычно.
|
|
|
Как управлять положением объектов на экране? Выделите любой объект на форме и загляните в его свойства Left и Top. Таким образом, для объектов на форме действует компьютерная система координат с началом в верхнем левом углу формы. Убедитесь в этом – потаскайте любой объект по форме, следя за значениями Left и Top. Добейтесь:
- нуля в одном свойстве;
- нуля в другом свойстве;
- нуля в обоих свойствах;
- максимума в одном свойстве;
- максимума в другом свойстве;
- максимума в обоих свойстве;
- минуса в одном свойстве;
- минуса в другом свойстве;
- минуса в обоих свойствах.
Единицей измерения расстояния в VB является твип. Это очень маленькая величина, и на пространстве экрана ее нельзя однозначно выразить в долях миллиметра. Ее значение зависит от разрешающей способности видеорежима. В твипах выражаются свойства Left, Top, Width и Height.
5.1. Загрузка готовых изображений
Добавить растровое изображение можно непосредственно в форму или в элементы управления PictureBox и Image. Для добавления изображения на форму нужно выполнить следующие действия:
1. Добавить в форму элемент PictureBox. В окне свойств выбрать «Picture» и указать нужный файл (с расширением bmp и т.д.). Для свойства AutoSize установить значение True. Тогда размеры окна Picture1 будут приведены к размерам рисунка.
2. Добавить в форму элемент Image. В окне свойств выбрать «Picture» и указать нужный файл (с расширением bmp и т.д.). Если для свойства Strech установить значение True, то картинка (любая, в т.ч. и растровая) подстроит свои размеры под размеры Image. Если для свойства Strech установить значение False, то - наоборот – объект Image подстраивает свои размеры под размеры картинки.
В VB существует возможность добавлять изображение в форму не во время проектирования, а во время выполнения программы. Это можно сделать с помощью функции LoadPicture(), которая имеет синтаксис:
MyPicture = LoadPicture(strFilePath)
где: MyPicture – имя элемента управления PictureBox или Image
LoadPicture – имя функции
strFilePath – строковая переменная, содержащая путь к графическому файлу и его имя.
Например: Form1.Picture = LoadPicture(“C:\TEMP\auto.bmp”)
Если у вас в проекте несколько объектов, имеющих свойство Picture, то картинку можно мгновенно «скопировать» с одного объекта на другой так:
Image4.Picture = Form1.Picture
Если вы хотите удалить картинку с объекта:
- в режиме проектирования вы должны буквально стереть значение свойства Picture из окна свойств;
- в режиме работы вы должны написать оператор такого вида: Form1.Picture = LoadPicture(“”)
Кроме свойства Picture, у кнопки, например, есть еще свойство DownPicture. Оно определяет картинку, которую мы видим, нажав кнопку и не отпуская ее.
5.2. Объекты Line и Shape
Создавать собственные рисунки в VB можно с помощью графических средств управления Line (отрезок) и Shape (фигура), которые находятся на панели элементов управления.
Средство управления Line позволяет создавать в форме прямые линии и оформлять их стиль путем установки значений для свойств этого объекта.
Средство управления Shape позволяет создавать в форме прямоугольники, квадраты, окружности и овалы в зависимости от значений свойства Shape (одинаковые названия у объекта и его свойства) и также оформлять их стиль путем установки значений для свойств этого объекта.
Наиболее важные свойства объектов Line и Shape:
|
Свойство |
описание |
значение |
Line |
Shape |
|
BackColor |
цвет фона |
|
- |
+ |
|
BackStyle |
стиль фона |
Целое число в диапазоне 0-1 |
- |
+ |
|
BorderColor |
цвет контура |
|
+ |
+ |
|
BorderStyle |
стиль линии – точечная, сплошная или пунктирная |
Целое число в диапазоне 0-6 |
+ |
+ |
|
BorderWidth |
толщина линии в пикселах |
Целое число в диапазоне 1-32767 |
+ |
+ |
|
FillColor |
цвет заливки |
|
- |
+ |
|
FillStyle |
тип заливки (текстура узора) |
Целое число в диапазоне 0-7 |
- |
+ |
|
Height |
высота объекта в твипах |
Целое число |
- |
+ |
|
Left |
положение левой границы объекта в твипах |
Целое число |
- |
+ |
|
Top |
положение верхней границы объекта в твипах |
Целое число |
- |
+ |
|
Visible |
видимость |
False - True |
+ |
+ |
|
Width |
ширина объекта в твипах |
Целое число |
- |
+ |
|
X1, Y1, X2,Y2 |
координаты крайних точек объекта |
Целые число |
+ |
- |
Изначально пространство внутри фигуры прозрачное. В этом легко убедиться, если на форму загружена какая-нибудь картинка. Предположим, вы хотите, чтобы пространство внутри фигуры было непрозрачным, а залито краской, или заполнено узором. Для этого нужно разобраться в устройстве фигуры. Удобно представлять, что фигура – это оконная рама со вставленными в нее двумя прозрачными стеклами. Одно стекло – подальше от наших глаз (здесь помещаются объекты Line, Shape, Image и метка), другое – поближе (здесь помещаются все неграфические объекты и PictureBox. Самый дальний слой – это сама форма со своей картинкой, текстом, изображениями, которые мы можем на ней получить при помощи ее методов). Прозрачностью дальнего стекла управляет свойство BackStyle, а цветом – свойство BackColor. На дальнем стекле узоров не бывает. Прозрачностью и узором ближнего стекла управляет свойство FillStyle, а цветом – свойство FillColor.
Метку тоже можно сделать прозрачной, если ее свойство BackStyle задать равным Transparent.
Если на форме несколько объектов частично перекрывают друг друга, то можно поменять порядок объектов:
- в режиме проектирования – выделить интересующий нас объект [Format – Order – “Bring to Front” (перенести на передний план) или “Send to Back” (отослать на задний план].
- в режиме работы – использовать метод ZOrder. Так, чтобы перенести на передний план текстовое поле: Text1.ZOrder (0),
а чтобы отослать его на задний : Text1.ZOrder (1).
5.3. Графические методы рисования
Методами для рисования различных геометрических фигур обладают два объекта: форма и PictureBox. Кстати, те, же, что обладают и методом Print, который с полным основанием тоже называют графическим.
Фигуры, изображенные методами вашей программы, нарисованы тонкими черными сплошными линиям без заливки внутренних областей. Чтобы управлять атрибутами фигур, есть 3 способа, которые вы можете применять поодиночке или вперемешку:
1) В режиме проектирования настроить соответствующие свойства объекта. Эти свойства воздействуют сразу на все методы.
2) В режиме работы в нужные моменты изменять эти свойства (этот способ бьет предыдущий, т.е. в случае конфликта пересиливает его настройки)
3) В самом методе можно задавать многие атрибуты рисуемой фигуры (этот способ бьет все остальные).
Свойства объектов, влияющие на графические методы:
DrawWidth – толщина линии
ForeColor – цвет линии
DrawStyle – стиль линии (сплошная, штриховая и т.п.)
FillStyle – стиль (узор) заливки и будет ли заливка
FillColor – цвет заливки
AutoRedraw – определяет, будет ли автоматически восстанавливаться графика и напечатанный текст, случайно стертые из-за того, что объект скрылся из виду.
DrawMode – способ наложения краски. По умолчанию значение равно 13, когда краска плотно накладывается и предыдущая картинка через нее не просвечивает. При других значениях новая краска меняет свой цвет или сложно взаимодействует со старой и иногда получается любопытный и полезный результат.
Метод PSet устанавливает цвет отдельного пиксела на экране:
Object.Pset [Step] (x,y), [Цвет]
где:
Object – имя объекта, к которому применяется метод. Если имя объекта опущено, то метод будет применен непосредственно к форме;
Step – ключевое слово, определяющее, что координата вычисляется от текущей позиции;
(x,y) –выражения или константы, определяющие координаты для установки цвета;
Цвет – длинное целое число, определяющее цвет отметки. Если опущено, то используется текущая установка свойства ForeColor
Для того чтобы очистить одиночный пиксел, необходимо закрасить его цветом фона, используя координаты пиксела и свойство BackColor.
Pset (1000, 2000) – рисуется точка цветом, определенным свойством ForeColor.
Pset (1000, 2000), vbRed – рисуется красная точка.
Метод Line служит для создания отрезков, прямоугольников, замкнутых многоугольников в объекте:
Object.Line [Step] (x1,y1), [Step] (x2,y2), [Цвет], [B] [F]
где:
(x1,y1) – координаты начальной точки изображаемой линии;
(x2,y2) – координаты конечной точки изображаемой линии;
Цвет – значение, устанавливающее цвет изображаемой линии или прямоугольника;
В – указывает, что изображается прямоугольник с заданными координатами верхнего левого и правого нижнего угла;
F – указывает, что прямоугольник заполняется цветом изображаемой линии. Использовать без В нельзя.
Line (2000, 1000)-(5000,3000), vbBlack – отрезок черного цвета
Line (2000, 1000)-(5000,3000), vbGreen, В – прямоугольник зеленого цвета
Line (2000, 1000)-(5000,3000), vbYellow, ВF – прямоугольник желтого цвета, залитый этим же цветом.
Line (2000, 1000)-(5000,3000), , В – прямоугольник, цвет которого определяется свойством ForeColor
Метод Circle отображает на объекте окружность, эллипс или дугу:
Object.Circle [Step] (x,y), Радиус, [Цвет, Начало, Конец, Сжатие]
где:
(x,y) – координаты центра окружности, эллипса или дуги;
Сжатие – отношение размера по оси Y к размеру по оси X.
Circle (4000, 2000), 1000, vbBlue – синяя окружность
Circle (4000, 2000), 1000, , 1, 3 – дуга окружности, начинающаяся от угла в 1 радиан и кончающаяся углом в 3 рад. (угол отмеряется против часовой стрелки)
Circle (4000, 2000), 1000, , -1, -3 – сектор круга, начинающийся от угла в 1 радиан и кончающаяся углом в 3 рад.
Circle (4000, 2000), 1000, , , 2 – эллипс, полученный из окружности радиусом 1000 горизонтальным сжатием в 2 раза.
Circle (4000, 2000), 1000, , , 1/3 – эллипс, полученный из окружности радиусом 1000 вертикальным сжатием в 3 раза.
Circle (4000, 2000), 1000, , 1, 3, 2 – дуга эллипса.
Circle (4000, 2000), 1000, , -1, -3, 2 – сектор эллипса.
Метод Cls просто стирает все нарисованное и напечатанное.
Метод Point (x,y) сообщает цвет любой точки на объекте.
Метод PaintPicture копирует с одного объекта на другой прямоугольный кусок изображения.
Задача. Пусть в объекты Picture1 и Picture2 загружены картинки. Взять прямоугольный кусок из картинки в Picture2 и вставить, немного сжав, в определенное место картинки в Picture1.
Решением является одна строка:
Picture1.PaintPicture Picture2.Picture, 500,100,600,800,4500,1000,900,1200
В объект Picture1 вставляется фрагмент из Picture2.Picture, причем левый верхний угол исходного изображения имеет координаты (4500,1000), его ширина – 900, высота – 1200. Левый верхний угол результирующего изображения имеет координаты (500,100), его ширина – 600, высота – 800.
Цвет в Visual Basic
Как до сих пор мы придавали цвет какому-нибудь элементу VB?
- В режиме проектирования мы устанавливали соответствующее свойство в окне свойств. Для этого в закладке Palette выбирали один из нескольких десятков цветов.
- В режиме работы пользовались операторами типа Form1.BackColor = vbRed.
Имеется всего 8 цветов, представленных этим способом:
|
vbBlack |
- черный |
|
vbRed |
- красный |
|
vbGreen |
- зеленый |
|
vbYellow |
- желтый |
|
vbBlue |
- синий |
|
vbMagenta |
- фиолетовый |
|
vbCyan |
- голубой |
|
vbWhite |
- белый |
Но в VB существует 16 млн. цветов с лишним (точнее, 16777216)! Мы должны научиться ими управлять. Есть несколько способов.
Так, цвет можно указывать просто числом от 0 до 16777215: Form1.BackColor = 12456743. Недостаток этого способа – по числу трудно угадать, что за цвет.
Второй способ. Вспомните, что любую краску можно получить, смешав в определенной пропорции красную (Red), зеленую (Green) и синюю (Blue) краски. В VB каждой краски в смесь можно положить от 0 до 255 единиц. Смешивает краски специальная функция RGB (название – по первым трем буквам цветов). Результатом работы функции RGB является число, обозначающее цвет. Пусть мы хотим покрасить форму краской, в которую мы положили 100 единиц красной, 200 единиц зеленой и 50 единиц синей краски. Для этого пишем такой оператор: Form1.BackColor = RGB(100, 200, 50).
Если каждой краски положить поровну, получится серый цвет. Чем меньше каждой краски мы положим, тем темнее будет цвет, чем больше – тем светлее:
RGB(70, 90, 88) – темный цвет;
RGB(210, 250, 202) – светлый цвет;
RGB(0, 0, 0) – черный цвет;
RGB(255, 255, 255) – белый цвет;
В режиме работы мы научились задавать цвета. А в режиме проектирования? Мы видим, что цвета в окне свойств закодированы строкой из каких-то непонятных значков, например: &H0080C0FF&.
Эту строку вы можете вручную изменять, ставя на место одних значков подходящие другие, и таким образом задавать любой из 16 млн. цветов. Попробуем разобраться, что означают значки этого кода:
|
&H00 |
80 |
C0 |
FF |
& |
|
- |
Сколько в цвете синей краски |
Сколько в цвете зеленой краски |
Сколько в цвете красной краски |
- |
Количество каждой краски закодировано в т.н. шестнадцатеричной системе счисления. Теперь вы можете сознательно менять шестнадцатеричные цифры в окне свойств и наблюдать результат.
Упражнение 5. Использование переменных при рисовании
Задача 1. Нарисовать горизонтальный ряд окружностей радиусом 100 на расстоянии 1000 от верхнего края экрана и с такими горизонтальными координатами: 500, 800, 1100, 1400, …, 2900.
Как видим, VB должен 9 раз выполнить один и тот же метод – рисование окружности, причем центры соседних окружностей отстоят друг от друга на 300. Можем применить цикл.
Dim x As Long
Private Sub Command1_Click()
x = 500
Do Until x > 2900
Circle (x, 1000), 100
x = x + 300
Loop
End Sub
Попробуйте изменить программу следующим образом:
1) Попробуйте уменьшить расстояние между центрами окружностей, не изменяя их радиуса, нарисовав их плотнее, чтобы они пересекались, еще плотнее, пока они не образуют “трубу”.
2) Удлините трубу налево и направо до краев формы.
3) Увеличьте толщину трубы.
Задача 2. Расположим окружности не по горизонтали, а по диагонали формы в направлении от верхнего левого угла к правому нижнему. Для этого организуем еще одну переменную – вертикальную координату у – и заставим ее тоже изменяться одновременно с х.
Private Sub Command2_Click()
x = 500
y = 200
Do Until x > 2900
Circle (x, y), 100
x = x + 300
y = y + 200
Loop
End Sub
Если мы захотим менять радиус, то организуем переменную R.
Задача 3. Нарисуем “звездное небо”. Для этого достаточно покрасить форму в черный или синий цвет и в случайных местах формы нарисовать некоторое количество разноцветных точек (скажем, 1000).
Точка ставится методом PSet. Как сделать координаты и цвет точки случайными? Использовать функцию Rnd. Ваша форма имеет размер Width´Height, количество цветов равно 16777216, поэтому обращение к методу рисования одной точки случайного цвета будет выглядеть так:
PSet (Width * Rnd, Height * Rnd), 16777216 *Rnd
Этот оператор нужно просто выполнить 1000 раз:
For i = 1 To 1000
PSet (Width * Rnd, Height * Rnd), 16777216 *Rnd
Next
Результат будет ярче, если точки будут иметь случайную толщину (1 или 2). Сколько бы раз вы ни запускали программу с указанным фрагментом, картина созвездий на экране будет абсолютно одинакова. Если вам нужно, чтобы от запуска к запуску набор значений случайной величины менялся, употребите до использования функции Rnd процедуру Randomize.
1. Нарисуйте ряд точек по направлению из левого нижнего угла в правый верхний.
2. В задаче 5.1. вы рисовали горизонтальный ряд пересекающихся окружностей. Теперь нарисуйте один под другим много таких рядов.
3. Нарисуйте “звезды в окне” – звездное небо в пределах прямоугольника.
4. Нарисуйте “дождь в луже” – заполните форму окружностями или эллипсами радиуса 200 в случайных местах.
5. Нарисуйте “мыльные пузыри” – заполните форму окружностями или эллипсами случайного радиуса и цвета в случайных местах.
6. Нарисуйте “стог сена” – множество случайных разноцветных отрезков прямых преимущественно желтоватых оттенков, причем один конец любого отрезка находится в случайной точке левой трети стога, другой – в случайной точке правой. Размер стога – 6000 на 6000. используйте функцию RGB со случайными аргументами.
7. Нарисуйте шахматную доску.
8. Создайте следующие рисунки:
|
|
|
|
|
|||
|
а) дом |
б) окружности |
в)паркет |
г) колодец |
|||
|
|
|
|
||||
|
д) пенсне |
е) волны |
ж) лепесток
|
||||
|
|
|
|||||
|
з) елка |
и) циркулярная пила |
|||||
9. Построить пятиконечную звезду.
10. Построить на экране график функции:
a) y = cos(x) для значений x от 0 до 2p;
b) y = | x | для значений x от –5 до 5;
11. С клавиатуры вводятся длины сторон треугольника a, b, c.
Построить треугольник по этим данным и закрасить его.