АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf ·...

68
Максимов Н.А. АЗБУКА программирования на Visual Basic 9 Самоучитель 9 Практикум Чебоксары 2007

Upload: others

Post on 17-Jun-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

Максимов Н.А.

АЗБУКА программирования на

Visual Basic С а м о у ч и т е л ь

Практикум

Ч е б о к с а р ы 2 0 0 7

Page 2: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

2

ББК 32.973-018.1 Серия посвящается учителям и выпускникам физико - математической школы-интерната №2 г. Чебоксары

М 17

Рецензенты: зав. кафедрой информатики и математического моделирования

математического факультета ЧГУ им. И.Н.Ульянова, профессор, доктор физ.-мат. наук Артемьев И.Т.

зав. кафедрой информационных систем экономического факультета ЧГУ им. И.Н.Ульянова, доцент, кандидат хим. наук Федотов В.Х.

Максимов Николай Андреевич. Азбука программирования на Visual Basic. Практикум. - Чебоксары, 2007.– 64с.

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

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

Язык Visual Basic 6.0 выбран только потому, что достаточно прост в изучении и не требует больших ресурсов от компьютера, как платформа Net. А развивать логику мышления и понимать компьютерные алгоритмы обработки информации можно на любых доступных программных инструментах. Упражнения по программированию, даже для своего удовольствия, помогают развивать логическое мышление гораздо больше, чем стандартная математика. Понимание алгоритмов компьютерной обработки данных является одним из атрибутов информационной культуры современного человека.

© Максимов Н.А.

®

Page 3: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

3

С о д е р ж а н и е

1. С чего начать? ....................................................................................... 4 1.I. Первые шаги ................................................................................................................. 4 1.II. Шаг второй: улучшаем интерфейс ............................................................................. 8

Самостоятельная работа №1. .................................................................................................... 9 1.III. Немного арифметики и исполняемые файлы ......................................................... 10

Самостоятельная работа №2. .................................................................................................. 11 2. Простые вычисления ...........................................................................12

2.I. Переменные и константы .......................................................................................... 12 2.II. Ввод и вывод данных ................................................................................................ 13

Самостоятельная работа №3. .................................................................................................. 16 2.III. Математические возможности Visual Basic ............................................................ 17

Самостоятельная работа №4. .................................................................................................. 19 3. Алгоритмизация ...................................................................................20

3.I. Виды алгоритмов ....................................................................................................... 20 4. Алгоритмы ветвления .........................................................................20

4.I. Общие положения, этапы создания приложений ................................................... 21 4.II. Задачи на ветвление .................................................................................................. 22

Самостоятельная работа №5. .................................................................................................. 24 4.III. Множественный выбор - Select Case ............................................................... 25

Самостоятельная работа №6. .................................................................................................. 27 5. Циклические алгоритмы ......................................................................28

5.I. Конструкция For … Next .......................................................................................... 28 Самостоятельная работа №7. .................................................................................................. 30

5.II. Циклы DO ... LOOP с условием ............................................................................... 32 Самостоятельная работа №8. .................................................................................................. 36

5.III. Массивы ...................................................................................................................... 36 Самостоятельная работа №9. .................................................................................................. 42 Самостоятельная работа №10. ................................................................................................ 43 Самостоятельная работа №11. ................................................................................................ 44

5.IV. Двумерные массивы .................................................................................................. 45 Самостоятельная работа №12. ................................................................................................ 51

6. Работа со строковыми переменными ................................................52 Самостоятельная работа №13. ................................................................................................ 55

7. Приложения .........................................................................................56 1. Контроль вводимых значений ............................................................................................ 56 2. Скрытие и отображение объектов ..................................................................................... 56 3. Проверку делимости можно производить и сравнением деления с остатком с делением без остатка (разные «косые»): ................................................................................................. 56 4. Конвертер валют .................................................................................................................. 56 5. Проверка таблицы умножения ............................................................................................ 58 6. Расчет страниц для брошюры ............................................................................................. 59 7. «Однорукий бандит» ............................................................................................................ 61 8. Пример использования календаря, переключателей, окон навигации ........................... 63

Список использованной литературы ......................................................64

Page 4: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

4

Vb6.exe

1. С чего начать? Sapienti sat 1

1.I. Первые шаги Главное – начать. Запустите саму программу через Пуск Программы

Если на вашем компьютере в группе Программы не отражается ярлык к

VB6, то его можно запустить и через Проводник или Мой компьютер. Путь к запускаемому файлу будет следующий:

С:\Program files\Microsoft Visual Studio\ \VB98\VB6.exe. Вот этот ярлычок.

Перед Вами откроется окно Microsoft Visual Basic 6.0 (Рис. 1):

Рис. 1. Выбор проекта

Здесь можно просто Открыть, чтобы начать создание стандартного проекта. Можно поставить галочку перед текстом Больше не показывать, чтобы при следующих запусках VB6 это окно больше не открывалось, а сразу по умолчанию открывался стандартный проект – до применения и использования других приложений еще «учиться, учиться… и еще раз учиться2»… Теперь перед нами представлено окно стандартной формы Form1 (Рис. 2) – в зависимости от установки программного обеспечения оно может быть как русифицированным, так и оставаться in English: 1 Понимающему достаточно (лат). Второй девиз серии «Компьютер для Петруши» 2 Ленин В.И. «Как нам обустроить Рабкрин?». ПСС, т.12, стр.327

Page 5: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

5

Рис. 2. Окно проекта Visual Basic

Основных объектов здесь всего 4, остальные можно добавить (вывести) по мере необходимости через Главное меню Вид. Включая режимы просмотра Код или Объект, можно выводить на экран соответственно текст программы для изменения или саму форму для добавления и редактирования кнопок. Теперь начнем знакомиться с некоторыми приемами Объектно - Ориентированного Языка Программирования (ООЯП или просто ООП) Visual Basic 6.0.

Самым простейшим и основным объектом является сама форма, которая будет выводиться на экран монитора при запуске уже написанной и отлаженной программы. Все инструменты размещаются на форме. Инструментов (объектов) может быть много или мало, но обязательными на

каждой форме являются наличие двух управляющих кнопок (Command Button): кнопки запуска приложения (начало работы) и кнопки завершения (выхода)

Панель инструментов

Окно свойств объекта

Сама Форма, где будут размещены разные инструменты

Проводник проектов

Page 6: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

6

работы. Поэтому запомним первое правило создания приложений ООП: обязательное наличие двух управляющих кнопок: Пуск и Выход.

Нарисуем и мы эти кнопки стандартными приемами рисования: щелчок по кнопке управления на панели инструментов (специально выделена на рисунках) и разместим на панели формы в верхнем правом углу. Вторую кнопку для выхода из программы разместим в правом нижнем углу (см. рисунки). Все объекты на форме по умолчанию принимают стандартные имена в порядке их размещения. Например, Command1, Command2, Command3, … . для кнопок управления, Text1, Text2, … TextN для текстовых окон и т.д. А мы через панель Свойства объекта

немного изменим их название и вид. В окне свойств объекта название заголовка (свойство Caption) поменяем на Пуск для первой кнопки и на Выход для второй. Таким образом, мы в первый раз изменили свойства стандартного объекта! С чем

Вас и поздравляю. Но мы пойдем дальше: сделаем кнопки разноцветными, изменив свойства Back Color (цвет заднего плана или фона). Если размещать окно свойств по алфавиту, то оно высвечивается чуть выше Caption. Выбирайте из палитры стандартные цвета зеленый и красный3.

Что, кнопки не меняют цвет, хотя мы уже выбрали нужные цвета? Не все

так просто в этом мире, одним щелчком компьютер не освоить, выучив три оператора и написав программку из 10 строк программистом не стать… Но ничего, не расстраивайтесь, шаг за шагом, кнопка за кнопкой и …терпенье и труд все перетрут. Где надо – поможем, что надо –

жизнь сама заставит…

Тонкостей в программировании много. В данном случае нам надо сменить еще одно свойство объекта – Style (стиль), которое по умолчанию является стандартным и разных

украшений не предусматривает. Выберем стиль графический (1-Graphical) и все засияет.

И так, 2 кнопки у нас есть, теперь надо дать работу этим кнопкам: что они будут делать после нажатия на них? Мы уже переходим к элементам программирования и напишем первый оператор для вывода сообщения в виде 3 Во всех технических системах самая нужная и опасная кнопка должна высвечиваться ярким, бросающимся в глаза цветом и должна быть более крупной и доступной, чем остальные кнопки. Таковы правила техники безопасности во всем мире.

Page 7: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

7

текста в окне формы (по умолчанию начнет печататься с левого верхнего угла формы)4. Тексты программы или коды можно вводить после раскрытия окна кодов через меню Вид Код. Но проще и безошибочной будет, если код напишем после двойного щелчка на тот объект, которому мы хотим указать ее действия (активизировать) в окне приложения (в данном случае формы) после щелчка на нее. Автоматически вставятся первая и последняя строки, наш код программы вставим между ними. 1. Двойной щелчок по кнопке Пуск и между начальной строкой кода и последней

строкой будет располагаться текст нашей программки из одной строки – Print “Привет, друг!!!”.

2. Двойной щелчок по кнопке Выход и введем команду End. Единственное

назначение данной кнопки – корректное завершение работы приложения.

Все, первая программа уже написана, запустим на выполнение через кнопку

или меню Запуск. И наша программка с нами же и поздоровается. Еще раз нажмете на нашу зеленую кнопку – еще раз поприветствует. Завершить работу теперь можем через стандартную кнопку Остановить или через свою красную кнопку Выход (своя рубашка ближе к телу…).

И так, первая программа написана, она еще и работает, с чем Вас и поздравляю. Все дальнейшее – вопрос времени и накопления

опыта программирования – «Лиха беда начало»!

4 Принцип по умолчанию или стандарту является одним из основных понятий, как для биологических систем, так и для технических. Иначе была бы полная неразбериха или обилие инструкций и правил на каждом шагу: «Мойте руки перед едой!», “Не курить, не сорить!» «Внимание!!! В нашем городе движение транспорта только по правой стороне дороги, а пешеходы переходят улицу на зеленый цвет!»…

Page 8: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

8

1.II. Шаг второй: улучшаем интерфейс Двух кнопок на форме явно маловато, да и приветствие печатается только на

форме. Добавим в эту же форму дополнительные кнопки и окна для вывода и ввода текстовых сообщений TextBox. Теперь поработаем большей частью самостоятельно, рисунки приведены.

1. Через кнопку abl добавим два окна Text1 и Text2, в Свойствах Text сделаем пустым, чтобы сообщение Text1-2 не выводилось.

2. Добавим еще две кнопки Commahd3-4, чтобы после нажатия на них выводилось сообщение «Вы нажали на кнопку 3-4». Переименуйте кнопки.

3. Двойным щелчком по кнопкам 3 и 4 задайте код событий:

text1.text=”Вы нажали на кнопку 3”

text2.text=”Вы нажали на кнопку 4”

Обратите внимание на то, что после того, как при вводе кода Вы набрали Text1. , откроется список

возможных предложений и, после набора следующего символа Т перед Вами окажется и требуемое слово text, которое можно вставить простым щелчком мыши или нажатием Tab. Таким образом, часто нет нужды искать и помнить точные параметры кодов: все допустимые и возможные свойства объектов и кодов можно выбрать из контекстного списка.

4. Запустите программку на выполнение и попробуйте пощелкать.

Page 9: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

9

5. После того, как Вы по разу пощелкали кнопками 3 и 4, дальше ничего не меняется: нужные сообщения уже выведены. Для удаления предыдущих сообщений добавим еще одну управляющую кнопку, задача которой присвоить пустое текстовое значение через пробел: две двойные кавычки, без всякого символа, даже пробела, между ними. Дайте имя кнопке «Очистить». Проделайте самостоятельно. А вот текст, напечатанный на форме научимся удалять позже

Самостоятельная работа №1.

Создать программу, которая при нажатии на кнопку заливает форму соответствующим цветом.

Private Sub Command1_Click ()

Form1.BackColor = vbRed

End Sub

.

Form1.BackColor = vbYellow

Form1.BackColor = vbGreen

Form1.BackColor = vbBlue

Таким образом, мы меняем свойства объекта программным образом, а не только один раз вначале через окно свойств. Начинаются элементы

объектно-ориентированного программирования. Нажатие на кнопку – это событие Command1_Click (). События могут быть разные для разных объектов: Для формы – загрузка формы Form_Load() и другие, для полей TextBox – изменение содержания Text2_Change(), для переключателей – включить-выключить Option1_Click(Index As Integer)и т.д.

Page 10: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

10

1.III. Немного арифметики и исполняемые файлы Окна форм нужны не только для закрашивания, на этих формах обычно

выводятся входная и выходная информации – результаты каких-нибудь расчетов и вычислений. Попробуем создать маленькое приложение для ученика начальной школы, которое поможет ему усваивать 4 арифметических действия. Входные данные вводятся в А и В, результат вычисления после нажатия на одну из четырех кнопок выводится в Text3, рядом с Label3 «С=».

