Максимов Н.А.
АЗБУКА программирования на
Visual Basic Самоучитель Практикум
Чебоксары 2007
ББК 32.973-018.1
Серия ...
12 downloads
418 Views
4MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Максимов Н.А.
АЗБУКА программирования на
Visual Basic Самоучитель Практикум
Чебоксары 2007
ББК 32.973-018.1
Серия посвящается учителям и выпускникам физико математической школы-интерната №2 г. Чебоксары
М 17 Рецензенты: зав. кафедрой информатики и математического моделирования математического факультета ЧГУ им. И.Н.Ульянова, профессор, доктор физ.мат. наук Артемьев И.Т. зав. кафедрой информационных систем экономического факультета ЧГУ им. И.Н.Ульянова, доцент, кандидат хим. наук Федотов В.Х. Максимов Николай Андреевич. Азбука программирования
на Visual Basic. Практикум. - Чебоксары, 2007.– 64с. Учебный практикум предназначен для самостоятельных и лабораторных работ студентов экономического и гуманитарного профиля первого года обучения, а также для самостоятельного изучения основ программирования на объектно-ориентированных языках высокого уровня на примере VB6. Большое внимание уделено разработке алгоритмов, приведены стандартные примеры и приемы работы, с чем сталкивается начинающий программист. Практикум может быть использован в старших классах школ, в техникумах и вузах практически для любых специальностей. Язык Visual Basic 6.0 выбран только потому, что достаточно прост в изучении и не требует больших ресурсов от компьютера, как платформа Net. А развивать логику мышления и понимать компьютерные алгоритмы обработки информации можно на любых доступных программных инструментах. Упражнения по программированию, даже для своего удовольствия, помогают развивать логическое мышление гораздо больше, чем стандартная математика. Понимание алгоритмов компьютерной обработки данных является одним из атрибутов информационной культуры современного человека.
Maximov Nicolay 2
Digitally signed by Maximov Nicolay DN: CN = Maximov Nicolay, C = RU, O = Maximoff, OU = Home Reason: Welcome to ComPit! Date: 2009.01.29 21:06:00 +03'00'
© Максимов Н.А. ®
Содержание 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
3
1. С чего начать? Sapienti sat 1 1.I.
Первые шаги
Главное – начать. Запустите саму программу через Пуск Программы
Если на вашем компьютере в группе Программы не отражается ярлык к VB6, то его можно запустить и через Проводник или Мой компьютер. Путь к запускаемому файлу будет следующий: С:\Program files\Microsoft Visual Studio\ \VB98\VB6.exe. Вот этот ярлычок.
Vb6.exe
Перед Вами откроется окно Microsoft Visual Basic 6.0 (Рис. 1):
Рис. 1. Выбор проекта
Здесь можно просто Открыть, чтобы начать создание стандартного проекта. Можно поставить галочку перед текстом Больше не показывать, чтобы при следующих запусках VB6 это окно больше не открывалось, а сразу по умолчанию открывался стандартный проект – до применения и использования других приложений еще «учиться, учиться… и еще раз учиться2»… Теперь перед нами представлено окно стандартной формы Form1 (Рис. 2) – в зависимости от установки программного обеспечения оно может быть как русифицированным, так и оставаться in English: 1 Понимающему достаточно (лат). Второй девиз серии «Компьютер для Петруши» 2
4
Ленин В.И. «Как нам обустроить Рабкрин?». ПСС, т.12, стр.327
Проводник проектов
Сама Форма, где будут размещены разные инструменты
Панель инструментов
Окно свойств объекта
Рис. 2. Окно проекта Visual Basic
Основных объектов здесь всего 4, остальные можно добавить (вывести) по мере необходимости через Главное менюВид. Включая режимы просмотра Код или Объект, можно выводить на экран соответственно текст программы для изменения или саму форму для добавления и редактирования кнопок. Теперь начнем знакомиться с некоторыми приемами Объектно Ориентированного Языка Программирования (ООЯП или просто ООП) Visual Basic 6.0. Самым простейшим и основным объектом является сама форма, которая будет выводиться на экран монитора при запуске уже написанной и отлаженной программы. Все инструменты размещаются на форме. Инструментов (объектов) может быть много или мало, но обязательными на каждой форме являются наличие двух управляющих кнопок (Command Button): кнопки запуска приложения (начало работы) и кнопки завершения (выхода) 5
работы. Поэтому запомним первое правило создания приложений ООП: обязательное наличие двух управляющих кнопок: Пуск и Выход. Нарисуем и мы эти кнопки стандартными приемами рисования: щелчок по кнопке управления на панели инструментов (специально выделена на рисунках) и разместим на панели формы в верхнем правом углу. Вторую кнопку для выхода из программы разместим в правом нижнем углу (см. рисунки). Все объекты на форме по умолчанию принимают стандартные имена в порядке их размещения. Например, Command1, Command2, Command3, … . для кнопок управления, Text1, Text2, … TextN для текстовых окон и т.д. А мы через панель Свойства объекта немного изменим их название и вид. В окне свойств объекта название заголовка (свойство Caption) поменяем на Пуск для первой кнопки и на Выход для второй. Таким образом, мы в первый раз изменили свойства стандартного объекта! С чем Вас и поздравляю. Но мы пойдем дальше: сделаем кнопки разноцветными, изменив свойства Back Color (цвет заднего плана или фона). Если размещать окно свойств по алфавиту, то оно высвечивается чуть выше Caption. Выбирайте из палитры стандартные цвета зеленый и красный3. Что, кнопки не меняют цвет, хотя мы уже выбрали нужные цвета? Не все так просто в этом мире, одним щелчком компьютер не освоить, выучив три оператора и написав программку из 10 строк программистом не стать… Но ничего, не расстраивайтесь, шаг за шагом, кнопка за кнопкой и …терпенье и труд все перетрут. Где надо – поможем, что надо – жизнь сама заставит…
Тонкостей в программировании много. В данном случае нам надо сменить еще одно свойство объекта – Style (стиль), которое по умолчанию является стандартным и разных украшений не предусматривает. Выберем стиль графический (1-Graphical) и все засияет. И так, 2 кнопки у нас есть, теперь надо дать работу этим кнопкам: что они будут делать после нажатия на них? Мы уже переходим к элементам программирования и напишем первый оператор для вывода сообщения в виде 3
Во всех технических системах самая нужная и опасная кнопка должна высвечиваться ярким, бросающимся в глаза цветом и должна быть более крупной и доступной, чем остальные кнопки. Таковы правила техники безопасности во всем мире. 6
текста в окне формы (по умолчанию начнет печататься с левого верхнего угла формы)4. Тексты программы или коды можно вводить после раскрытия окна кодов через меню Вид Код. Но проще и безошибочной будет, если код напишем после двойного щелчка на тот объект, которому мы хотим указать ее действия (активизировать) в окне приложения (в данном случае формы) после щелчка на нее. Автоматически вставятся первая и последняя строки, наш код программы вставим между ними. 1. Двойной щелчок по кнопке Пуск и между начальной строкой кода и последней строкой будет располагаться текст нашей программки из одной строки – Print “Привет, друг!!!”.
2. Двойной щелчок по кнопке Выход и введем команду End. Единственное назначение данной кнопки – корректное завершение работы приложения.
Все, первая программа уже написана, запустим на выполнение через кнопку или меню Запуск. И наша программка с нами же и поздоровается. Еще раз нажмете на нашу зеленую кнопку – еще раз поприветствует. Завершить работу теперь можем через стандартную кнопку Остановить или через свою красную кнопку Выход (своя рубашка ближе к телу…). И так, первая программа написана, она еще и работает, с чем Вас и поздравляю. Все дальнейшее – вопрос времени и накопления опыта программирования – «Лиха беда начало»! 4
Принцип по умолчанию или стандарту является одним из основных понятий, как для биологических систем, так и для технических. Иначе была бы полная неразбериха или обилие инструкций и правил на каждом шагу: «Мойте руки перед едой!», “Не курить, не сорить!» «Внимание!!! В нашем городе движение транспорта только по правой стороне дороги, а пешеходы переходят улицу на зеленый цвет!»… 7
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. Запустите программку на выполнение и попробуйте пощелкать.
8
5. После того, как Вы по разу пощелкали кнопками 3 и 4, дальше ничего не меняется: нужные сообщения уже выведены. Для удаления предыдущих сообщений добавим еще одну управляющую кнопку, задача которой присвоить пустое текстовое значение через пробел: две двойные кавычки, без всякого символа, даже пробела, между ними. Дайте имя кнопке «Очистить». Проделайте самостоятельно. А вот текст, напечатанный на форме научимся удалять позже
Самостоятельная работа №1. h Создать программу, которая при нажатии на кнопку заливает форму
соответствующим цветом. 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)и т.д. 9
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 и сохраните в своем каталоге под тем же именем. Теперь этот 10
файл запускается уже самостоятельно, без VB6. Закройте или сверните VB6 и со своего каталога запустите наше приложение. Его примерный вид и характеристики указаны справа.
Рис. 4. Коды программы Арифметика1
Рис. 5. Пример работы программы Арифметика1
Самостоятельная работа №2. Создайте аналогичную программу Арифметика2 с другим интерфейсом: 1 кнопка Вычислить, 2 входных TextBox - (A= и В=), 4 выходных TextBox - (А+В=, А-В=, А*В=, А/В=). Не забудьте вставить надписи через Label1-6. h
11
2. Простые вычисления Предыдущие упражнения были только прообразом написания маленьких программ, в программировании подход к вычислениям более серьезный и практичный. Входные данные могут быть представлены в цифровом, текстовом или еще в других форматах. Поэтому без понятия переменных и констант не обойтись. 2.I.
Переменные и константы
Переменной в программировании является именованная область памяти, предназначенная для хранения данных, изменяющихся в процессе выполнения программы. Переменные имеют имя (идентификатор) и тип (форма или способ представления информации в памяти ЭВМ). Имя переменной (идентификатор) — это строка символов, которая отличает эту переменную от других объектов программы (идентифицирует переменную в программе). Первым символом имени должна быть буква. Остальные символы — буквы и цифры (прописные и строчные буквы различаются). Для объединения имен можно использовать символ «_»(подчеркивания), но: в имени нельзя использовать символ «.»; число символов в имени не должно превышать 255; имя переменной не должно совпадать с зарезервированными (служебными) словами языка (эти слова в тесте кода высвечиваются синим цветом!); Желательно для имен использовать только латинские символы. В Visual Basic существуют разные возможности объявления типа переменной. • Переменная может вообще не объявляться. В этом случае будет установлен по умолчанию тип Variant и VB6 сама определит тип переменных по контексту. Однако это может привести к медленной неэффективной работе программы, нерациональному использованию памяти и возможным ошибкам из-за путаницы в типах. • Переменная может объявляться явно с помощью оператора определения переменной: Dim имяПеременной [ As типПеременной] Например: Dim A as Long, Dim Strokа_Simvolow as String
В дальнейшем мы условимся придерживаться следующих правил использования имен переменных: Имена переменных будем объявлять всегда явно через Dim, латинскими
символами и чтобы имя носило смысловую нагрузку; например, оклад как Oklad, имя как Name, зарплата как Zarplat и т.д. Здесь и далее квадратные кавычки [ ] обозначают необязательный параметр, который может быть опущен. Тогда берутся свойства или параметры по умолчанию. 12
Основные типы данных Таблица 1
Обозначение
Содержимое (в байтах)
Логический
Boolean
2
Короткое целое
Byte
1
Целое
Integer
2
Длинное целое Денежный (четыре
Long
4
True или False (ложь или истина, логические 0 или 1) От 1 до 255 от -215 до +215 (от -32768 до +32767) от -231 до +231
Currency
8
От -263*10-4 до 263*10-4
Single
4
от -2129 до +2148 -1
Double
8
от -21024 до +21024 -1
Тип
знака после запятой) Вещественное (с плавающей точкой одинарной точности)
Вещественное двойной точности Дата и время
Date
Строковый
String
Вариативный
Variant
Object
Объект
8 1 байт для каждого символа 16+1 байт для каждого символа 4
Область значений
От 01.01.100 до 31.12.9999 До 216 символов фиксиров. длины и до 231 символов переменной длины Определятся типом переменной, явно не задается Ссылка на объект
Константы служат для объявления постоянных данных, значения которых в ходе выполнения программы не меняются. Объявляются как переменные, но вместо Dim как Const и тут же присваивается значение: Const Pi as Single = 3.141592 В качестве разделителя целой и дробной частей используется точка. Дата и время могут быть выражены как в стандартном варианте дд.мм.гггг, так и в американском мм.дд.гггг. Но при вводе следует пользоваться американским форматом. Группы чисел должны находиться между двумя знаками #, разделитель /: #03/11/1955#. Результат: 11.03.1955 2.II.
Ввод и вывод данных
Прежде чем производить какие-нибудь вычисления, переменным надо присвоить определенные значения в соответствии с объявленными типами. Потом производить какую-то обработку и результаты вывести для просмотра. Таким образом, любая программа должна иметь (кроме окна интерфейса в виде формы) 3 стандартных блока в строгой последовательности (линейный алгоритм): 1. Блок ввода информации 2. Блок расчетов 3. Блок вывода информации 13
Ввод данных можно организовать разными способами. Мы пока рассмотрим 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 или в меню ToolsOptionsEditor «галочку» для Требовать объявления переменных (Require variable Declaration). Тогда данная строка будет вставляться автоматически и в других проектах.
Option Explicit Dim R, H, V as Single ‘объявление переменных Const Pi as Single = 3.141592 ‘ в секции General 14
Вариант 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 h Составьте проект по образцу, для кнопки Вариант3 включите в свойствах всплывающую подсказку после наведения на объект мышьи (Command3. ToolTipText = Заполни значения Радиуса и Высоты), сделайте выводы: когда использовать тот или иной способ ввода и вывода? Образец приведен на рис. 6.
Рис. 6. Примерный интерфейс программы Цилиндр Размеры и начертания шрифтов подписей и названий кнопок выбирайте через Свойства(Property) Font Иногда при вводе кода программы на русском языке могут не поддерживаться шрифты. Установите нужный кириллический шрифт через меню Tools(Инструменты)OptionsEditor Format. Смотри Рис. 7. 15
Рис. 7. Выбор шрифта кода
Самостоятельная работа №3. h Создайте аналогичную программу для вычисления суммы купленных
товаров по формуле: Сумма = цена1 *кол-во1 + цена2*кол-во2. Имена и типы переменным объявляйте сами, как и названия товаров.
Когда Вы пишете текст (код) программы, то для пояснения имен переменных или алгоритма действий можете вставлять комментарии через апостроф - смотри выше в тексте и в окне. Очень удобны при отладке – если какой-то фрагмент программы не работает или еще не отлажен, то его временно отключаете, обозначая как комментарий (сразу текст выделится зеленым цветом), а когда надо – апостроф убираете. Когда набираете примерно одинаковые тексты, не забывайте воспользоваться простым копированием строк через буфер обмена, как во всех текстовых редакторах: Ctrl + C – копировать выделенный фрагмент, Ctrl + V – вставить. Буфер доступен и через контекстное меню VB6. При такой технологии Вы экономите время и повышаете надежность кода программы – не будет случайных ошибок. При сохранении проекта параллельно можете сохранять и другие приложения проекта: формы, модули и т.д. Проще это сделать после сохранения .exe-файла. Сам я обычно сохраняю «эгзэшник», а потом просто закрываю VB6. Вот тогда она сама попросит сохранить все измененные или вновь созданные составляющие, остается только поочередно задавать имя и папку для сохранения. И еще: договоримся всегда устанавливать опцию в меню ToolsOptionsEditor «галочку» для Требовать объявления переменных (Require variable Declaration). Тогда в секции General автоматически добавится Option Explicit. Так мы повысим надежность программ – не будут «проскальзывать» случайные самообъявляющиеся переменные «не тех» типов, а также приблизим VB6 к другим языкам высокого уровня с обязательным объявлением переменных, как С++ и другие, считающиеся более «продвинутыми» средствами разработки программного обеспечения. Обязательное объявление типов переменных – один из атрибутов культуры программирования! 16
2.III. Математические возможности Visual Basic
Вычисления на любом языке программирования имеют свои правила записи, в основном совпадающие с математическими. Так, можно использовать все 4 арифметические операции (только символы чуть другие), знаки скобок для определения порядка вычислений и множество т.н. стандартных встроенных функций. Примерный перечень (далеко не весь!) указан в таблицах 2-4.
Математические операции Операция + * / \ Mod ^
Название Сложение Вычитание Умножение Деление Целочисленное деление Остаток от целочисленного деления Возведение в степень
Пример 4+5 7-4 3*6 5/4 5\4
Таблица 2 Результат 9 3 18 1.25 1
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) True True False False False
> >= < <= =
Больше Больше или равно Меньше Меньше или равно Равно
А>B А>=B А
<>
Не равно
А<>B
True
And Or Not
Логическое умножение Логическое сложение Логическое отрицание
А>B And C>B А>B Or C>B Not (C>B)
False True True 17
А=5 B=4 приведены и результаты в таблице 3.
C=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) Cos(x) Tg(x) ArcTan(x)
Запись в Бейсике Sin(x) Cos(x) Tan(x) Atn(x)
Sin(0) Cos(0) Tan(0.785))) Atn(1)
0 1 1 0.785
Ln(x)
Log(x)
Log(10)
2.302585
|x| ex √Х
Abs(x) Exp(x) Sqr(x) Fix(x)
Abs(-12) Exp(1) Sqr(9)
Обозначение
Int(x)
12 2.818282 3 Fix(-12.34) -12 Int(-12.34) Int(12.34)
Если переменная не определена, то во время выполнения будет выдано сообщение: «Переменная не определена». Останавливаете выполнение (компиляцию) программы и добавляете описание переменной в Declaration. 18
-13 12
Самостоятельная работа №4. Создайте программы для вычисления следующих выражений и функций.
h
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) 3
16. Y = x 2 + x 4 17.
y = sin( x 3 − x 2 ) /cos(x+y)
18. y=
4x 4 + 2x 2 - x
Во многих случаях для вычисления длинных выражений полезно использовать промежуточные переменные, которых нет ни на входе, ни на выходе. Но такие переменные часто намного облегчают работу, увеличивают читаемость текста программ. Например, выражение в знаменателе можно обозначить как Znam, числитель как Chisl. Тогда выражение в 8-ой задаче будет состоять из трех операторов: Znam = Sin(…);
Chisl = (Sgr(…));
Z= Znam / Chisl
Окна Textbox более удобны для задания и вывода параметров и значений, чем разовые мелькающие и исчезающие Msgbox и Inputbox Не забывайте задавать первичные значения в окне параметров TextBox в свойствах text, чтобы при отладке каждый раз не вводить одни и те же входные данные. При необходимости их просто меняете после запуска приложения и, не выходя из программы, снова нажимаете на кнопку Вычислить. 19
3. Алгоритмизация 3.I.
Виды алгоритмов
Алгоритмом называется точное и понятное предписание исполнителю совершить последовательность действий, направленных на решение поставленной задачи. Алгоритм решения вычислительной задачи представляет собой совокупность правил преобразования исходных данных в результатные, конечные. Основными свойствами алгоритма являются: 1. детерминированность (определенность). Предполагает получение однозначного результата вычислительного процесса при заданных исходных данных. Благодаря этому свойству процесс выполнения алгоритма носит механический характер – исполнитель алгоритма выполняет только предписанные действия; 2. результативность. Указывает на наличие таких исходных данных, для которых реализуемый по заданному алгоритму вычислительный процесс должен через конечное число шагов остановиться и выдать искомый результат; 3. массовость. Это свойство предполагает, что алгоритм должен быть пригоден для решения всех задач данного типа – алгоритм должен работать при любых корректных входных данных; 4. дискретность. Означает расчлененность определяемого алгоритмом вычислительного процесса на отдельные этапы, возможность выполнения которых исполнителем (компьютером) не вызывает сомнений. 5. конечность. Возможность достижения конечного результата за конечное число шагов (отрицательный результат есть тоже результат!). Алгоритм должен быть формализован по некоторым правилам посредством конкретных изобразительных средств. К ним относятся следующие способы записи алгоритмов: словесный, формульно-словесный, графический, язык операторных схем, алгоритмический язык. Наибольшее распространение благодаря своей наглядности получил графический (блок-схемный) способ записи алгоритмов. Блок-схемой называется графическое изображение логической структуры алгоритма, в котором каждый этап процесса обработки информации представляется в виде геометрических символов (блоков), имеющих определенную конфигурацию в зависимости от характера выполняемых операций. Перечень символов, их наименование, отображаемые ими функции, форма и размеры определяются ГОСТами. Типовые блок-схемы включены и в панель инструментов Microsoft Office: Автофигуры Блок-схема, можно вставлять из Word или Excel.
При всем многообразии алгоритмов решения задач в них можно выделить три основных вида алгоритма: 20
линейный ветвящийся (разветвляющийся) циклический (повторяющийся) Линейным называется такой вычислительный процесс, при котором все этапы решения задачи выполняются последовательно, друг за другом. Все наши предыдущие программы были линейными или последовательными. Пример линейной задачи. Некоторый товар ценой 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. Вывести значение новой цены Начало Ввод S и Pr
Snew = S + S* (Pr/100) Вывод Snew
Конец
Блок-схема
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 Текст программы
h Отработайте приведенную программу. Измените тип переменных на
Single и посмотрите на точность результатов. Сделайте выводы: при повышении разрядности повышается и точность вычислений! 21
4. Алгоритмы ветвления Ветвящимся называется такой вычислительный процесс, в котором выбор направления обработки информации зависит от исходных или промежуточных данных (от результатов проверки выполнения какого-либо логического условия). Программ без выбора практически не существует, иначе это была бы механическое или простое вычислительное устройство по принципу арифметического калькулятора. Но: в чистом виде только того или иного алгоритма ни одной значимой программы не существует, все они есть комбинации из трех известных видов! Начало
Dim A,B,X as Single A=Val(InputBox("Введи A")) B=Val(InputBox("Введи B"))
Ввод А,B
Словесное описание алгоритма: нет да 1. Ввести A>B числовые значения А и В 2. Если А больше В, то Х If A>B then X=A*A+B*B else X=A^3+B^3 равно сумме квадратов А и В, иначе (т.е. В X=A3+B3 X=A2+B2 больше или равно А) Х присвоить
значение суммы кубов 3. Вывести (напечатать) значения А,В,Х Вывод A,B,X
Print “A=” & A; “B=” & B; “X=” & X Конец Рис. 8. Стандартная блок-схема ветвления 20
4.I.
Общие положения, этапы создания приложений
Блок-схема ветвящегося алгоритма имеет следующий вид: Нет
Да
?
Нет
?
Да
Оператор 2
Оператор 1
Оператор 1
………….…
………….…
………….…
Оператор N
Оператор N
Полная форма ветвления
Оператор N
Неполная форма ветвления
Рис. 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 h Создайте проект для задачи из Рис. 8. Стандартная блок-схема со своим интерфейсом – А, В, Х пусть вводятся и выводятся в TextBox1-3.
Теперь мы созрели до того, чтобы подойти к разработке приложений на VB6 более основательно. Создание любого приложения состоит из следующих этапов. 1. Постановка задачи. Описание принципа работы будущего приложения, видов экранных форм (окон) этого приложения. Сюда же входит объявление переменных: входных, промежуточных, выходных и расчетных формул. Разработка интерфейса - создание экранных форм 21
приложения со всеми находящимися на этих формах объектами и свойствами этих объектов. 2. Программирование. Определение того, какие события будут происходить в процессе работы приложения, составление алгоритмов процедур для этих событий и написание программы (программных кодов) этих процедур. Состоит из двух этапов: а). Разработка алгоритма (лучше в виде блок-схемы. Блоки обычно нумеруются) б). Запись разработанного алгоритма на алгоритмическом языке VB6 (кода программы)
3. Отладка программы. Устранение логических ошибок в процедурах и достижение того, чтобы приложение работало корректно, с удобным и ясным интерфейсом 4. Сохранение проекта и при желании — компиляция (превращение проекта в исполняемое приложение, способное работать самостоятельно за пределами среды проектирования). Приложение может работать в режиме компиляции или интерпретации. В режиме интерпретации все инструкции на языке БЭЙСИК, из которых состоит программа, будут выполняться системой Visual Basic непосредственно в процессе их чтения компьютером строка за строкой в среде разработки. В режиме компиляции сначала производится отладка программы с помощью интерпретатора, затем она полностью транслируется (переводится) с языка высокого уровня (Бейсика) на язык низкого уровня (язык машинных команд компьютера), т. е. компилируется. Скомпилированная программа помещается в файл с расширением .ехе. Этот файл может быть запущен на исполнение самостоятельно, без поддержки среды Visual Basic. 4.II.
Задачи на ветвление
1. Торговый агент получает процент от суммы совершенной сделки. Если объем сделки до 3000, то 2%; если объем от 3000 до 10000, то 3%; если выше 10000, то 5%. Рассчитать сумму вознаграждения. U Далее мы не будем приводить интерфейс за ненадобностью (уже умеем!), а только блок-схемы и коды программ. ………………… Z=Val(text1.text) Больше 3000 Z<3000 Z<10000
Pr=Z*0.05
Pr=Z*0.03
Pr=Z*0.02
Блок-схема алгоритма обработки 22
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 Часть кода программы
В данной задаче возможны 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 Блок-схему с самостоятельно.
тремя
последовательными
блоками
ветвления
нарисуйте
Не самый лучший вариант с точки зрения машинной логики (если уже было два сравнения, то в нашей задаче третье сравнение лишнее) и быстродействия, но лучше читается, допущенных ошибок будет меньше. h Отработайте
(составьте работающую программу-приложение) варианта программы (можно с 2 кнопками сразу). Сделайте выводы.
оба
2. Даны 4 числа A, B, C, D. Найти наибольшее число. Словесное описание алгоритма a) Сравнить два первых числа. Запомнить большее как AB и его название. b) Сравнить два оставшихся. Запомнить большее как СВ и его название. c) Сравнить AB и СВ. Вывести значение наибольшего и его название h Блок-схему самостоятельно! ‘ код программы 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 Если встречаются одинаковые значения, данный алгоритм выдает последнее число как наибольшее. А если в сравнении знак > заменить на >=, то выдаст первое.
23
h Это
был только один из возможных вариантов Отработайте (составьте проект) приведенный вариант.
алгоритма.
Самостоятельная работа №5. h Для другого алгоритма этой же задачи разработайте блок-схему и
код, отладьте. Словесное описание алгоритма следующее: 1 вариант. Сравнить А и В, большее из них сравнить с С, большее из них сравнить с D и вывести результат. Смотри блок-схему и код задачи 5 на стр. 22. 2 вариант. Каждое число сравнить с тремя остальными, используя конструкцию без Else : if A>B and A>C and A>D then … h Если для четырех чисел не сразу получается, то сначала решите задачу для трех.
Начало Ввод А,В,С Да Да А>C
Нет
А>B Нет
Max=A : TM=”A”
Нет
B>C
Max=C : TM=”C”
Да
Max=B : TM=”B”
Max, TM Конец
Рис. 10. Поиск наибольшего из трех чисел ………………………… If A>B then If A>C then Max=A Else Max=C End if Else If B>C then Max=B Else Max=C End if End if ……………………. 24
: TM=”A” : TM=”C”
: TM=”B” : TM=”C”
Демонстрация уровней вложения и соответствия If и End if
4.III. Множественный выбор - Select
Case
В алгоритмических языках программирования выбор из множества вариантов (условий) обычно реализуется специальными конструкциями. Блоксхема такой конструкции примерно выглядит так: Начало Ввод Ball Да
Ball=1,2
Да
Ball=3 Да
Ball=4 Нет
Ball=5
Y=”Нет балла”
Да
Y=”Отлично”
Y=”Хорошо”
Y=”Удовл.”
Y=”Плохо”
Вывод Y Конец
Рис. 11. Блок-схема множественного выбора Select
Case
(Блок-схема соответствует нижеприведенному примеру 3) Общий формат записи кода выглядит так: Select Case Переменная Case Значение(я) переменной 1… Оператор(ы) 1… … ………………………
Case Значение(я) переменной 2…. Оператор(ы) 2… … ... ….. ……..
Case Значение(я) переменной N…. Оператор(ы) N … ... ….. …….. 25
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 h После того, как отладите, по рисунку найдите причину ошибки
при выполнении данной программы (обычное сообщения VB6 с неполной расшифровкой кода сообщения – сейчас 6 (переполнение)).
26
Для более пытливых. Через свойства объекта 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 - неверный номер дня в месяце Всегда следует проверять вводимую информацию на корректность по типам и диапазону. Программа должна работать с любыми входными данными, т.е. должна действовать т.н. «защита от дурака». Если введена неправильная информация, ее надо игнорировать и выводить соответствующее сообщение о повторном вводе, а не доводить до того, что программа «зависнет», перестанет работать. 27
5. Циклические алгоритмы Циклом называется многократно повторяемый участок вычислений. Вычислительный процесс, содержащий один или несколько циклов, называется циклическим. По количеству выполнения циклы делятся на циклы с определенным (заранее заданным) числом повторений и циклы с неопределенным числом повторений. Количество повторений последних зависит от соблюдения некоторого условия, задающего необходимость выполнения цикла. При этом условие может проверяться в начале цикла — тогда речь идет о цикле с предусловием, или в конце — тогда это цикл с постусловием. Наиболее простой является конструкция с заранее определенным количеством циклов (повторений). 5.I.
Конструкция For … Next
I=M, N [, Step] Операторы
Рис. 12. Блок-схема конструкция For … Next
Формат кода такого алгоритма выглядит следующим образом: For <счетчик> = <начало> То <конец> [Step <приращение>] <операторы тела цикла> Next [<счетчик>]
Перед выполнением цикла переменной счетчику цикла присваивается начальное значение. Операторы, перечисленные в цикле, выполняются до тех пор, пока значение счетчика цикла не превысит конечное значение. При каждом выполнении цикла значение счетчика увеличивается на шаг (приращение). По умолчанию шаг равен 1. В нашей блок-схеме: I – счетчик, M – начальное значение счетчика, N – конечное значение счетчика, Step – величина приращения. Найти сумму натуральных чисел от 1 до 10 4. Постановка задачи. Входные переменные: нет Выходные переменные: S Промежуточные переменные: I Расчетные формулы: S = S + I – стандартная формула, к содержимому S прибавляется I, новое значение будет больше на значение I
Интерфейс. 2 управляющие кнопки Расчет и Выход, 1 текстовое окно для вывода S 28
Начало S=0
I = 1, 10
S=S+I I
S, I
Конец Рис. 13. Блок-схема алгоритма
Словесное описание алгоритма 1. 2. 3. 4.
Обнулить значение переменной S Присвоить I начальное значение 1 Проверить попадание значения I в диапазон от 1 до 10 включительно Если в 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
29
h Отработайте (составьте проект) приведенный вариант. После этого
измените Ваш проект так, чтобы можно было сосчитать сумму: 1. нечетных натуральных чисел от 1 до 20 (добавьте шаг приращения 2). 2. четных натуральных чисел от 1 до 20
Рис. 14. Результат работы
Но такое построение алгоритма, когда начальные и конечные значения переменных счетчика цикла заданы непосредственно в коде программы и мы их можем изменять, только редактируя код, годится только для первоначального знакомства. Программы для одноразовых расчетов не пишут, для таких случаев есть калькулятор, а не компьютер. В общем случае надо будет ввести переменные, задающие начальное и конечное значения, шаг приращения. Их лучше вводить через текстовые поля, тогда при возможности быстрого изменения их значений программа будет достаточно универсальной. У программистов во всем мире принято, что имена переменных счетчика начинаются с i , далее вложенные циклы j, k, l… Если счетчик в начале отработал (цикл завершился), то его можно использовать повторно и в других независимых друг от друга местах. Составьте универсальный проект, подсчитывающий сумму натуральных чисел в любом диапазоне с любым шагом и выводящий дополнительно среднее значение чисел (количество чисел подсчитывайте внутри цикла примерным выражением К=К+1). В общем случае и шаг, и счетчик могут быть любыми действительными числами: For I = N1 to N2 Step N3 h
Самостоятельная работа №7. Используя цикл For … Next и в нем окно InputBox, составьте следующие проекты: 1. Найти общую стоимость проданных 8 товаров 2. Найти общую стоимость купленных 7 товаров 3. Найти среднюю цену проданных 8 товаров 4. Найти среднюю цену купленных 7 товаров 30
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 по общим математическим правилам округления 31
5.II.
Циклы DO ... LOOP с условием
Циклические алгоритмы не всегда выполняются строго определенное количество раз, вход в цикл или выход из него может осуществляться при выполнении какого либо условия. Различают циклы с предусловием (вход и выход из цикла происходит до начала тела цикла) и с постусловием (проверка осуществляется по окончании тела цикла). Основным оператором цикла служит конструкция DO...LOOP. Для циклов и с предусловием, и постусловием она осуществляется в двух модификациях: While (пока условие верно) и Until (пока условие не верно). Операторы с предварительной проверкой условия (до входа в цикл)
а) Do While <условие продолжения цикла> <операторы тела цикла> Loop Да
Продолжить?
Нет
Операторы тела цикла
б) Do Until <условие прекращения цикла> <операторы тела цикла> Loop Нет
Прекратить?
Да
Операторы тела цикла
Примеры. Do While Per > 0 ………… Loop
(1)
Do Until Per <= 0 ………… Loop
(2)
и
Первая конструкция работает, пока переменная Per больше 0, а вторая работает до тех пор, пока Per не станет равным или меньше 0. ☺ 32
Ну, и чем они (1 и 2) отличаются друг от друга?
Операторы с проверкой условия после выхода из цикла в) 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) какое отличие? 33
Пока Вы думаете, заметим одну важную деталь: во всех циклах с условием
значения переменных в условиях должны изменяться внутри цикла, иначе мы «зациклимся» - никогда не выйдем из цикла. В нашем случае должна меняться переменная Per.
5. Автофургон загружается со склада товаром. Погрузка прекращается, если общая масса загруженного товара превысит грузоподъемность фургона. Постановка задачи. Входные переменные: Ves_tov – масса (вес) загружаемой единицы товара, Gr_pod – грузоподъемность фургона Выходные переменные: S – общая масса загруженного товара Промежуточные переменные: нет Расчетные формулы: S = S + Ves_tov
Интерфейс. 2 управляющие кнопки: Начать погрузку, Выход 2 текстовых поля – Грузоподъемность и Всего загружено
Словесное описание алгоритма 1. Обнулить значение переменной S 2. Сравнить общую загруженную массу с грузоподъемностью. Если можно, то загрузить очередной товар, иначе выйти из цикла и вывести результат Всего загружено Начало Грузоподъемность
Да
S < Gr_pod
Нет
Ves_tov S = S + Ves_tov Загружено Конец
Рис. 15. Погрузка фургона Обратите внимание, что у нас переменная условия S меняется внутри цикла. Иначе программа может «зависнуть, зациклиться» При зацикливании программу снимаете комбинацией клавиш Ctrl + Break 34
Код программы 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
h Отработайте данный и следующий вариант программы, «снимая
лишний груз с фургона» и досрочно завершая погрузку по истечении товаров. Добавьте изменения в блок-схему.
Но в реальной жизни погрузку прекращают и тогда, когда весь необходимый товар загружен, хотя до полной загрузки фургон грузить и грузить. Погрузка завершается и тогда, когда будет загружен нулевой груз. Тогда наш цикл будет с постусловием. 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. Попытка перегрузить фургон 35
Самостоятельная работа №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). Массивы удобны еще и тем, что они одинаково обрабатываются в цикле, меняется только индекс – порядковый номер элемента массива. 36
6. Найти среднее значение оценок за экзамен в подгруппе из 12 студентов Постановка задачи. Входные переменные: Ball(12), i Выходные переменные: Sr Промежуточные переменные: S Расчетные формулы: S = S + Ball(i); Sr=S/12
Интерфейс. 3 управляющие кнопки: Расчет, Выход, Очистить Sr и Ball(i) печатаем на форме
Словесное описание алгоритма 1. 2. 3. 4. 5. 6.
Обнулить значение переменных S, Sr Через InputBox заполнить массив Ball(12) Подсчитать сумму баллов Рассчитать средний балл Распечатать входные и выходные значения Очистить экран формы, решить задачу с другими значениями Начало S, Sr=0 I = 1, 12 Ввод Ball(i)
Блок ввода
I = 1, 12 Блок расчета
S=S+Ball(i)
I = 1, 12 Ball(i)
Блок вывода
Sr=S/12 Sr
Конец Рис. 17. Блок-схема задачи 6 37
Код программы 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 оттуда же. При вводе «мышь» не нужна! h
Но: заполнять массив для учебных целей через Input Box непродуктивно и утомительно (нам же не требуется абсолютная достоверность введенных значений!), поэтому мы автоматизируем и процесс заполнения массивов цифровыми значениями через генератор случайных чисел. Формат генератора имеет вид: RND[(Число)], в скобках в качестве параметра может быть любое число - RND(3) или отсутствовать – просто RND. Генерироваться будут случайные числа в диапазоне от 0 до 1: 0.21456, 0.9555, 0.5395 и т.д. Но: при каждом новом запуске программы ряд случайных чисел будет повторяться. Иногда это нужно, но если при следующем запуске программы нужна другая последовательность случайных чисел, то перед использованием RND надо добавить оператор Randomize. Тогда последовательность случайных оценок из нашего примера 9 будет генерироваться следующими операторами: 38
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. При каждом запуске будет новая последовательность, хотя в рандомизации можно обойтись и без таймера – работает! h
Примеры задач на одномерные массивы.
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. Очистить экран формы, решить задачу с другими значениями Блок-схема – самостоятельно 39
Код программы поиска Мах 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 Отладьте данную программу, получите верные результаты. Нарисуйте блок-схему. После этого самую малость измените проект так, чтобы он параллельно находил и минимальное значение элементов h
2. Сортировка элементов массива методом «пузырька» 8. Отсортировать массив натуральных чисел В(10) в порядке возрастания Одним из простейших методов упорядочивания (сортировки) числовых массивов является т.н. метод «пузырька». Суть алгоритма заключается в последовательном сравнении двух соседних элементов и их перестановке, если последующий элемент больше или меньше (в случае сортировки по убыванию) предыдущего. Если элементов массива N, то такой алгоритм должен выполняться N-1 раз. Тогда, если максимальное число находилось на последнем N-ом месте, оно после каждого цикла будет подниматься на место N-1, N-2, …2, 1 место, т.е. напоминает всплывающего пузырька. Алгоритм может завершиться и раньше, если максимальное число не последнее, но N-1 дает гарантированный результат при любом первоначальном порядке расположения элементов массива. Приведен только алгоритм сортировки (остальное мы уже умеем!). Словесное описание алгоритма 1. Сгенерировать значения элементов массива( в диапазоне от 1 до 50). Параллельно напечатать массив на форме до сортировки 2. В цикле от первого элемента до предпоследнего поочередно сравнивать значения элементов i и i+1 . Если значение последующего элемента с 40
номером 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 “ Это часть программы сортировки без ввода и вывода ……………… h
и
Составьте работающий проект программы (допишите коды для печати генерации), получите верные результаты. Нарисуйте блок-схему.
Измените алгоритм на сортировку по убыванию, получите результаты
Недостатком вышеприведенных алгоритмов работы с массивами является то, что мы количество элементов в массиве задаем 1 раз в коде программы и изменять не можем, если файл уже исполняемый (.exe). Программа будет более универсальной, если переопределить массив оператором Redim, указав вводимое значение количества элементов. Такая плавающая размерность массива (количество элементов) определяется примерно следующей конструкцией: Dim A() as Single ‘ в секции General сначала задается пустая ‘ размерность массива Dim N as Single ‘определение задаваемого с клавиатуры кол-ва элементов ………………… N=Val(InputBox(“Введи кол-во элементов массива“) ReDim A(N) ‘ переопределение, тип переменной заново задавать или ‘ изменять не можем, остается ранее определенный ………………… ………………………‘другие операторы For i = 1 To N ……………………… ‘другие операторы Измените предыдущий проект программы сортировки по образцу, получите результаты при любом вводимом N h
Подсказка к самостоятельным работам. 1. Чтобы сгенерировать в целом возрастающий ряд чисел, к каждому сгенерированному элементу прибавляйте маленький шаг. A(i) = 10 + Int(Rnd*11) + i*0.5 – сгенерирует возрастающий диапазон от 10.5 до 25 при изменении i от 1 до 10 2. Чтобы массив генерировался и выводился на форме до нажатия на кнопку Расчет, лучше добавить еще одну управляющую кнопку Генерация и модуль генерации и печати исходного массива прикрепить к ней. Примерный текст кода приведен ниже. 41
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) найти среднее арифметическое четных чисел 42
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. Самый сухой период (без дождей) * 43
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. По разнице температур между днем и ночью найти погожие дни * * - Для своих вариантов сгенерируйте соответствующий сезон – растущая или понижающаяся температура воздуха 44
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. Очистим экран формы, решим задачу с другими значениями
45
Начало Включить Timer Заголовок
i = 1, 10 Печать i Блок генерации и вывода массива на форме
j =1, 5 Генерация Печать Session(i,j)
Пустая строка
S=0 i=1, 10
Prisnak=True j =1, 5 Да
S=S+Session(i,j) Sess(i,j)<>5
Отличник? Да
Prisnak=False
Отличник
Средний балл Конец
Рис. 18. Блок-схема Session с двумерным массивом 46
Код программы 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
h Отработайте данную программу. Не беда, если у Вас не окажется
отличников: «пятерки» случайно не зарабатываются! А если серьезно, то в таком случайном раскладе от 2 до 5 по теории вероятности очень маленькая вероятность того, чтобы у кого-то было 5 «пятерок». Поэтому я сам сгенерировал оценки только 4 и 5 (см. Рис. 19). Вы тоже измените диапазон генерации, текст сообщения и станьте отличником. h Аналогичным образом посчитайте «ударников», «троечников», и, не дай
бог, «двоечников». Если двоек много, то прибавьте по 0.5 - 0.7 в генерации: Session(i, j) = Int(Rnd(Timer) * 4 + 0.5) + 2 If Session(i,j) = 6 «пятерок»
Then Session(i,j) = 5
‘ пусть будет больше 47
Рис. 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) 48
Интерфейс. 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
Отлаживайте данную программу, начиная с варианта а). При желании соберите все три варианта в одном проекте, назначив отдельные кнопки расчета. Составьте блок-схемы для всех трех вариантов расчета (блок генерации общий, можно не рисовать). h
49
Рис. 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
Вариант в) выполнить самостоятельно, добавляя или изменяя коды в а) или б) или используйте три разные кнопки расчетов в одной форме. 50
Самостоятельная работа №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) 51
6. Работа со строковыми переменными Так как любую информацию можно рассматривать как набор допустимых символов, то умение обрабатывать строковые или текстовые переменные очень даже пригодится. В конечном итоге любой файл - это набор символов, которые при обработке можно конвертировать в другой тип. Особенно это важно, если Вы не знаете, в каком формате записана информация. А в текстовом (посимвольном) формате обрабатывать можно всегда.
Некоторые функции для обработки строковых переменных Функция
Формат и назначение
Dim S as String :
Len
Left Right
Mid
LTrim RTrim Trim
LCase
UCase
& 52
Таблица 5 Результат
Пример
S = ” Привет, друг! ”
‘ для примера
Определение длины текста Len(S) – возвращает длину Len(S) строки S в количестве символов Вырезание подстроки Left(S,K) – возвращает К Left(S,5) символов вырезанных слева из строки S Right(S,K)- возвращает К символов, вырезанных справа из Right(S,5) строки S Mid(S,N,K)- возвращает строку длиной К символов, Mid(S,5,10) вырезанных из строки S, начиная с позиции N Удаление пробелов LTrim(S)- удаляет все LTrim(S) начальные пробелы слева RTrim(S)- удаляет все RTrim(S) конечные пробелы справа Trim(S)- удаляет все Trim(S) начальные и конечные пробелы Смена регистра LCase(S)- преобразует все LCase(S) символы строки S к нижнему регистру (все строчные) UCase(S)- преобразует все UCase(S) символы строки S к верхнему регистру (все заглавные) Объединение строк
Слияние строк (конкатенация)
S & ”Пока!”
15 - пробел тоже символ!
“ Прив” “руг! ”
“вет,
друг!”
”Привет, друг! ” ” Привет, друг!” ”Привет, друг!”
” привет, друг! ” ” ПРИВЕТ, ДРУГ! ” ” Привет, друг! Пока!”
Сложение5 “Hel”+”lo!” “Hello!” Преобразование ASCII – кодов символов Asc(S) –возвращает значение Asc Asc(“a”) 97 ASCII-кода первого символа строки S Chr(N)- возвращает символ с Chr Chr(97) a (a –латинская ) ASCII-кодом N Рассмотрим примеры. +
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 разными типами переменных при использовании знака + возможны ошибки 53
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. Из законов Мерфи
☺ Второй закон Вейнберга. Если бы строители строили здания так же, как программисты пишут программы, первый же залетевший дятел разрушил бы цивилизацию. ☺ Правило точности Рэя. Измеряй микрометром. Отмечай мелом. Отрубай топором. ☺ Первый закон ремонта. Нельзя починить то, что еще не сломано. ☺ Закон Дж. Б. Шоу. Кто может - делает. Кто не может - учит. Кто не может учить – управляет. 54
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
Рис. 21. Вхождение символов одного текста в другой h Код программы и отладку - самостоятельно
В других самостоятельных работах текст в Text Box можете вставлять через буфер обмена, скопировав с уже готовых текстов с других файлов: таковых с расширением .txt много и в системных папках. А в свойствах самого Text Box установите Multiline = True и SrollBars = 2Vertical. Тогда любой длинный текст в окне можно будет просматривать обычной прокруткой по вертикали
Самостоятельная работа №13. Дана фраза (текст). Найти: 1. Количество цифровых символов 2. Сколько слов заканчивается на «я»? 3. Сравнить количество вхождения «а» и «я» (частоту вхождения символа) 4. Количество слов 5. Количество предложений 6. Количество собственных имен 7. Количество латинских символов 55
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, которые 56
позволяют размещать независимые инструменты: свойства индексированных кнопок будут действительны только в пределах контейнера 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. Адрес указан.
57
Работающее окно Конвертера
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 58
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 страниц 59
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 «Открытый» код программы «Рассчитайка» 60
Экран Рассчитайки
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 61
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
Конечный результат всех азартных игр – пустой карман 62
8. Пример использования календаря, переключателей, окон навигации
63
Список использованной литературы 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 с: ил.
64
ЗАКОНЫ МЕРФИ Комментарий Каллагана к законам Мэрфи. Мэрфи был оптимистом! z
Если какая-нибудь неприятность может случиться, она случается.
Следствия. z z z z z z
Все не так легко, как кажется. Всякая работа требует больше времени, чем вы думаете. Из всех неприятностей произойдет именно та, ущерб от которой больше. Предоставленные самим себе, события имеют тенденцию развиваться от плохого к худшему. Как только вы принимаетесь делать какую-то работу, находится другая, которую надо сделать еще раньше. Всякое решение плодит новые проблемы.
Законы машинного программирования z z z z z
Любая действующая программа устарела. Любая программа обходится дороже и требует больших затрат времени, чем предполагалось. Если программа полностью отлажена, ее нужно будет скорректировать. Любая программа стремится занять всю доступную память. Сложность программы растет до тех пор, пока не превысит способности программиста.
Постулаты Трумэна по программированию z z
z
Самая грубая ошибка будет выявлена, лишь, когда программа пробудет в производстве, по крайней мере, полгода. Если назначен специальный человек для контроля над чистотой исходной информации, то обязательно найдется изобретательный идиот, который придумает способ, чтобы неправильная информация прошла через этот контроль. Непечатный жаргон - это тот язык, которым решительно все программисты владеют в совершенстве.
Законы ненадежности Джилба z z z
Компьютеры ненадежны, но люди еще ненадежнее. Любая система, зависящая от человеческой надежности, ненадежна. Число ошибок, которые нельзя обнаружить, бесконечно, в противовес числу ошибок, которые можно обнаружить: оно конечно по определению.
Закон Брука z
Увеличение числа участников при подготовке опаздывающей программы только замедляет процесс.
Закон мира ЭВМ по Голубу z
Неточно спланированная программа требует в три раза больше времени, чем предполагалось; тщательно спланированная - только в два раза.
Принцип Шоу ☺ Создайте систему, которой сможет пользоваться даже дурак, и только дурак захочет ею пользоваться.
Расширение Максвелла z При замене понятия «система» на «методическое пособие» действие принципа Шоу только усиливается. Принцип IBM. z Лучшее – враг хорошего.
Спасительная благодать Мэрфи. z Худшее - враг плохого.
65
Серия «Компьютер для Петруши»
В серии вышли и выходят: Самоучитель по DOC и NC Microsoft OFFICE. Учебный Excel 7.0 и не только... практикум (в трех частях)
ACCESS 2000
Текстовые редакторы Excel 2000 и не только…
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 66