Министерство сельского хозяйства  Российской Федерации

Департамент кадровой политики и образования

Федеральное государственное образовательное учреждение высшего профессионального образования

Мичуринский государственный аграрный университет

 

 

Кафедра информатики

  

 

Методическое пособие

 

для самостоятельной работы студентов

  

Основные возможности

VISUAL BASIC

 

  

Мичуринск 2006

 

Методическое пособие разработано старшим преподавателем кафедры информатики Маковой Н.Е. на основании требований государственного стандарта высших учебных заведений.

Пособие предназначено  для студентов: 080502 - Экономика и организация в АПК, 080109 - Бухгалтерский учет, анализ и аудит, 080105 - Финансы и кредит, 080504 – Государственное и муниципальное управление.

Рецензент: ст. преподаватель кафедры  математического моделирования экономических систем  Ширяева Г.Б.

 Рассмотрено на заседании кафедры информатики:

протокол №    от     мая            2006  г.

  

Литература

1. Назаров С.В., Мельников П.П. Программирование на MS Visual Basic – М.: Финансы и статистика, 2003 г.

2. Лукин С.Н. Visual Basic. Самоучитель для начинающих. – М.: Диалог - МИФИ, 2004г.

3. Информатика. Базовый курс. / под ред. Симоновича. – СПб.: Питер, 2001.

 

 

Тема 1. Знакомство с Visual Basic

1.1. Общие сведения о Visual Basic

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)     на третьем этапе запускает ее, исправляет ошибки и снова запускает. И так до тех пор, пока все не заработает нормально. Этот процесс называется отладкой.

На первом этапе работа программиста напоминает работу конструктора-проектировщика, и часто из-за этого продукт работы программиста называют не программой, а проектом.

1.2. Запускаем Visual Basic

Запуск программы осуществляется одним из обычных способов, характерных для 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 и убрав оттуда флажки.

1.3. Размещаем объекты на форме

Возьмем кнопку (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]. Теперь в проекте можно что-нибудь поменять и снова его запустить. И так далее.

1.4. Пишем программу

Прикажем компьютеру при нажатии кнопки поменять цвет формы на красный. Команда (оператор) для этого пишется так:

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.

1.5. Сохранение, создание, открытие, закрытие проекта

А теперь нам пора сохранить проект при помощи 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 не опустеет.

Часто новый проект, который мы создаем, бывает похож на ста­рый, и удобнее не новый создавать, а старый переделывать. Можно копировать папку старого проекта, затем открыть ко­пию проекта и переделывать ее в новый проект.

1.6. Как реагировать на сообщения 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 заметит еще в режиме проектиро­вания, как только вы попытаетесь убрать курсор из ошибочной стро­ки в другое место. Подозрительное место будет выделено. Жмите ОК и исправляйте ошибку.

Кстати, когда вы убираете курсор из вводимой строки, Бейсику кажется, что вы закончили с ней работу. Он проверяет ее на наличие грамматических ошибок и, если не находит, немного изменяет ее внешний вид, приводя к стандартному.

 

1.7. Усложняем проект

Итак, вы сохранили свой первый проект. Закройте его 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

Запустите проект. Пощелкайте по кнопкам.

 

1.8. Меню пользователя

Какая же программа без своего меню! Нашему маленькому проекту оно, вроде бы, ни к чему, но все равно интересно и полезно сделать хотя бы простенькое. Пусть оно выглядит так, как на рисунке.

Задачу поставим такую: щелкнув по пункту Настройка цвета, мы должны увидеть выпадающее меню из двух пунктов. Щелкнув по пункту Синий этого выпавшего меню, мы красим форму в синий цвет, щелкнув по пункту Зеленый - в зеленый.

Щелкнув по пункту О программе, мы вызываем сообщение с крат­ким описанием программы.

Нам предстоит создать меню, а затем заставить его работать.

Создаем меню. Чтобы его создать, достаточно в главном меню Visual Basic выбрать Tools - Menu Editor (Инструменты - Редактор Меню). Перед вами возникнет диалоговое окно.