Этот пример демонстрирует некоторые возможности ввода и вывода информации через текстовое поле Textbox, только при арифметических расчетах значения полей надо рассматривать не как текстовые, а как цифровые, поэтому используем функцию преобразования Val(«данные в текстовом формате») – буквальный перевод «значение» - Value . А для вывода цифрового значения таких преобразований не требуется, потому что цифры можно трактовать и как текст.

Рис. 3. Интерфейс программы Арифметика1

Порядок действий. 1. На форме разместите объекты Label1-3, Text1-3, Command1-5 согласно Рис. 3.

задайте цветовые оформления для управляющих кнопок. 2. Двойным щелчком на управляющих кнопках задайте соответствующие

программные коды согласно Рис. 4. Для кнопки А+В вывод результатов вычислений будет происходить не только в Textbox, но и на форме, и в маленькое стандартное окно сообщений MsgBox.

3. Запустите программу и щелчками на кнопках проверьте работу программы, задавая и изменяя значения А и В. Проверьте работу всех кнопок, исправляйте возможные допущенные ошибки. Этот процесс называется отладкой программы. Примерный результат работы программы показан на Рис. 5. Для изменения надписи формы выделите Form1 и в свойствах Caption укажите Арифметика1.

4. Научимся создавать исполняемые файлы с расширением .exe: в меню Файл(File) выберите Делать(Make) Арифметика1.exe и сохраните в своем каталоге под тем же именем. Теперь этот

Page 11: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

11

файл запускается уже самостоятельно, без VB6. Закройте или сверните VB6 и со своего каталога запустите наше приложение. Его примерный вид и характеристики указаны справа.

Рис. 4. Коды программы Арифметика1

Рис. 5. Пример работы программы Арифметика1

Самостоятельная работа №2.

Создайте аналогичную программу Арифметика2 с другим интерфейсом: 1 кнопка Вычислить, 2 входных TextBox - (A= и В=), 4 выходных TextBox - (А+В=, А-В=, А*В=, А/В=). Не забудьте вставить надписи через Label1-6.

Page 12: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

12

2. Простые вычисления Предыдущие упражнения были только прообразом написания маленьких

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

2.I. Переменные и константы Переменной в программировании является именованная область

памяти, предназначенная для хранения данных, изменяющихся в процессе выполнения программы. Переменные имеют имя (идентификатор) и тип (форма или способ представления информации в памяти ЭВМ).

Имя переменной (идентификатор) — это строка символов, которая отличает эту переменную от других объектов программы (идентифицирует переменную в программе). Первым символом имени должна быть буква. Остальные символы — буквы и цифры (прописные и строчные буквы различаются). Для объединения имен можно использовать символ «_»(подчеркивания), но:

в имени нельзя использовать символ «.»; число символов в имени не должно превышать 255; имя переменной не должно совпадать с зарезервированными (служебными) словами языка (эти слова в тесте кода высвечиваются синим цветом!);

Желательно для имен использовать только латинские символы. В Visual Basic существуют разные возможности объявления типа

переменной. • Переменная может вообще не объявляться. В этом случае будет установлен

по умолчанию тип Variant и VB6 сама определит тип переменных по контексту. Однако это может привести к медленной неэффективной работе программы, нерациональному использованию памяти и возможным ошибкам из-за путаницы в типах. • Переменная может объявляться явно с помощью оператора определения

переменной: Dim имяПеременной [ As типПеременной]

Например: Dim A as Long, Dim Strokа_Simvolow as String В дальнейшем мы условимся придерживаться следующих правил

использования имен переменных: Имена переменных будем объявлять всегда явно через Dim, латинскими

символами и чтобы имя носило смысловую нагрузку; например, оклад как Oklad, имя как Name, зарплата как Zarplat и т.д.

Здесь и далее квадратные кавычки [ ] обозначают необязательный параметр, который может быть опущен. Тогда берутся свойства или параметры по умолчанию.

Page 13: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

13

Основные типы данных Таблица 1

Тип Обозначение Содержимое (в байтах) Область значений

Логический Boolean 2 True или False (ложь или истина, логические 0 или 1)

Короткое целое Byte 1 От 1 до 255

Целое Integer 2 от -215 до +215 (от -32768 до +32767)

Длинное целое Long 4 от -231 до +231 Денежный (четыре знака после запятой) Currency 8 От -263*10-4 до 263*10-4

Вещественное (с плавающей точкой одинарной точности)

Single 4 от -2129 до +2148 -1

Вещественное двойной точности Double 8 от -21024 до +21024 -1

Дата и время Date 8 От 01.01.100 до 31.12.9999

Строковый String 1 байт для каждого символа

До 216 символов фиксиров. длины и до 231 символов переменной длины

Вариативный Variant 16+1 байт для

каждого символа

Определятся типом переменной, явно не задается

Object Объект 4 Ссылка на объект

Константы служат для объявления постоянных данных, значения которых в ходе выполнения программы не меняются. Объявляются как переменные, но вместо Dim как Const и тут же присваивается значение: Const Pi as Single = 3.141592 В качестве разделителя целой и дробной частей используется точка. Дата и время могут быть выражены как в стандартном варианте дд.мм.гггг, так

и в американском мм.дд.гггг. Но при вводе следует пользоваться американским форматом. Группы чисел должны находиться между двумя знаками #, разделитель /: #03/11/1955#. Результат: 11.03.1955

2.II. Ввод и вывод данных Прежде чем производить какие-нибудь вычисления, переменным надо

присвоить определенные значения в соответствии с объявленными типами. Потом производить какую-то обработку и результаты вывести для просмотра. Таким образом, любая программа должна иметь (кроме окна интерфейса в виде формы) 3 стандартных блока в строгой последовательности (линейный алгоритм):

1. Блок ввода информации 2. Блок расчетов 3. Блок вывода информации

Page 14: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

14

Ввод данных можно организовать разными способами. Мы пока рассмотрим 3 основных способа.

• Присвоение значения переменной непосредственно в тексте программы: A = 25… B = 12.75 … Tekst = ”Сегодня будет дождь” … Dt = ”11:03”

• Использование текстового окна TextBox: A = Val(Text1.text) (Val для ввода чисел, преобразует текстовый в числовой ) Tekst = Text1.text или Tekst = Str(Text1.text) (Str для ввода текста)

• Специальным диалоговым окном InputBox: A = Val(Inputbox(“Введите значение А”) ) «Любой текст в программе Tekst = Inputbox(“Введите текст”) « заключатся в двойные кавычки!!!

Вывод данных можно осуществить также тремя способами. • Печать непосредственно на форме оператором Print

Print “A=”; A (напечатается подсказка А= и значение А) … Print Tekst • Использование специального всплывающего окна сообщений MsgBox

Msgbox “А=”& А … Msgbox “Задача решена верно!”& Tekst (символ & служит для объединения (сцепления) текстовых значений)

• Опять использовать текстовое окно TextBox: Text1.text = А … Text1.text = Tekst Теперь попробуем составить маленькую программу, которая вычисляет

объем цилиндра. Из математики известно, что объем вычисляется по формуле V=πR2H,

где π- число пи=3.14…, R - радиус цилиндра, H – высота. Но в языках программирования такая запись ничего не даст, примерная

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

V=3.14*R^2*H или V=Pi*R^2*H Знаки арифметических операций ставятся все: +, -, *, /, ^

Теперь попробуем написать код программы для событий нажатия на кнопки Вариант1-3 (двойной щелчок). Объявления переменных произведем один раз в секции General. Чтобы в дальнейшем программа всегда запрашивала объявления переменных, в этой же секции General добавим Option Explicit или в меню Tools Options Editor «галочку» для Требовать объявления переменных (Require variable Declaration). Тогда данная строка будет вставляться автоматически и в других проектах.

Option Explicit Dim R, H, V as Single ‘объявление переменных Const Pi as Single = 3.141592 ‘ в секции General

Page 15: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

15

Вариант 1. Ввод и вывод через окна сообщений Private Sub Command1_Click()

R = Val(InputBox("Введи значение радиуса")) H = Val(InputBox("Введи высоту цистерны")) V = 3.14 * R ^ 2 * H MsgBox "Объем цистерны =" & V & “ литров ”

End Sub

Вариант 2. Самый «нехороший», «одноразовый» Private Sub Command2_Click()

R = 6 H = 15 V = 3.14 * R ^ 2 * H Print "Объем цистерны =" ; V

End Sub

Вариант 3. Приемлемый Private Sub Command3_Click()

R = Val(Text1.Text) ‘ блок ввода H = Val(Text2.Text) ‘ V = Pi * R ^ 2 * h ‘ блок расчета Text3.Text = Str(V) ‘ блок вывода

End Sub Составьте проект по образцу, для кнопки Вариант3 включите в свойствах

всплывающую подсказку после наведения на объект мышьи (Command3. ToolTipText = Заполни значения Радиуса и Высоты), сделайте выводы: когда использовать тот или иной способ ввода и вывода? Образец приведен на рис. 6.

Рис. 6. Примерный интерфейс программы Цилиндр

Размеры и начертания шрифтов подписей и названий кнопок выбирайте через Свойства(Property) Font

Иногда при вводе кода программы на русском языке могут не поддерживаться шрифты. Установите нужный кириллический шрифт через меню Tools(Инструменты) Options Editor Format. Смотри Рис. 7.

Page 16: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

16

Рис. 7. Выбор шрифта кода

Самостоятельная работа №3.

Создайте аналогичную программу для вычисления суммы купленных товаров по формуле: Сумма = цена1 *кол-во1 + цена2*кол-во2. Имена и типы переменным объявляйте сами, как и названия товаров.

Когда Вы пишете текст (код) программы, то для пояснения имен переменных или алгоритма действий можете вставлять комментарии через апостроф - смотри выше в тексте и в окне. Очень удобны при отладке – если какой-то фрагмент программы не работает или еще не отлажен, то его временно отключаете, обозначая как комментарий (сразу текст выделится зеленым цветом), а когда надо – апостроф убираете.

Когда набираете примерно одинаковые тексты, не забывайте воспользоваться простым копированием строк через буфер обмена, как во всех текстовых редакторах: Ctrl + C – копировать выделенный фрагмент, Ctrl + V – вставить. Буфер доступен и через контекстное меню VB6. При такой технологии Вы экономите время и повышаете надежность кода программы – не будет случайных ошибок.

При сохранении проекта параллельно можете сохранять и другие приложения проекта: формы, модули и т.д. Проще это сделать после сохранения .exe-файла. Сам я обычно сохраняю «эгзэшник», а потом просто закрываю VB6. Вот тогда она сама попросит сохранить все измененные или вновь созданные составляющие, остается только поочередно задавать имя и папку для сохранения.

И еще: договоримся всегда устанавливать опцию в меню Tools Options Editor «галочку» для Требовать объявления переменных (Require variable Declaration). Тогда в секции General автоматически добавится Option Explicit. Так мы повысим надежность программ – не будут «проскальзывать» случайные самообъявляющиеся переменные «не тех» типов, а также приблизим VB6 к другим языкам высокого уровня с обязательным объявлением переменных, как С++ и другие, считающиеся более «продвинутыми» средствами разработки программного обеспечения.

Обязательное объявление типов переменных – один из атрибутов культуры программирования!

Page 17: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

17

2.III. Математические возможности Visual Basic Вычисления на любом языке программирования имеют свои правила записи,

в основном совпадающие с математическими. Так, можно использовать все 4 арифметические операции (только символы чуть другие), знаки скобок для определения порядка вычислений и множество т.н. стандартных встроенных функций. Примерный перечень (далеко не весь!) указан в таблицах 2-4.

Математические операции Таблица 2

Операция Название Пример Результат + Сложение 4+5 9 - Вычитание 7-4 3 * Умножение 3*6 18 / Деление 5/4 1.25 \ Целочисленное деление 5\4 1

Mod Остаток от целочисленного деления 5 Mod 4 1

^ Возведение в степень 2 ^ 4 16

Значения математических выражений вычисляются в соответствии с приоритетом арифметических операций:

1. возведение в степень (^); 2. умножение (•) и обычное деление (/); 3. целочисленное деление (\); 4. вычисление остатка от целочисленного деления 5. сложение (+) и вычитание (-).

Для изменения порядка вычисления арифметического выражения используются круглые скобки. Выражение (A-B/2)+A^2 вычисляется в таком порядке: 1. B/2 2. A-B/2 3. A^2 4. A-B/2)+A^2

Операции отношений и логические Таблица 3

Операция Название Пример Результат

(True или False) > Больше А>B True >= Больше или равно А>=B True < Меньше А<B False <= Меньше или равно А<=B False = Равно А=B False

<> Не равно А<>B True

And Логическое умножение А>B And C>B False Or Логическое сложение А>B Or C>B True Not Логическое отрицание Not (C>B) True

Page 18: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

18

Во всех примерах здесь А=5 B=4 C=3 . Соответственно приведены и результаты в таблице 3.

Результат отношений всегда Истина (True) или Ложь (False). Приоритет (последовательность выполнения) операций отношений выше, чем логических. Поэтому в выражении А>B And C>B сперва выполнятся операции сравнения слева направо, а потом логическое умножение:

1. А>B True 2. C>B False 3. True And False False (умножение логических 1 и 0 есть 0)

Для изменения последовательности выполнения операций можно пользоваться скобками: (А>B And C>B) Or А<>B. Здесь результат = True

В программировании часто используемые или стандартные

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

Математические функции Таблица 4

Название Обозначение Запись в Бейсике Пример Результат

Синус Sin(x) Sin(x) Sin(0) 0 Косинус Cos(x) Cos(x) Cos(0) 1 Тангенс Tg(x) Tan(x) Tan(0.785))) 1 Арктангенс ArcTan(x) Atn(x) Atn(1) 0.785 Натуральный логарифм

Ln(x) Log(x) Log(10) 2.302585

Модуль числа |x| Abs(x) Abs(-12) 12 Экспонента ex Exp(x) Exp(1) 2.818282Квадратный корень √Х Sqr(x) Sqr(9) 3 Целая часть числа Fix(x) Fix(-12.34) -12 Целая часть числа, не превышающая заданного числа

Int(x) Int (- 12 .34 )

Int(12.34) -13 12

Если переменная не определена, то во время

выполнения будет выдано сообщение: «Переменная не определена». Останавливаете выполнение (компиляцию) программы и добавляете описание переменной в Declaration.

Page 19: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

19

Самостоятельная работа №4.

Создайте программы для вычисления следующих выражений и функций.

1. Y=A2+B3-Sqr(B2-4)/B2 2. Y=Sin((A-B)^3+(B-A)^2) 3. Y=Sin(A2-B2)/Cos(B2-A2) 4. Y=(Sqr(B2-C2))^2 5. Y=Sqr(Abs(A2-C2))+2AC 6. Y=Tan(A2-B2)/Log(B2+A2) 7. Z=Log(Sqr(B2+A2))/Sqr(Log(B2+A2))

8. Z=Sin(Sqr(B3+A1/2))/(Sqr(Log(B2+A4))+1)

9. Z=Exp(Sqr(B+A2))/Sqr(Log(B4+A2))

10. Y=Sqr(Abs(A3-C2))+2AC2 11. Z=Exp(A2-B2)/Log(B2+A2) 12. Y=Tan(A3-B2)/Log(B2+A2) 13. Y=Sin(A2-B2)/Log(B2+A3) 14. Z=Cos(Sqr(B3+A1/3))/(Sqr(Log(B2+A4))+1)

15. Y=Sin(Sqr(B2+A1/2))/(Sqr(Log(B2+A3))+5)

16. 3 42 xxY +=

17. )23sin( xxy −= /cos(x+y)

18. y= x-2x4x 24 +

Во многих случаях для вычисления длинных выражений полезно использовать промежуточные переменные, которых нет ни на входе, ни на выходе. Но такие переменные часто намного облегчают работу, увеличивают читаемость текста программ. Например, выражение в знаменателе можно обозначить как Znam, числитель как Chisl. Тогда выражение в 8-ой задаче будет состоять из трех операторов:

Znam = Sin(…); Chisl = (Sgr(…)); Z= Znam / Chisl

Окна Textbox более удобны для задания и вывода параметров и

значений, чем разовые мелькающие и исчезающие Msgbox и Inputbox Не забывайте задавать первичные значения в окне параметров TextBox

в свойствах text, чтобы при отладке каждый раз не вводить одни и те же входные данные. При необходимости их просто меняете после запуска приложения и, не выходя из программы, снова нажимаете на кнопку Вычислить.

Page 20: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

20

3. Алгоритмизация 3.I. Виды алгоритмов

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

Основными свойствами алгоритма являются: 1. детерминированность (определенность). Предполагает получение

однозначного результата вычислительного процесса при заданных исходных данных. Благодаря этому свойству процесс выполнения алгоритма носит механический характер – исполнитель алгоритма выполняет только предписанные действия;

2. результативность. Указывает на наличие таких исходных данных, для которых реализуемый по заданному алгоритму вычислительный процесс должен через конечное число шагов остановиться и выдать искомый результат;

3. массовость. Это свойство предполагает, что алгоритм должен быть пригоден для решения всех задач данного типа – алгоритм должен работать при любых корректных входных данных;

4. дискретность. Означает расчлененность определяемого алгоритмом вычислительного процесса на отдельные этапы, возможность выполнения которых исполнителем (компьютером) не вызывает сомнений.

5. конечность. Возможность достижения конечного результата за конечное число шагов (отрицательный результат есть тоже результат!). Алгоритм должен быть формализован по некоторым правилам

посредством конкретных изобразительных средств. К ним относятся следующие способы записи алгоритмов: словесный, формульно-словесный, графический, язык операторных схем, алгоритмический язык.

Наибольшее распространение благодаря своей наглядности получил графический (блок-схемный) способ записи алгоритмов.

Блок-схемой называется графическое изображение логической структуры алгоритма, в котором каждый этап процесса обработки информации представляется в виде геометрических символов (блоков), имеющих определенную конфигурацию в зависимости от характера выполняемых операций. Перечень символов, их наименование, отображаемые ими функции, форма и размеры определяются ГОСТами. Типовые блок-схемы включены и в панель инструментов Microsoft Office: Автофигуры Блок-схема, можно вставлять из Word или Excel.

При всем многообразии алгоритмов решения задач в них можно выделить три основных вида алгоритма:

Page 21: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

21

линейный ветвящийся (разветвляющийся) циклический (повторяющийся)

Линейным называется такой вычислительный процесс, при котором все этапы решения задачи выполняются последовательно, друг за другом. Все наши предыдущие программы были линейными или последовательными. Пример линейной задачи. Некоторый товар ценой S в марте подорожал на Pr

процентов. Найти новую цену товара. Постановка задачи. Входные данные:

S – старая цена товара Pr – процент удорожания

Выходные данные: Snew – новая цена товара

Промежуточные данные: нет Расчетная формула:

Snew = S + S* (Pr/100) Интерфейс: 2 кнопки Command1-2 Расчет и Выход, 3 поля TextBox1-3 с

полями надписей Словесное описание алгоритма

1. Ввести значения S и Pr 2. Вычислить значение новой цены Snew = S + S* (Pr/100) 3. Вывести значение новой цены

Блок-схема

Option Explicit Dim S, Snew, Pr As Double Private Sub Command1_Click() S = Val(Text1.Text) Pr = Val(Text2.Text) Snew = S + S * (Pr / 100) Text3.Text = Snew End Sub Private Sub Command2_Click() End End Sub Текст программы

Отработайте приведенную программу. Измените тип переменных на Single и посмотрите на точность результатов. Сделайте выводы: при повышении разрядности повышается и точность вычислений!

Начало

Конец

Ввод S и Pr

Вывод Snew

Snew = S + S* (Pr/100)

Page 22: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

20

4. Алгоритмы ветвления Ветвящимся называется такой вычислительный процесс, в котором выбор

направления обработки информации зависит от исходных или промежуточных данных (от результатов проверки выполнения какого-либо логического условия). Программ без выбора практически не существует, иначе это была бы механическое или простое вычислительное устройство по принципу арифметического калькулятора. Но: в чистом виде только того или иного алгоритма ни одной значимой программы не существует, все они есть комбинации из трех известных видов!

Рис. 8. Стандартная блок-схема ветвления

Ввод А,B

A>B

Вывод A,B,X

Начало

X=A3+B3

да нет

X=A2+B2

Конец

Dim A,B,X as Single A=Val(InputBox("Введи A")) B=Val(InputBox("Введи B"))

If A>B then X=A*A+B*B else X=A^3+B^3

Print “A=” & A; “B=” & B; “X=” & X

Словесное описание алгоритма:

1. Ввести числовые значения А и В 2. Если А больше В, то Х равно сумме квадратов А и В, иначе (т.е. В больше или равно А) Х присвоить значение суммы кубов 3. Вывести (напечатать) значения А,В,Х

Page 23: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

21

4.I. Общие положения, этапы создания приложений Блок-схема ветвящегося алгоритма имеет следующий вид:

Рис. 9. Блок-схема алгоритмов ветвления Условие выбора(решение) отображается ромбом, который всегда имеет один вход и два

выхода: по да(если условие истинно - true ) или нет(если условие ложно - false ). Иногда разные авторы вместо да используют 1, +, истина…, а вместо нет - 0, -, ложь.

Программный код ветвления реализуется конструкцией: If условие Then оператор1…N [Else оператор 2…N]

Такая форма записи в одну длинную строку называется строчной формой. Операторы разделяются знаком «:». Это не всегда удобно, поэтому существует и блочная форма записи, когда операторы после Then записываются в последующих строках. Только блок операторов должен заканчиваться логическим концом EndIf. Ниже приведены примеры записей в обеих формах.

If A>=B Then C=A-B: D=A+B Else C=B-A: D=A*B: ? «А меньше В»

If A>=B Then ‘ блочная форма записи C=A-B

D=A+B Else

C=B-A : D=A*B ‘ вместо Print можно Print «А меньше В» ‘ пользоваться ?

End If

Создайте проект для задачи из Рис. 8. Стандартная блок-схема со своим интерфейсом – А, В, Х пусть вводятся и выводятся в TextBox1-3.

Теперь мы созрели до того, чтобы подойти к разработке приложений на VB6 более основательно.

Создание любого приложения состоит из следующих этапов. 1. Постановка задачи. Описание принципа работы будущего приложения, видов экранных форм (окон) этого приложения. Сюда же входит объявление переменных: входных, промежуточных, выходных и расчетных формул. Разработка интерфейса - создание экранных форм

………….…………….…

?Оператор 2

Оператор N Оператор N

Оператор 1

Да Нет

………….…

?

Оператор N

Оператор 1

Да Нет

Полная форма ветвления Неполная форма ветвления

Page 24: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

22

приложения со всеми находящимися на этих формах объектами и свойствами этих объектов.

2. Программирование. Определение того, какие события будут происходить в процессе работы приложения, составление алгоритмов процедур для этих событий и написание программы (программных кодов) этих процедур. Состоит из двух этапов: а). Разработка алгоритма (лучше в виде блок-схемы. Блоки обычно нумеруются) б). Запись разработанного алгоритма на алгоритмическом языке VB6 (кода программы)

3. Отладка программы. Устранение логических ошибок в процедурах и достижение того, чтобы приложение работало корректно, с удобным и ясным интерфейсом

4. Сохранение проекта и при желании — компиляция (превращение проекта в исполняемое приложение, способное работать самостоятельно за пределами среды проектирования).

Приложение может работать в режиме компиляции или интерпретации. В режиме интерпретации все инструкции на языке БЭЙСИК, из которых состоит программа, будут выполняться системой Visual Basic непосредственно в процессе их чтения компьютером строка за строкой в среде разработки.

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

4.II. Задачи на ветвление 1. Торговый агент получает процент от суммы совершенной сделки. Если

объем сделки до 3000, то 2%; если объем от 3000 до 10000, то 3%; если выше 10000, то 5%. Рассчитать сумму вознаграждения.

Далее мы не будем приводить интерфейс за ненадобностью (уже умеем!), а только блок-схемы и коды программ.

Блок-схема алгоритма обработки

………………… Z=Val(text1.text)

If Z<3000 then Pr=Z*0.02 Else If Z<10000 then Pr=Z*0.03 Else Pr=Z*0.05 End if

End if

Часть кода программы

Z<3000

Z<10000

Pr=Z*0.02 Pr=Z*0.03 Pr=Z*0.05

Больше 3000

Page 25: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

23

В данной задаче возможны 3 значения, поэтому без 2 развилок не обойтись. Первое условие задает первый диапазон (до 3000), после первого если остается всего два варианта. Так как по условию цифровой ряд от 0 до ∞ непрерывный, и всего две точки разрыва (3000 и 10000), то достаточно использовать еще одно если. Обратите внимание, как одно If входит в другое. У каждого If есть свой Endif и они записываются с одинаковым отступом (говорят: «на одинаковом уровне»). Такая запись программы (кода) делает ее удобочитаемой. А взаимных вложений может быть до 255 и для других операторов, особенно операторов цикла.

Но этот же алгоритм можно записать и чуть по-другому: анализировать каждое условие.

Z = Val(Text1.Text) If Z < 3000 Then Pr = Z * 0.02 If Z >= 3000 And Z <= 10000 Then Pr = Z * 0.03 If Z > 10000 Then Pr = Z * 0.05 Text2.Text = Pr

Блок-схему с тремя последовательными блоками ветвления нарисуйте самостоятельно.

Не самый лучший вариант с точки зрения машинной логики (если уже было два сравнения, то в нашей задаче третье сравнение лишнее) и быстродействия, но лучше читается, допущенных ошибок будет меньше.

Отработайте (составьте работающую программу-приложение) оба варианта программы (можно с 2 кнопками сразу). Сделайте выводы.

2. Даны 4 числа A, B, C, D. Найти наибольшее число. Словесное описание алгоритма a) Сравнить два первых числа. Запомнить большее как AB и его название. b) Сравнить два оставшихся. Запомнить большее как СВ и его название. c) Сравнить AB и СВ. Вывести значение наибольшего и его название