Начнем с настройки цвета. Введем в поле Caption (Название) текст Настройка цвета. Это для того, чтобы пункт меню с этим текстом появился на форме. По мере ввода этот текст возникает и в поле, расположенном ниже.

Теперь придумаем этому пункту имя, например пункт_меню_Настрой-ка_цвета, и введем его в поле Name (Имя). Это чтобы пункт меню мог зарабо­тать. Если хотите вызывать этот пункт не только мышкой, но и с кла­виатуры, выберите что-нибудь из списка Shortcut (Быстрая клавиша).

Щелкните по кнопке Next (Дальше) и займитесь пунктом Синий, дав ему имя пункт_меню_Синий.

Щелкните по кнопке Next и займитесь пунктом Зеленый, дав ему имя пункт_меню_Зеленый.

Щелкните по кнопке Next и займитесь пунктом О программе, дав ему имя пункт_меню_О_программе.

В результате в окне возникает список из четырех пунктов.

Теперь нужно объяснить компьютеру, что пункты Синий и Зеленый входят внутрь пункта Настройка цвета. Для этого выделим их по очере­ди и сдвинем направо кнопкой ®.

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

Все в порядке - внешний вид меню готов. Запустите проект. Вы видите, что меню появилось на форме. Пощелкайте по пунктам. Естественно, ничего не происходит. Для того чтобы проис­ходило, нужно заставить меню работать, а для этого нужно для каж­дого пункта написать свою процедуру.

Заставляем меню работать. В режиме проектирования выберем пункт меню Синий и щелкнем по нему. В окне кода появляется заго­товка процедуры:

Private Sub пункт_меню_Синий_Сlick()

End Sub

Вы уже наверняка догадались, что это приглашение объяснить компьютеру, что нужно делать при выборе пункта Синий. Для этого подойдет оператор

Forml.BackColor = vbBlue

который красит форму в синий цвет.

Аналогично программируем пункт Зеленый. А сообщение о про­грамме обеспечит оператор

MsgBox ("Программа создана в 2006 году")

Запустите проект и проверьте, как он работает.

 

Упражнение 1. Создание диалоговых окон.

Элементы управления Label, CommandButton и PictureBox

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

Порядок выполнения работы.

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.

 

 

Контрольные вопросы

1.     Что такое объект, свойство объекта, метод, событие?

2.     Что такое проект?

3.     Каков синтаксис команды присвоения значения свойству объекта?

4.     Поясните назначение свойства Alignment.

5.     Для чего служит окно Object Browser?

6.     Для чего служат флажки, переключатели, список, поле со списком?

7.     Можно ли изменять значения свойств надписи Caption при исполнении проекта?

8.     Истинно ли утверждение: сетка на экранной форме, которая видна в режиме проектирования, также видна и при выполнении формы?

 

Тема 2. Ввод и вывод данных

Как и любой другой язык, Visual Basic имеет свой алфавит. В него входят:

   прописные и строчные буквы латинского алфавита;

   прописные и строчные буквы кириллицы;

   цифры от 0 до 9;

   символ подчеркивания "_".

Из этих символов конструируются идентификаторы - имена переменных, констант, процедур, функций, меток переходов, а также имена типов. Кроме этих символов в состав алфавита так­же входят:

• неизображаемые символы (пробел, табуляция, переход на новую строку);

   специальные символы, участвующие в построении конструк­ций языка: +, - ,* ,/, \, ^, =, >, <, [, ], (,),.,:, {,},', &, @;

   составные символы, воспринимаемые как один символ: <=,>=, <>

Разделители в составных символах недопустимы.

Программа на VB – это последовательность операторов.

Для того чтобы сделать программу легко читаемой, используют комментарии (пояснения к тексту программы). Существует два способа ввода комментариев: применение апострофа ('), который можно поставить в любом месте строки, и зарезервированное слово Rem вместо апострофа. Например:

1) С помощью оператора REM:

     REM  произвольный_текст