Блок-схему самостоятельно! ‘ код программы

Option Explicit Dim A, B, C, D, AB, CD, Max As Single Dim Name1, Name2, Nam As String Private Sub Command1_Click() A = Val(Text1.Text) B = Val(Text2.Text) C = Val(Text3.Text) D = Val(Text4.Text) If A > B Then AB = A: Name1 = "A" Else AB = B: Name1 = "B" If C > D Then CD = C: Name2 = "C" Else CD = D: Name2 = "D" If AB> CD Then Max=AB: Nam=Name1 Else Max=CD: Nam = Name2 Print "Ìàêñèìàëüíîå ÷èñëî " & Nam & " = " & Max End Sub Если встречаются одинаковые значения, данный алгоритм выдает последнее число

как наибольшее. А если в сравнении знак > заменить на >=, то выдаст первое.

Page 26: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

24

Это был только один из возможных вариантов алгоритма. Отработайте (составьте проект) приведенный вариант.

Самостоятельная работа №5.

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

1 вариант. Сравнить А и В, большее из них сравнить с С, большее из них сравнить с D и вывести результат. Смотри блок-схему и код задачи 5 на стр. 22.

2 вариант. Каждое число сравнить с тремя остальными, используя конструкцию без Else : if A>B and A>C and A>D then …

Если для четырех чисел не сразу получается, то сначала решите задачу для трех.

Рис. 10. Поиск наибольшего из трех чисел

………………………… If A>B then If A>C then Max=A : TM=”A” Else Max=C : TM=”C” End if Else If B>C then Max=B : TM=”B” Else Max=C : TM=”C” End if End if …………………….

А>B

А>C B>C

Max=A : TM=”A”

Max=C : TM=”C”

Max=B : TM=”B”

Max, TM

Ввод А,В,С

Начало

Конец

Да Нет НетДа

НетДа

Демонстрация уровней вложения и соответствия If и End if

Page 27: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

25

4.III. Множественный выбор - Select Case В алгоритмических языках программирования выбор из множества

вариантов (условий) обычно реализуется специальными конструкциями. Блок-схема такой конструкции примерно выглядит так:

Рис. 11. Блок-схема множественного выбора Select Case

(Блок-схема соответствует нижеприведенному примеру 3) Общий формат записи кода выглядит так:

Select Case Переменная

Case Значение(я) переменной 1… Оператор(ы) 1… … ………………………

Case Значение(я) переменной 2…. Оператор(ы) 2… … ... ….. ……..

Case Значение(я) переменной N…. Оператор(ы) N … ... ….. ……..

Начало

Конец

Ввод Ball

Вывод Y

Ball=1,2

Ball=3

Ball=4

Ball=5

Y=”Удовл.” Y=”Хорошо”Y=”Отлично” Y=”Нет балла” Y=”Плохо”

Нет Да

Да

Да

Да

Page 28: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

26

Case Else ‘ все остальные случаи Оператор(ы) N+1 … ... ….. …….. End Select

Если ни одно из предыдущих условий не выполнено, то выполнятся операторы после условия Case Else. Случай Остальные (Else) может быть и не задан, тогда возможен и вариант выхода из блока Select Case без выполнения ни одного действия (в блок-схеме на Рис. 11 слева Нет). Значения переменных могут быть заданы простым перечислением через запятые, диапазоном: Case 1, 2, 7 to 12 ; условием: Case Is < 0

3. Полученные на экзамене оценки вывести в текстовом виде. Option Explicit Dim Ball As Byte, Tekst_Ball As String Private Sub Command1_Click() Ball = Val(Text1.Text) Select Case Ball Case 1, 2 Tekst_Ball = "Ïëîõî!" Case 3 Tekst_Ball = "Óäîâëåòâîðèòåëüíî" Case 4 Tekst_Ball = "Õîðîøî!" Case 5 Tekst_Ball = "Îòëè÷íî!" Case Else Tekst_Ball = "Òàêèõ áàëëîâ íåò" End Select Text2.Text = Tekst_Ball End Sub

После того, как отладите, по рисунку найдите причину ошибки при выполнении данной программы (обычное сообщения VB6 с неполной расшифровкой кода сообщения – сейчас 6 (переполнение)).

Page 29: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

27

Для более пытливых. Через свойства объекта Text2 ForeColor, BackColor , Font изменяйте цвета и размеры, шрифты сообщений в зависимости от оценки

Самостоятельная работа №6. Используя конструкцию Case, составьте следующие проекты:

1. По номеру дня недели найти его название 2. По номеру месяца найти его название 3. По названию столицы найти страну 4. По номеру месяца найти сезон 5. По номеру дня в месяце найти декаду 6. По названию города найти страну 7. По марке автомобиля найти страну-производителя 8. По номеру года определите век 9. Сумму денег вместо цифр написать прописью (до 10 руб) 10. По названию реки найти море, куда она впадает 11. По названию химического элемента определить его

атомное число

12. По названию романа найти автора 13. По фамилии композитора найти его опусы 14. По имени героя произведения найти автора произведения 15. По названию страны найти его валюту 16. По названию республики найти столицу 17. По номеру в журнале найти ученика 18. По названию области найти административный центр 19. По расширению (типу) файла найти программу, создавшую,

редактирующую или открывающую его

Включите подсказку ToolTipText (всплывающая подсказка при наведении «мышью» на объект) к окну Text ввода названия - Собственные имена начинаются с заглавной буквы! Для текстовых переменных Москва, МОСКВА и москва – разные города!

Case 11 to 20 - вторая декада Case Is > 31 - неверный номер дня в месяце

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

Page 30: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

28

5. Циклические алгоритмы Циклом называется многократно повторяемый участок вычислений.

Вычислительный процесс, содержащий один или несколько циклов, называется циклическим. По количеству выполнения циклы делятся на циклы с определенным (заранее заданным) числом повторений и циклы с неопределенным числом повторений. Количество повторений последних зависит от соблюдения некоторого условия, задающего необходимость выполнения цикла. При этом условие может проверяться в начале цикла — тогда речь идет о цикле с предусловием, или в конце — тогда это цикл с постусловием.

Наиболее простой является конструкция с заранее определенным количеством циклов (повторений).

5.I. Конструкция For … Next

Рис. 12. Блок-схема конструкция For … Next

Формат кода такого алгоритма выглядит следующим образом:

For <счетчик> = <начало> То <конец> [Step <приращение>]

<операторы тела цикла> Next [<счетчик>]

Перед выполнением цикла переменной счетчику цикла присваивается начальное значение. Операторы, перечисленные в цикле, выполняются до тех пор, пока значение счетчика цикла не превысит конечное значение. При каждом выполнении цикла значение счетчика увеличивается на шаг (приращение). По умолчанию шаг равен 1.

В нашей блок-схеме: I – счетчик, M – начальное значение счетчика, N – конечное значение счетчика, Step – величина приращения.

4. Найти сумму натуральных чисел от 1 до 10

Постановка задачи. Входные переменные: нет Выходные переменные: S Промежуточные переменные: I Расчетные формулы: S = S + I – стандартная формула, к содержимому S

прибавляется I, новое значение будет больше на значение I Интерфейс. 2 управляющие кнопки Расчет и Выход, 1 текстовое окно для вывода S

I=M, N [, Step]

Операторы

Page 31: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

29

Рис. 13. Блок-схема алгоритма

Словесное описание алгоритма 1. Обнулить значение переменной S 2. Присвоить I начальное значение 1 3. Проверить попадание значения I в диапазон от 1 до 10 включительно 4. Если в I диапазоне, то к S прибавить и вывести на форме значение I , иначе перейти на пункт 7

5. Значение I увеличить на величину шага (по умолчанию на 1) 6. Перейти к пункту 3 7. Напечатать вычисленное значение S и конечное значение I

Имейте ввиду, что пункты 2-6 выполняются автоматически самой конструкцией For … Next, мы задаем только диапазоны и шаг. Значение счетчика цикла I выводим только для понимания процесса работы алгоритма

Код программы

Option Explicit Dim I, S As Integer _______________________________________________________________________________________________________________________________-----

Private Sub Command1_Click() S = 0 For I = 1 To 10 Step 1 S = S + I ‘ накопление суммы Print " I=" & I Next I Print "Конечное значение I=" & I Text1.Text = S End Sub

I = 1, 10

S=S+I

Начало

S, I

Конец

S=0

I

Page 32: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

30

Отработайте (составьте проект) приведенный вариант. После этого измените Ваш проект так, чтобы можно было сосчитать сумму: 1. нечетных натуральных чисел от 1 до 20 (добавьте шаг приращения 2). 2. четных натуральных чисел от 1 до 20

Рис. 14. Результат работы

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

У программистов во всем мире принято, что имена переменных счетчика начинаются с i , далее вложенные циклы j, k, l… Если счетчик в начале отработал (цикл завершился), то его можно использовать повторно и в других независимых друг от друга местах.

Составьте универсальный проект, подсчитывающий сумму натуральных чисел в любом диапазоне с любым шагом и выводящий дополнительно среднее значение чисел (количество чисел подсчитывайте внутри цикла примерным выражением К=К+1). В общем случае и шаг, и счетчик могут быть любыми действительными числами: For I = N1 to N2 Step N3

Самостоятельная работа №7. Используя цикл For … Next и в нем окно InputBox, составьте следующие проекты: 1. Найти общую стоимость проданных 8 товаров 2. Найти общую стоимость купленных 7 товаров 3. Найти среднюю цену проданных 8 товаров 4. Найти среднюю цену купленных 7 товаров

Page 33: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

31

5. Найти средний балл полученных на 5 экзаменах оценок 6. Найти средний возраст членов Вашей семьи 7. Найти средний рост детей в классе 8. Найти средний вес штангистов 9. Найти средний рост команды баскетболистов 10. Найти средний вес команды волейболистов 11. Найти, на сколько процентов зарплата программиста (в

списке сотрудников номер 4) выше средней зарплаты в фирме из 10 сотрудников 12. Найти, на сколько процентов зарплата директора выше

средней зарплаты в фирме из 8 сотрудников (номер 1) 13. Найти, на сколько процентов зарплата оператора ниже

средней зарплаты в фирме из 9 сотрудников (номер 7) 14. Найти, во сколько раз зарплата менеджера выше средней

зарплаты в фирме из 8 сотрудников (номер 3) 15. Найти, во сколько раз зарплата программиста (номер 4)

выше средней зарплаты в фирме из 7 сотрудников

Для ввода зарплаты работника под номером X внутри цикла ввода добавьте простой оператор с условием: For i=1 to N Z = Val(InputBox(“Введи зарплату работника”)) If I = X then Zrabotnikax =Z ’ Х - номер сотрудника …………… А накопление суммы осуществляется примерным оператором S = S + Z _____________________________________________________________ Может пригодиться… Clipboard.Clear - очистка буфера обмена Clipboard.SetText (Text4.Text) – в буфер обмена копируется содержимое Text4.text Text2.Text = Clipboard.GetText - в окно Text2.text вставляется содержимое буфера обмена Picture1.Picture = Clipboard.GetData - в окно рисунка вставляется рисунок из буфера

Форматирование и округление чисел при выводе можно производить при помощи специального оператора Format.

S = 12.345 Format(S, "0.00\0") ' возвращает "12.350" Format(S, "0.\0\0") ' возвращает "12.00" Format(0.55, "#.0\0") ' возвращает ".60", незначащий 0 не печатается Print Format(S, “#.##”) ‘ напечатает на форме значение S с

двумя знаками после точки “12.36” , автоматически округляя в сторону увеличения, т.к. округляемый знак >=5, а 12.344 округлится как 12.34 по общим математическим правилам округления

Page 34: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

32

5.II. Циклы DO ... LOOP с условием

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

Основным оператором цикла служит конструкция DO...LOOP. Для циклов и с предусловием, и постусловием она осуществляется в двух модификациях: While (пока условие верно) и Until (пока условие не верно).

Операторы с предварительной проверкой условия (до входа в цикл) а) Do While <условие продолжения цикла>

<операторы тела цикла> Loop

б) Do Until <условие прекращения цикла> <операторы тела цикла>

Loop Примеры.

Do While Per > 0 (1) ………… Loop

и Do Until Per <= 0 (2)

………… Loop

Первая конструкция работает, пока переменная Per больше 0, а вторая работает до тех пор, пока Per не станет равным или меньше 0. ☺ Ну, и чем они (1 и 2) отличаются друг от друга?

Продолжить?

Операторы тела цикла

Нет Да

Прекратить?

Операторы тела цикла

Да Нет

Page 35: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

33

Операторы с проверкой условия после выхода из цикла

в) Do <операторы тела цикла>

Loop While <условие продолжения цикла> г) Do

<операторы тела цикла> Loop Until <условие прекращения цикла> Условие выполнения или прекращения цикла здесь проверяется в конце.

Поэтому цикл с постусловием обязательно выполнится хотя бы один раз. Примеры.

Do (3) ………… Loop While Per > 0

и Do (4)

………… Loop Until Per <= 0 Третья конструкция выполнится хотя бы 1 раз, и будет работать, пока

переменная Per больше 0, а четвертая также выполнится 1 раз, и будет работать до тех пор, пока Per не станет равным или меньше 0. ☺ А в этих (3 и 4) какое отличие?

Да Продолжить ?

Операторы тела цикла

Нет

Нет Прекратить ?

Операторы тела цикла

Да

Page 36: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

34

Пока Вы думаете, заметим одну важную деталь: во всех циклах с условием значения переменных в условиях должны изменяться внутри цикла, иначе мы «зациклимся» - никогда не выйдем из цикла. В нашем случае должна меняться переменная Per.

5. Автофургон загружается со склада товаром. Погрузка прекращается, если общая масса загруженного товара превысит грузоподъемность фургона.

Постановка задачи. Входные переменные: Ves_tov – масса (вес) загружаемой единицы товара,

Gr_pod – грузоподъемность фургона Выходные переменные: S – общая масса загруженного товара Промежуточные переменные: нет Расчетные формулы: S = S + Ves_tov

Интерфейс. 2 управляющие кнопки: Начать погрузку, Выход 2 текстовых поля – Грузоподъемность и Всего загружено

Словесное описание алгоритма 1. Обнулить значение переменной S 2. Сравнить общую загруженную массу с грузоподъемностью. Если можно, то загрузить очередной товар, иначе выйти из цикла и вывести результат Всего загружено

Рис. 15. Погрузка фургона

Обратите внимание, что у нас переменная условия S меняется внутри цикла. Иначе программа может «зависнуть, зациклиться»

При зацикливании программу снимаете комбинацией клавиш Ctrl + Break

S < Gr_pod

S = S + Ves_tov

Нет Да

Начало

Конец

Грузоподъемность

Загружено

Ves_tov

Page 37: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

35

Код программы Furgon Option Explicit Dim Ves_tov, Gr_pod, S As Single Private Sub Command1_Click() S = 0 Gr_pod = Val(Text1.Text) Do While S < Gr_pod Ves_tov = Val(InputBox("Введи вес товара")) S = S + Ves_tov Text2.Text = Str(S) Loop If S > Gr_pod Then S=S-Ves_tov ' Для чего эта строка? Text2.Text = Str(S) MsgBox ("Фура загружена") End Sub

Отработайте данный и следующий вариант программы, «снимая лишний груз с фургона» и досрочно завершая погрузку по истечении товаров. Добавьте изменения в блок-схему.

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

Private Sub Command1_Click() ‘ Фургон 2 S = 0 : Text2.Text = "" Gr_pod = Val(Text1.Text) Do Ves_tov = Val(InputBox("Введи вес товара")) S = S + Ves_tov Text2.Text = Str(S) Loop Until S>=Gr_pod Or Ves_tov=0 ' два условия прекращения