2) С помощью апострофа’:

    ’ произвольный_текст

Иногда оператор получается такой длинный, что не умещается на экране. Перенос длинного оператора на другую строку осуществляется комбинацией пробела и подчеркивания. Например:

Результат.Text = Val(Число1.Text) _

+Val(Число2.Text)

Запись нескольких операторов в одной строке возможна, если разделить их двоеточием. Это приятно экономит место по вертикали экрана. Например:

А = 5 : В$ = "Символ Т" :  rm = 1+exp(5.2)

2.1. Переменные и постоянные величины.

Оператор присваивания

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

Тип данных переменных показывает, данные какого типа позволяет сохранить переменная. Для представления количественных данных используют числа, а для описания качественных данных используется текстовое представление информации в виде символов. Принципиальное различие между этими двумя типами данных заключается в способах их обработки. С числовыми данными можно проводить арифметические операции. Для символьных данных существуют специальные функции обработки.

Типы данных

Тип

Объем памяти (байт)

Диапазон значений

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 тип_данных = значение

2.2. Операции и функции VB

В программах можно использовать стандартный набор операций над данными. Имеются три основных типа операций:

·     Математические операции, выполняются над числами;

·     Операции отношения;

·     Логические операции

К математическим операциям относятся операции: сложения (+), вычитания (-), умножения (*), деления (/), целочисленного деления (\), остаток от деления по модулю (MOD), возведения в степень (^).

К операциям отношения относятся операции: меньше (<), больше (>), меньше или равно (<=), больше или равно (>=), не равно (<>), равно (=).

К основным логическим операциям относятся операции: логического умножения (AND, И), логического сложения (OR, ИЛИ), логического отрицания (NOT, НЕ) и др.

В VB имеется большой набор встроенных функций, которые разделяются на категории. Примеры наиболее распространенных функций приведены в ПРИЛОЖЕНИИ 2.

Из констант, переменных и встроенных функций, с помощью скобок и знаков арифметических операций можно составлять арифметические выражения. Частным случаем выражения может быть просто одиночный элемент, т.е. константа, переменная или обращение к встроенной функции. Например:

·     Y

·     21

·     (a + b)*c

·     sin(t)

·     Int (Rnd*100) + 1

Функция генерации случайных чисел Rnd – это функция, которую мы часто будем применять в работе. Функция генерирует числа между 0 и 1. Функция Int возвращает целую часть аргумента (в данном случае – произведение случайного числа на 100 и отбрасывает дробную часть аргумента). Результат – числа от 1 до 100.

2.3. Ввод и вывод данных

Функция 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.

Упражнение 2. Переменная и ее значение

Определите длину окружности С и площадь 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

 

Контрольные вопросы

1.     Почему нельзя объявлять все переменные как Variant?

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.  Назвать последовательность действий при выполнении арифметического оператора присваивания. Допустимо ли использование величин разных типов в арифметическом выражении?

 

  

Тема 3. Разветвляющиеся программы

“Штатная” работа программы – последовательное исполнение команд действия в порядке их расположения в исходном тексте. Очень часто в зависимости от некоторых условий нам приходится изменять последовательность выполнения команд действия.

Выбор (ветвление) в Visual Basic осуществляют в основном 3 оператора:

·     безусловный переход GOTO

·     условный переход IF...THEN...ELSE

·     множественный выбор (переключатели) SELECT CASE

Оператор безусловного перехода предназначен для задания перехода на указанную строку внутри программы:

GOTO номер_строки или метка

По этой команде управление безусловно передается команде, помеченной номером строки или меткой. Метка – набор символов, начинающийся с буквы, может содержать любое количество букв и цифр и должен заканчиваться двоеточием. Например:

IF IsNumeric(Text1.Text) = False THEN GOTO Ошибка

. . .

Ошибка: MsgBox "Ошибка при вводе чисел!"