цикла – завершается при выполнении любого из них (отношение Or - или) If S > Gr_pod Then S = S - Ves_tov: MsgBox ("Перегруз! Снимаем

груз") Text2.Text = Str(S) MsgBox ("Фура загружена") End Sub

Рис. 16. Попытка перегрузить фургон

Page 38: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

36

Самостоятельная работа №8.

В самостоятельных работах использовать циклы с условием 1. Сложные проценты по вкладу в банке рассчитываются по формуле S=S+S*Pr,

где S – сумма вклада, Pr – процентная ставка за период. За следующий период проценты начисляются уже от накопившейся суммы и т.д. Определить, за сколько периодов сумма вклада удвоится?

2. Бизнесмен Нипочёмкин умудрился взять беспроцентный кредит в Лохтронбанке и ежемесячно погашает ссуду нефиксированными платежами в размере не менее 5%, но и не более 10% от займа, когда как. Определить, когда же он расплатится с банком?

3. Коля Петров выпросил у отца 100 рублей и пошел кушать мороженое. Сколько у него останется денег, когда он заболеет ангиной, если известно, что ангиной можно заболеть после 5 порций мороженого в день, а мороженое он покупает по цене от 15 до 25 рублей?

4. Через сколько дней можно заработать гастрит, если он приобретается после приема 15 чипсов или 10 «кириешек», а Петр Максимов в день ест не меньше 2 чипсов и 1 «кириешки»?

5.III. Массивы Массив — это набор однотипных элементов с одним именем, каждый из

которых имеет свой порядковый номер, называемый индексом. Например, список студентов в группе, температура воздуха по дням и т.д.

В общем случае определение массива выполняется оператором:

Dim ИмяПерем ([НижнийПредел То] ВерхнПредел) [As тип]

Например: Dim А (1 to 15) as Single — объявление массива А, состоящего из 15 элементов, равносильно Dim А(15) as Single В дальнейшем мы будем пользоваться более простым определением

Имя_массива(кол-во_элементов). Dim В(10) as String

Visual Basic по умолчанию индексирует элементы массива, начиная с нуля, т. е. индекс 0 обозначает первый элемент массива, индекс 1 — второй и так далее. Оператор Option Base 1 позволяет задать индексацию массива с 1. Этот оператор должен находиться в секции (General) (Declarations). Но мы пока усложнять не будем, пусть нулевой элемент «останется за кадром», просто не будем им пользоваться. Тогда объявление массива Dim А(10) as Single для нас будет означать, что объявлен массив действительных чисел с именем А, состоящий из 10 элементов с именами А(1), А(2),...,А(10).

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

Page 39: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

37

6. Найти среднее значение оценок за экзамен в подгруппе из 12 студентов Постановка задачи. Входные переменные: Ball(12), i Выходные переменные: Sr Промежуточные переменные: S Расчетные формулы: S = S + Ball(i); Sr=S/12

Интерфейс. 3 управляющие кнопки: Расчет, Выход, Очистить

Sr и Ball(i) печатаем на форме Словесное описание алгоритма

1. Обнулить значение переменных S, Sr 2. Через InputBox заполнить массив Ball(12) 3. Подсчитать сумму баллов 4. Рассчитать средний балл 5. Распечатать входные и выходные значения 6. Очистить экран формы, решить задачу с другими значениями

Рис. 17. Блок-схема задачи 6

I = 1, 12

S=S+Ball(i)

Начало

Sr

Конец

S, Sr=0

I = 1, 12

Ввод Ball(i)

I = 1, 12

Ball(i)

Sr=S/12

Блок ввода

Блок расчета

Блок вывода

Page 40: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

38

Код программы

Option Explicit Dim i, S As Integer Dim Sr As Single Dim Ball(12) as Integer _______________________________________________________________________________________________________________________________-----

Private Sub Command1_Click() S = 0 ‘ Хотя при каждом запуске программы переменные имеют ‘нулевые

или пустые значения, их надо обнулять, иначе при новом решении Sr = 0 ‘ (щелчке) остается старое значение переменной For i = 1 To 12 Ball(i) = Val(InputBox(“Введи оценку”,”Ввод оценок”)) If Ball(i)>5 or Ball(i)<1 then Msgbox “Оценки от 1 до 5! “ : i=i-1 ‘ дополнение Next I ‘ для проверки корректного ввода, For i = 1 To 12 ‘ в блок-схеме не отражена ! S = S + Ball(i) Next i For i = 1 To 12 Print i; Ball(i) Next i Sr=S/12 Print "Средний балл в группе = " & Sr End Sub ____________________________________________________________________

Private Sub Command3_Click() Form1.Cls ‘ очистить форму End Sub ‘ в дальнейшем очень даже пригодится!!! Отработайте данную программу. При печати в операторе печати

попробуйте использовать запятую вместо точки с запятой. При ; следующий текст выводится без пробела, а , выводит по зонам из 10 символов. Можно пользоваться и символом сцепления &. Данные вводите через правую цифровую зону клавиатуры и сразу Enter оттуда же. При вводе «мышь» не нужна!

Но: заполнять массив для учебных целей через Input Box непродуктивно и утомительно (нам же не требуется абсолютная достоверность введенных значений!), поэтому мы автоматизируем и процесс заполнения массивов цифровыми значениями через генератор случайных чисел.

Формат генератора имеет вид: RND[(Число)], в скобках в качестве параметра может быть любое число - RND(3) или отсутствовать – просто RND. Генерироваться будут случайные числа в диапазоне от 0 до 1: 0.21456, 0.9555, 0.5395 и т.д. Но: при каждом новом запуске программы ряд случайных чисел будет повторяться. Иногда это нужно, но если при следующем запуске программы нужна другая последовательность случайных чисел, то перед использованием RND надо добавить оператор Randomize. Тогда последовательность случайных оценок из нашего примера 9 будет генерироваться следующими операторами:

Page 41: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

39

Randomize For i = 1 To 12 Ball(i) = Int(Rnd * 4) + 2 Next i

Здесь оператор Int выдаст целую часть случайных чисел в диапазоне от 0 до 3, т.е. 0,1,2 или 3. А прибавляя к этому числу 2 (+ 2), мы получим ряд случайных целых чисел от 2 до 5. В общем случае для генерации чисел в определенном диапазоне можно пользоваться формулой X = A + RND*(B - A), где А – нижняя граница диапазона, В – верхняя граница. Если нужны только целые числа, то X = A + INT (RND * (B – A + 1)). Например: INT(RND*101) выдаст целые числа в диапазоне от 1 до 100; INT(RND*101) - 50 сгенерирует числа от -50 до 50.

В предыдущем 9 примере блок ввода через InputBox замените генерацией и отработайте программу заново. Попробуйте при включенном и отключенном Randomize (делая оператор как комментарий). Сделайте выводы. Можно пользоваться конструкцией Randomize Timer и INT(RND(Timer)*n), тогда порядок выбора случайных чисел будет зависеть от внутреннего времени компьютера, n – произвольное число. Сгенерируются целые числа от 0 до n-1. При каждом запуске будет новая последовательность, хотя в рандомизации можно обойтись и без таймера – работает!

Примеры задач на одномерные массивы.

1. Поиск максимального элемента массива 7. Найти максимальный элемент в массиве из 10 натуральных чисел

Постановка задачи. Входные переменные: А(10) Выходные переменные: Max – значение максимального элемента, Nmax –

номер максимального элемента (индекс) Промежуточные переменные: i Расчетные формулы: Max = А(i), Nmax = i Интерфейс. 3 управляющие кнопки: Поиск, Очистить , Выход Элементы массива и найденные значения печатаем на форме Словесное описание алгоритма

1. Обнулить значение переменных Max, Nmax 2. Сгенерировать значения элементов массива( в диапазоне от 1 до 20). Параллельно напечатать массив на форме

3. Присвоить переменным Max, Nmax значения первого элемента 4. В цикле от второго элемента до последнего поочередно сравнивать значения элементов массива с Мах. Если значение текущего элемента больше Мах, то Мах присвоить значение текущего элемента, а его индекс переменной Nmax.

5. Распечатать выходные значения 6. Очистить экран формы, решить задачу с другими значениями

Блок-схема – самостоятельно

Page 42: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

40

Код программы поиска Мах

Option Explicit Dim i, Max, Nmax As Integer Dim A(10) as Integer _______________________________________________________________________________________________________________________________-----

Private Sub Command1_Click() Max = 0 : Nmax = 0 Randomize For i = 1 To 10 A(i) = Int(Rnd * 21) Print i, A(i) Next i Max = A(1) : Nmax = 1 ‘ Пусть пока первый элемент считается максимальным For i = 2 To 10 If A(i) > Max then Max = A(i) : Nmax = i Next i Print ‘ пустой оператор Print выведет пустую строку после печати

массива для удобства чтения – разделит массив и выходные данные Print " Максимальное значение = " & Max Print “ Его порядковый номер = “& Nmax End Sub

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

2. Сортировка элементов массива методом «пузырька» 8. Отсортировать массив натуральных чисел В(10) в порядке возрастания

Одним из простейших методов упорядочивания (сортировки) числовых массивов является т.н. метод «пузырька». Суть алгоритма заключается в последовательном сравнении двух соседних элементов и их перестановке, если последующий элемент больше или меньше (в случае сортировки по убыванию) предыдущего. Если элементов массива N, то такой алгоритм должен выполняться N-1 раз. Тогда, если максимальное число находилось на последнем N-ом месте, оно после каждого цикла будет подниматься на место N-1, N-2, …2, 1 место, т.е. напоминает всплывающего пузырька. Алгоритм может завершиться и раньше, если максимальное число не последнее, но N-1 дает гарантированный результат при любом первоначальном порядке расположения элементов массива. Приведен только алгоритм сортировки (остальное мы уже умеем!).

Словесное описание алгоритма 1. Сгенерировать значения элементов массива( в диапазоне от 1 до 50). Параллельно напечатать массив на форме до сортировки

2. В цикле от первого элемента до предпоследнего поочередно сравнивать значения элементов i и i+1 . Если значение последующего элемента с

Page 43: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

41

номером i+1 больше текущего с номером i, то значения этих элементов переставить местами. Повторить 10-1 раз

3. Распечатать массив после сортировки 4. Очистить экран формы, решить задачу с другими значениями

....................................

For J= 1 To 9 ‘ после первого цикла наименьшее уже внизу, поэтому мы в For i = 1 To 10-j ‘следующий раз доходим на 1 позицию меньше If B(i+1) > B(i) then Prom = B(i) ‘ промежуточная переменная Prom B(i) = B(i+1) ‘ помогает переставлять B(i+1) = Prom ‘ значения двух переменных Endif Next i Next J “ Это часть программы сортировки без ввода и вывода ……………… Составьте работающий проект программы (допишите коды для печати

и генерации), получите верные результаты. Нарисуйте блок-схему. Измените алгоритм на сортировку по убыванию, получите результаты Недостатком вышеприведенных алгоритмов работы с массивами является то,

что мы количество элементов в массиве задаем 1 раз в коде программы и изменять не можем, если файл уже исполняемый (.exe). Программа будет более универсальной, если переопределить массив оператором Redim, указав вводимое значение количества элементов. Такая плавающая размерность массива (количество элементов) определяется примерно следующей конструкцией:

Dim A() as Single ‘ в секции General сначала задается пустая ‘ размерность массива Dim N as Single ‘определение задаваемого с клавиатуры кол-ва элементов …………………

N=Val(InputBox(“Введи кол-во элементов массива“) ReDim A(N) ‘ переопределение, тип переменной заново задавать или

‘ изменять не можем, остается ранее определенный ………………… ………………………‘другие операторы

For i = 1 To N ……………………… ‘другие операторы

Измените предыдущий проект программы сортировки по образцу, получите результаты при любом вводимом N

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

сгенерированному элементу прибавляйте маленький шаг. A(i) = 10 + Int(Rnd*11) + i*0.5 – сгенерирует возрастающий

диапазон от 10.5 до 25 при изменении i от 1 до 10 2. Чтобы массив генерировался и выводился на форме до нажатия на кнопку

Расчет, лучше добавить еще одну управляющую кнопку Генерация и модуль генерации и печати исходного массива прикрепить к ней. Примерный текст кода приведен ниже.

Page 44: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

42

Option Explicit Dim A() As Integer Dim N, i As Single Private Sub Command1_Click() ‘ кнопка генерации N = InputBox("Введи размерность массива", "Количество элементов") ReDim A(N) ' N=30 Randomize For i = 1 To N A(i) = -10 + Int(Rnd * 11) + i * 0.5 Next i Print "1 декада ", "2 декада ", "3 декада " Print For i = 1 To 10 Print A(i), A(i + 10), A(i + 20) Next i Beep ' звуковой сигнал бип End Sub А кнопку расчета или преобразования «закодируете» по своим вариантам. Кнопки

Выход и Очистить – обязательны.

Самостоятельная работа №9.

Составьте следующие проекты с генерацией значений и вводом произвольного количества элементов одномерных массивов:

1. В массиве натуральных чисел A(N) найти сумму положительных элементов 2. В массиве натуральных чисел A(N) найти количество положительных

элементов 3. В массиве натуральных чисел A(N) найти количество отрицательных

элементов 4. В массиве натуральных чисел A(N) найти сумму элементов, значения

которых больше 10 5. В массиве натуральных чисел A(N) найти количество элементов, значения

которых меньше 10, но больше 0 6. В массиве натуральных чисел A(N) найти среднее значение положительных

чисел 7. В массиве натуральных чисел A(N) найти среднее значение элементов,

значения которых находятся в диапазоне от 10 до 30 включительно 8. В массиве натуральных чисел A(N) найти количество четных чисел 9. В массиве натуральных чисел A(N) найти количество нечетных чисел 10. В массиве натуральных чисел A(N) найти количество кратных 4 чисел 11. В массиве натуральных чисел A(N) найти среднее арифметическое четных

чисел

Page 45: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

43

12. В массиве натуральных чисел A(N) найти количество положительных и количество отрицательных чисел

13. В массиве A(N) найти количество четных и количество нечетных чисел

* - задания повышенной сложности

14. В массиве натуральных чисел A(N) значения положительных элементов удвоить, отрицательных – возвести в квадрат

15. В массиве натуральных чисел A(N) найти количество перемен знака числа 16. Из массива натуральных чисел A(N) сформировать массив В(N), в котором

элементы представлены в обратном порядке * 17. В массиве А(N) поменять местами первый и последний элементы 18. В массиве А(N) поменять местами максимальный и минимальный элементы

* 19. Переставить в массиве А(N) элементы таким образом, чтобы в начале

оказались положительные элементы, а в конце – отрицательные * 20. В массиве А(N) найти первый отрицательный элемент и его место 21. В массиве А(N) найти последний отрицательный элемент и его место 22. Из двух массивов А(N) и В(N) получить третий С(2*N), в котором первые

элементы из А(N), а последние из В(N) в таком же порядке 23. Из двух массивов А(N) и В(N) получить третий С(2*N), в котором элементы

следуют попеременно из первых двух: А(1), В(1), А(2), В(2), … 24. Из элементов массива А(N) получить 2 массива: положительных чисел и

отрицательных чисел, следующих в том же порядке * 25. В массиве А(N) найти максимальный из отрицательных чисел элемент и его

место

Самостоятельная работа №10. Количество осадков в мм за месяц представлено в виде массива. Найти: 1. Общее количество осадков за месяц и среднее значение за день 2. Количество дождливых дней 3. Количество дней без осадков 4. Количество осадков за месяц 5. Процент дождливых дней и процент погожих дней 6. В какой декаде выпало больше осадков * 7. Самую сухую декаду * 8. Самый длительный период дождей (дождь был ежедневно) * 9. Самый сухой период (без дождей) *

Page 46: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

44

10. Самый дождливый день (дни) * 11. Декаду с наибольшим количеством дождливых дней * 12. Сколько дней количество осадков превышало среднемесячное значение? 13. Коэффициент вероятности сухого дня 14. Коэффициент вероятности дождливого дня 15. Коэффициент вероятности того, что три дня подряд будут сухими * 16. Коэффициент вероятности того, что три дня подряд будут дожди * * - При генерации учесть, чтобы количество дождливых и сухих дней было примерно равным, осадки - от 5 до 20 мм за сутки. Сгенерировать примерно от -20 до 20, а внутри цикла генерации - If A(i) <5 then A(i) =0

Самостоятельная работа №11. Ежедневная температура воздуха представлена в виде двух массивов:

Day(30) и Night (30). Найти:

1. Самый холодный день 2. Самый теплый день 3. Самую холодную ночь 4. Самую теплую ночь 5. Самый высокий перепад температур за сутки между днем и ночью * 6. Самый высокий перепад температур днем * 7. На сколько градусов средняя температура дня выше средней ночной? 8. Разницу температур между первым днем месяца и последним 9. Среднесуточную температуру за месяц 10. Среднесуточную температуру за первую половину месяца 11. Какая декада самая холодная? 12. Какая декада самая теплая? 13. За какую декаду температура изменилась больше всего? * 14. Разницу средних температур между первой и последней декадой 15. По разнице температур между первыми 3 и последними 3 днями месяца

определить время года * 16. По разнице температур между днем и ночью найти пасмурные дни * 17. По разнице температур между днем и ночью найти погожие дни *

* - Для своих вариантов сгенерируйте соответствующий сезон – растущая или понижающаяся температура воздуха

Page 47: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

45

5.IV. Двумерные массивы Visual Basic позволяет создавать и многомерные массивы, размерность

которых может доходить до 60. Простейший случай многомерного массива можно представить в виде таблицы с двумя координатами – номер строки и номер столбца (двумерные массивы), хотя в памяти они располагаются последовательно. При объявлении размеры индексов перечисляются через запятую:

Dim A(10,15) as Integer – означает двумерный массив, состоящий из 10 строк и 15 столбцов. Например, данные о результатах сессии по 5 предметам группы из 25 студентов можно представить как Dim NN_61d(25,5) as Byte. Здесь первый индекс будет означать порядковый номер студента, а второй – экзамен по предмету. Тип Byte (короткое целое) используем для экономии памяти. Тогда запись NN_61d(14,2)=5 будет означать, что студент под номером 14 на втором экзамене (по информатике) получил(а) 5(отлично).

Обрабатываться такие массивы могут как по столбцам, так и по строкам. Рассмотрим простенький пример.

9. В группе из 10 студентов по 5 дисциплинам определить средний балл по группе и студентов-отличников.

Постановка задачи. Входные переменные: А(10,5) Выходные переменные: S – средний балл Промежуточные переменные: i – строка , j – столбец, Prisnak – отличник

или нет Расчетные формулы: S = S + А(i,j), S = S/50

Интерфейс. 4 управляющие кнопки: Генерация, Расчет, Очистить, Выход Элементы массива и найденные значения печатаем на форме

Словесное описание алгоритма 1. Обнулить значение переменной S 2. Сгенерировать значения элементов массива ( в диапазоне от 2 до 5). Параллельно напечатать массив на форме

3. В каждом цикле, начиная от первой строки, установить признак отличника Prisnak = True , а внутри от первого столбца до последнего накапливать сумму баллов и установить признак отличника False, если встретится оценка не 5. Если по окончании внутреннего цикла (для каждого студента) признак отличника окажется истиной, то выводим на печать его номер (индекс i ) и начинаем новый внешний цикл (переходим к следующему студенту).

4. Выведем средний балл по подгруппе. 5. Очистим экран формы, решим задачу с другими значениями

Page 48: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

46

Рис. 18. Блок-схема Session с двумерным массивом

Начало

Конец

Включить Timer

Генерация

S = 0

Заголовок

i = 1, 10

j =1, 5

i=1, 10

j =1, 5

Отличник

Печать i

Пустая строка

Печать Session(i,j)

Prisnak=True

S=S+Session(i,j)

Sess(i,j)<>5 Да

Отличник?

Средний балл

Да

Блок генерации и вывода массива на форме

Prisnak=False

Page 49: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

47

Код программы Session

Option Explicit Dim i, j As Integer Dim Session(10,5) as Byte Dim S as Single Dim Prisnak as Boolean _______________________________________________________________________________________________________________________________-----

Private Sub Command1_Click() ‘ генерация и печать массива Randomize Print “ Фамилия “,“ Математика ”, “ Информатика “, “

История “, “Философия “, “Английский язык “ For i = 1 To 10 ‘ внешний цикл по студенту Print i, For j = 1 To 5 ‘ внутренний цикл по предмету Session(I,j) = Int(Rnd * 4)+ 2 Print Session(I,j), ‘ запятые важны!! Next j Print ‘ пустой оператор для перехода на новую строку Next i End Sub _______________________________________________________________________________________________________________________________-----

Private Sub Command2_Click() S = 0 For i = 1 To 10 Prisnak = True For j = 1 To 5 S = S + Session(I,j) If Session(I,j)<>5 then Prisnak = False Next j If Prisnak = True then Print i, “ - отличник” Next i Print Print " Средний балл по группе = " & S/50 End Sub

Отработайте данную программу. Не беда, если у Вас не окажется отличников: «пятерки» случайно не зарабатываются! А если серьезно, то в таком случайном раскладе от 2 до 5 по теории вероятности очень маленькая вероятность того, чтобы у кого-то было 5 «пятерок». Поэтому я сам сгенерировал оценки только 4 и 5 (см. Рис. 19). Вы тоже измените диапазон генерации, текст сообщения и станьте отличником.

Аналогичным образом посчитайте «ударников», «троечников», и, не дай бог, «двоечников». Если двоек много, то прибавьте по 0.5 - 0.7 в генерации: Session(i, j) = Int(Rnd(Timer) * 4 + 0.5) + 2

If Session(i,j) = 6 Then Session(i,j) = 5 ‘ пусть будет больше «пятерок»

Page 50: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

48

Рис. 19. Интерфейс и результат работы Session

10. 5 предприятий райпо выпускают 4 вида одинаковых товаров и имеют с этого прибыль. Определить: а) У какого предприятия и какой товар приносит наибольшую прибыль? б) Какой товар приносит наибольшую прибыль райпо? в) Какое предприятие наименее прибыльное?

Решение задачи сводится к нахождению максимума и его координат в двумерном массиве из 5 строк (предприятий) и 4 столбцов (товаров), максимума суммы значений из четырех столбцов и такого же минимума из пяти строк.

Постановка задачи. Входные переменные: А(5,4) Выходные переменные: MaxPrib – максимальная прибыль, NpredMax – номер предприятия с

МахPrib, NtovMax - номер товара с МахPrib MaxTov – максимальная прибыль по товарам, NmaxStov – номер товара с

максимальной суммой прибыли MinPred – минимальная прибыль по предприятиям, NMinPred – номер

этого предприятия Промежуточные переменные: i – строка , j – столбец, Stov(j) – массив

сумм по товарам, Spred(i) – массив сумм по предприятиям Расчетные формулы: MaxPrib = MaxPrib + А(i,j), Stov(j) = Stov(j) +

А(i,j), Spred(i) = Spred(i) + А(i,j)

Page 51: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

49

Интерфейс. 4 управляющие кнопки: Генерация, Расчет, Очистить, Выход Элементы массива и найденные значения печатаем на форме

Словесное описание алгоритма 1. Обнулить значения всех переменных 2. Сгенерировать значения элементов массива (в тыс. рублях, примерно от 200 до 1000). Вывести массив на форму

3. Стандартный поиск максимума или минимума 4. Выведем результаты. 5. Очистим экран формы, решим задачу с другими значениями

Отлаженный код для варианта а) Option Explicit Dim i, j As Integer Dim A(5, 4), Stov(4), Spred(5) As Single Dim MaxPrib, NpredMax, NtovMax, MaxTov, NmaxStov, MinPred, NMinPred As

Single

Private Sub Command1_Click() ‘ блок генерации от 200 до 1000 Randomize Timer Print "Ïðåäïðèÿòè", "Ñûð ", " Ìàñëî ", " Ìîëîêî ", " Êåôèð " For i = 1 To 5 ' âíåøíèé öèêë ïî предприятиям Print i, For j = 1 To 4 ' âíóòðåííèé öèêë ïî товарам A(i, j) = Int(Rnd(Timer) * 801) + 200 Print A(i, j), Next j Print ' ïóñòîé îïåðàòîð äëÿ ïåðåõîäà íà íîâóþ ñòðîêó Next i End Sub

Private Sub Command2_Click() ‘ кнопка Расчет MaxPrib = 0: NpredMax = 0: NtovMax = 0: MaxTov = 0: NmaxStov = 0: MinPred

= 0 MaxPrib = A(1, 1): NpredMax = 1: NtovMax = 1 For i = 1 To 5 For j = 1 To 4 If A(i, j) > MaxPrib Then MaxPrib = A(i, j): NpredMax = i: NtovMax = j ‘ запоминаем значения End If ‘ и координаты Next j Next i Print Print " Ìàêñèìàëüíàÿ ïðèáûëü = " & MaxPrib & " ó ïðåäïðèÿòèÿ ñ N= " &

NpredMax & " ïî òîâàðó " & NtovMax Print End Sub

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

Page 52: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

50

Рис. 20. Результат работы Coop (вариант а)

Отлаженный код для варианта б) Private Sub Command2_Click() ' MaxPrib = 0: NpredMax = 0: NtovMax = 0 ' эту строку "закомментировали" за

ненадобностью для варианта б) MaxTov = 0: NmaxStov = 0 ' MinPred = 0: NMinPred=0 ' эту тоже по той же причине For i = 1 To 4 Stov(i) = 0 ' обнуляем массив для другого решения Next i ' MaxPrib = A(1, 1): NpredMax = 1: NtovMax = 1 ' эту тоже по той же причине For i = 1 To 5 For j = 1 To 4 Stov(j) = Stov(j) + A(i, j) ' Формируем массив по сумме товаров Next j Next i ' массив сформирован, начинем искать максимальную прибыль по товарам MaxTov = Stov(1): NmaxStov = 1 ' пока первый товар приносит максимальную

прибыль For i = 2 To 4 ' разницы нет, используем j или i, или еще другую

временную переменную If Stov(i) > MaxTov Then MaxTov = Stov(i): NmaxStov = i End If Next i Print Print " Максимальную прибыль = " & MaxTov & " дает товар с N= " & NmaxStov Print ' А для чего этот пустой оператор? Догадайся сам(а)... End Sub

Вариант в) выполнить самостоятельно, добавляя или изменяя коды в а) или б) или используйте три разные кнопки расчетов в одной форме.

Page 53: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

51

Самостоятельная работа №12.

В самостоятельных работах размерность массивов и значения переменных задавать с TextBox, данные генерировать по образцу.

В массиве действительных чисел A(n,m): 1. Переставить местами первую и последнюю строки 2. Переставить местами первый и последний столбец 3. Найти максимальный элемент К-той строки 4. Найти минимальный элемент L-того столбца 5. Найти среднее значение максимальных элементов по строкам 6. Найти среднее значение минимальных элементов по столбцам 7. Найти максимальный элемент второй строки и заменить им все

элементы, значение которых меньше его 8. Найти максимальный элемент К-той строки и заменить им все

отрицательные числа массива 9. Найти максимальный элемент К-той строки и заменить им все

положительные числа строки L

10. Найти сумму элементов главной диагонали квадратной матрицы A(n, n) (А(1,1) + А(2,2) +… + А(n,n))

11. Найти максимальный элемент главной диагонали квадратной матрицы A(n, n)

12. Найти сумму элементов, находящихся выше главной диагонали квадратной матрицы A(n, n)

13. Найти сумму элементов, находящихся ниже главной диагонали квадратной матрицы A(n, n)

14. Поменять местами столбцы К и L 15. Поменять местами строки L и К 16. Отсортировать массив «пузырьковым» методом по возрастанию

значений первого столбца (переставить строки) 17. Отсортировать массив по убыванию значений второго столбца 18. Найти максимальный элемент в каждой строке и заменить им все

элементы данной строки 19. Поменять местами максимальный и минимальный элементы массива 20. Переставить местами первый столбец и последнюю строку в A(N,N)

Page 54: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

52

6. Работа со строковыми переменными Так как любую информацию можно рассматривать как набор допустимых

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

Некоторые функции для обработки строковых переменных Таблица 5

Функция Формат и назначение Пример Результат Dim S as String : S = ” Привет, друг! ” ‘ для примера

Определение длины текста

Len Len(S) – возвращает длину строки S в количестве символов

Len(S) 15 - пробел тоже символ!

Вырезание подстроки

Left Left(S,K) – возвращает К символов вырезанных слева из строки S

Left(S,5) “ Прив”

Right Right(S,K)- возвращает К символов, вырезанных справа из строки S

Right(S,5) “руг! ”

Mid

Mid(S,N,K)- возвращает строку длиной К символов, вырезанных из строки S, начиная с позиции N

Mid(S,5,10) “вет, друг!”

Удаление пробелов

LTrim LTrim(S)- удаляет все начальные пробелы слева LTrim(S) ”Привет, друг!

RTrim RTrim(S)- удаляет все конечные пробелы справа

RTrim(S) ” Привет, друг!”

Trim Trim(S)- удаляет все начальные и конечные пробелы

Trim(S) ”Привет, друг!”

Смена регистра

LCase LCase(S)- преобразует все символы строки S к нижнему регистру (все строчные)

LCase(S) ” привет, друг! ”

UCase UCase(S)- преобразует все символы строки S к верхнему регистру (все заглавные)

UCase(S) ” ПРИВЕТ, ДРУГ! ”

Объединение строк

& Слияние строк (конкатенация) S & ”Пока!” ” Привет, друг! Пока!”

Page 55: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

53

+ Сложение5 “Hel”+”lo!” “Hello!” Преобразование ASCII – кодов символов

Asc Asc(S) –возвращает значение ASCII-кода первого символа строки S

Asc(“a”) 97

Chr Chr(N)- возвращает символ с ASCII-кодом N

Chr(97) a (a –латинская )

Рассмотрим примеры. 11. Полные фамилию, имя и отчество преобразовать в фамилию и инициалы: Максимов Николай Андреевич = Максимов Н.А.

Словесное описание алгоритма: в 3 текстовых поля вводим F,I,O и при помощи сцепления с пробелом и точками, вырезания первого символа из Имени и Отчества формируем FIO, выводим в 4-ое поле.

Dim Fam,Im,Ot,FIO As String Fam = Text1.Text Im = Text2.Text Ot = Text3.Text FIO = Fam & " " & Mid(Im, 1, 1) & "." & Mid(Ot, 1, 1) & "." Text4.Text = FIO Да, все просто, алгоритм - линейный. А теперь усложним задачу - пусть FIO

полностью вводятся в одно поле, а не в 3 отдельно. Алгоритм усложняется тем, что нам надо найти позиции первого пробела после фамилии и второго, потому что длины фамилий и имени неизвестны. Ограничения: пробел везде один!

Fam = Text1.Text L_Fam = Len(Fam) ‘ общая длина текста Pr = 0 ' некий признак, определяющий первый или второй пробел For i = 1 To L_Fam ‘ ищем пробелы до конца текста If Pr = 0 And Mid(Fam, i, 1) = " " Then L_Fm = i - 1 ' первый пробел в позиции i, значит длина фамилии равна i минус 1 Pr = 1 ' первый пробел найден Else If Pr = 1 And Mid(Fam, i, 1) = " " Then L_Im = i - 1 - L_Fm ' второй пробел Pr = 2 ‘ найден End If End If Next i If Pr = 0 Then MsgBox ("Введена только фамилия или нет ни одного пробела") If Pr = 1 Then MsgBox ("Отсутствует отчество") If Pr = 2 Then ‘ оба пробела есть, вырезаем и сцепляем

5 Математическое сложение работает и с текстовыми переменными, но рекомендуется использование & (сцепления). C разными типами переменных при использовании знака + возможны ошибки

Page 56: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

54

FIO = Mid(Fam,1,L_Fm)&" "&Mid(Fam,L_Fm+2,1)&"." & Mid(Fam,L_Fm+1+L_Im+1,1)&"." Text4.Text = FIO End If

12. Дана фраза. Найти количество гласных букв и их долю в процентах в общем количестве символов без учета пробелов.

Словесное описание алгоритма Задача сводится к нахождению общего количества символов (длины текста),

нахождению количества пробелов и вычитанию с общего количества символов, нахождению количества 8 гласных букв и к простой арифметике вычисления процентного содержания.

………………..’ описание переменных S = Text1.Text L = Len(S) ‘ общая длина текста For i = 1 To L ‘ ищем пробелы до конца текста If Mid(S,i,1)=" " Then K_Prob=K_Prob+1 ' находим пробелы If Mid(S,i,1)="А" or Mid(S,i,1)="а" or Mid(S,i,1)="Е" or

Mid(S,i,1)="е" or Mid(S,i,1)="И" or Mid(S,i,1)="и" or Mid(S,i,1)="О" or Mid(S,i,1)="о" or Mid(S,i,1)="У" or Mid(S,i,1)="у" or Mid(S,i,1)="Э" or Mid(S,i,1)="э" or Mid(S,i,1)="Ю" or Mid(S,i,1)="ю" or Mid(S,i,1)="Я" or Mid(S,i,1)="я" Then K_Gl=K_Gl + 1 ‘ вот так каждый символ

End If ‘ Мы не считали Ё, Й, забыли Ы Next i Prozent= K_Gl /(L- K_Prob) ‘ процент гласных Print “Всего во фразе ”& L &” символов,” &” из них ”& K_Gl &” гласных, в процентах ”& Prozent ”%” Такой алгоритм не самый красивый, особенно когда количество входящих

символов велико: расписывать надо каждый символ с оператором Mid. Алгоритм станет гораздо изящней и универсальней, если набор искомых символов формировать в виде текста и в цикле искать вхождение символа в другой текст. Получается цикл в цикле. Берем первый символ из S1 и ищем его вхождение в S2 в цикле от первого до последнего (внутренний цикл), дальше во внешнем цикле переходим к следующему символу и опять ищем во втором тексте с самого начала. Алгоритм приведен ниже на Рис. 21.

Из законов Мерфи ☺ Второй закон Вейнберга. Если бы строители строили здания так же, как программисты пишут программы, первый же залетевший дятел разрушил бы цивилизацию. ☺ Правило точности Рэя. Измеряй микрометром. Отмечай мелом. Отрубай топором. ☺ Первый закон ремонта. Нельзя починить то, что еще не сломано. ☺ Закон Дж. Б. Шоу. Кто может - делает. Кто не может - учит. Кто не может учить – управляет.

Page 57: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

55

Рис. 21. Вхождение символов одного текста в другой

Код программы и отладку - самостоятельно

В других самостоятельных работах текст в Text Box можете вставлять через буфер обмена, скопировав с уже готовых текстов с других файлов: таковых с расширением .txt много и в системных папках.

А в свойствах самого Text Box установите Multiline = True и SrollBars = 2-Vertical. Тогда любой длинный текст в окне можно будет просматривать обычной прокруткой по вертикали

Самостоятельная работа №13.

Дана фраза (текст). Найти: 1. Количество цифровых символов

2. Сколько слов заканчивается на «я»?

3. Сравнить количество вхождения «а» и «я» (частоту вхождения символа)

4. Количество слов

5. Количество предложений

6. Количество собственных имен

7. Количество латинских символов

S1 = text1.text S2 = text2.text

L1=Len(S1) L2=Len(S2)

For I =1 to L1

For j =1 to L2

Mid(S1, I ,1) = Mid(S2, j ,1)

K=K+1

Page 58: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

56

8. Количество английских слов (текст состоит из русских и английских слов)

9. Количество русских слов (текст состоит из русских и английских слов)

10. Перевести некоторые английские термины из информатики в русские или наоборот

11. Заменить все названия «компьютер» русским «ЭВМ»

12. Сколько в тексте содержатся слов-палиндромов (читаются одинаково и справа налево)

13. «Зашифровать» и обратно «расшифровать» текст, меняя порядок символов в каждом слове на обратный

14. «Зашифровать» и обратно «расшифровать» текст, меняя «а» и «я» местами