В приведенном примере выполняется проверка введения числа в поле ввода номер один. Если введено не число, то осуществляется переход на строку с меткой Ошибка, и на экран выводится сообщение.

Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие:

IF условие THEN блок_команд_1 [ELSE блок_команд_2]

Если условие истинно, то выполняется блок_команд_1, в противном случае выполняется блок_команд_2.

Например:

'Если А больше или равно В, то удваивается значение числовой переменной А, а если А меньше В, удваивается значение числовой переменной В

If A>=B Then A=A*2 Else B=B*2

Допускается также использование формы синтаксиса в виде блока:

IF условие_1 THEN

блок команд_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

END SELECT

В операторе 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

Результат выполнения программы показан на рисунке.

Упражнение 3. Проверка условий

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

 

Подпись: Image1

 

 

Выполнение работы.

1. Создайте на форме следующие элементы:

·   Command1 – кнопка для начала игры;

·   Command2 – кнопка для закрытия формы;

·   Label1, Label2, Label3 – окна для вывода случайных цифр;

·   Label4 – метка для названия игры;

·   Label5 – метка для вывода фамилии и группы;

·   Image1 – окно для вывода рисунка в случае выигрыша.

2. Установите значения свойств для первых трех надписей Label1, Label2, Label3. Свойства надписей будут одинаковые, поэтому задайте их для группы объектов. Одновременно выделите все три надписи. Для этого выделите первую надпись, а затем, удерживая нажатой клавишу Shift, выделите вторую и третью надпись. Три выделенных вами объекта образуют группу. Установите следующие значения свойств:

Caption (заголовок) – удалить, чтобы при запуске эти окна были пустыми;

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

Тема 4. Циклы

Цикл - это оператор или группа операторов, которые программа выполняет многократно.

В Visual Basic существуют два основных типа циклов - циклы со счетчиком (с известным числом повторений) и циклы с услови­ем. Циклы со счетчиком используют в тех случаях, когда необхо­димо выполнить некоторые действия определенное число раз. Циклы с условием применяются тогда, когда некоторые действия в программе должны повторяться до тех пор, пока выполняется определенное условие, или до тех пор, пока не будет выполнено определенное условие.

Циклы со счетчиком. Циклы со счетчиком (с известным чис­лом повторений) в Visual Basic еще называют циклами For или циклами For ... Next. Так они называются потому, что начало и конец этих циклов определяются операторами For и Next. Син­таксис цикла ForNext таков:

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 с помощью оператора FORNEXT.

S = 0 ‘                начальное значение cуммы

FOR i = 2 TO 50 STEP 2 

S = S + i

NEXT

PRINT  “Сумма четных чисел S =”; S

После завершения цикла управление передается команде, следующей за NEXT.

С помощью FORNEXT можно организовать вложенные циклы – каждый со своим 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 с помощью цикла DOLOOP .

 

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].

Упражнение 4.  Физическая задача

Если камень бросить горизонтально со 100-метровой башни со скоростью v = 20 м/с, то расстояние от башни до него по горизонтали s будет выражаться формулой s = vt, где t – время полета камня в секундах. Высота над землей h будет выражаться формулой h = 100 – 9.81t2/2. Вычислять и печатать t, s и h для t = 0, 0.2, 0.4, 0.6 и т.д. до тех пор, пока камень не упадет на землю.

Примерный вид программы:

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 раз, для чего вполне естественно использовать оператор ForNext:

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

Роль ошибок

Пусть во дворце 3 зала размерами 20*15*4, 30*20*5 и 10*5*3. В этом случае мы вводим N=3 и оператор For выполняет цикл 3 раза.

Мы знаем, что по ошибочной программе компьютер выдает ошибочные результаты. Например, если в нашей программе мы вместо 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

   Print

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

 

Тема 5. Графика

Графикой у компьютерщиков принято называть все то, что связано с рисунками и изображениями.

Средства 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.

Построить треугольник по этим данным и закрасить его.

 

 

 

Сайт управляется системой uCoz