15. Распечатать ASCII коды всех символов (вывести на форме)

16. Определить среднюю длину предложений (количество слов)

7. Приложения

1. Контроль вводимых значений

Корректность вводимых значений можно осуществлять непосредственно при вводе в окно Textbox, задать событию Text1_Change() работу двойным щелчком в окне Textbox. В примере при попытке ввести значение большее 30 автоматически присвоит максимально допустимое значение 30 Private Sub Text1_Change()

If Val(Text1.Text) > 30 Then Text3.Text = 30 : Msgbox “Хватит!” End Sub

2. Скрытие и отображение объектов

Чтобы временно вскрыть объект или сделать не чувствительным, не реагирующим, можно менять его свойства непосредственно в окне свойств или программно: Command4.Visible = False ‘ Скрытие кнопки управления Text1.Visible = True ‘ Открытие текстового окна Text1.Enabled = False ‘ Окно не чувствительно, запрет изменения

3. Проверку делимости можно производить и сравнением деления с остатком с делением без остатка (разные «косые»): If A(i)/4 = A(i)\4 then print “Делится на 4 без остатка” или If A(i) Mod 4 = 0 then .

4. Конвертер валют

Ниже приведена маленькая программ для перевода рублей в доллары и евро. Дополнительно появились окна (контейнеры) Frame1 и Frame2, которые

Page 59: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

57

позволяют размещать независимые инструменты: свойства индексированных кнопок будут действительны только в пределах контейнера Frame. Иногда это нужно для кнопок OptionButton, CheckBox и других.

Также можно создавать и массив кнопок и других инструментов. Он создается автоматически, когда Вы копируете объект во время разработки интерфейса. Тогда к объектам можно обращаться по номеру индекса. По умолчанию индекс начинается с 0. Здесь приведен образец из массива Text1(0)-Text1(4). Dim kd, ke, rub, d, evro As Double Private Sub Text1_Change(Index As Integer)

kd = Val(Text1(2).Text) ' курс доллара ke = Val(Text1(3).Text) ' курс евро rub = Val(Text1(1).Text) ' сумма в рублях d = rub / kd ' сумма в долларах evro = rub / ke ' сумма в евро Text1(4).Text = evro ' Text1(0).Text = d '

Рисунки и иконки можно вставлять стандартные VB6. Адрес указан.

Page 60: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

58

Работающее окно Конвертера

5. Проверка таблицы умножения

Маленькая программа, но здесь продемонстрированы приемы скрытия и открытия ненужных кнопок. Кнопка выхода появляется только после десяти ответов и при правильных ответах не менее 90 процентов. Можете расширить и для деления, увеличить диапазон до двузначных чисел и т.д. Option Explicit Dim A, B, C, Z, i, ball, k As Single Private Sub Command1_Click(Index As Integer) k = k + 1 Label4.Caption = "" Label5.Caption = "" Text1(6).Text = "" Randomize A = Int(Rnd * 9) + 1 Text1(0).Text = A B = Int(Rnd * 8) + 2 Text1(1).Text = B C = A * B Command2.Visible = True Command1(0).Visible = False End Sub Private Sub Command2_Click() Z = Val(Text1(6)) Label4.Caption = Str(C) If C = Z Then ball = ball + 1 Label5.Caption = "Правильно!!!" Label5.BackColor = vbGreen Else Label5.Caption = "Ошибка! " Label5.BackColor = vbRed End If

Page 61: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

59

Label11.Caption = Str(k) Label12.Caption = Str(ball) Label13.Caption = Str(Int((ball / k) * 100)) Command1(0).Visible = True « скрываю и открываю кнопки Command2.Visible = False If k > 10 And Int((ball / k) * 100) >= 90 Then Command3.Visible = True End Sub Command3 –кнопка выхода Некоторые кнопки остались как индексированные переменные массива

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

6. Расчет страниц для брошюры Пример маленькой, но полезной программы для печати в Wordе

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

Dim c As Integer ' признак выходного лотка Private Sub Command1_Click() ‘ Кнопка Рассчитать colpage = Val(Text1.Text) ' количество страниц n1 = Val(Text2.Text) ' номер начальной страницы Text3.Text = "" Text4.Text = "" If colpage <= 0 Or n1 <= 0 Then MsgBox "Значения 2 полей Номер 1-ой и кол-во стр

надо заполнить! и потом еще раз расчет": GoTo kon 'иногда можно использовать и переход по goto

If colpage \ 4 <> colpage / 4 Then MsgBox "Кол-во страниц на 4 не делится! Учи таблицу умножения. Good Bye!": End

' Основной текст программки в цикле. Остальное - мелочи For i = 2 To colpage / 2 Step 2

Text3.Text = Text3.Text & Trim(Str(colpage + n1 + 1 - i)) & "," & Trim(Str(n1 - 2 + i)) & ","

If c = 1 Then ' другой лоток Text4.Text = Text4.Text & Trim(Str(n1 - 1 + i)) & "," & Trim(Str(colpage + n1 - i)) & ","

End If If c = 0 Then ' стандартный лоток, по умолчанию в начале всегда 0

Text4.Text = Trim(Str(n1 - 1 + i)) & "," & Trim(Str(colpage + n1 - i)) & "," & Text4.Text End If

Next i ' Trim - удаляет лишние пробелы, чтобы в окне Word уместилось большее

количество страниц, пока примерно умещалось до 150 страниц

Page 62: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

60

l1 = Len(Text3.Text) l2 = Len(Text4.Text) Text3.Text = Mid(Text3.Text, 1, l1 - 1) ‘ удаляем последнюю запятую, Text4.Text = Mid(Text4.Text, 1, l2 - 1) ‘ которая остается после цикла

kon: ‘ Метка здесь как исключение из правил «Не пользоваться оператором Go to». Если очень хочется или проще реализовать именно так, то можно…

End Sub

Private Sub Command2_Click() ' очистка окон Text3.Text = "" Text4.Text = "" Text1.Text = "" Text2.Text = "" colpage = 0 n1 = 0 End Sub Private Sub Command3_Click() End End Sub Private Sub Command4_Click() MsgBox "Программа freeware. Автор Максимов Н.А. Составлена 25.08.2004",

vbOKOnly, "Серия Компьютер для Петруши" End Sub Private Sub Command5_Click() If c = 1 Then c = o Else c = 1 ' смена выходного лотка Text3.Text = "" Text4.Text = "" colpage = 0 n1 = 0 Call Command1_Click End Sub Private Sub Command6_Click() Clipboard.Clear ‘ очищаем буфер обмена Clipboard.SetText (Text3.Text) ' копирование в буфер обмена лицевых листов End Sub Private Sub Command7_Click() Clipboard.Clear Clipboard.SetText (Text4.Text) ' копирование в буфер обмена четных листов End Sub

«Открытый» код программы «Рассчитайка»

Page 63: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

61

Экран Рассчитайки 7. «Однорукий бандит»

Интерфейс «бандита»

Dim Karman, Stavka, A1, A2, A3, Zero As Single Private Sub Command1_Click() Label3.Visible = False Text3.Visible = False Label4.Visible = False Karman = Val(Text4.Text) Stavka = Val(Text2.Text)

Randomize

Page 64: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

62

A1 = Int(Rnd * 10) ‘ генерируем-то всего от 0 до 9, а выиграть не можем.. A2 = Int(Rnd * 10) A3 = Int(Rnd * 10) Text1(0).Text = A1 Text1(1).Text = A2 Text1(2).Text = A3

If A1 = A2 And A1 = A3 Then ' íåóæåëè âûèãðàë??? Zero = Stavka * 100 Label3.Visible = True Text3.Visible = True Text3.Text = Str(Zero) Karman = Karman + Zero Text4.Text = Str(Karman) Else Karman = Karman - Stavka Text4.Text = Str(Karman) Label4.Visible = True End If If Karman <= 0 Then Call Command2_Click ‘проиграл все деньги… End Sub

Private Sub Command2_Click() MsgBox "Íå áóäü Áóðàòèíî, äðóæîê!", vbOKOnly, "Óæ ñêîëüêî

ðàç òâåðäèëè ìèðó..." End End Sub

Private Sub Command3_Click() If Label5.Visible = False Then Label5.Visible = True Else Label5.Visible =

False End Sub

Конечный результат всех азартных игр – пустой карман

Page 65: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

63

8. Пример использования календаря, переключателей, окон навигации

Page 66: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

64

Список использованной литературы 1. Информатика. Основы программирования на Visual Basic:

лабораторный практикум для всех форм обучения экономических и юридических специальностей / Чебоксарский кооперативный институт, сост. А.Н Ванюлин и др. – Чебоксары: Салика, 2002. – 59 с.

2. Алгоритмизация и программирование. Методические указания к самостоятельной работе для студентов заочной формы обучения всех специальностей / Чебоксарский кооперативный институт, сост. М.С. Портнов, А.В. Речнов, С.В. Сейфуллина. - Чебоксары: Салика, 2005. – 56 с.

3. Тим Андерсон. Visual Basic. Шаг за шагом. – М., Бином, 1998. -224 с. 4. Джеймс Фокселл. Освой самостоятельно Visual Basic .NET за 24 часа. :

Пер. с англ. - М. : Издательский дом "Вильяме", 2002. - 416 с. 5. Кит Франклин.VB.NET для разработчиков. ; Пер. с англ. — М.:

Издательский дом "Вильямс", 2002. - 272 с.: ил. - Парал. тит. англ. 6. Понамарев В. А. Visual Basic .NET. Экспресс-курс. — СПб.: БХВ-

Петербург, 2003. -304 с: ил. 7. Гарнаев А. Ю. Visual Basic .NET: разработка приложений. — СПб.:

БХВ-Петербург,2002. - 624 с: ил.

X3X
Note
http://www.stihi.ru/author.html?maximoff21
Page 67: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

65

ЗАКОНЫ МЕРФИ Комментарий Каллагана к законам Мэрфи. Мэрфи был оптимистом!

Если какая-нибудь неприятность может случиться, она случается. Следствия.

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

Как только вы принимаетесь делать какую-то работу, находится другая, которую надо сделать еще раньше.

Всякое решение плодит новые проблемы. Законы машинного программирования

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

Если программа полностью отлажена, ее нужно будет скорректировать. Любая программа стремится занять всю доступную память. Сложность программы растет до тех пор, пока не превысит способности программиста.

Постулаты Трумэна по программированию Самая грубая ошибка будет выявлена, лишь, когда программа пробудет в производстве, по крайней мере, полгода.

Если назначен специальный человек для контроля над чистотой исходной информации, то обязательно найдется изобретательный идиот, который придумает способ, чтобы неправильная информация прошла через этот контроль.

Непечатный жаргон - это тот язык, которым решительно все программисты владеют в совершенстве.

Законы ненадежности Джилба Компьютеры ненадежны, но люди еще ненадежнее. Любая система, зависящая от человеческой надежности, ненадежна. Число ошибок, которые нельзя обнаружить, бесконечно, в противовес числу ошибок, которые можно обнаружить: оно конечно по определению.

Закон Брука Увеличение числа участников при подготовке опаздывающей программы только замедляет процесс.

Закон мира ЭВМ по Голубу Неточно спланированная программа требует в три раза больше времени, чем предполагалось; тщательно спланированная - только в два раза.

Принцип Шоу ☺ Создайте систему, которой сможет пользоваться даже дурак, и только дурак захочет ею пользоваться.

Расширение Максвелла При замене понятия «система» на «методическое пособие» действие принципа Шоу только усиливается.

Принцип IBM. Лучшее – враг хорошего.

Спасительная благодать Мэрфи. Худшее - враг плохого.

Page 68: АЗБУКА - Единое окноwindow.edu.ru/resource/841/59841/files/vb_azbuka.pdf · 2015-01-12 · Циклы DO ... LOOP с условием ..... 32 Самостоятельная

66

Серия «Компьютер для Петруши»

В серии вышли и выходят: Самоучитель по DOC и NC Excel 7.0 и не только... ACCESS 2000 Текстовые редакторы Excel 2000 и не только…

Microsoft OFFICE. Учебный практикум (в трех частях)

Excel 2003 Азбука программирования на Visual Basic

Учебно-методические пособия серии "Компьютер для Петруши" отличаются оригинальной методикой для самостоятельного изучения программных продуктов, сочетающей в себе легкость изложения и глубину освоения, доступность для начинающих и пользу для опытных пользователей Печатается без согласования с Microsoft. Билл Гейтс отдыхает…

Книги серии можно заказать в книжных магазинах и компьютерных фирмах:

428023 Чебоксары, ул. Эльменя, 7 Бестселлер ℡ 314-795

428018 Чебоксары, ул. Водопроводная, 22 Мир книг ℡ 421-024, 420-304

428003 г. Чебоксары, Школьный проезд, 6а

Учколлектор ℡ (8352) 21-24-75, 21-08-55, 62-85-57, 62-84-91

Подписано в печать 29.01.2009. Формат 60×90/84. Печать офсетная. Усл. печ. л. 4,0. Тираж 1000 экз. Заказ 719. ООО «Салика». Тел. 41-00-83