Вы находитесь на странице: 1из 595

СРЕДНЕЕ

ПРОФЕССИОНАЛЬНОЕ
ОБРАЗОВАНИЕ

С.Р. Гуриков

OCHOBbl
АЛГОРИТМИЗА ИИ
И ПРОГРАММИРОВАНИЯ
на языке

Microsoft
-
Visual Basic
СРЕДНЕЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАНИЕ
Серия основана в 2001 году

С.Р. ГУРИКОВ

ОСНОВЫ АЛГОРИТМИЗАЦИИ
И ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ
MICROSOFT VISUAL BASIC

УЧЕБНОЕ ПОСОБИЕ

Рекомендовано Межрегиональным учебно - методическим советом


профессионального образования в качестве учебного пособия
для учебных заведений, реализующих программу
среднего профессионального образования
по укрупненным группам специальностей
09.02.00 «Информатика и вычислительная техника»,
1О. 02. 00 «Информационная безопасность »
(протокол № 12 от 24.06.2019)

Москва
ИНФРА-М
2022
УДК 004.43(075.32)
ББК 32 . 973-018.1я723
Г95

Автор:
С.Р. Гуриков, кандидат педагогических наук, доцент Московского
технического университета связи и информатики

Р е ц е н з е н т ы:
С.М. Салибекя:н, кандидат технических наук, доцент департамента
компьютерной инженерии Московского института электроники и ма­
тематики Национального исследовательского университета «Высшая
школа экономики~;

А.И. Волков, кандидат технических наук, заведующий кафедрой


информатики Московского технического университета связи и ин­
форматики

Гуриков С .Р.
Г95 Основы алгоритмизации и программирования на языке Microsoft
Visual Basic: учебное пособие/ С.Р. Гуриков. - Москва: ИНФРА- М,
2022. - 594 с. - (Среднее профессиональное образование) .
ISBN 978-5-16-014442-9 (print)
ISBN 978-5-16-106972-1 (online)
В учебном пособии рассматриваются основы алгоритмизации и прог­
раммирования на языке Microsoft Visual Basic. Содержит описание такого
традиционного материала, необходимого для изучения основ алгоритми­
зации, как работа линейных, разветвляющихся и циклических структур,
обработка одномерных и двумерных массивов, программирование с ис­
пользованием функций и процедур, обработка строк и т.д. Обсуждают­
ся типы данных, используемые в VB, сделан обзор основных элементов
управления среды программирования, уделено внимание методам ввода

и вывода данных. Также изложены вопросы работы с графикой на основе


использования интерфейса GDI+.
Соответствует требованиям федералы-тых государственных образова­
тельных стандартов среднего профессионального образования последнего
поколения.

Может использоваться студентами и преподавателями средних профес­


сиональных и высших учебных заведений.
У ДК 004.43(075.32)
ББК 32.973-018.1я723

ISBN 978-5-16-014442-9 (print)


ISBN 978-5-16-106972-1 (online) © Гуриков С . Р. , 2020
Предисловие

В условиях глобальных информационных процессов, решения


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

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


чения объемов обрабатываемой учебной информации за счет ши ­
рокого практического использования компьютеров, локальных

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


техническими и программными средствами.

Дальнейшее развитие информатизации требует не только ком­


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

Новое понимание задач информатики, а также ее первосте ­


пенной роли в системе образования, безусловно, должно найти свое
адекватное отражение в программах, методиках и учебных планах
перспективной системы профессионального образования.
Проведенный анализ учебной литературы показал, что несмотря
на наличие книг по разработке приложений на языке программи­
рования Microsoft Visual Basic их содержание редко отвечает со­
вместной практической работе преподавателя и студента в кон­
кретном учебном заведении и на конкретном занятии. Использо­
вание различных самоучителей, руководств для профессиональной
работы в среде программирования действительно возмо:>кно

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

Главная цель создания пособия - обеспечить прочное и со­


знательное освоение основ алгоритмизации и программиро­

вания, сформировать практические умения - профессиональные,


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

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


таких профессионально значимых качеств, как самостоятельность,
ответственность, точность, творческая инициатива.

Пособие построено так, что непосредственно к программиро­


ванию можно приступить с самого начала: первая программа опи­

сывается в главе 2 (в главе 1 приводятся теоретические основы ал­


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

ввода данных, разрабатывать главное и контекстное меню. Здесь же


приводятся примеры работы с различными (основными) компонен­
тами среды программирования. Четкое понимание работы каж:дого
компонента - залог успешного программирования приложений.
В главах 3- 6 подробно рассматриваются операторы, относя­
щиеся к трем ~китам~ программирования - линейному, разветвля­
ющемуся и циклическому алгоритмам.

В главах 7 и 8 объясняется работа с одномерными и двумер­


ными массивами, рассматриваются ~классические~ способы их об­
работки.
В главе 9 показаны основные принципы работы с файлами.
В главе 1О речь пойдет о работе с функциями и процедурами.
4
Глава 11 посвящена средствам создания приложений для обра­
ботки символьной и текстовой информации. В ней приведены ба­
зовые алгоритмы обработки строк.
Приложение 1 представляет собой практикум по выполнению
лабораторных работ, часть из которых (с вариантами) может вы­
полняться студентами в домашних условиях, другие (без вари­
антов) - использоваться в стенах учебного заведения при прове­
дении практических занятий.
В приложении 2 содержатся описания 15 заставок к проектам,
которые помогут разнообразить проведение лабораторного практи­
кума. По сути, это еще один раздел пособия, посвященный основам
работы с графикой.
Учебное пособие содер:>кит более 200 листингов программ,
а так:>ке почти 250 рисунков, которые дают наглядное представ­
ление о результатах работы и ходе создания приложений.
Материал, изло:>кенный в учебном пособии, будет особенно по­
лезен студентам средних специальных учебных заведений, обуча­
ющимся по направлениям подготовки 10.02.03 ~информационная
безопасность автоматизированных систем», 09.02.03 «Програм­
мирование в компьютерных системах», 09.02.01 «Компьютерные
системы и комплексы», 09.02.05 «Прикладная информатика»
(по отраслям) и ряде других.
Апробация учебного пособия показала, что студенты,
не имеющие подготовки в области программирования, не только
успешно осваивают представленные в пособии прило:>кения,
но и вносят в них свои, очень интересные изменения, направленные

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

ятельного решения, контрольные вопросы, позволяющие оценить

уровень подготовки студента. Описание лабораторных работ с ва­


риантами заданий поможет организовать и провести занятия по со ­
ответствующим темам. Для каждой работы приведены примеры
ее выполнения, задания для самостоятельной подготовки. Объяс­
няется, какой объем работы студент должен выполнить в лабора­
тории, приводятся содержание отчета по конкретной лабораторной
работе, контрольные вопросы.

5
В пособие умышленно не включались описание среды прог­
раммирования, излишние подробности использования тех или
иных функций языка, создание больших приложений, которые
не могут быть рассмотрены в рамках ~классического» занятия.
Следует отметить, что учебное пособие не МО)кет претендовать
на функциональную полноту или на абсолютную оригинальность
приведенных методов, алгоритмов и программ. Автор преследовал
иную цель: не отпугнуть студентов с низким уровнем базовой под­
готовки от основ изучения языка программирования, а помочь им

путем доступного изложения теоретических и практических основ

алгоритмизации.

Материал предлагаемого учебного пособия был подготовлен


автором на основе многолетнего опыта преподавания курса алго­

ритмизации и программирования школьникам, студентам сред­

него и высшего профессионального образования, написания книг


по программированию в различных средах.
Глава 1
ТЕОРЕТИЧЕСКИЕ ОСНОВЫ АЛГОРИТМИЗАЦИИ
И ПРОГРАММИРОВАНИЯ

1.1. АЛГОРИТМ. СВОЙСТВА АЛГОРИТМА.


СПОСОБЫ ОПИСАНИЯ АЛГОРИТМА

Если мы хотим написать программу на каком-нибудь языке


программирования, то сначала мы должны составить алгоритм ре­

шения задачи.

Алгоритм - это точное и простое описание последовательности


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

1) достать ключ;
2) вставить ключ в замочную скважину;
3) повернуть ключ 2 раза против часовой стрелки;
4) вынуть ключ.
Представим, что мы поменяли местами второе и третье действия.
Мы сможем выполнить и этот алгоритм, но дверь не откроется, т.е.
алгоритм станет невыполнимым.

Для алгоритма важен не только набор действий, но и то, в каком


порядке он выполняется. Понятие алгоритма в информатике явля­
ется фундаментальным, таким )Ке, какими являются понятия точки,
прямой и плоскости в геометрии, вещества в химии, пространства
и времени в физике и т .д.
Свойства алгоритма:
· дискретность (прерывность, раздельность) - алгоритм дол)кен
представлять процесс решения задач и как последовательное вы ­

полнение простых шагов (этапов);


· определенность - ка)кдый шаг алгоритма должен быть четким
и однозначным. Выполнение алгоритма носит механический ха-

7
рактер и не требует никаких дополнительных сведений о реша­
емой задаче;
· результативность - алгоритм долж:ен приводить к решению

задачи за конечное число шагов;

· массовость - алгоритм решения разрабатывается в общем


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

Способы описания алгоритмов:


• словесный;
• графический;
• табличный;
• формульный.
Словесный способ каждый из нас использует ежедневно, пере­
сказывая собеседнику, например, различные инструкции, правила,
кулинарные ре ц епты, т. е. какую -то последовательность, приво ­

дящую к конечному результату.

Графический способ представления алгоритмов является более


компактным и наглядным п о сравнению со словесным. Как часто
v v
для лучшего п о ни ма ния тои или инои ситуации нам п роще на-

чертить какую -то схему, план, согласно которому мы будем дей ­


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

функциональных блоков, каждый из которых соответствует выпол­


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

Формульный способ находит свое применение при решении


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

нанта урав не ния, а затем в зависимости от полученного результата

находим корни урав нения по известным всем формулам.

1.2. НАЗНАЧЕНИЕ ФУНКЦИОНАЛЬНЫХ БЛОКОВ

На услов ны е обозначения в схемах алгоритмов распростра­


няется ГОСТ 19.701 -90. ЕСП Д ~Схемы алгоритмов, пр о грамм
данных и систем. Условные обозначения и правила выполнения~.
При рисовании блок-схем мы будем в основном использовать сим­
волы, представленные в табл. 1.

8
Таблица 1
Условные обозначения в схемах алгоритмов

Терминатор Процесс
Символ отображает выход Символ отображает фуикцию об­
во внешнюю среду и вход работки данных любого вида (вы­
из внешней среды (начало полнение определенной операции
или коиец схемы программы, или группы операций, приводящее
внешнее использование к изменению значения, формы или
и источник или пункт назна­ размещ ения информации, или к опре­
че~-rия да~-rных) делеиию, по которому из I-Iескольких

направлений потока следует дви­

(_ _) гаться)

Данные Решение
Символ отображает данные, Символ отображает решение или
иоситель да~п1ых ие определеи функцию переключательного типа,
имеющую один вход и ряд альтерна­

~
!__ /
тивных ВЫХОДОВ, ОДИН И ТОЛЬКО ОДИН

из которых может быть активизирован


после вычисления условий, опреде­
ленных внутри этого символа. Соот­
ветствующие результаты вычислеиия

могут быть записаны по соседству


с линиями, отображающими эти пути

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

функцию (установка переклю­ месте. Соответствующие символы­


чателя, модификация индекс­ соединители должны содержать одно

иого регистра или инициали ­ и то же у~-rикальное обозначеиие


зация программы)

9
Окончание табл. 1
Предопределенный процесс Линия
Символ отображает Символ отображает поток да~п-1ых или
предопределенный процесс, управления

состоящий из одной или не­


скольких операций или шагов
программы, которые опре­

делены в другом месте (в под­


программе, модуле)

11 1 1

Комментарий Документ
Символ используют для до ­ Символ отображает даи~-rые, представ ­
бавления описательных ком­ ленные на носителе в удобочитаемой
ментариев или пояснительных форме ( машинограмма, документ для
записей в целях объяс~-rе~-rия оптического или магнит~-rого считы ­

или примечаний . Пунктирные вания, микрофильм, рулон ленты


линии в символе комментария с итоговыми данными, бланки ввода
связаны с соответствующим дан~-rых)
символом или могут обводить
группу символов . Текст ком­
ментариев или примечаиий
должен быть помещен около
ограничивающей фигуры
-

----------·

1.3. ОСНОВНЫЕ ЭТАПЫ РЕШЕНИЯ ЗАДАЧ ПРИ РАБОТЕ


В СРЕДЕ ПРОГРАММИРОВАНИЯ

Процесс решения задачи состоит из нескольких этапов, часть


из которых в ып ол няет ся п ользователем, а часть - комп ьютер ом .

1 этап. Общая постановка задачи. На этом этапе описывается


содер:жание задачи, составляется перечень и сходных данных.

2 этап. Разработка математической модели. Цель этого


этапа состоит в устано влении формализованных связей между ис­
ходными данными и искомыми результатами. Этап заключается
в записи расчетн ых формул или функциональных зависимостей.

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

4 этап. Разработка программы. Пр ограмма составляется


в полном соответствии с разработанным алгоритмом решения за­
дачи.

5 этап. Отладка программъ~. Процесс поиска ошибок в прог­


рамме и их устранение.

6 этап. Анализ результатов. Позволяет принять решение о не­


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

1.4. АЛФАВИТ ЯЗЫКА MICROSOFT VISUAL BASIC.


ИДЕНТИФИКАТОРЫ И ОБЩИЕ ПРАВИЛА ИХ НАПИСАНИЯ

Изучение любого языка начинается с изучения алфавита.


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

слов языка, из которых формируются определенные конструкции.


И так, в алфавит языка Microsoft Visual Basic (VB) входят:
1) латинские буквы от а до z и от А до Z. В VB нет различия
между прописными и строчными буквами алфавита, если только
они не входят в символьные и строковые выра)кения;

2) цифры от О до 9;
3) специальные символы «+», «-», «*», «/ », «=», «;» «:», «[ )»,
«( )», «{ }», «$», «#»;
4) зарезервированные (служебные) слова: For, Then, Else, Of, If
и т.д.

Для того чтобы программа решения задачи обладала свойством


массовости, следует употреблять не конкретные значения величин,
а их обозначения для возмож:ности изменения по ходу выполнения
программы их значений. Для обозначения в программе переменных
и постоянных величин используются имена - идентификаторы
(англ. identification - установление соответствия объекта некото­
рому набору символов).
Следует учитывать следующее:
• в идентификатор не могут входить пробелы, специальные сим­
волы алфавита;
• идентификатор начинается только с буквы или со знака подчер­
кивания;

11
• идентификатор МО)кет состоять из букв, цифр и знака подчер ­
кивания;

• при написании идентификаторов можно использовать как про ­


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

summa1 правильно

2delta ошибка
Block 35 правильно

Nomer.doma ошибка

1.5. ОПЕРАТОР ПРИСВАИВАНИЯ

Действия, выполняемые компьютером в процессе решения за­


дачи, записываются в виде операторов алгоритмического языка.

Изменение значения переменной осуществляется оператором


присваи вания. Присваивание переменной некоторого значения
означает занесение этого значения в соответствующую ячейку па­
мяти.

Действие, выполняемое этим оператором, обозначается знаком


~=~.

Слева от этого знака записывается имя той переменной, которой


нуж:но присвоить новое значение (например, х= ). Справа МО)кет
быть:
1) число, например х = 5;
2) выражение, например х = (3 *а)/ 2, х =А> 1;
3) другая переменная, например х =а.
Если переменной присваивается какое-то значение, то ее старое
значение при этом исчезает. Например, при выполнении последо ­
вательности операторов:

k=5
k=k+1
k=8
после первого присваивания значение переменной k становится
равным 5, после второго - 6, после третьего - 8.
Операторы выполняются в той последовательности, как они за­
писаны в программе. Например, фрагмент программы нахождения
среднего арифметического включает в себя операторы:
а=5
ь = 10
12
S=a+b
v=s/2
Возможна запись оператора присваивания в следующем виде:
=оператор

л= оператор
*=оператор
/= оператор
\=оператор
+=оператор
-=о ператор

Пример демонстрирует оператор+=, который увеличивает зна­


чение переменной слева от оператора на величину, стоящую справа
от оператора:

х+= 1
В данном случае единица прибавляется к значению х и ре­
зультат присваивается х. Остальные операторы работают анало ­
гично.

1.6. ОПИСАНИЕ ПЕРЕМЕННЫХ И КОНСТАНТ

Все переменные, которые пользователь использует в своем


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

Dim Имя П еременной As Тип Данных

При выполнении программы принципиальное значение имеет


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

13
Допускается описание нескольких перемен ных в одной строке
через запятую :

Dim а, Ь, с, d As Integer
Возмож:но описание в строку несколькими типами переменных:
Dim а, Ь As Integer, с, d As DouЬle
Допустим оператор присваивания следующего вида:

Dim а As Integer = 50
Возможна запись такого вида:
Dim а As DouЫe = Textbox1.Text
Dim Ь As DouЬle = Textbox2.Text
Если не указан тип данных, VB назначит переменной тип Object.
Это может стать причиной более медленной работы программы,
поскольку для переменной типа Object выделяется больше памяти
( 4 байта на 32-разрядной платформе и 8 байт на 64-разрядной),
чем, возмож:но, нужно. Кроме того, программе придется тратить
дополнительное время на определение того, к какому типу дан ных

относится значение переменной в данн ый момент времени.


Предпочтительным является явное объявление переменных
с указанием типа данны х, поскольку это СНИ)кает вероятность воз­

никновения ошибок написания или конфликта имен. По умол­


чанию компилятор VB устанавливает режим явного объявления
переменных. Изменить режим объявления переменных можно,
вызвав меню Проект/Свойства:Имя проекта/Компиляция.
Подобная ситуация представлена на рис. 1.

: WindowsApp1• -о Х Form1 vЬ1 Комструктор 1"

При11о:ж.еttие КонфWураци•: Актl«IМ. (OeЬug)


i!fi!ЩfMЫ 1
0fAIA(ll

CcWJ11'И ВwходноА nyтi. сбор«и:

Ркурсw Ьin\De1>"9\ 06эор_

с.уж6w П.раметрw 1Со~и.11J11ц.11-м:

Пар1,,..1р1о1

ПОАnж:1о11•ние Оп Off
Ркwирени11 Му
П11рамс-тр CO«lpaf~
Безоn.сность
8!nary v Оп
Пуб.11.~к.аЦК,11
Uемео~ UП;
Анал:иэ КО,Аа
Any(.PV
621 ПрtоАnе)о(нпе•....о !2·pasp.
Конфиrурации nреА)'"ре:..А•ниМ:

О OTIVllOЧloft\o ~ n~n~x.oeн~11
О Обра6ан111еать есе npeдynpe-.дtttи• 118( оw"бки
[;з Со~д.11о феМ11 ХМl•Д.Оltум•1С14!!Ц1tИ
Собw1и11 сбор.и...

Рис. 1. Установка режима явного объявления переменных

Ниже приведены описания всех трех режимов.


1. Параметр Strict. При включенном параметре Strict On
компилятор должен иметь возможность определить тип каждой

14
переменной. Кроме того, если одной переменной присваивается
значение другой и при этом необходимо преобразование типов
(например, от Integer к Boolean), то такое преобразование должно
быть явным.
2. Параметр Explicit. Если задан параметр Explicit On, то
каждая переменная в проекте должна быть объявлена. Эта уста­
новка не будет играть роли при использовании ре.1кима Strict, по­
скольку компилятор не сможет определить тип необъявленной пе­
ременной. Однако режим Explicit On не следует отключать.
3. Параметр Compare. Данный реж:им определяет, будут срав ­
ниваться строки как наборы двоичных чисел (Binary) или как мас­
сивы символов в текстовом формате (Text ).
Сразу следует отметить, что при выполнении упражнений, ра­
зобранных в пособии, ре.1кимы Option Strict и Option Explicit
должны быть обязательно включены. Кроме того, для лучшего
усвоения материала автор оставил в программах предварительное

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


суммы каких-либо значений, однако VB этого не требует.
Если в программе вам нуж:на величина, которая бы не меняла
своего значения, то применяются константы. Константа имеет
символьное имя и значение. Объявление констант во многом ана­
логично объявлению переменных.
Пример:
PuЬlic Const Gruppa = 1701
При описании множества констант в одной строке их разделяют
запятой:

PuЬlic Const Gruppa1 As Integer = 1701, Gruppa2 As Integer =


1702, GruppaЗ As Integer = 1703

1.7. ОБЛАСТЬ ВИДИМОСТИ ПЕРЕМЕННЫХ

При выполнении программы принципиальное значение имеет


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

Для создания переменной, которую программист хочет опре ­


делить в качестве глобальной, в начале главного модуля прило­
жения следует поместить оператор PuЬlic:

15
Puhlic а As Integer

Сам модуль создается командой Проект/Добавить модуль/


Обычные элементы/Модуль.
Для объявления переменной, локальной внутри модуля или
формы, следует использовать операторы Private и Dim. В этом
случае объявленная переменная будет доступна для всех входящих
в форму или модуль процедур, но в то же время окажется недо­
ступной в процедурах других модулей и форм:

Private а As Integer

1.8. ТИПЫ ДАННЫХ

Типы данных относятся к фундаментальным понятиям любого


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

Перейдем к рассмотрению типов данных.

1.8.1. Целые типы данных

В VB существует три целочисленных типа данных. Ка)кдому


из типов соответствует несколько альтернативных. Таким образом,
VB поддерживает всего восемь целочисленных типов, которые
представлены в табл. 2.
Таблица 2
Целочисленные типы данных

Размер,
Тип Диапазон значений
байт

Short 2 От - 32 768 до +32 767


Int16 2 От -32 768 до +32 767
Integer 4 От - 2 147 483 648 до +2 147 483 647
Int32 4 От -2 147 483 648 до +2 147 483 647
Ulnt32 4 От О до +4 294 967 295
Long 8 От - 9 223 372 036 854 775 808 до
+9 223 372 036 854 775 807
Int64 8 От - 9 223 372 036 854 775 808 до
+9 223 372 036 854 775 807
Ulnt64 8 От О до 18 446 744 073 709 551 615

16
В разделе описания переменны х з начения целых типов записы­
ваются как

Dim х As Integer
Dim у As Short

Над данны ми целого типа определены следующие арифметиче -


ские операции:

«+» - сложение;

«-» - вычитание;

«*» - умножение;
«/» - деление.
Div - (деление нацело) - отличается от обычной операции де­
ления тем, что вычисляет целую часть частного, дробная часть от­
брасывается. Результат целочисленного деления всегда равен нулю,
если делимое меньше делителя. В языке Visual Basic данная опе­
рация обозначается знаком«\».
Mod - остаток от целочисленного деления.
Результат операции Mod можно вычислить по формуле
А Mod В= А - ((А \ В)*В)
Пример:

5 \ 2=2 25 \ 5 = 5
5 Mod 2 = 1 20 Mod 3 = 2
2 Mod 5 = 2 19 \ 2 = 9
о\ 5 =о 36 Mod 6 = О
О Mod 5 = О 41 \ 2=20

1.8.2. Вещественные типы данных

В VB допускается представление вещественных (дробных) зна­


чений в форме с фиксированной и плавающей точкой. В форме
с фиксированной точкой число представляется последователь­
ностью десятичных цифр со знаком «плюс» или «минус», например:
7.32; 456.721; 0.015; 192.0; - 1 5.О
Форма с плавающей точкой (экспоненциальный формат) ис­
пользуется для представления очень больших или очень маленьких
чисел. В этой форме число записывается в таком виде:

+mE + р,

17
где т - мантисса числа; Е - символ, обозначающий основание де ­
сятичной системы счисления ( ССЧ); р - порядок (степень) числа.
Пример:
7.32Е+ОО; 4.5672 1 Е+О2; 1.SE-02; 1 .92Е+О2; -1.5Е + О 1 ;
Аналогично целым типам существует несколько различных ре -
ализаций действительных чисел. VB поддерживает три типа, ко ­
торые представлены в табл. 3.
Таблица З

Вещественные типы данных

Размер,
Тип Д иапазон значе~-rий
байт
Single 4 От -3.4028235Е+38 до -1.401298Е-45 для от-
v
рицательных значении;

от 1 .401298Е-45 до 3.4028235Е+38 для поло-


v
жительиых значении

D ouЫe 8 От - 1 .79769313486231570Е +308


до 4.94065645841246544Е -324 для отрица-
тельных чисел;

от 4.94065645841246544Е -324
до 1.797693134862311570Е +308 для положи -
тельных чисел

Decimal 16 От О до +/ - 79 228 162 514 264 337 593 543 950


335 без десятичной точки;
ОТ 0 ДО+ / -7.9228162514264337593543950335
с 28 разрядами справа от десятичной точки

В разделе описания переменных значения вещественных типов


описываются так:

D im а As Single

1.8.3. Логические типы данных (булевский тип}

В разделе описаний переменные этого типа описываются так:


D im х As Boolean
Переменные этого типа могут принимать одно из двух значений:
True (Истина) или False (Ложь). Например, значение логического
выра)кения 5 > 3 есть Истина, а значение 5 = 3 есть Ложь. Значение
условия а>5 зависит от значения переменной а и не определено
до тех пор, пока неизвестно значение величины а.

Если в программе встречаются переменные разных типов, на ­


пример логическая а и целая с, то их описывают следующим

образом:

18
Dim а As Boolean
Dim с As Integer

П еременные , описанны е как логиче ские, могут принимать в ходе


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

а= True
Ь = False
Результат операции сравн ения - это ло гическ ое значен ие, по­
этому в VB разрешена зап ись

а= d>5

В последн ем случае переменной а присваивается значение True,


если d>5, и False - в противном случае.
Над данными логического типа могут выполняться логические
операции, приведенные в табл. 4.
Табли ца4

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

Операция Действие В ыражение

And Логическое И A And B


( конъюнкция)

Or Логическое ИЛ И A OrB
(дизъю икция )

Not Логическое Н Е Not A


( отрицание) NotB
Xor О ператор Xor возвращает True A Xor B
тогда и только тогда, когда

только одиа оператор есть True


AndAlso Если первый оператор в выра- A AndAlso В
жении AndAlso есть False, тогда
u
второи i-re оцеаивается и возвра-

щается False

OrElse Если первый оператор в выра- А OrElse В


жении OrElse есть True, тогда
u
второи ае оцеиивается и возвра-

щается True

19
Используя операцию И, мож:но объединять несколько условий.
Например, некоторое действие выполняется только в том случае,
если 1 <а< 5, тогда это условие мож:но записать так: (1 <а) and
(а < 5), причем значение этого условия истинно только в том
случае, если истинны оба входящих в него простых условия.

1.8.4. Символьные типы данных

Язык VB поддерживает символьный тип Char. Переменная типа


Char сохраняется как 16-битовое число (2 байта) без знака. Диа­
пазон значений находится от О до 65 535.
Объявить символьную величину мож:но двумя способами.
В первом из них указывается строковая константа, после которой
должен стоять символ с, информирующий компилятор о создании
величины типа Char. Естественно, в одном операторе можно объ­
явить только один символ. Порядковый номер любого Ипiсоdе-сим­
вола сообщает функция AscW модуля String, функция же ChrW
этого модуля, наоборот, по номеру сообщает символ.
Оба метода создания символьных величин продемонстрированы
ниже:

Dim simvol As Char = "а"с


Dim а As Char
a=ChrW(97)
1.8.5. Строковые типы данных

Значениями строковых переменных являются строковые кон­


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

Unicode.
В языке VB переменные строкового типа описываются типом
string:

Dim name As String

Тогда допустим следующий оператор:

name = "Студент"
1.8.6. Тип данных Date
Тип Date в
VB хранит значения, представляющие даты. В раз ­
деле описания Dim переменные этого типа описываются сле ­
дующим образом:

20
Dim а As Date

Описав переменные соответствующим образом, с помощью


функции Now() можно получить текущую дату и время в фор­
мате число.месяц.год часъt:ми7-tуmы:секу7-tды, а вызвав функцию
Today(), - получить только текущую дату в формате число.месяц.
год. Соответствующий код приведен ниже:

PuЬlic Class Forml


Private SuЬ Buttonl Click (sender As Object , е As
EventArgs) Handles Buttonl.Cl i c k
Dim а, Ь As Date
а = Now()
Ь =Today ()
Label l. Text - а
End SuЬ
End Class

1.8.7. Комментарии

Для лучшего понимания программы в ней часто записывается


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

• временно отключают фрагменты программы при ее отладке.


В языке Visиal Basic для включения в текст программы коммен­
тария необходимо ввести апостроф (' ).
Пример:

sum =а+ Ь 'Въtчисляется сумма 2 чисел

1.9. ЗАПИСЬ МАТЕМАТИЧЕСКИХ ФУНКЦИЙ


В связи с невозможностью записи некоторых стандартных ма­
тематических функций с клавиатуры персонального компьютера
в языке Microsoft Visual Basic существуют так называемые встро­
енные функции, с помощью которых пользователь МО)кет записы­
вать арифметические выражения. Математические функции пред­
ставляют собой методы класса System.Math.
Запись наиболее часто используемых математических функций
представлена в табл. 5.

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

Математическая
Описание
функция

Math.Abs Возвращает абсолютное значение (модуль) числа


Math.Acos Во зв ращает угол , косинус которого равен заданному
числу

Math .Asiп Возвращает угол, синус которого равен заданному


числу

Math.Atan Во зв ращает угол , та~-rгеис которого равеи заданиому


числу

Math. Ceiling Возвращает наиме~-rьшее целое число, большее либо


раваое задаиному числу

Math.Cos Возвращает косинус заданного угла

Math.Exp Возвращает число е (приблизительно


2,71828182845905), возведенное в заданную степень

Math.Floor Возвращает наибольшее целое число, большее либо


раваое задаиному числу

Math.Log Возвращает натуральный логарифм

Math. Log10 Во зв ращает десятичный логарифм

Math.Max Возвращает большее из двух зада~-rных чисел

Matl1.Mi11 Возвращает меньшее из двух заданных чисел

Math. Round Возвращает целое число, ближайшее к задаиаому


числу

Matl1.Sig11 Возвращает величину, определяющую знак числа

Math.Sin Во зв ращает синус задааного угла

Math.Sqrt Возвращает квадратный корень

Math.Tan Во зв ращает тангенс заданиого угла

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


ровать пространство имен System.Math, указав строку Imports
System.Math так, как это показано ниже:

Imports System . Math


PuЬlic Class Forml
Private SuЬ Buttonl_Click (ByVal sender As Sys tem .
Ob ject , ByVal е As Sys tem . EventArgs) Handles Buttonl .
Click
' код программы с использованием математических функций

22
End SuЬ
End Class

В этом случае можно вызывать встрое нную математическую


функцию по имени, не указывая класс Math. Без импортирования
пространства имен System.Math вызов математических функций
должен сопровождаться указанием класса Math, например, у =
= Math.sin(x).
Результаты работы математич еских функций пр едставле ны
в табл. 6.
Таблица 6
Результаты работы математических функций

Математическая
Результат Описаиие
функция

Math.Abs (-10) 10 Абсолютная величина


(модуль ) числа

Math.Ceiling (65.28) 66 Округление до бли-


v
жаишего целого числа,

большего или равного


аргументу

Math. Ceiling (-65.28) - 65 Округление до бли-


v
жаишего целого числа,

большего или равного


аргуме~-rту

Matl1.Floor (65.98) 65 Округление до бли-


v
жаишего целого числа,

меиьшего или равиого

аргументу

Matl1.Floor (-65.98) - 66 Округление до бли-


v
жаишего целого числа,

меньшего или равного

аргументу

Math.E 2,71828182845905 Число Е - основание


натурального лога-

рифма
Math.Exp (2) 7,38905609893065 Е2 - число Е в заданной
степени

Math.Log (35) 3,55534806148941 Натуральный логарифм


ln 35
Matl1.Log10 (1000) 3 Десятичный логарифм
log10 1000

23
Окончание табл. 6
М атематическая
Результат Описание
фу акция

Math.Max (28,62) 62 Максималы-rое из двух


чисел

Math. Miп (28,62) 28 М инимальное из двух


чисел

Rпd 0,605545 Случайное число


из диапазона (0- 1)
Math. Round (62.981) 63 О кругление до целых

Matl1.Rou11d (62.17) 62
Math.Round 62,14 О кругление до двух
u
(62.13605,2) знаков после запятои

Matl1.Sig11 (-900) -1 Sigп для всех отрица-


тельных чисел р авеа -1
Matl1.Sig11 (О) о Sigп для О равен О

Matl1.Sig11 (900) 1 Sigп для всех положи-


тельных чисел р авеа 1
Math. Fix (28.62) 28 Целая часть числа
(дробная часть отбрасы-
Matl1.Fix (-28.62) - 28
вается )

Math.Sqrt (25) 5 Кореаь квадратный

Math.PI 3, 14159265358979 Число PI

1.10. ПРИОРИТЕТЫ ОПЕРАЦИЙ


выполняет операции в соответствии с их приори ­
Visual Basic
тетами, что обеспечивает однозначность в трактовании значений
выра)кений. Приоритеты операций представлены в табл. 7.
Таблица 7
Приоритеты операций

Приоритет Операция

1 Вызов функции и операции в скобках


2 л Во зведение в степень

3 Смена знака

4 Умиожеаие и делеиие

5 \Деление иацело

24
Окончание табл. 7
Приоритет Опе рация

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


7 Сложение и вычитание
8 > < >= <= <> =
' ' ' ' '
9 Not
10 And
11 Or

Ниже перечислены математические операции в порядке убы-


вания приоритета.

1) возведение в степень (л);


2) унарный минус (изменение знака числа);
3) умножение и деление;
4) целочисленное деление;
5) вычисление остатка (Mod);
6) слож:ение и вычитание.
Операции отношения представлены в табл. 8.
Таблица 8
Операции отношения

Операция Описание

Опе раад 1 < О перанд2 Меньше


Опе ранд 1 > Оп еранд2 Больше

Опе ранд 1 <= Операнд2 М еньше или равно

Опе ра~-rд 1 >= О перанд2 Больше или равно

Опе ранд! <> Операнд2 Не равно

Опе раад 1 = Опе раад2 Равно

Опе раад 1 Like Операад2 Сравнение двух строковых выражеаий

Операция конкатенации представлена в табл. 9.


Таблица 9
Операция конкатенации

Опе рация Описание

Строка 1 & Строка2 Сложе~-rие строк


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

Строка 1 + Строка2

25
Контрольные вопросы и задания
1. Что иазывается алгоритмом? Какими свойствами ои об ладает? Пе ­
речислите основные этапы решения задач при работе в среде прог­
раммирования и дайте им характеристику.
2. Что называется интерпретатором, компилятором? Объясните поиятие
~идентификатор~ и расскажите об общих правилах написания иден­
тификаторов .
3. В чем заключается действие оператора присваивания? Каковы две
формы записи дробиых чисел?
4. Дайте характеристику каждому типу данных языка V B.
5. Назовите приоритеты операций .
Глава 2
ВВЕДЕНИЕ В ЯЗЫК ПРОГРАММИРОВАНИЯ
MICROSOFT VISUAL BASIC

Первая версия языка программирования Visual Basic была со ­


здана в 199 1 г. на основе синтаксиса языка QBasic, который вместе
с языком программирования Pascal нередко используется для
обучения основам программирования и в наши дни.
Начиная с 2005 г. язык Visual Basic вошел в состав среды раз­
работки Microsoft Visual Studio, обеспечивая возможность быстрого
и простого создания прилож:ений на основе платформы Microsoft.
NЕТ. В ее основе ле)кит единая среда исполнения Common Language
Runtime (CLR), которая является ключевым звеном архитектуры
.NET Framework. Ядром CLR является процессор исполнения
кода, осуществляющий функции загрузки, исполнения и управ ­
ления кодом, скомпилированным в промежуточный формат с бай­
товым представлением, который называется пр омежуточным
языком Microsoft (MSIL, Microsoft Intermediate Language). Часто
для этого языка используют более краткое обозначение - IL. Код,
представленный в формате MSIL, не интерпретируется, а компи ­
лируется перед выполнением в бинарный код, соответствующий
данной системе.

2.1. ИНСТАЛЛЯЦИЯ СРЕДЫ РАЗРАБОТКИ


MICROSOFT VISUAL STUDIO

Интегрированная среда разработки Microsoft Visual Studio как


набор инструментов для создания программного обеспечения
на различных языках программирования: Visual С#, Visual С+ +,
Visual Basic и др., активно развивается. Несколько раз в год появ ­
ляются обновления, при этом основные возможности языков не за­
висят от нового релиза программы. На момент написания книги
на сайте
https://www.visualstudio.com/ ru/ были доступны версии
Community, Professional и Enterprise, предназначенные для уста­
новки на компьютерах под управлением операционной системы
Windows. Все версии распространяются бесплатно. Мы советуем
остановить свой выбор на версии Community, поскольку ее воз ­
можностей, безусловно, хватит для освоения основ алгоритмизации

27
и программирования, которые будут рассматриваться в данном из­
дании.

Рассмотрим процесс установки интегрированной среды разра­


ботки Microsoft Visual Studio. П ерейдем на 1:шеЬ-ресурс https://\v\vvv.
visualstudio.com/ ru/ и выберем раздел Интегрированная среда раз­
работки VisualStudio/Cкaчaть версию для Windows/ Community.
Откроется окно, представленное на рис. 2, где будет предло)кено
выполнить загрузку инсталляционного файла, что и следует сде ­
лать, указав имя папки, куда будет скачиваться искомый файл.

~ ~ О G\) vlsualstuclio.COt\'\ n./tNnk )'°" ~ w. id ig u Hu u =С 1t1лity r~I 1'

Благодарим за загрузку Visual Studio


Если О<дчиван1-1е не начинается 6

®
Начать работу
8
Разработка приложений
@
Сотрудничество

Руководства. примеры и Создание первого консольноrо Вы можете открыть учетную запись


документация. которые помогут вам приложения о:Здравствуй, мир!~ на Visual Studio Team Services для
начать писать код. С++ с помощью Visual Studio 2017. пла нирования проектов и

разработки реше~r.ий со своей


Дополнительные сведения> Начало работы> командой.

Зарегистрируйтесь}

Чtо смдует сд~ат~. с

vs.coml'l"М.lnity_1982SOSSS4 .1SOSS91718.exe (1.1 МБ)? 1 Вь~nол нитъ


11 Со:.ранит" л 11 Отмена 1 х
И.з: visua.lstudio.com

Рис. 2. Главная страница сайта

При выборе определенных компонентов (рис. 3), который пред­


ложит Мастер установки, не рекомендуется устанавливать пакеты,
назначение которых вы не знаете. Они нагружают систему и тре­
буют много места на диске, поэтому стоит остановить свой выбор
на пакетах Разработка приложений для универсальной плат­
формы Windows и Разработка классических приложений .NET,
а остальной выбор Мастер установки сделает самостоятельно .
Кроме того, стоит отметить, что вы всегда сможете вернуться к вы­
бору компонентов в уже установленной программе, выбрав пункт
меню Средства/Получить средства и компоненты.
Если у вас имеется высокоскоростное подключение к сети Ин­
тернет, то проц есс установки займе т весьма непродолжительный
промеж:уток времени, в течение которого вы смо)кете наблюдать
за установкой компонентов в режиме реального времени (рис. 4).

28
f? - D

"1Эа/11еи~ме-V1sщl Studio Community 2:017- 1S S6 Х

Рабочие наrруэк м Отдельные компонен ть1 Яэы коеые па кеты


Сводка
WindowsCЗ)
> ОсноеноА редактор Visual Studio
8 • P•JpIOon.:1 nриАО)Qмма All1t умммрu-.И()IА Р•)j»6отке ICAKCM'lfClfl'lll nрмАО)Qмма ,N [Т
> Раэработ•а nри11ожени~ дn• униsера11ьно ... fr
• • м•'форм"' Windows Cosдtt!иe WP'f=. +оР" W«klws f0tms м (0ttCM'"1"°'
8411 сможflе COJAl••t• np.uoxe№d Ald ук11мрипа."°ii.-. nplt.llOXeммiii t nомощwо С•. Visu.11 В.~iс м F•. > Раэрабоn:а 1U1ассичесм:их nриАожени~ .NET
J > Раэрабоn:а l(J'lассических nриАожени'°' ка С•+
> Роtэрабоn:а расwирени~ Visual Studio
Рыре6оПUI IUIOК:Ol"e<IUIX rtpt.n0JЦ11t1M м• ( + • v OтдeJIWtwe коunонентw

В.. можете jМJ~w1•r• к.wсси....а:ме npioADXI'....,_ r'J ~КfТ SDКAJlllll Windows 10 ( 10.О 1S063 О).,_. t/W
A.МWlf'\dows, ~-))'11 ~(Ui'IO'<.......__ iL !J С/lуже.. .,,...IC. RiilOf
rJ пакет SOIC All• TyptS<:npt 2.1

Веб poup.:t6oт11• и обмао (7)

А, ASP.NEТ и pt;JP16c>п111'6-t1f*110жet1мM Р.а)j»6отц All• A:rure


"f!ril Vn.\a№!e ee6-nplUIOЖetlMol < АОМОЩ..IОАSРМЕТ. Пекет A:rure sotC. ~etln.I" nроктw AoUI
ASl'.NEТ Соц>, HTMI.,. ~Scnpt м КО"1'1Имtр08. llt.80..a Р'!Jработаtобм-wх npr.i~-..i и COJ,lllMЖI ркурсо&.

L
P•JpIOorw.a м• Python
Pf,uКt>1po....иe. 01J1М.Q. -tе~wюиен•• J)a)pe6oric1 и
61C1f'w.11 ynp.At11м• е@рс.!амм .t.11• PythOn. [® P1Ji»6of11• Nod• js
Co1AМ8iht м.1С16't16~....,. сеtн..- npм.110Жtнita с
no~ Nodt.JS. ecмtupOнttCМ срц" e1o1~i.• .•

•w
1"1родо/11111111, ,,.,"11мм.м1е yt.11<*"• N•цi:"'""" All• 8'ol~lt0to 11o1~u Viw.I Studic:>. l"lp!oд/l"Нtr.118l(Jllf c118"llll• АР~ npotp-.......oe oбe<neчeнl'lt е Visutl
Sl:\ldlo. Jt-"l.lef'l,.,м Мl1 неrо npt.rlQ(tillJl'МOIOI оrм,.....о. цс уqммо• сторон""• )'И.IOlll"fl•"•• иnи 1 ~~t-1~ ~l.ltlf)Иll Про.~о.1ж111. ..,,. f1Ж11Иiмttt JtM
rc-11 J!И\,\l:IQИ""-

Рис. З. Окно выбора компонентов

fi' - DX

Visual Studio
Продукть1
----
Установлено Добро пожаловать!
Пp10(Jllw.lltW l'ICl«TИ1\o н•wм pt()'PC'ЬI 8
Инfepн.tft, ICOfOpwe ООЗ8ОАllТ no11WCиn.
~ Visuol Studio Community 2017 еаоwи умени111 и нм1о1<и а fillC)l(f на~
AonoJIHИffJl~Hlolf ИM(f~flol Дlll
~ие MкrosoftVlsu.ICpp.'Jools.Hostx.64 T•rgetARМ
раJрЮ()тщ.ч:~
14" -

.."
nримt-...нме мtcroюftVisu,a5tudio.VC.ldt-.8иe
i:- Обучение
У "'8С К'ТЬ py!t080ДC1U,
e~t~~ll~" npиWptoi llOAil
QI( Дlllll H...l'>Кil(JЩIO(,. fёll( И Дlll

oni.m;ыx р.uр<16ооNи1Фе.

Доступно 11 Marl<etplace
С n~ощЬJО pxш"~it Viw.al

~ Visuol Studio Enterprise 2017 ~ Visual Studio Professional 2017 Studio а1о1 <UOJICt-tt АО6ии1ь •
~WfМIOt nодАtрХК)' НО8ЬIХ
15.5 6 15.5 .6 tt»t0110tи11. инт@rр.фОuть ero <
hwttt~ DeYOps01 Ma.ucp«aфr д.1111 11~ц.-.и и Професси~~.нrwе ~дcru и с..уж.&. ~sрабсmс.и д.'111 АР)"f"-МИ npo.iiyп1\11o1 и "'уж~мо~,
о6есnеч-11 ~fdHOC'IИ ХО-НА .nl06oro p.si..epa 1iе6опьwих wм~ • fillX• nро41ктw TOHIC)"'O
УСJ1оеи11 Jl~~.)IO" 3'~..t"ТЖМ о Oltlnytltt' н.ктроii111у рМSо...Ж сре-дw.
Y(JIOOO'• 11и~"'"и З.~Tll)I о e111nrcrt'

Нужна помощь?
nосети rе u;ot (оо6щ@ста.
~зра.6оt'1"(08 м~"крос<>фt, ка
.:отором pi.Jpё16oNИl(И o6мt"l'INIOТCll

Рис. 4. Процесс установки среды программирования

При запуске установленной на компьютер среды разработки


Microsoft Visual Studio появляется Начальная страница, внешний
вид которой представлен на рис. 5.
Таким образом, мы рассмотрели процесс установки среды прог­
раммирования Microsoft Visual Studio на компьютер пользователя.
Перейдем к изучению процесса создания п ервого прило)кения.

29
!!.) Н.ч.А-~ЦI Moaosoft V'4l.Olf Stlllk
""... Прна 11..,. Пpot!n о.,..... ~ Срцс" ткn~.,_.... ~"_, О.мо ~

3." ,,/' •n.w~ .... .,. ';"


: ......_ (fJ*!- " х

Начало работы Открытие

Новости дпя разработ ...


~~",.,,"~"P""'_..""v$i181SC\ldio1J1•,..•c11...,.o­
...,_....,_pe6o,111
.......
64·Ьrt АSР.НfТ Cor• on Anw Арр

\\'t!otn CfNЬt\g ~ Anl,_ Арр S.МС. NЕТ


<с.. • .if'Ndy,,. -иoli.d. . . . _

P•1'1p116m.ih.!1ecoe~~.,.""c~~.,..~·
°"f l:t!e )2 Ь1t .N(Т 1\1~ 1$ ll'\Jt8li.d.
......... .os НOIOf26~ •

Xamarin Unfo.lffsity ~: Ship


Ьt«• •PPi wilh Viw'8 Studio Арр
с.,,1.,.

Последние "1MICl'OIOft.(OO'l'*"l):i.tt~.wt
tinlll)vnotd.,,. ~'8-IМ>oioty(>f
Новый проект V ....... ~Appc.t\ЦtlO~IOЬjC.

... .-..

Рис. 5. Нач аль н ая страница

2.2. ПРОЦЕСС СОЗДАНИЯ ПРОЕКТА

Приложени е собирается из многих элеме нтов : форм, пр ог­


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

нием. Компилятор последовательно обрабатывает файлы проекта


и строит из них выполняемый файл.
Стоит отметить, что файловая система расценивает проект как
Решение, которое мож:ет содержать несколько проектов, изобра­
)Кения и другие элементы, необходимые для работы приложения.
При работе со средой программир ования такой базовый набор
отобразится в Обозревателе решений, окно которого представлено
на рис. 6, таким образом, структура программы создается автома­
тически.

Ссылки, добавленные в про ект, размещаются в узле Ссылки.


Любая программа использует Пространства имен, которые объе ­
диняют библиотеки классов, структур, интерфейсов и др., содер­
жащих функционал приложения. Например, при работе с матема­
тическими функциями мы будем использовать пространство имен
Systern, которое, в свою очередь, содержит класс Math. Сам же
класс Math предоставляет методы для тригонометрических, лога-

30
Обозреватель решений

~ E:i" • 1 т0 • ~ G Вi1 Г@! 1 "

Обозреватель решений - поиск (Ctrl + Р •


~ Решение " К книге"
~
/1 М у Project
.о1 • ·• Ссылки
{;':= Анализаторы
•·• System
•-1 System.Core
•·• System.Data
•·• System.Data.DataSetExtensions
•·• System.Deployment
•·• System.Drawing
•·• System.Net.Http
•·• System.Windows.Forms
•·• System.Xml
•·• System.Xml.Linq
у'] App.config
.о1 ~ Form1.vb
~ ~ Form1

Рис. 6. О к но Обозреватель решений

рифмических и иных математических функций. Некоторые из про ­


странств имен описаны в табл. 1О.
Таблиц а 10

Пространства имен

Ссылка Описаиие
Syste1n Содержит фундаментальные классы, обеспечи-
вающие фу~-rкциональность, иеобходиму10 для
каждого приложения. Например, класс Array,
необходимый для работы с массивами; класс
Exception для обработки исключителыrых
v
ситуации; структуры, представляющие типы

данных (Byte, Вооlеап, DouЬle и др.)


System.Data Обеспечивает доступ к классам, реализу -
ющим функциональность объектов ADO .NET
(ActiveXDataObject для платформы .NET),
которые используются для доступа к данным
v
из приложении

31
Окончание табл. 70
Ссылка Описание

Syste1n. Drawing Обеспечивает доступ к базовым функцио-


нальным возможностям графического интер -
фейса GDI+, например, к классу Font, который
определяет начертание шрифта и другие атри-
буты; к классу Pen, используемому пр и рисо -
v
вании линии

Syste1n. Windows. Содержит набор классов, применяемых для со-


Forms зда~-rия приложений Windows, I-Ianpимep, класс
Button, представляющий кнопку, размещаемую
на форме, или класс CheckBox, представляющий
элемент Флажок

Теперь п ерейдем к рассмотрению процесса создания прило ­


ж:ения в среде разработки Microsoft Visual Studio. После запуска
программы и появления Начальной страницы (см. рис. 5) сле ­
дует выполнить команду Файл/Создать/Проект. В появившемся
окне (рис. 7) необходим о выделить мышью компонент Visual
Basic, а в группе шаблонов - Приложение Windows Fonns ( .NET
Frarnework). В этом же окне можно выбрать имя решения,. указать
расположение будущего проекта, а также дать имя проекту. Сле­
дует отметить, что имя решения является, по сути, именем папки,

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

Со.uание проекта х

~ После-дни.е фаМы l.NET Framework 4.6.1 • 1Сорn.ровка. IПо умолчанию ·1 ~~= ~ Пoмcк (Cttl+EJ Р·

~ Устакоменнь~.е
..,wa • Тмn: Vi5ual 8аsк
LS:_J Пуст~ приложение- (униеерсмьн~ nрм.11ож№ие д... Vlsual Basic
Проект прмложения с
t> V1sual Ct
••
.А Visual Bas1c i
,.,J Прw1ож..,ие WPF (.NЕТ Framew0tk) Visual Baste nоль3оеате11ьс1О1м интерфейсом
Windows
Универсальные nри.11ожени11 Windo

Классичес1О1й рабочий стол WindO'r {ij Прможен~е W1ndoo.vs Forms { NET Fromework} V1sual Заsк
.NETCore
.NETStandмd

Extensibllrty
t'1 Консольное П!)"ЛОЖение (.NET Core) Visual Bas1c

Тест iiii Консольное П!)"АОЖеt4ие (.NET Framewort) Visual 8as1c

t> Visual С++


~ JavaSmpt N.
пn·· бибJ1иот1ка JСЛКСО8 (.NЕТ Standard) Visual 8as1c

t> Друrие tиль. npoenoe


n
ti:•n"
,....
биб11иотека JСЛ.КСО8 (.NЕТ Framework) Visual Basic
t> В сети
Об~йnроеп Visual Basic
li'IJ
Не наw~и то, что искаJ1и?

ОУ1:ро1н. Visual Studю ln.stalle1


N.n"
n библмотеQ массов (устаревша" n epeнoat•taJ1) Visual 8as1c

...
Q•i: t:\~flli11"'nт•1t,,. w11м..-n11 (vw~••IV'llll"._.,.,.,. """"...n•-~• W Vl.;11.-I R.-.;1..-

WindowsApp 1

[\Uиrs\d0<ent\s0urce\r•1>•>< Об~ор

Пер1ый npoen 0 Создать каталог д,11А peweнotA


О Добавить в с1оtстему уnраален"111 вере",_",
о~ Отu@на
----===
Рис. 7. Окно Создание проекта

32
После наж:атия на кнопку ОК появится окно, представленное
на рис. 8.
SJ БllOC'tpW Мll)'CI( IСМ•СВ Р - "
(ерrеиГУР""'о.•

ot.c»,_....,."~--.:tCtli• Р·
Q~".·n.,_;i~· f!J-11!'08·1
4 W Wi.,.Н.w~I
/- Му~
• • .• (C:W'!lt>I

{).....,..,,.,
• С) r-1vЬ

form1 ~-~s.lotm
:!"!• ~ ~
A•--
'il~~...
'Ч (OtUlowldongt'I

,"
м-

"~ • • • • • • • • • • • • • • • • • • • • • • • AutoSo'Oll A.ltoSuleМodle ~~


, ",

•• 1В Avto$<roll~otl
:1 AutoS4:f'Oll~
О; О
О;О
AutoSue r.1и
A11toSireМo6e ~ly

u..w.;.cu,_

. . •. llwo..

Рис. 8. Главное окно среды программирования

В нем мо:>кно выделить три основные области: Конструктор


форм, который необходим для создания интерфейса будущего про ­
екта; Обозреватель решений, в котором будет отображаться струк­
тура разрабатываемого проекта, и окно Свойства, отобра:>кающее
свойства выбранного элемента управления, например, его длину
и ширин у.

В отличие от работы в консольном режиме, где ввод-вывод ин­


формации обеспечивается только набором соответствующих бук­
венно-цифровых символов и символов псевдографики, в Конструк­
торе форм первоначально разрабатывается интерфейс программы
и только потом пиш ется программный код. Под интерфейсом
понимают совокупность средств, обеспечивающих взаимодействие
пользователя и программ вычислительной системы. При разра­
ботке интерфейса пользователь дол:>кен быть заинтересован в мак­
симально простом и удобном способе ввода и вывода данных.
Важ:но учитывать и эстетическую составляющую: размер формы,
ее фон, шрифт надписей, звуковое и графическое сопрово:>кдение.
Все визуальные объекты, такие как форма (Form), кнопка (Button),
поле ввода (TextBox), надпись (Label) и т.д. являются объ ектами.
Таким образом, объектом будем называть элемент пользова­
тельского интерфейса, который создается на форме Visual Basic
с помощью средств управления. Элементы управления пользо­
ватель размещает на форме, обратившись к Панели элементов
(рис. 9).

33
!:О.) Первый проект - Microsoft Visual Studio

Файл Правка Вид Проект Сборка Отл<V1ка Ко"анда Средства Тестирование Анализ Окно Справка

:tJ • с> ~ lilil

nанель элемен тов

Поиск по панели элементов

~ Все фор"ы Windows Forms


... Стандартнь.1е элементы управления

~ Указатель
@ Button

0 CheckBox
·-·- CheckedListBox р

~ ComboBox

~ DateТimePicker

А Label

А LinkLabel
~ ListBox
ListView
--
(.). MaskedTextBox
~ MonthCalendar

6: Notifylcon
[g NumericUpDown
!1;;1 PictureBox
1Ю ProgressBar
0 RadioButton
ID• RichTextBox

~ TextBox
t:J ToolTip

·-
G:J
TreeView
WebBrowser
1> Контейнеры
1> Меню и панели инструментов
~ Данные

Рис. 9. Общий вид окна Панель элементов

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


воде информационного сообщения ~Привет, мир! » . Для этого в со ­
ответствии с рис. 10 нанесем на форму элемент управления Button1.
!!J Первый проект Microsoft V1sual Stud10

Фай.11 Правка Вид П~кт Сборка Отладка Ко'4аН.U Фор-..~п Средстаа Тестироаакие Анали:J Окно Сnраака

() • ;J • с> lil ..." ") • • O..bug • AnyCPU • 1> Пуск• р ;

l'orm1.vb !Конструктор] ' .Р Х

~
6 ~';;'" ~

Рис. 1О. Элемент управления Button на форме

34
Далее, оставив выделение кнопки маркерами, обратимся к окну
Свойства, найдем свойство Text, удалим надпись Button1, введем
ОК и нажмем клавишу Enter. Подобная ситуация представлена
на рис. 11.

Свойства .... ~ х

Button1 System.Windows.Forms.Button
!;I]~.a. ·~] f
ЕЕ1 FlatAppearance
FlatStyle Standard
ЕЕ1 Font M icrosoft Sans Serif; 7
ForeColor •ControlТext
lmage О (отсутствует)
lmageдlign M iddleCenter
lmagelndex О (отсутствует)
lmageKey О (отсутствует)
lmagelist (нет)

RightТoleft No
Text Ok v

TextAlign MiddleCenter
TextlmageRelation Overlay
' , __ " · - -·-· ... : . т.....

Text
т ......1"....- .................... " """:: " .... " .............. ..,. ....... ~ . ................ ",.. ••• " ...

Рис. 11. Окно свойств проекта

Изменим свойство Text формы Form1 на словосочетание « Первый


проект» . Запуск программы на выполнение осуществляется кнопкой
Пуск, которая располож:ена на стандартной панели инструментов.
Альтернативное действие - на)катие клавиши F5.
Появившаяся на экране форма (рис. 12) свидетельствует
об успешной компиляции проекта, однако при нажатии на кнопку
ОК вывод информационного сообщения, который планировался
ранее, осуществлен не будет, поскольку не написан соответ­
ствующий программный код.

11 • " lJ • • о.

tароцкс: (73361 WindowsApp1"xe к т (/1

FOf"m1 vb ,;, rorm1 vЬ IKoнn~opl ;; i> Х •

- D Х

Рис. 12. Программа в стадии выполнения

35
Для того чтобы написать программный код, необходимо создать
событие, т.е. реакцию программы на взаимодействие пользователя
с графическим интерфейсом программы. Типичными видами взаи­
модействия являются перемещение мыши, щелчок мыши, щелчок
по кнопке и т.д. Информация о событиях передается обработчикам
событий, которые являются методами, вызываемыми в ответ
на возникновение конкретных событий.
Рассмотрим пустой обработчик события щелчка пользователя
на командной кнопке:

Private Sub Buttonl_Click(sender AsObject, е As


EventArgs) Handles Buttonl.Click

End SuЬ

Оператор Sub определяет процедуру выполнения какого-либо


программного кода. Служебное слово Private отвечает за уровень
доступности элементов программного кода, которые будут объяв ­
лены в процедуре. Если следует предоставить неограниченный до ­
ступ, то используют слу)кебное слово PuЬlic.
Имя обработчика события по умолчанию совпадает с именем
управляющего элемента (в нашем случаеButton1), за которым сле­
дует символ подчеркивания и имя события (Click). Обработчикам
события передаются два объекта: ссылка на объект, который гене­
рирует событие (sender), и объект аргументов события (е). Аргу­
мент е имеет тип EventArgs. Класс EventArgs является базовым
классом для объектов, которые содержат информацию о событии.
Код процедуры, который выводит информационное сообщение
«Привет, мир!~, следует написать внутри созданной процедуры об­
работчика события Click. Синтаксис функции MessageBox будет
подробно рассмотрен в параграфе 2.5.2:

PuЬlic Class Forml


Private SuЬ Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl . Click
MessageBox . Show ( " П ривет, мир! ", " П ример
сообщения ", MessageBoxButtons . OK, MessageBoxicon . In f or-
mat ion)
End SuЬ
End Class

Результат работы программы представлен на рис. 13.

36
Пример сообщения Х

• Привет, мир!

ок

Рис. 13. Результат работы программы

2.3. ЭКРАННЫЕ ФОРМЫ

Попытки создания собственного пользовательского интерфейса,


работа с элементами управления напрямую связаны с экранными
формами. Каждая созданная экранная форма имеет свои свойства,
в частности, наиболее часто используемые свойства Name (Имя)
и Text (Текст).
Наиболее часто используемые свойства формы представлены
в табл. 11.

Таблица 11
Свойства формы

Свойство Описание
AutoScroll Появление полосы прокрутки

Name Возвращает или устаиавливает имя пользователь -


екай формы

Text В озвращает или устанавливает текст, отобража-


емый в строке заголовка формы

TopMost Расположеиие формы поверх других окои, если


свойство выставлено в True
StartPosition Расположеиие формы при ее открытии

Opacity Прозрачность формы

F ormBorderStyle В озвращает или устанавливает тип границы

ForeColor, Возвращают и устанавливают цвет фоаа и текста


BackColor формы

MaximizeBox, Логические свойства, которые при зааченши,


MinimizeBox равиом True, указывают i-ra присутствие в форме
кнопок Maximize и Minimize соответственно

37
Окончание табл. 11
Свойство Описание

ControlBox Логические свойства, которые при значении,


равиом True, указывают i-ra присутствие в форме
раскрывающегося меню, содержащего команды

восстановления, перемещения, изменения размеров

и закрытия формы

WindowState Возвращает или устанавливает вид формы во


время выполн ения кода. Допустимые значения:
- Normal (нормальный);
- Minimized (в виде значка);
- Maximized ( полноэкранный)

Наиболее часто используемые события формы представлены


в табл. 12.

Таблица 12
События формы

Событие Описание
MyForm.Hide() Форма скрывается (свойство Vis iЫe устанавли-
вается равным False)

MyForm.Close() Метод закрывает форму и вызывает метод


Dispose для освобождения ресурсов Windows
MyForm. Activate() Форма может быть активизироваиа, когда оиа
становится видимой, но при этом oi-ra I-Iеобяза -
тельно будет иметь фокус
MyForm.Show() Для немодалыrого отображения используется
метод Show()

2.3.1. Типы интерфейсов


Для приложений, разрабатываемых в среде Windows с помощью
VB, мож но использовать несколько типов интерфейсов, а именно:
• однодокументный (Sinв)e-Documentlnterface, SDI);
• многодокументный (Multiple-Documentlnterfасе, MDI).
SDl-интерфейс предоставляет возможность работы только
с одним документом в одном окне. Примером такого интерфейса
может слу)кить редактор Microsoft Word Pad. При загрузке боль ­
шого количества S Dl-прилож:ен ий начинае т переп олняться опе ­
ративная память компьютера и прило)кения работают медленнее.
Однако на их разработку уходит меньше времени, и они занимают
меньш е места на ж:естком диске .

38
МDI-интерфейс предоставляет возможность открывать много ­
кратно форму одного вида для нескольких разных по содержанию
документов. Примером такого интерфейса мож:ет служ:ить прог­
рамма Microsoft Excel. Для такого интерфейса характерно то, что
имеются главное окно, называемое родительским окном, и необ­
ходимое количество подчиненных окон, называемых дочерними.
Родительское окно является контейнером для всех дочерних окон.
При его ми ни мизации вместе с ним минимизируются и все до ­
чер ние окна.

Рассмотрим пример создания МDI-интерфейса .


1. Создадим новый проект.
2. Свойство формы Forrn1 IsMdiContainer заменим на True.
3. Командой Проект/Добавить форму Windows добавим
в проект еще одну форму Forrn2.
4. Запрограммируем вызов дочерней формы Forrn2 при от­
крытии родительского окна Forrn1 .
Листинг про граммы, реализ ующей вызов дочер ней формы,
представлен ни же :

PuЬlic Class Forml


Private SuЬ NewForm ()
Di m f As New Fo r m2
f . MdiParent = Ме
f . Show ()
End SuЬ

Private SuЬ Buttonl_Click(sender As Object, е As


EventArgs) Handles Buttonl.Click
NewForm ()
End SuЬ
End Class

Сначала оператором Dirn f As NewForrn2 создается экземпляр


класса формы с именем Forrn2. Затем свойству MdiParent этого
экземпляра присваиваем значе ние Ме (т.е. указываем на роди­
тельскую форму), тем самым пр евращая форму в родительское
окно. Дочернее окно откроется в результате выполнения оператора
f.Show().
Чтобы дочернее окно (рис. 14) открывалось при запуске роди­
тельского, мож:но добавить в метод Load родительского окна вызов
процедур ы NewForrn(). В данн ом примере вызов пр оцедуры до ­
бавлен в кнопку Button.

39
• Родительское окно о х

u" Дочернее окно ~00~

Button1

Рис. 14. МDl-приложение создано

Наиболее часто используемые свойства MD I-форм представ­


лены в табл. 13.

Таблица 73
Свойства МDl-форм

Свойство Описаиие
Общие свойства дочернего МDI-окна
IsMdiChild О пределяет, является ли форма дочерним MDI-
окном. Если свойство имеет значе~-rие True, то форма
является дочерним МDI-окном

MdiParent О пределяет родительскую МDI -форму для данного


дочераего окна

Общие свойства родительского MDI-oК1-ta


ActiveMdiChild Возвращает форму, которая является текущей ак-
тивной МDI - формой. Возвращает значеиие Nothing
в случае отсутствия активных дочерних форм
lsMdiContainer Определяет, может ли форма быть родительской
МDI-формой. Если свойство имеет зиачение True,
то эта форма может быть родительской многодо-
кументиой формой. По умолчаиию свойство имеет
значение False
MdiChildren В озвращает МDI -потомков в виде массива форм

40
2.3.2. Организация взаимодействия форм

Допустим, в текущем проекте существует одна форма, которую


будем называть Главной формой . Создадим кнопку Переход
на вторую форму. Для того чтобы добавить новую форму, вы­
полним команду Проект/Добавить форму Windows. Теперь в про ­
екте существуют две формы с именами Form1 (Главная) и Form2
( Подчиненная).
Напишем код процедуры для кнопки Переход на вторую форму:

PuЬlic Class Forml


Private SuЬ Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl . Click
Dim f As NewForm2 ' Создаем экземпляр класса
Форма
f. Show() ' Показываем форму
Ме. Hide () ' Скрываем форму
End SuЬ
End Class

Таким образом, мы создали главное окно, которое вызывает до­


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

PuЬlic Class Form2


Private Sub Buttonl_Click (sender As Object , е As
EventArgs) Handles Buttonl . Click
Di m f As New For ml
f . Show ()
Me.Hide ()
End Sub
End Class

Для того чтобы закончить работу прило1кения, состояще го


из нескольких форм, на второй форме создадим кнопку Выход
и напишем следующий код про цедуры:

Private Sub Button2_Click(sender As Object , е As Event-


Args) Handles Button2.Click
Appl i cat i on . Ex i t()
End SuЬ

41
2.3.3. Окончательная настройка приложения

После того как программа отлажена, необходимо выполнить ее


окончательную настройку, т.е. задать название программы и вы­
брать значок, который будет отображать исполняемый файл при­
ложения в папке или на рабочем столе, а так.1ке на панели задач во
время работы программы.
Хороший стиль программирования предполагает отводить для
каждого нового проекта новый подкаталог (папку). Если размещать
несколько проектов в один каталог, то программист, возможно,

скоро запутается в том, какие файлы к какому проекту относятся.


Для наглядности, мож:но сделать так, чтобы .ехе-файл проекта
имел иконку. Назначить иконку текущему проекту ну.1кно сле ­
дующим образом: выбрать пункт меню Проект/Свойства: Имя те­
кущего проекта/Значок. Далее с помощью кнопки Обзор указыва­
ется имя файла с расширением .ico. (рис. 15).

* Быстрый доступ
• Desktop
,-. Downloads
,;
,;
~
WindowsA
у~
WindowsA WindowsA WindowsA
рр1.ехе рр1.ехе.со pp1.pdb pp1.xml
~ Documents ,; nfig

~ Pictures ,;

Рис. 15. Файлу WindowsAppl назначена иконка

Окончательная компоновка приложения состоит в создании


.ехе-файла. Проект сохраняется, затем выбирается пункт меню
Сборка/Построить решение. Созданный .ехе-файл можно найти
в текущем каталоге проекта, например С:\ Users\docent\source\
repos\ K книге\WindowsApp1\Ьin\Debug.

2.4. ОБЗОР ЭЛЕМЕНТОВ УПРАВЛЕНИЯ

В языке программирования Microsoft Visual Basic имеется об ­


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

тестовых вопросов, на основе которых мож:но впоследствии создать

42
программу, предназначенную для проверки знаний по какой-либо
теме.

Элементы управления являются объектами, поэтому как любые


объекты они обладают свойствами, методами и событиями. Эле ­
менты управления создаются с помощью Панели элементов. Ее
внешний вид был показан на рис. 9.
П омимо индивидуальных свойств, присущих ка:>кдому элементу
управления, каждый из них содер:>кит общие свойства. В табл. 14
перечислены наиболее часто используемые свойства элементов
управления.

Таблица 14
Общие свойства элементов управления

Свойство Оп исание

BackColor Задает цвет фоиа элемеита управлеиия

ContextMenu Коитекстное ме1по, открываемое при ~-rажатии правой


кнопки мыши на элементе управления

Dock Задает расположение элемента управления в форме

EnaЫed Опр еделяет, доступен ли элемент управления

Font Задает шрифт для отображения текста элемента


управления

ForeColor Определяет цвет располагаемого иа элемеите управ -


ления теста

Image Задает рисунок, который будет отображаться на эле-


менте управления

Name Задает имя, используемое при обращении к элементу


управления

Size Определяет размер элеме~-па управления

TaЫndex Задает порядок элемента управления в форме

TabStop Определяет, может ли установиться фокус иа эле -


менте управления с помощью клавиши ТаЬ

VisiЫe Задает видимость элемента управления при выпол-


иеиии приложеиия

2.4.1. Кнопка (Button}


В основном элемент управления Кнопка используется для ини-
u u
циирования выпол нения некоторых деиствии , вызываемых нажа-

тием на кнопку вu110п 1 • Таким образом, основным событием,

43
связанным с кнопкой, является событие Click. Наиболее часто ис­
пользуемые свойства элемента управления Кнопка представлены
в табл. 15.
Таблица 15
Свойства элемента Кнопка

Свойство Описание

AcceptButton Служит для того, чтобы сделать к~-rопку ак -


u
(задается на форме) тивнои по умолчаиию

CancelButton С помощью свойства CancelButton можно


( задается на форме) задать кI-Iопку отмеиы

EnaЫed Логическое свойство, определяющее, может


ли пользователь нажать кнопку

FlatStyle У ста~-rавливает отображеиие киопки

Image Внедряет изображение на поверхностъ


кнопки; расположение изображения опреде-
ляется свойством lmageAlign

Text Возвращает или устанавливает текст, ото -


бражаемый иа киопке. Для задания клавиши
быстрого доступа необходимо пр и вводе
названия кнопки в поле свойства Text перед
соответствующей буквой расположить ампер-
санд (&)
TextAlign В ыравнивает текст на кнопке

2.4.2. Метка (Label}

Элемент управления Метка [Lаье11 ] используется для отобра­


)Кения надписе й, например заголовков. Изменения в надписи осу­
ществляются во время выполнения приложе ния только поср ед ­

ством программного кода. Наиболее часто используемые свойства


элемента управления Надпись представлены в табл. 16.

Таблица 16
Свойства элемента Надпись

Свойство Описание
AutoSize Логическое свойство, которое устанавливает режим ав-
томатического изме~-rения размеров надписи так, чтобы
u
в неи полаостыо помещался текст

BorderStyle Стиль рамки. Определяет тип обрамления вокруг объекта

44
Окончание табл. 76
Свойство Описание

Image Вн едряет рисунок на поверхность элемента управления;


расположеиие изображения определяется свойством
ImageAlign
Text Возвращает или устанавливает текст, отображаемый
в надписи

TextAlign Задает выравнивание текста в надписи

2.4.3. Текстовое поле (Т extBox}

В основном объект TextBox ====1:!1 используется для ввода


1!:11

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

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


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

Таблица 17
Свойства элемента Текстовое поле

Свойство Описа~-rие
BorderStyle Стиль рамки текстового поля. Определяет тип об-
рамлеиия вокруг объекта

Multiline Логическое свойство, определяющее, допустим ли


v
многострочныи ввод текста в поле

ScrollBars У ста~-rавливает р ежим отображения в поле полос


прокрутки

Допустимые значения:
- None (i-re выводить полос прокрутки );
- Horizontal (выводить горизонтальную полосу
прокрутки);
- Vertical (выводить вертикальную полосу про-
крутки);
- Both (выводить горизонтальную и вертикальную
полосы прокрутки )

Text Возвращает или устанавливает текст, содержащийся


в поле ввода

CharacterCasing Позволяет автоматически пе р еводить введенный


v v
текст в верхнии или нижнии р егистр

ReadOnly Запрещает р едактировааие текста

45
Окончание табл. 17
Свойство Описание

TextAlign Задает выравнивание текста


WrapWord Используется для задааия автоматического пер еаоса
слов при создании многострочного текстового поля

2.4.4. Переключатель (RadioButton}


Элемент управления Переключатель О Radi0Button1 позволяет
выбрать одну из нескольких взаимоисключающих альтернатив. Пе­
реключатели обычно отображаются группами. Группировка произ­
водится с помощью элемента управления GroupBox, который будет
рассмотрен позже. Наиболее часто используемые свойства элемента
управления Переключатель представлены в табл. 18.
Таблица 78
Свойства элемента Переключатель

Свойство Описание
Caption Надпись, отображаемая рядом с переключателем
CheckAlign, Служат для указааия того, где должаы ааходиться
TextAlign кнопка-переключатель и текст в пределах площади, за-
v
нятои элементом управления

Checked Возвращает значеиие True, если переключатель выбран,


и False - в противном случае
FlatStyle Устанавливает вид переключателя

Приступим к разработке тестового вопроса с использованием


компонента RadioButton. Свойство Causes Validation каждого пе­
реключателя рекомендуется поставить в положение False для того,
чтобы в момент инициализации формы переключатели были неак­
тивны. Внешний вид формы представлен на рис. 16.

Какая поисковая система используется только в Юпае и не


имеет других лоЮ1ЛJ1зацдй?

Выбер1пе правильный ответ

r!iзoog1e1
'···-·······]

r вAIDu

r вINo

.- улноо !

Ok

Рис. 16. П ример вопроса с переключателями

46
Код процедуры представлен НИ)ке:

PuЬlic ClassForm2
Private SuЬ Buttonl_Click(sender As Object , е As
EventArgs) Handles Buttonl.Click
Dim n As Integer
If (RadioButtonl . Che cked = Fa lse) And (Ra-
dioButton2 . Checked = False) And (RadioButtonЗ . Chec ke d -
False ) And (RadioButton4.Checked = False) Then
MsgBox ( " Надо ответить на вопрос !",
" Сообщение " )
Elseif (RadioButton2 . Checked = True ) Then
' если выбран второй переключатель
n = n + 1 ' увеличиваем счетчик
на единицу

MsgBox( " Bы ответили правильно , переходим


к следующему вопросу! ", MsgBoxStyle . Information , " Окно
сообщен ия " )
RadioButtonl . Ena Ьled = Fa l se
RadioButton2 . EnaЬled - False
RadioButtonЗ . EnaЬled - False
RadioButton4 . Ena Ыed = Fa l se
Ме . Hide () ' Скрыва ем текущую форму
F o rm З . Show () ' Показы ваем сл е дующую форму
Else
MsgBox ( " Вы о тветили неправильно, переходим к следующему
вопросу! ", MsgBoxStyle . Information , " Окно сообщения ")
RadioButtonl . EnaЬled - False
RadioButton2 . EnaЬled - False
RadioButtonЗ . EnaЬled - False
RadioButton4 . EnaЬled - False
Hide ()
Ме . ' Скрываем текущую форму
FormЗ . Show () ' Показываем следующую форму
End If
End Sub
End Class

2.4.5. Список (ListBox)

'~~------- ------- -----'


г-----------------1

Элемент управления Список применяется для


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

47
одно или несколько значений, которые в последующем использу­
ются в тексте программы. Выбор элемента из списка производится
щелчком по элементу. Наиболее часто используемые свойства эле ­
мента управления Список представлены в табл. 19.
Таблица 79
Свойства элемента Список

Свойство Описание

ColumnWidth Измеиеиие шири~-rы коло~-rок

ltems Формироваиие списка вручную; нумерация эле-


ментов списка начинается с нуля

MultiColumn Размещение заачеаий списка в одау или не -


СКОЛЬКО KOJIOI'IOK

ScrollAlwaysVisiЫe Отображение полосы прокрутки, если элементы


u
списка ие помещаются в выделеннои для них

области
Selectedltem, Свойства задают соответственно текст и индекс
Selectedlndex выделенаого элемента списка

SelectionMode Выбор нескольких элементов из списка

Sorted Сортировка элементов списка

Перейдем к разработке тестового вопроса с использованием рас­


сматриваемого компонента. Разместим на форме четыре элемента
управления ListBox1-4, три элемента GroupBox1-3, текстовое
окно TextBox1 для вывода вопроса и четыре кнопки Button1-4.
Внешний вид фор мы представлен на рис. 17.

Вопрос 5
-
Сопоставьте скоростны е 171 2 Кбит/с
' -
i
_,

'-····- ····- ····.1····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ""- ····- ····- ····- ····- ···;
хара ктеристики с соответствующими 14,4 Кбит/с
назва ниями беспроводных 474 Кбит/с
технологий

--------> 1

---------> 1

--------->
_J
Ok

Рис. 17. Пр имер вопроса с компонентом ListBox

48
В процессе работы над вопросом пользователь выбирает один
из элементов списка, пр едставленных в окне ListBox1 , и, нажав
одну из кнопок, переставляет выбранный ответ либо в ListBox2,
либо в ListBoxЗ, либо в ListBox4, при этом элементы списка уда­
ляются из ListBox1. Подобная ситуация показана на рис. 18.

Вопрос 5
.- ..

Сопоставьте скоростные
характеристики с соответствующими

названиями беспроводных
технологий
l GSM
1 171,2 Кбит/с
1

--------------:> 1
IGPRS
_ 1 14,4 Кбит/с
-------------:> 1
1

1[~ ~ ~ ~ _ -~~~=~~~~=~~~ ~ _____JI [ EDGE


1 474 Кбит/с

Ok
1

Рис. 18. Удаление элеме нтов из ListBox l

Ниже представлена процедура, отвечающая за зап олнение


списка ListBox1 . Метод Item.Add компонента ListBox добавляет
элемент в список:

Private Sub FormЗ_Load(sender As Object, е As


EventArgs) Handles MyBase.Load
ListBoxl . Items. Add (" 17 1, 2 Кбит/ с " )
ListBoxl . Items. Add (" 14 , 4 Кбит/ с " )
ListBoxl . Items. Add ( " 4 7 4 Кбит/ с " )
End Sub

Далее представлены процедуры, отвечающие за удале ние эле­


мента из списка ListBox1 (метод Removeltem) и перемещение его
в другие списки. Следует отметить, что элементы списка начина­
ются с нуля, а н е с единицы:

Private Sub Buttonl_Click (sender As Object, е As


EventArgs) Handles Buttonl.Click
If ListBoxl . Selectedindex = О Then
ListBox2 . Items . Add(ListBox l . Text)
ListBox l.I tems . RemoveAt(O)
End I f

49
If Li s t Box l . Sel ectedi ndex = 1 Then
ListBox2 . Items . Add( ListBox l . Text )
ListBox l. Items . RemoveAt(l)
End I f
If ListBoxl . Selectedindex = 2 Then
ListBox2 . Items . Add(Li s tBoxl . Text)
ListBoxl . Items . RemoveAt(2)
End I f
End Sub

Private Sub Button2_Click(sender As Object, е As


EventArgs) Handles Button2.Click
If ListBoxl . Selectedindex = О Then
ListB oxЗ . Items . Add(L i s tB oxl . Text)
ListBox l. Items . RemoveAt(O)
End I f
If Li s t Box l . Sel ectedi ndex = 1 Then
ListBoxЗ . It ems . Add( L istBox l . Tex t )
ListBoxl . Items . RemoveAt(l)
End I f
If ListBoxl . Selectedindex = 2 Then
ListB oxЗ . Items . Add(L i s tB oxl . Text)
ListBox l. Items . RemoveAt(2)
End I f
End Sub

Private Sub ButtonЗ_Click (sender As Object, е As


EventArgs) Handles ButtonЗ . Click
If Li s t Box l . Sel ectedi ndex = О Then
ListBox4 . Items . Add(Li s tBoxl . Text)
ListBox l. Items . RemoveAt(O)
End I f
If ListBoxl . Selectedindex = 1 Then
ListBox 4 . Items . Add( ListBox l . Text )
ListBoxl . Items . RemoveAt(l)
End I f
If Li s t Box4 . Sel ectedi ndex = 2 Then
ListBox2 . Items . Add( ListBox l . Text )
ListBoxl .Items . RemoveAt(2)
End I f
End SuЬ

50
2.4.6. Прямоугольник группировки (GroupBox}
GroupBoк1

Элемент управления Прямоугольник группировки


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

2.4.7. Таймер (Timer}


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

времени. О сновным свойством таймера является Interval, которое


может принимать значения от О до 2 147 483 647 (от О до 600 ч) .
Другим важным свойством таймера является EnaЬled . Для функ­
ционирования таймера свойство EnaЬled должно быть установлено
равным True. По умолчанию данное свойство находится в поло­
жении False.
2.4.8. Флажок (CheckBox}

Флажок D CheckBoк, имеет три состояния, т.е. его с войств о


CheckState может принимать три значения. Значения элемента
управления Флажок представлены в табл. 20.

Таблица 20
Значения элемента управления Флажок

Состояаие Заачеаие

Н е определен Indeterrninate
Сброшен Unchecked
Установлен Checked

Наиболее часто используемые свойства элемента управления


Флажок представлены в табл. 21.
Таблица 21
Свойства элемента Флажок

Свойство Описа~-rие
Appearance Используется для задаиия вида флажков. Имеет два зиа -
чения. П о умолчанию Normal - квадрат с размещаемой
внутри галочкой. При заачеаии Button флажок имеет
u u
вид плоскои или приподнятои кнопки

Checked Возвращает значение True, если переключатель выбран,


и False - в противиом случае

51
Окончание табл. 21
Свойство Описание

FlatStyle В нешний вид элемента управления

ThreeState При выполиении приложения пользователь может зада-


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

Приступим к разработке тестового вопроса с использованием


компонента CheckBox. Внешний вид формы представлен на рис. 19.
-Вопрос 1 ... ~

Какие средства поиска и структурирования информации


существуют?

Г Выберите правильные ответы

г ti.!<>~~iO.iii!~ioi.~iJ

Г Хранилище

Г Средство анализа текста

Г Оптимизатор

Ок
1

Рис. 19. Пример вопроса элемен тами Флажок

Нанесем на форму следующие элементы управления: Текстовое


окно (TextBox1), Кнопка (CommandButton1), Рамка (Frame1),
Флажок (CheckBox1, CheckBox2, CheckBoxЗ, CheckBox4).
Текст вопроса разместим в элементе управления TextBox1, вос­
пользовавшись его свойством Text. Свойство Locked выставим
в полож:ение True для того, чтобы запретить редактирование тек­
стового окна.

Элемент управления GroupBox1 будем использовать для объ ­


единения флажков. Приме няя его свойство Text, сделаем поясня­
ющую надпись: ~ выберите правильные ответы~.
Для объекта Button1 свойство Tahlndex выставим в ноль для
того, чтобы при запуске программы была активна именно кнопка,
а не текстовое окно. В данном примере заблокирован переход к сле ­
дующему вопросу . Если пользователь не выбрал ни один флаж:ок

52
и нажал кнопку ОК, то появится сообщение, представленное
на рис. 20. Подобный прием будет использоваться и при програм­
мировании других вопросов .

1 ..... "
Microsoft Excel

•,
Надо ответить на вопрос!

1r·····.".."...ok.. ".""""il
·······································"'

Рис.20.Сообщени е

Код процедуры приводится НИ)ке:

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Dim n As I nteger
n = О
I f (CheckBoxl . Checked = False) And (CheckBox2 .
Checked = False) And (CheckBoxЗ.Checked = Fal se) And
CheckBox4 . Checked = Fa l se)
Then MsgBox ( " Надо ответ ить
н а вопрос ! " , " Сообщение " )
Else i f (CheckBoxЗ . Chec ked = True) And
(CheckBox4.Checked = Tr ue) Then
n = n + 1 ' Увеличиваем на единицу
с че тчик прав иль ных ответов

MsgBox ("Вы о т ве тили правильно , переходим


к следующему вопросу!" , MsgBoxStyle . In f o rmation, "Окно
сообще ния")
CheckBoxl . EnaЬled - Fa l se ' Делаем флажки
неактивными

Chec k Box2 . EnaЬled - Fa l se


CheckBoxЗ .E naЫed - False
CheckBox4 .E naЬled - False
Ме . Hide () 'С крываем т екущую форму
Form2 . Show () ' Показываем следующую форму
El se
MsgBox ("Вы о т ве тили неправиль н о , переходим
к следующему вопросу!", MsgBoxSt y l e . I nformation , "Окно
сообще ния")

53
Chec k Boxl . EnaЬled - Fa l se
Chec k Box2 . EnaЬled - Fa l se
Chec k BoxЗ . EnaЬled - Fa l se
Chec k Box 4 . EnaЬled - Fa l se
Ме .Hide () ' Скрываем т екущую форму
Form2 . Show () ' П оказываем следующую форму
End If
End SuЬ
End Class

2.4.9. Комбинированное поле (ComboBox}

Списки типа ComboBox 1~::.' ·1 также называют рас-


крывающимися, или полями со списком . Элеме нт управле н ия
объединяет возмож:ности поля ввода и прокручиваемого раскрыва­
ющегося списка. Пользователь может выбрать элемент списка или
ввести его непосредственно в поле ввода. Поэтому поле со списком
обладает многими свойствами и методами, входящими в рассмот­
ренные раньше компоненты TextBox и ListBox.
Наиболее часто используемые свойства элемента управления
ComboBox представлены в табл. 22.
Таблица 22
Свойства элемента управления Комбинированное поле

Свойство Описание
DropDownHeight Задание высоты ниспадающей части списJКа

DropDownStyle Устанавливает стиль оформления списка. Допус-


тимые значения :

- DropDown - пользователь может вводить


зиачеиие в текстовое поле, располагающееся

в верхаей части списка. Стиль, используемый


по умолчанию ;

- Simple - при данном значении список отобра-


жается в форме в открытом состоянии;
- DropDownList - пользователь может лишь
выбрать значение из списка, открываемого на-
v v
жатием кнопки с направленнои вниз стрелкои
v
с правои стороны поля

DropDownWidth Зада~-rие ширины ниспадающей части списка

Items Формирование списка вручную

54
Окончание табл. 22
Сво йство Оп исание

MaxDropDownltems Задание максимального числа элементов, отобра-


жаемых в видимой области ииспадающей части
списка

Sorted Сортировка элеме нтов списка

Разработаем тестовый вопрос на основе компонента ComboBox.


Внешний вид формы представлен на рис. 21.

~ Вопрос 1 - О Х

К числу осно8Ных ресурсов совремеt1ньос вычислительньос систем


моrут бь1'ТЬ о-тнесены такие ресурсь1, как проuессоры . память . 1111а<и .
npltliтepbl И Т.Д.
Ресурсы распределяются меж.цу:

1Введ111те о~вет

При исnол~овании оnраwИ9емых прерывани~ 11ЮЦеесор получ~ет


от 3anpoa1ewero прерь~еание ycтpoйc'Rl<J только инФОрмсuю :

1Введ111те о~вет

Раю-tие системы пакетной обработки были пре~t'fазначены для :

Введ111те о;вет
1 v 1

Рис. 21. Пример р аботы компонента. Исходное состояние окна с вопросом

На форме находятся три элемента CornboBox и несколько эле­


ментов типа Label, с помощью которых следует выполнить пояс­
няющие надписи. Приглашение ~ введите ответ» введем в свойство
Text рассматриваемого компонента, а элементы списка перечислим,
используя свойство Iterns. Таким образом, в ниспадающем списке
одного из элементов CornboBox (рис. 22) польз ователь выбирает
правильный с его точки з рения ответ и переходит к другому во ­
просу, который расположен в другом элементе Комбинированное
поле.

В случае, если пользователь не осуществит выбор ответа хотя бы


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

55
Е1 Вопрос1 - О Х

К числу основных ресурсое современнь~х вычислительнь~х систем


могут бь!iЬ оniесены такие ресурсь1, как процессоры, память , Jllla<И ,
пржтеры И Т.Д.
Ресурсы распределяются между:

Ввешпе ответ V'

А. Системой прерываний
Б . Процессами
В . МоАУnями ОС
Г. О 1Ьlми Фа~пами
ВведИте ответ

Ранние системы пакетной обработки были nред'iа3Начены для :

1 ВвеД)llте ответ

[ Ok

Рис. 22. Элемент управления ComboBox1 с открытым списком

условия задействован метод Selectedlndex, который должен быть


равен минус единице в случае, если не выбран ни один элемент
списка. Далее в коде осуществляется проверка номера элемента
списка в трех расположенных на форме элементах ComboBox.
Выбор первого (в компоненте ComboBox1), нулевого (в компо­
ненте ComboBox2) и первого (в компоненте СоmЬоВохЗ) приведет
к появлению сообщения о правильности ответа. Код событийной
процедуры, реализующей тестовый вопрос, представлен ниже.

Private Sub Buttonl_Click(sender As Object, е As


EventArgs) Handles Buttonl.Click
If ((ComboBox l .Se l ectedi ndex = - 1) Or (Com-
boBox2.Select edindex = - 1) Or (ComЬoBoxЗ.Se l ected ­
I ndex = - 1)) Then
MessageBox . Show ( "Н еобходимо указать все
о тве ты! ", " Ошибка ", MessageBoxBut tons. ОК , MessageBox-
Icon . Error)
El se i f ((ComboBox l .Se l ectedi ndex = 1) And
(ComЬoBox2.Se l ectedindex = 0) And (ComboBoxЗ.Se l ected ­
I ndex = 1)) Then

56
MessageBox . Show ("Вы отве тили пра виль но!
Переходим к сле д ующему в о п росу . " , " т ес т " , MessageBox-
But t ons . OK , MessageBoxi con . I nformation)
For m2 . Show ()
Me . Hide()
Else MessageBox . Show( " Bы ответ или н епра виль но !
Переходим к сле д ующему в о п росу ." , " Тес т " , MessageBox-
But t ons . OK , MessageBoxi con . Warn ing)
Form2 . Show ()
Ме . Hide ()
End I f
End Sub

2.4.1 О. Полосы прокрутки (HscrollBar и VscrollBar}


Элемент управления Полоса прокрутки применяется для уста­
новк и числ ового значен ия , причем этот элеме нт м ожет устанав ­

ливать только целые неотрицательные значения. Наиболее часто


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

Свойство Описание
EnaЬled Логическое свойство, которое опр еделяет, может ли
пользователь изменить значение полосы прокрутки

LargeChange Возв ращает или устанавливает шаг изме~-rения


v
значения пр и щелчке между ползунком и однои

из стрелок полосы пр окрутки . П о умолчанию - 1О


Maximum Возв ращает или устанавливает максимальное зна -
чение полосы пр окрутки . П о умолчанию - 100
Minimum Возв ращает или устанавливает минимальное зна-
чеиие полосы пр окрутки. По умолча~-rию - О

SmallChange Возв ращает или устанавливает шаг изменения зна-


v
чеиия при щелчке по однои из стр елок полосы про -

кр утки. По умоJР:Iанию - 1
Value Возв ращает или устанавливает текущее значение
полосы прокр утки

В качестве примера разработаем приложение, в котором полоса


прокрутки (Hscrol1Bar1 ) будет служ:ить для ввода возраста пользо ­
вателя, на элемент управления label1 выводится возраст пользова­
теля, на label2 - пожелание, соответствующее возрасту. На рис. 23

57
представлен внешний вид программы, в которой используется рас­
сматриваемый компонент.

f;I Полоса прокрутки - D Х

< >

Baw во3раст 47 Гпавное • 3,цороеье

Рис. 23. Внешний вид программы

Задание начальных значений элемента управления осуще­


ствлено в событии Load(), таким образом, они будут программно
заданы уже на стадии выполнения программы. Как видно из кода,
свойства Minimum и Maximum задают начальное и конечное зна­
чение полосы прокрутки соответственно. С помощью свойства
Value можно установить начальное значение полосы прокрутки,
соответственно, при запуске программы ползунок будет отодвинут
от левого края на заданную величину.

Private Sub Forml_Load(sender As Object, е As


EventArgs) Handles MyBase.Load
Text = " П олоса прокру тки "
HscrollBarl . Mi nimum = О
Hs c r ollBarl . Maximum = 12 0
HscrollBarl . LargeChange - 10
HscrollBarl . Val ue = 20
End Sub

Private Sub HscrollBarl_ValueChanged(sender As Ob-


ject, е As EventArgs) Handles HscrollBarl.ValueChanged
Label l . Text = St ri n g. F o rma t ( " Ba ш в озраст {0} " ,
Hscrol l Barl . Val ue )
If (H scr ol l Bar l . Value < 20 ) The n
Label2 . Text = " Бере г и ч ес т ь смоло ду "
El se i f (Hscroll Barl . Value < 40) Then

58
Label2 . Text = " До р огу осили т идущий "
El se i f (Hscroll Barl . Va lue < 65 ) Then
Label2 . Text - " Главное - з дор овье "
El se Label2 . Text = " С т арикам ве зде у нас
11
поче т

Show ()
FormЗ .
Ме . Hide ()
End I f
End Sub

2.4.11. Список с флажками (CheckedListBox}

·~ t.1ама
О Пап а
Элемент управления CheckedListBox
является сочетанием элементов ListBox, задающего стандартный
список, и CheckBox, имеющего вид флажка и предназначенного
для выбора одного из двух возмо)кных значений. Таким образом,
данный элемент управления представляет собой список элементов,
с левой стороны ка)кдого из которых расположен флажок.
Элемент управле ния CheckedListBox обладает основными
свойствами списков, такими как наличие полос ы п рокрутки, воз ­
можно сть задания более двух колонок, сортировка элементов
по алфавиту.
Некоторые свойства элемента управления Список с флажками
представлены в табл. 24.
Таблица 24

Свойства элемента Список с флажками

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

TreeDCheckBoxes Значе ние по умолчаиию True з адает тр ехмерный


вид флажков в списке, а значение False опре-
v
дел яет пл оскии вид

На рис. 24 пр едставлен внешний вид программы, в которой ис­


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

59
~ Вопрос 1 - D Х

Уnравnение ресурсами включает решение нескольких общих. не зависимых


от ТW1а ресурсов задач .

Укажите. какая из ниже приведенных задач являеit:я лиwней (слеД.)'ет


о~ме1Иtъ о.а.tн вариант).

Поставьте Флажок в нужном nункте и нажмите Ok

О Планирование ресурсов
О Отслежиsание состояния ресурсов
О Удовлеmорение заnросов на ресурсы
О Разрешение коНфликтов между процессами
О Повьwение приоритета задачи

[ Ok:J
Рис. 24. Пример работы компонента. Исходное состояние окна с вопросом

Если пользователь , не ответив на вопрос теста, нажимает кнопку


ОК, то появится сообщение, представленное на рис. 25.

Тест Х

О Надо ответить на вопрос!

1 ок
Рис. 25. Предупреждающее сообщение

После выбора пользователем правильного ответа появляется


сообщение, представленное на рис. 26. Элементы списка при этом
очищаются (рис. 27).

60
~cr Х

о
Вы ответиJН1 правL1льно! Переходим к спе_дующеыу
вопросу.

ок 1
Рис.26.Сообщение

~ Вопрос 1 - О Х

Уnравnение ресурсами включает решение нескольких общих. не зависимь~х


от типа ресурсов 3адач .

Укажите . какая из ниже nриведеннь1Х задач являе'ТСА nиwней (слеД')'ет


о1'Ме1Ить O.oJtH вариант).

Поставьrе Флажок в нужном пункте и нажмиrе Ok

1 Ok 1
Рис. 27. Про изо шла очистка элементов списка

Код событийной пр оцедуры, реализующей тестовый вопрос,


представлен ни же:

Private Sub Buttonl_Click(sender As Object, е As


EventArgs) Handles Buttonl . Click

61
If (CheckedListBoxl.Checkeditems . Count 0)
Then
MessageBox .S how( " Haдo ответи т ь
на вопрос! " , " Тес т ", MessageBoxButt ons . ОК, MessageBox-
I con . In f or mation)
El se i f (CheckedLis t Boxl . Select edindex = 4)
Then
CheckedLis tBox l. Items . Clear()
MessageBox . Show( " Bы о тветили правильно!
Переходим к следующему вопросу .", " Тес т", MessageBox-
But t ons . OK , MessageBoxi con . Inf ormation)
Ме . Hide () ' Скрываем текущую форму
F o rm З . Show () ' Показываем следующую форму
Else MessageBox . Show( " Bы ответ или неп равильн о !
Переходим к следующему вопросу .", " Тес т", MessageBox-
But t ons . OK , MessageBoxi con . Wa rning)
Chec kedLis t Boxl . Items . Cl ear()
Ме . Hide () ' Скрываем т екущую форму
FormЗ . Show () ' П оказываем следующую форму
End I f
End Sub

2.4.12. Счетчик (NumericUpDown}

Элемент управления NurnericUpDown 10 ~1


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

Наиболее часто используемые свойства элемента управления


Счетчик представлены в табл. 25.

Таблица 25

Свойства элемента Счетчик

Свойство Описание
BorderStyle Служит для задания стиля обрамления элемента
управления

DecimalPlaces Пр едназначено для определения числа десятичных раз-


рядов, т. е . цифр после запятой. По умолчанию равно О

62
Окончание табл. 25
Свойство Описание

Increment Задает шаг, с которым будет уменьшаться или увели-


чиваться числовое значеиие в текстовом поле

Maximum Для определения максимального значения счетчика.


П о умолчанию - 100
Minimum Для определе~-rия миI-Iимальиого значеиия счетчика.
П о умолчанию - О

UpDownAlign Отвечает за расположение кнопок элемента управ -


ления (сп рава или слев а от текстового поля )

Value Используется для определения значения списка. С его


помощью можно задать началыrое з~-rачение

2.4.13. Список (DomainUpDown}

Элемент управления DomainUpDown ~ама


пред назначен для ввода пользователем текстовой информации
и представляет собой текстовое поле и две кнопки с направлен­
ными в противоположные стороны стрелками. Каждое нажатие
позволяет перемещаться по списку заданных текстовых значений.
Наиболее часто используемые свойства элемента управления
DomainUpDown представлены в табл. 26.
Таблица 26
Свойства элемента DomainUpDown

Свойство Описание

BorderStyle Служит для задаиия стиля обрамлеаия элемента


управления

Items Формирование элементов списка


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

п риложеаия

Sorted Сортировка элементов списка


UpDownAlign Отвечает за расположеаие каопок элемеита управ -
ления (справа или слева от текстового поля )

Wrap При значении True можно циклично перемещаться


по списку, т.е. при достижении ко~-rца ( начала)
списка продолжать его просмотр с пер вого ( по -
следнего) элемента

63
2.4.14. Ссылка (LinkLabel}
Управляющий элемент LinkLabel отображает ссылки на другие
ресурсы, такие как файлы или веб-страницы. Элемент LinkLabel
появляется в виде подчеркнутого текста (по умолчанию синего
цвета) . Когда указатель мыши попадает на эту ссылку, его форма
меняется на изображение руки; такое поведение аналогично пове­
дению гиперссылки на веб - странице. Когда производится щелчок
по упр авляю щему элеме нту LinkLabel, ге нерирует ся событие
LinkClicked. Класс LinkLabel является производным от класса
Label и, следовательно, наследует все функции класса Label.
Наиболее часто используемые свойства элемента управления
LinkLabel представлены в табл. 27.
Табли ца 27
Свойства элемента управления LinkLabel

Свойство Описание

ActiveLinkColor Определяет цвет активной ссылки при выполнении


на i-reй щелчка. По умолчаиию устанавливается
v
красныи цвет

LinkColor Определяет первоначальный цвет всех ссылок перед


их посещением. По умолчаиию уста~-rавливается
v
синии цвет

Text Определяет текст элемента управления

VisitedLinkColor О пределяет цвет посещеиных ссылок. По умол -


чанию устаиавливается фиолетовый цвет

2.4.15. Графическое окно (PictureBox}


С помощь ю данн ого элемента управления можн о в ыв ести
на экран изображение. Свойство Image задает выводимое :на экран
изобра:>кение, а свойство SizeMode определяет способ отобра:>кения
этого изображения.
Наиболее часто используемые свойства элемента управления
PictureBox представлены в табл. 28.
Таблица 28
Свойства элемента управления PictureBox

Свойство Описание

lmage Определяет изображеаие, отображаемое элементом управ -


ления

64
Окончание табл. 28
Свойство Описание

SizeMode П е р ечень опций управления размером и положением изо-


браже~-rия. Опция Normal помещает изображение в верхний
левый угол управляющего элемента. Опция Centerlmage
помещает изображение в центр. Опция Strethlmage изме-
I-Iяет размер изображения с тем, чтобы oi-ro полиостыо по -
местилось в PictureBox. Опция AutoSize изменяет размер
PictureBox так, чтобы в нем полностью поместилось изо-
бражение

2.4.16. Элемент управления TabControl


Т аЬРage 1 Т аЬРage2
.""""-.""""""""""""""""""""""...""""""""".

Элемент управления TabControl !..."................."...............! создает окна-


вкладки. С помощью этого элемента управления программист
имеет возможность отобразить большее количество информации
на одной форме. Элементы TabControl содержат объекты TabPage,
похож:ие на объекты класса Panel и GroupBox тем, что объекты
TabPage также могут содержать элементы управления. Сначала
программист помещает элементы управления в объект TabPage
(вкладка), затем добавляет объекты TabPage в элемент управления
TabControl. Одновременно отображается только один объект
TabPage.
Индивидуальные свойства элемента управления TabControl
представлены в табл. 29.
Таблица 29
Свойства элемента TabControl

Свойство Описаиие

ImageList Определяет изображения, которые будут отобра-


жаться на вкладках

ImageSize Определяет размер вкладки

MultiLine Определяет, могут ли на вкладках отображаться не-


сколько строк

Selectedlndex Иидекс выбраиной вкладки

SelectedTab Выбранная вкладка

TabCount Возвращает количество вкладок

65
2.4.17. Диаграмма (Chart}
Элемент управления Chart служит для визуального отобра­
жения на форме данных и результатов в виде графиков и диаграмм.
Для того чтобы воспользоваться компонентом, следует осуществить
его выбор на Панели элементов в категории Данные. Воспользо­
вавшись одним из основных свойств элемента управления - Series,
и перейдя в Редактор коллекции, пользователь может осуществить
выбор типа диаграммы (гистограмма, график, линейчатая и др.)
с помощью свойства ChartType.
На рис. 28 показан возмож:ный вид диаграммы по результатам
прохождения тестовой программы.

1 Резул ьтаты тестирования о х

1 2 ~--~-~--~ - Количество n:равильн:ых ответов


Колич ество н:е11ра аиnьн:ых отаетоа
10 -+---

8-+---
6-+---
4-+---

2-+---
0-+---

Ok

Рис. 28. Результаты работы программы

Для того чтобы в легенде диаграммы отображались надписи,


информирующие о количестве правильных и неправильных от ­
ветов, нуж:но выбрать свойство Series компонента Chart и изме­
нить свойство Name с Series1 (по умолчанию) на ~количество
правильных ответов». Воспользовавшись кнопкой Добавить в окне
Редактор коллекции Series, МО)КНО последовательно добавлять оче ­
редной член коллекции. Алгоритм вставки элемента ~количество
неправильных ответов» и возможных других членов коллекции

аналогичен рассмотренному.

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


столбчатой диаграммы.

66
PuЬlic Class Forml
Private SuЬ Buttonl Clic k(sender As Object , е As
EventArgs) Handles Buttonl.Clic k
Me . Chartl .S eries( " Koличecтвo правильных ответов " ).
Points . AddXY (" П ра вильные ответы ", 1 О)
Me . Char t l . Ser ies("Koличecтв o правил ь ных о тве тов ") .
Point s . AddXY ("Неправильные о тветы", 5)
End SuЬ
End Class

2.5. ОПЕРАТОРЫ ВВОДА


И ВЫВОДА ДАННЫХ, ОБРАБОТКА ОШИБОК

Пользователь, используя операторы ввода-вывода, выводит ре ­


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

осуществить на форме, что предпочтительнее тогда, когда не тре­


буется вводить/получать множество данных. И наоборот, в случае
ввода/вывода большого количества данных предпочтительнее за­
программировать стандартное диалоговое окно. Рассмотрим эти
способы подробнее.

2.5.1. Функции Val и Str


Первый способ - ввод данных в текстовое окно, расположенное
на форме.
Функция Val (англ. value - величина, числовое значение) пре ­
образует текстовый аргумент в числовое значение. Это преобразо ­
вание необходимо для корректного выполнения последующих опе­
раций в программе. По умолчанию данные, введенные в текстовое
поле, представляются текстовой строкой. Операторы *, - и / рабо ­
тают только с числами, поэтому при выборе пользователем одной
из этих операций Visual Basic автоматически преобразует значение,
присвоенное переменной, в число.
Пример:
а= Val (TextBox1.Text)
Запись такого вида означает занесение в ячейку с именем а
введенного пользо вателем з начения в текстовое окно с именем

TextBox1 .Text, расположенное на форме.


В·ы вод данных в текстовое окно на форме можно осуществить,
используя функцию St r. Ее действие противополо)кно функции
Val.
Запись St r (x) означает, что значение переменной х преобра­
зуется из числа в строку символов.

67
Пример:
TextBox1.Text = Str(Summa)
Иногда бывает необходимо указать компьютеру, в каком виде
(формате) мы хотим получить результат. Для этого следует ис­
пользовать функцию Format. В скобках функции Format распо ­
лагаются через запятую два аргуме нта. П ервый аргумент - п ере ­
менная, число, выра:>кение . Второй аргумент - строка в кав ычках,
с помощью которой мы управляем внешним видом числа. Символы
в кавычках называются символами формата.
В озможные аргументы функции Format и их описание приве ­
дены в табл. 30.
Таблиц а 30
Возможные аргументы функции Format

Символы
Пояс~-rение
и р езультаты

# Число в обычном виде и без дробиой части


о Число в обычном виде и без дробиой части
#.### Число в обычном виде. После запятой пользователь
видит ае больше трех зиаков, целая часть дроби будет
показана ПОЛ!'IОСТЫО

О . ООО Число в обычном виде. После запятой пользователь


видит I-Ie больше трех зиаков, целая часть дроби будет
показана полиостыо

Е Число показывается в экспоненциальной форме

В качестве примера можно прив ести первый вариант программы


«Сложить два числа~ с использованием функций Val и Str, напи ­
санной на языке программирования Visual Basic.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System .
Object, ByVal е As System.EventArgs) Handles Buttonl .
Click
Di m а, Ь, summa As I nt ege r
а= Va l (Text Boxl . Text)
Ь = Va l (Text Box2 . Text)
summa = а + Ь
Tex t BoxЗ . Text = Str (summa)
End Sub
End Class

68
2.5.2. Использование функций lnputBox и MsgBox
Второй способ - ввод данных из окна ввода и вывод данных
с помощью окна сообщения.
Окно ввода - это стандартное диалоговое окно, которое по­
является на экране в результате вызова функции InputBox. Зна­
чение функции InputBox - строка, которую ввел пользователь.
Поэтому если программе надо получить число, то введенная строка
должна быть преобразована в число с помощью соответствующей
функции преобразования. Стандартное окно для ввода представ­
лено на рис. 29.

Ввод 1 числа х

Введите. пожалуйста. первое число


1 ок 1

Оrмена

Рис. 29. Стандартное окно для ввода данных

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


функции InputBox выглядит так:
Переменная= lnрutВох( "Приглаше1-lие", "Заголовок")
Приглаше1-luе - это любой текст, который должен находиться
в Окне ввода. Его назначение - служить подсказкой пользователю,
какую информацию он долж:ен ввести в специальное поле ввода, на­
ходящееся в этом окне.

Аргумент Заголовок - это надпись в строке заголовка Окна


ввода.

Пример:

Name = lnputBox ("Введите, ПО)калуйста, Вашу фамилию", "Ввод


фамилии").

Вывод в окно сообщения осуществляется с помощью функции


MsgBox. Она позволяет поместить в окно с сообщением один
из стандартных значков, например ~внимание~, задать количество
и тип командных кнопок и определить, какую из кнопок нажал

пользователь.

69
В общем виде инструкция вывода данных с использованием
функции MsgBox выглядит так:
MsgBox ("Cooбщettue", НомерКнопки, "Заголовок" )
где Сообщеttие - представляет собой текст, который будет ото­
бражен на экране; НомерКнопки - указывает тип отображ:аемых
кнопок, тип используемой пиктограммы; Заголовок - это надпись
в строке заголовка Окна вьmода.
Установки для аргуме нт а Номер Кнопки представлены
в табл. 31.
Таблица 31
Установки для аргумента НомерКнопки

Коистанта Описааие

MsgBoxStyle.Ok Отображает только кнопку О К

MsgBoxStyle.OkCaпcel Отображает кнопки ОК и Отмена

MsgBoxStyle.AbortRetry Ignore Отображает каопки Стоп, Повтор


и Пропустить

MsgBoxStyle.УesNoCaпcel Отображает кнопки Да, Нет, Отмена

MsgBoxStyle.УesNo Отображает кнопки Да, Нет

MsgBoxStyle .RetryCaпcel Отображает кнопки Повтор и Отмена

MsgBoxStyle. Critical Отображает запрещающую пикта -


грамму

MsgBoxStyle.Questioп Отображает предупреждающую пик-


то грамму (знак вопроса на белом
фоне)

MsgBoxStyle. Exclamation Отображает предупреждающу10 пик-


то грамму (знак вопроса в красном
треугольнике)

MsgBoxStyle. Information Отображает информационаую пикта-


грамму

Пример: запросить имя пользователя и вывести на экран при­


ветствие.

Листинг программы

PuЬlic Class Forml


Private Sub Forml_Activated(ByVal sender As Ob-
ject, ByVal е As System.EventArgs) Handles Me.Activated
Dim name As String

70
name = I nputBox ( " Введите ваше имя ", " П ример
окна ввода " )
I f name = " Сергей " Then
MsgBox ( " П ривет , " & name , MsgBoxS t у 1 е .
I nformation , " Пример окна сообщения " )
End I f
Ме . Cl ose ()
' Appl i cati on .Ex i t()
End Sub
End Class

Результат представлен на рис. 30, 31.

Пример окна ввод а х

Введите ваше имя


ок

Отмена

Рис. 30. Стандартное окно ввода

П ример окна сообщения Х

О Привет, Сергей

ок

Рис. 31. Стандартное окно сообщения

Окно сообщения может вызываться методом MessageBox.Show.


В следующем примере на экране отобра)кается диалоговое окно
с кноп ками Да, Нет и Информационной пиктограммой. По н а-

71
ж:атию одной из кнопок на экране отображается сообщение, под­
тверж:дающее нажатие.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
MessageBox . Show ( " Зд равствуй те ! ! ! ", " Окно
с п риветом " )
End Sub

Private Sub Button2_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Button2 .
Click
Dim result As DialogResult
resul t = MessageBox . Show ( " Вы хотите выйти
из п ро г раммы?? ", " Выход " , MessageBoxButtons . YesNo , Mes -
sageBox icon . Asterisk )
If result = DialogResul t . Yes Then
Application . Exi t()
End If
End Sub
End Class

Результат представлен на рис. 32, 33.

Окно с приветом Х

Здра аавуйrте! !!

ок

Рис. 32. Окно с приветствием

Второй вариант программы ~Сложить два числа~ с использо ­


ванием функций InputBox и MsgBox, написанной на языке прог­
раммирования Visual Basic, показан ниже.

72
Выход х

8 Вы хотите вь1 йти из. nр о граммы n

_f_да _f _I _н_ет___.

Рис. 33. Запрос на выход из программы

Ввод 1 числа х

Введите. пожалуйста. первое число


ок 1

01Jt.11eнa \

l з.21

Ввод 2 числа х

Введите. пожалуйста. второе число


1 ок 1

[OTh'leнa

l з.Щ

Рис. 34. Запрос на ввод данных

73
Листинг программы

PuЬlic Class Forml


Private Sub Forml_Activated(ByVal sender As Ob-
ject , ByVal е As System . EventArgs) Handles Me .Activated
Di m а, Ь, summa As Si ngl e
а = I nрutВох("В в е дите, пожалуй с т а, пер в ое
число " , " Ввод 1 числа " )
Ь = InрutВох( " Введите, пожалуйста , второе
число " , " Ввод 2 числа " )
summa = а + Ь
MsgBox ( " Сумма двух чисел = " & summa, MsgBox-
St yl e . In f ormation, " П олучаем ответ " )
Ме . Close ()
End Sub
End Class

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

Получаем ответ х

• Сумма двух ч1и:сел = 7

ок

Рис. 35. Резул ьта т сл оже ния двух чи сел

2.5.3. Функции преобразования типов

Существуют специальные функции, назначение которых - пре­


образовывать свой аргумент в определенный тип. Как было отме­
чено в параграфе 1.10, по умолчанию компилятор VB устанавливает
режим явного объявления переменных.
В предыдущем примере мы описали переменные в разделе опи­
сания Dim, при этом был задан режим Option Explicit, т.е. режим
явного объявле ния переменных. Е стественно, пример был вы­
полнен успешно, без ошибок компилятора.
Изменим реж:им объявления переменных, вызвав меню Проект/
Свойства : Название текущего проекта/Компиляция. У становим

74
режим Параметр Strict/ On. Запустив программу на выпол­
нение, увидим ошибку: VB подчеркнул строки, относящиеся ко
вводу данных. Произошла данная ситуация потому, что функция
InputBox возвращает строковое значение, а переменные в разделе
описания описаны как вещественные числа.

Подобная ситуация представлена на рис. 36.


W111dO\vsApp1 Form2 vb Form2 vЬ [Кокструкторl Form1 vЬ JКон<трукторl "
·) ". вuttonZ · (f C1ick

8
9 Privat@ Sub Forml_Load(s@nd@r As OЬj@ct, @As Ev@ntArgs) llandl@s Мy8as@.Load
10 Oim а, Ь , summa As Single
11
12 а • !!'2.'J.!~X(.::00~.l\!!.!~..l'.!'1!.~XЯC"!_~t.!'!P..!..~•.:!.'!S.~••:]!м.J.~c.!1~::2.
13 Ь z In.еutВох~"8ееди т~, nожапхйста, sторое число"~ "8ео.в. 2 числа" )
14 summ.a • а + Ь
15 HssBox ("'CYfo1Мa двух чисел =" & swnma, М.SaBoxStyle . l n f o r • at ion, "Получаеf.1 ответ'")
16 мe . Close()
End Sub

·ч Код Оnис~ние Проtl(Т Ф~йл Ст." Состо111ии• no". Т


А ВСЗОS 12 Option Strict On не pAJpewaeт не1111ные nptoбpAJONни,ri "String" к Windo.-:.a. ....... 1 Form1.vb 12 Активный
..., "Stnglo". ~..... .......

А ВСЗОS
..., 12 "S1n9lt
Optюn Strkt On ие ра3реwает неJ1tиые nреобраэоuwия "String" к
",
Windo··-• ......
'"N"'f't'
1 Form1.vb 13 Активнь~й

Рис. 36. Ошибка компилятора

При включенном режиме Strict компилятор должен иметь воз­


можность определить тип каждой переменной. Кроме того, если
одной переменной присваивается значение другой и при этом не­
обходимо преобразование типов (например, от Integer к Boolean),
то такое преобразование должно быть явным.
Третий вариант программы «Сложить два числа» с использо­
ванием функций InputBox и MsgBox, написанной на языке прог­
раммирования Visиal Basic при включенном реж:име Strict, пред­
ставлен ниже.

Листинг программы

PuЬlic Class Forml


Private Sub Forml_Load(ByVal sender As System.Ob-
ject, ByVal е As System . EventArgs) Handles MyBase . Load
Di m s , v As St r ing
Di m а , Ь , с As Si ngl e
s = I nputBox ("Вв о д п е рв о г о с лагае мо г о ",
" Вв е дите п ер в о е сл агаемо е")
а = СSng ( s )' Приве дение к ве щес т вен н ому типу
дан н ых (ф ун кция CSng)
v = I nputBox (" Вво д в т оро г о сла г аемого " ,
" Вве ди т е в т орое сла г аемое ")

75
Ь = CSng (v )
с = а + Ь
MsgBox ( " Зна чен ие У - " & Cint (с) , vЫnf orma-
tion , " П олучаем ответ ")
Ме . Cl ose ()
End Sub
End Class

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

Введите первое слагаемое х

Ввод первого слагаемого


1 ок 1

01Мена

lз.ОБВ

Рис. 37. Запрос на ввод данных

Введите второе слагаемое х

Ввод второго слагаемого


1 ок 1

Отмена ]

Рис. 38. Запрос на ввод данных

В данном коде используются несколько функций преобразо­


вания типов: CSng (строковый тип преобразуется в вещественный
тип) и Clnt (строковый тип преобразуется в целый тип). Пол ­
ностью функции преобразования типов представлены в табл. 32.

76
Получаем ответ х

О Зн1ачение V = 5

ок

Рис. 39. Вывод результата

Таблица 32
Функции преобразования типов

Функция Тип Функция Тип

CByte Byte CDec Decimal


CShort Sl1ort CChar Cl1ar
Clnt Integer CStr String
CLng Long CBool Boolean
CSng Single CDate Date
СDЫ DонЫе CObj Object

2.5.4. Проверка правильности ввода данных

При работе с текстовыми полями иногда возникает необходи ­


мость пров ерки вводимых пользователем данных.

В следующем примере рассматривается код, с помощью ко ­


торого пользователь получит сообщение о неправильном вводе
данных (не числовом).
Для задания процедуры обработки следует сделать двойной
щелчок на созданном объекте Текстовое поле и выбрать метод
Validating. Далее следует добавить код, представленный ниже.
Ф ункция IsNumeric анализирует строку и возвращает значение
True, если в текстовое поле введены цифры или знаки, например,
запятая или минус.

Процедуру обработки события TextBox1_Validating создаем


следующим образом:
1) выделяем элемент управления TextBox1 ;
2) в окне Свойства выбираем кнопку События 1 f;
77
3) находим событие Validating и выполняем двойной щелчок
v v
в правои колонке даннои строки;

4) начинаем писать программный код в появившейся проце­


дуре обработки события Validating.
Подобным образом будем создавать и другие процедуры обра­
ботки событий.

Листинг программы

PuЬlic Class Forml


Private Sub TextBoxl_Validating(ByVal sender As
Object, ByVal е As System . Componentмodel . CancelEvent­
Args) Handles TextBoxl . Validating
If Not IsNumeric (Text Boxl . Text ) Then
Me ss ageBox . Show ( " Вводите только числа !")
TextBoxl . Focus(
End If
End Sub
End Class

2.5.5. Проверка корректности ввода данных


и индикатор ошибок

Для большинства элементов управления на форме требуется,


чтобы правильность содержащихся в них данных оценивалась опре­
деленным образом. Можно, например, потребовать, чтобы пользо­
ватель обязательно вводил в поле какое-либо значение, не оставляя
его пустым.

Создадим новое приложение и поместим на него два текстовых


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

обработкой этих данных.


Язык VB предоставляет разработчикам дополнительные воз­
можности, позволяющие облегчить решение указанной задачи.
В первую очередь, имеется в виду такой элемент управления, как
ErrorProvider (Индикатор ошибок) . Его добавление на форму по­
зволяет выводить сообщение об ошибке в виде всплывающей под­
сказки для ка:>кдого элемента управления, куда введены н еверные

данные. Для обозначения таких полей индикатор ошибок автома­


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

сказку.

78
Заполнение данных D х

Введите ваше имя

Введите пароль

.__~~-о-·-k~~~~I l___п_е_рех.о
---д--на__вто__р_1ю__Ф_о_р_м_у___I
Рис. 40. Форма для ввода пароля

Добавим на форму элемент управления ErrorProvider. Чтобы


связать индикатор ошибок с нуж:ными полями, воспользуемся ме ­
тодом SetError. Напишем обработчик событий Validating для каж:­
дого из текстовых полей. Результат работы программы представлен
на рис. 41.
Листинг программы

PuЬlic Class Forml


Private Sub TextBoxl_Validating(By Val sender As
Object, ByVal е As System.Componentмodel.CancelEven­
tArgs) Handles TextBoxl.Validating
If Text Box l . Text = "" The n
Erro rProvi der l . SetEr ro r(Text Boxl,
" Пользовательское имя не введено ")
Else
ErrorProviderl . SetError (TextBoxl , "")
End If
End Sub

79
Private Sub TextBox2_Validating(ByVal sender As Ob-
j ect , ByVal е As Sys tem . Componen tмodel . CancelEven tArgs)
Handles Textвox2.Validating
I f TextBox2 . Tex t = "" Then
ErrorProvider l . SetErro r (Tex t Box2, " П ароль
не введен")
Else
ErrorProvider l . SetErro r ( Tex t Box2, "")
End I f
End SuЬ
End Class
---------------
111 За пол не нне данных ~[Q}L8]

Введите имя [ sergei 1

Пароль
;:...._---=========:::::::
1.._________,10
!Пароль не введен 1
Ок

Рис. 41. Вывод сообщения об ошибке

Запустим приложение и будем переключаться между полями.


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

2.5.6. Обработка исключений

Пр ерывания, рассматриваемые в данном параграфе, относятся


к классу внутренних прерываний и наз ываются исключениями
( exception ). Они происходят синхронно выполнению программы
и возникают при появлении аварийной ситуации в ходе исполнения
некоторой инструкции. Примерами исключений являются деление
на ноль, переполнение, обращение к несуществующему файлу и т.д.
Обработка ошибок представляет собой важную проблему для
любого языка программирования. Платформа .NET предлагает
объект Exception, наследующий от класса System.Exception, обес­
печивающий программистов стандартным механизмом обработки
исключений.
Обработчик ошибок в VB использует блок Try ... Catch ... Finally.
Слово Try переводится как «попробуй», Catch - «поймай». Этот
блок дол)кен окру)кать ту часть кода, где мож:ет возникнуть исклю-

80
чительная (Exception) ситуация. В начале блока стоит простой опе ­
ратор Try. Блок кода Catch располагается там, где мы определяем,
какие типы ошибок следует искать. Блок Finally всегда исполня­
ется и содержит подпрограммы освобо)кдения ресурсов для исклю­
чительных ситуаций.
В приведенном ниж:е примере мы окружили весь код, где воз ­
мож:но возникновение ошибки, блоком Try ... Catch ... Finally. При­
веденный блок содерж:ит два оператора Catch. П ервый из них пе­
рехватывает конкретную ошибку переполнения, которая возникает
вследствие деления на ноль. Данный оператор позволяет использо­
вать свойства объекта Exception путем инициализации переменной
expet. При выполнении этого кода появится сообщение, представ­
ленное на рис. 42.

Произошла оши бка деления на нул ь

ок

Рис. 42. Сообщение об ошибке

Следующий оператор перехватит любую другую ошибку, ко­


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

ок

Рис. 43. Окно сообщений

81
Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim а , Ь, с As I nteger
а - 5
ь = о
'П ервый оператор обработ чика ошибок
Try
'Вызов ошибки "Де ле ние на О"
с = а / Ь
' перехват ошибки

Catch expet As System . OverflowExcepti on


MessageBox . Show ("Произошла ошибка де ле ния на нуль ")
Catch
MessageBox . Show ("Перехватываем другие ошибки ")
Final l y
MessageBox .Show(S t r(c))
' Ко н е ц ко н струк ции Try

End Try
End Sub
End Class

Оператор Exit Try при определенных условиях прерывает вы­


полнение кода внутри блока Try или Catch и передает управление
блоку Finally. Обратимся к примеру использования данного опера­
тора. В приведенном ниже примере предусмотрен выход из блока
Catch при условии равенства нулю переменной Ь, так как мы за­
ранее знаем, что обнаружится ошибка переполнения, связанная
с делением на ноль.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Dim f As New Form2
f . Show ()
Ме . Hi de ()
End Sub

82
Private Sub TextBoxl_Validating(sender As Object,
е As System . Componentмodel . CancelEventArgs) Handles
TextBoxl . Validating
I f Tex t Boxl. Text = "" Then
ErrorProviderl . Se tE r r or(TextBoxl ,
"П ользова т ельское имя не введено " )
El se
ErrorProviderl . Se tE r r or (TextBoxl , "" )
End I f
End Sub

Private Sub TextBox2_Validating(sender As Object,


е As System . Componentмodel . CancelEventArgs) Handles
TextBox2.Validating
I f TextBox2 . Tex t = "" Then
ErrorProviderl . Se tE r r or (TextBox2, "П ароль
не введен " )
El se
Er r or Provide rl . SetEr ro r (TextBox2, "" )
End I f
End Sub

Private Sub ButtonЗ_Click(sender As Object, е As


EventArgs) Handles ButtonЗ.Click
Di m а, Ь, с As In t ege r
а = 5
ь = о
Tr y
'Вызов ошибки " Дел ение на О"
с = а / Ь
' перехват ошибки
Catch exept As System . OverflowExcepti on
MessageBox . Show ( " Произошла ошибка де ления на О " )
If Ь = О Then
Exit Tr y
Else
MessageBox. Show ("Ошибка н е с в язана с делением
н а О ") End If
Cat ch
MessageBox. Show (" П ерех в а т ыв аем дру г ие о шибки " )
Fi na l ly

83
MessageBox . Show(Str(c))
End Try
End Sub
End Class

В первом блоке Catch находится условный оператор If, позво­


ляющий выйти из этого блока при выполнении заданного условия.
Оператор Exit Try немедленно передает выполнение блоку Finally:

If Ь = О Then
Exi t Try
Else
MessageBox . Show ("Ошибка не связана
с д елением на О ")
End I f

Если причиной ошибки пере полнения не является деление


на ноль, то на экране появляется сообщение « Ошибка tte связаttа
с делеttuем tta 0».

2.5.7. Ограничение на ввод данных в текстовое поле

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


числовые данные. П еречислим требования к элементу управления
Текстовое поле:
• разрешается вводить только цифры;
• МО)КНО ввести лишь одну десятичную точку;

• разрешается вводить знак «минус», но только в первую позицию

текстового поля;

• отбрасываются (или игнорируются) все другие символы, вво­


димые пользователем.

Создадим процедуру обработки события KeyPress, которая


будет обрабатывать АSС II-коды символов.

Листинг программы

PuЬlic Class Forml


Private SuЬ TextBoxl_KeyPress(sender As Object, е
As KeyPressEventArgs) Handles TextBoxl . KeyPress
Di m key As Integer
key = Asc(e.KeyChar)
Selec t Case k ey
Case 48 То 57 , 8 , 13 'цифры о т О до 9,
а т акже символы возврата и перевода с т роки

84
Case 45 ' знак ми нус
'если уже есть один знак минус,
новый отбрасывается
If InStr (TextBoxl . Text, " - " ) <> О
Then
key = О
End I f
Case 46 ' д есяти ч ная то ч ка
' о т брасываем ее , если у на с уже ес т ь
десятичная т очка

I f InStr(TextBoxl . Text, "." ) <>О


Then
ke y = О
End I f
Case El se
' запрещаем обрабо т ку нажатия друг их

клавиш

key = О
End Se l ect
' если мы хотим пр оигнор ирова ть нажа тие
клавиши, у ка зываем программе , что это событие уже
обработа н о . В проти в ном сл у ча е
' п озволяем да нн ому собы т ию обраба т ыв а ть ся
If key = О Then
e . Handl ed - True
El se
e . Handled - Fa l se
End I f
End SuЬ
End Class

2.5.8. Разработка главного меню, контекстного меню


и строки состояния

Для создания меню нужно открыть Панель ин струментов и пе­


ретащить значок элемента управления MenuStrip ( Редактор меню)
на форму разрабатываемого приложения. В результате в верхней
части формы будет создана панель меню, а значок MenuStrip по­
явится в ниж:ней части окна среды разработки. Для добавления
в меню имен команд следует щелкнуть по текстовому полю Вво ­
дить здесь и ввести имя команды меню. Подобная ситуация пред­
ставлена на рис. 44.

85
i;i.-1 ~;:inn 1:;>1-1ие данных

Файл 11 П равка 1 Вводить здесь 1

Выход
1 1
[ВВодить здесь 1

Введите пароль 1 1

Ok П ереход на вторую форму

с!> Timer1 О ErrorProvider1


c:::::J

IEJ MenuStrip1

Рис. 44. Добавление пунктов меню

Выполнив одиночный щелчок на созданном пункте меню , по­


лучим доступ к свойствам, с помощью которых можно переимено­
вать пункт меню, определить клавишу быстрого доступа и т.д. Наи­
более часто используемые свойства представлены в табл. 33.
Таблица 33
Свойства ToolStripMenultem (пункт меню)

Свойства Описание

Checked У казывает на то, отмечен или нет пуакт ме1по.


По умолчанию имеет значение False (не отмечен)
lmage Служит для задания заачка, размещаемого слева
от пункта меню

ShortcutKeys Определяет клавишу быстрого выбора nyflктa


меню

ShowShortcutKeys Определяет, отображается ли рядом с текстом


пункта меню комбинация клавиш быстрого выбора.
По умолчанию имеет значение True (отображение)

Text Определяет текст пункта меню

86
Для создания клавиши быстрого набора (горячей клавиши)
необходимо перед символом имени (пункта) меню ввести символ
амперсанда ( &). Например, для создания пункта меню File нужно
ввести &File. Для добавления других клавиш быстрого набора (на­
пример, Ctrl + F9) необходимо выставить модификаторы свойства
ShortcutKeys для соответствующего пункта меню.
Пункты меню мож:но объединять в логические группы с по­
мощью Разделителя (Separatorbar). Для установки разделителя
достаточно ввести в текст меню символ~-~.

Для того чтобы добавить в программу строку состояния, следует


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

Выберем свойство Items элемента управления StatusStrip1.


Добавим в строку состояния с помощью кнопки Добавить три
элемента StatusLabel. Редактор коллекции элементов показан
на рис. 45.

Редактор коллекции элементов ? х

Выбрать элемент и добавить в список ниже: ~tatusStrip StatusStrip1

~~~ ~· J~
[ > Location О; 445
Члены: > Margin О; О; О; О

StatusStп 1 > MaximumSize 0;0


> MinimumSize 0;0
> Size 682;38
Stretch True
v Поведение

AllowDrop False
AIlowltem Reorder False
AllowMerge True
ContextMenuStrip (нет)
EnaЫed True
lmeMode NoControl
ShowltemToolTips False
ТаЫпdех 6
TabStop False
Vi si Ыe True
v Разработка

(Name) StatusStrip1 v

ОК Отмена

Рис. 45. Окно редактора коллекции элементов

Для того чтобы время и дата постоянно обновлялись при ра­


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

87
Листинг программы

PuЬlic Class Forml


Private Sub Forml_Load(ByVal sender As System.Ob-
ject , ByVal е As System.EventArgs) Handles MyBase.Load
Timerl . EnaЬle d = True
End Sub

Private Sub Timerl_Tick(ByVal sender As System . Ob-


ject , ByVal е As System.EventArgs) Handles Timerl.Tick
ToolStripS t atus 1abe l 2 . Text - System . Dat eTime .
Today . ToLongDateSt ring
ToolStripS t atus L abe l З . Text - System . Dat eTime .
Now . ToLongT i meSt r ing
End Sub

Private Sub BыxoдToolStripMenuitem_Click(sender As


Object, е As EventArgs) Handles BыxoдToolStripMenuitem .
Click
Application . Exit()
Timerl . EnaЬled = False
End Sub
End Class

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

D Заполнение данных о х

Файл 1 Правка
ВIЬllКОД имя

Введите пароль

11
Ok Перех.од на вторую Форму ~

Строка состояния 23 февра1ля 2018 г. 11 :35:07 ......


Рис. 46. Со зданная стр ока состоян и я

88
Для создания контекстно-зависимого меню (вызывается правой
кнопкой мыши) используется элемент управления ContextMenuStrip.
Контекстное меню создается для конкретного объекта, например для
формы, для кнопки, для элемента ListBox и т.д.
П редположим, нужно создать контекстное меню для формы
с пунктом Цвет и влож:енные пункты Синий и Красный ( рис. 47) .

Красный

Рис . 47. П у нкты ко нтекстн о го ме н ю

Поместим на форму эл емент управления ContextMenuStrip.


Щелкнем по созданному элементу. На форме появится область,
которую следует заполнить заранее выбранными пунктами Цвет
и Размер. Теперь находим свойство ContextMenu для формы и вы­
бираем ContextMenuStrip1 .
Делаем двойн ой щелчок по пункту меню и пишем код процедур
для соответствующих п унктов.

Листинг программы

PuЬlic Class Forml


Private Sub BlueToolStripMenuitem_Click(ByVal
sender As System.Object , ByVal е As System.EventArgs)
Handles CинийToolStripMenuitem.Click
Me . BackCol or = Color . Blue
End Sub

Private Sub RedToolStripMenuitem_Click(ByVal sender


As System.Object , ByVal е As System.EventArgs) Handles
KpacныйToolStripMenuitem . Click
Me . BackColor = Col o r . Red
End Sub
End Class

Контрольные вопросы и задания


1. В чем заключается отличие пр оекта от р ешеиия?
2. П еречислите и дайте характеристику наиболее известным простран­
ствам имен .

3. Что поиимается под иатерфейсом разр абатываемого приложеаия?


4. Какие типы интерф ейсов можно создавать в среде Windows с по ­
мощью языка VB? Д айте характе ристику каждому.

89
5. Каким образом осуществляется взаимодействие двух форм? Пояс­
ните на примере соответствующих операторов .

6. В чем заключается окончательная настройка проекта?


7. Какие функции языка программирования используются для ввода ­
вывода данных при работе с текстовыми полями?
8. П риведите синтаксис функций InputBox и MsgBox и поясните их
назначеиие.

9. Какие фу~-rкции преобразова~-rия типов даниых вы ЗI-Iаете?


10. Поясните словесный алгоритм создания обработчиков событий.
11. Каким образом можно осуществить проверку корректности ввода
даиных?
12. За какие действия отвечает элемеит управлеиия ErrorProvider?
13. Что называется исключением? Какие программные конструкции
и методы используются для обработки исключений?
Глава 3
ЛИНЕЙНЫЙ АЛГОРИТМ

Ал горитм называется линейным, если он содержит N шагов


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

до конца. На рис. 48 представлен общий вид линейного алгоритма,


где р 1' р 21 р n - операторы.

/
Начал о

Р1

Р2
'

'

Конец

Рис. 48. Общий вид линейного алгоритма

УПРАЖНЕНИЯ

Выполнение упра:>кнений, представленных в некоторых главах


учебного пособия, позволит вам лучше понять смысл работы того
или иного оператора языка программирования VB.
При выполнении упра)кнений следует обратить внимание на то,
что в них применен строгий подход к тому, какой оператор счи ­
тать допустимым, а какой - нет, больше характерный для других
языков программирования, например Delphi. Следует иметь в виду,
что при проверке приведенных в книге упра:>кнений в среде прог­
раммирования режим компиляции должен соответствовать режиму

Параметр Strict On.

91
Вопрос 1. Какими будут значения переменных m и n после вы­
полнения фрагмента программь1?

m=25
n=m + 1
m=m - 25

Ответ. Действие оператора присваивания заключается в зане ­


сении какого-либо значения в соответствующую ячейку памяти,
причем старое значение, находящееся в ячейке, исчезает. Таким
образом, если в ячейке m находится число
25, то в ячейку n после
выполнения оператора присваивания n = m + 1 заносится число 26.
Затем выполняется оператор m = m - 25. Значение переменной m
не изменялось, поэтому 25 - 25 = О, т.е. значение переменной
m = О, а значение переменной n = 26.

Вопрос 2. Каким будет значение переменной n после выпол­


нения группы операторов?

m=20
n = 10
m=m / n
n=m * n
n = n + 30

Ответ. После выполнения оператора присваивания m =m/ n


в ячейку m заносится число 2. Выполняется оператор n = m * n.
В ячейке m находится число 2, а в ячейке n - число 10, поэтому
после выполнения операции умножения в ячейку n заносится
число 20. Выполняется оператор n = n + 30, и поскольку в ячейке n
находится 20, значение переменной n будет равно 50.

Вопрос 3. Каким будет значение переменной m после выпол­


нения группы операторов?

m =ЗО
n=2
n=m / 2
m=n
m=m + n
m=m

92
Ответ. После выполнения оператора n= т / 2 в ячейку n за­
носится число 15. П осле выполнения оператора т = n в ячейке т
будет также находиться число 15. Следовательно, число 30 зано ­
сится в ячейку т после выполнения оператора т = т + n. Оператор
т = т переприсваивает значение переменной m.
Ответ в упражнении: значение переменной т равно 30.

Вопрос 4. Какое число выводится на экран компьютера после


выполнения фрагмента программъ1?

m= 11
n=m * 2
m=m+n
m=m
WriteLine (m)

Ответ. После выполнения оператора n = т * 2 в ячейку n за­


носится число 22, которое складывается с числом 11 после вы ­
полнения оператора т = т + n. Оператор т =т переприсваивает
значение переменной m. Оператор WriteLine служ:ит для вывода
н а экран чисел, текста, п оэтому после выполнения оператора

WriteLine (m) на экран выводится число 33.

Вопрос 5. Дано описание переменных:


Dim q As Single
Dim х, vv As Integer
Dim d As Boolean
Какой из перечисленных ниже операторов допустим?
1. d = q
2. q = х + w
3. q = х + d
4. d = w
Ответ. В первом случае переменная d описана как логическая
переменная, а переменная q- как вещественная. Логическая пере­
менная может принимать два значения: True и False. Значит, этот
оператор недопустим. Во втором случае в правой части складыва­
ются две переменные целого типа. Такое присваивание допустимо.
В третьем случае в пр авой части складываются переменные це­
лого и логического типа, что недопустимо. И, наконец, в четвертом
случае логической переменной присваивается целое число, что не­
допустимо.

Вьmод: допустим второй оператор присваивания.

93
Вопро с 6. Дано описание пер еменных:
Dim х, у, z As Integer
Dim а, s, d As Boolean
Есть ли из перечисленных ниже операторов недопустимые?
1. х =у+ z
2. у= z
3. а= х > z
4. s = T rue
5. Все операторы записаны верно
Ответ . В первом случае справа от оператора присваивания на­
ходятся переменные z и у, описанные как целочисленные, пере­

менная х описана как целочисленная переменная, значит, такой


оператор допустим. Второй пример аналогичен первому. В третьем
случае справа от оператора присваивания сравниваются между

собой две целочисленные переменные. Слева находится переменная


а, которая описана как логическая. Следовательно, такой оператор
допустим. В четвертом случае переменная s описана как логиче ­
ская. Логическая переменная мож:ет принимать два значения: True
и False. Значит, этот оператор допустим.
Вьmод: все операторы записаны верно.

ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

Задача 1. Вычислите значения арифметических выражений


и выведите на экран результаты вычислений.
Исходные данные: х = 1,4444, Ь = 0,318, t = 2,1, а= 1,3.
Запишем арифметические выражения на языке программиро­
вания:

у= 9 * х /\ 2 + Sin ( х) * Sin ( х) * Sqrt (а+ Ь)


z = (х /\ t) /\ ( 1/ 3) * (а * х * х * х - ( х * х) / ( 1* 2))

Разработка алгоритма решения задачи представлена на рис. 49.

Листинг программы с использованием функций Str и Val


Imports System . Math
PuЬlic Class Forml
Private Sub Buttonl_Click(ByVal sender As System .
Object , ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim а, Ь, t, z, у As Single
х,
а= Va l (Text Boxl . Text )

94
Начало

а, Ь, х, t

у=9х2 +sin 2 x.Ja+b

y,z

Конец

Рис. 49. Алгоритм решения задачи

Ь - Val (TextBox2 . Text )


х - Val ( TextBoxЗ . Text )
t - Va l( TextBox4 . Text)
у - 9 * х л 2 + Sin(x) * Sin(x) * Sqrt(a + Ь)
z - (Sqrt (х л t)) л (1 / 3) * (а * х л 3 -
(х * х) / (1 * 2))
TextBox5 . Text - Str( y)
Tex tB oxб . Text - Str(z)
End Sub
End Class

Результат работы программы представлен на рис. 50.

95
• Запись выражений о х

Введите значение а Введите значение Ь Введите значение х Введите значение t

lo.318

Q15ету= Ответz=

140.6792 l 13.11985

Переход на первую срорму Ok

Рис. 50. Результат работы программы

Листинг программы с использованием функций


lnputBox и MsgBox
Imports System.Math
PuЬlic Class Forml
Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim а, Ь, х , t, z, у As Si ngl e
а = Inрu t Вох( " Введи т е зна ч ение А "' " Ввод 1 числа " )
ь = InрutВох ( " Введите значение в "' " Ввод 2 числа " )

х = Inрu t Вох( " Введит е зна ч ение х "' " Ввод 3 числа " )
t = InрutВох ( " Введите значение Т ", " Ввод 4 числа " )
у = 9 * х 2 + Si n(x) * Sin(x) * Sqr t(a + Ь)
л

z = (х t ) л (1 / 3) * (а *
л
3 - (х * х) / х
л

(1 * 2))
MsgBox ( " Значение У = " & у, vЫnformation ,

" Пол учаем ответ " )

MsgBox ( " З н аче н ие Z = " & z, vЫnformation ,

" Получаем ответ " )

End Sub
End Class

Результаты работы программы представлены на рис. 51, 52.

96
Получаем ответ х

О 3 н1а ч е~н и е V = 40,rБ792

c:.:oc.J
Рис. 51. Полученное з н а чение У

Получаем ответ х

О Зн~ачение Z = 15,40789

ок

Рис. 52. Полученное значение Z

Задача 2. Найдите емкость конденсатора с, если известны пло­


щадь пластин s и расстояние между ними L. Следует учесть, что
в конденсатор вставлена металлическая пластина толщиной d, па­
раллельная его обкладкам:

С= EoS
L-d '

где С - емкость конденсатора; Е0 - электрическая постоянная,


Е0 = 8,85 · 10- 12 Ф·м- 1 .
Разработка алгоритма решения задачи представлена на рис. 53.

Листинг программы с использованием функций lnputBox


и MsgBox
PuЬlic Class Forml
Private Sub Forml Load(ByVal sender As System.Ob-
ject, ByVal е As System.EventArgs) Handles MyBase.Load
Dim s , L, d , Е О , С As Single

97
Н ачало

S, L, D

ЕО = 8.85Е- 1 2

С = ( ЕО * S) / (L - D)

Конец

Рис. 53. Алгоритм решения за дачи

s = Inрu t Вох( " Введи т е , п ожалуйста , вели ч ину


п л оща д и плас т и н", " Ввод велич ины п л ощад и пласти н" )
L = Inрu t Вох( " Введи т е , п ожалуйста , расс т оя н ие
между пласти н ами ", " Ввод расстояния между п л астинами " )
d = I nрutВох( " Вве дите , пожалуйс т а, толщи н у
п лас тины " , " В в од толщины пл ас т ин " )
ЕО = О . 00000000000885 ' или ЕО 8 . 85Е - 1 2
С = ( Е О * s) / (L - d)
МsgВох( " Емкос т ь конденса т ора " & С, vЫn -
f o r ma ti on, " О тв е т " )
Ме . Cl ose ()
End Sub
End Class

Контрольные вопросы и задания


1. Как записываются алгоритмические блоки? Каково их назначение?
2. Какие операторы применяются для ввода-вывода данных в языке
Visual Basic? Каков си~-rтаксис этих операторов?

98
3. Назовите основные функции преобразования типов. Поясиите их ~-rа­
значение.

4. П еречислите основные элементы управления, используемые при со­


здааии приложеиий.
5. Назовите основные свойства элементов управления Button, Label,
TextBox.
6. Каким образом создаются главное и коитекстиое ме1по, строка со ­
стояI-Iия? Покажите практически.

Задачи для самостоятельного решения


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

2. Разработайте алгоритм и программу, в которой подсчитывается коли­


чество часов минут и секунд в заданном числе суток:

cl1 = 245·
'
min = 60ch;
sec= 60 min.
3. Разработайте алгоритм и программу, в которой вычисляется площадь
треугольиика по трем сторонам. Вычисление проводится по формуле
Герона:

S = ~р(р - а)(р - Ь)(р - с),


где S- площадь треугольника; р =(а+ Ь + с)/2 - полупериметр; а, Ь,
с - длины сторон треугольника.

4. Разработайте алгоритм и программу решения системы линейных


ураваеаий

по правилу Крамера:

х = С1Ь2-С2Ь1.
atb2 - a2b1
5. Разработайте алгоритм и программу определения объемов цилиндра
и конуса с радиусом основаиия R = 5 см и высотой h = 8 см:

99
Vц = hnR 2'

~< = ~ hnR2 .
6. Разработайте алгоритм и программу определения общего сопротив ­
ления электрической цепи, если имеются три р езистора R 1, R2, R3:

1 1 1 1
- =- +- +-
R Ri R2 Rз
Глава 4
РАЗВЕТВЛЯЮЩИЙСЯ АЛГОРИТМ

До сих пор мы учились вводить данные и присваивать значения


переменным. Теперь нужно научиться организовывать различные
потоки выполнения приложения в зависимости от ситуации, ко­

торая складывается в ходе работы программы.


Алгоритм называется разветвляющимся, если последователь­
ность выполнения его шагов изменяется в зависимости от выпол­

нения некоторых условий. Условие - это логическое выражение,


которое МО)кет принимать одно из двух значений: ~дА» - если
условие верно (истинно), и ~НЕТ» - если условие неверно (ло)кно ).
Разветвляющийся алгоритм можно реализовать в программах
с помощью простого, сокращенного, составного операторов и кон ­

струкции многозначных ветвлений. Рассмотрим их более подробно.

4.1. ПРОСТОЙ УСЛОВНЫЙ ОПЕРАТОР


Общий вид в алгоритме конструкции простого условного опера­
тора представлен на рис. 54.

Нет Да

выражение

Рис . 54. Блок-схема простого условного оператора

10 1
Синтаксис простого условного оператора следующий:

If Логическое выражение Then


Р1
Else
Р2
End If

где If (если), Then (тогда), Else (иначе), End If - зарезервиро ­


ванные слова, а Р 1, Р 2 - операторы.
Простой условный оператор работает по следующему алгоритму.
Сначала вычисляется логическое выраж:ение. Если результат
есть True (истина), то выполняется оператор Р1 , а оператор Р2
пропускается. Если результат есть False (ложь), то выполняется
оператор Р2, а оператор Р1 пропускается.

4.2. СОКРАЩЕННЫЙ УСЛОВНЫЙ ОПЕРАТОР

Если необходимо выполнить некоторое действие только при


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

сокращенный условный оператор.


Общий вид в алгоритме конструкции сокращенного условного
оператора представлен на рис. 55.

Нет Да

выражение

Рис. 55. Блок-схема сокращенно го условного о п ератора

102
Синтаксис сокращенного условного оператора следующий:

If Логическое выра:>кение Then


Р1
End If

4.3. СОСТАВНОЙ УСЛОВНЫЙ ОПЕРАТОР


Если при некотором условии нужно выполнить определенную
последовательность операторов, то их объединяют в один со­
ставной оператор. Общий вид в алгоритме конструкции составного
условного оператора представлен на рис. 56.

Нет Да

выражение

Рис. 56. Блок-схема составного условного оператора

103
Синтаксис составного условного оператора следующий:

If Логическое выра:>кение Then


Р1
Р2

м11
End If
где If, Then, Else, End If - зарезервированные слова, а Р 1, Р 2, Р n' М 1 ,
М 2 , Mn - операторы.

4.4. МНОГОЗНАЧНЫЕ ВЕТВЛЕНИЯ

Очень часто приходится выбирать путь решения задачи


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

Общий вид в алгоритме конструкции многозначных ветвлений


представлен на рис. 57.

Нет

Нет Да

Нет Да

Рис. 57. Блок-схема конструкции многозначных ветвлений

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

If Логическое выражение1 Then


Р1
Elself Логическое выражение2 Then
Р2
Elself Логическое выражениеЗ Then
Рз
Else

End If

где If, Тhen, Elself, End If - зарезервированные слова, а Р 1, Р 2, Р 3,


Р4 - операторы.
Алгоритм работы такой конструкции следующий: если Логи­
ческое выражение! истинно, то выполняется оператор или блок
операторов, следующих за конструкцией Then, в противном случае
этот блок пропускается. Если логическое выражение, следующее
за оператором If, ложно, то анализируется логическое выражение,
следующее за оператором Elself. Если оно истинно, то выполняется
оператор или блок операторов, следующих за оператором Then,
а остальные операторы пропускаются. Операторы, следующие
за последним Else, выполняются лишь в том случае, если ложны все
логические выражения в конструкциях If. Любая встретившаяся
часть Else принадлежит ближайшей к ней части Then условного
оператора. Условные операторы If в такой конструкции называ­
ются вложеннъ1ми.

4.5. АЛГОРИТМЫ ПОИСКА МАКСИМАЛЬНОГО


И МИНИМАЛЬНОГО ЭЛЕМЕНТОВ

Рассмотр им алгоритмы нахож:дения максимального и мини ­


мального значений, которые будут востребованы при дальнейшем
изучении языка программирования Microsoft Visual Basic.
Задача 1. Найдите максимальное из двух чисел. Разработка ал­
горитма решения задачи представлена на рис. 58.

105
Начало

а, Ь

Нет Да

max = b inax = а

max

Koi-reц

Рис. 58. Алгоритм нахождения максимального из двух ч исел

Задача 2. Найдите минимальное из трех чисел. Алгоритм на­


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

Нет Да

Нет Да

ffilll = C m1n = а
Нет Да

min = Ь
ffilll = с

Рис. 59. Алгоритм нахождения минимального из трех ч исел (первый способ)

106
Второй способ, представленный на рис. 60, более простой и на­
глядный. Сравнив два числа ме)кду собой и определив минимальное
из них, каждое последующее число будем сравнивать с тем, которое
уже находится в ячейке min, и осуществлять перезапись ячейки
оператором присваивания.

Нет Да

inin = Ь m1n = а

Нет Да

m1n = с

Рис. 60. Алгоритм нахождения минимального из трех чисел (второй способ)

Фрагмент разработки алгоритма решения задачи (третий


способ) представлен на рис. 61.

m111 = а

Нет Да

min = Ь

Нет Да

m1n =с

Рис. 61. Алгоритм нахождения минимального из трех чисел (третий способ)

107
Задача 3. Найдите максимальное из четырех чисел.

PuЬlic Class Forml


Private SuЬ Forml_Activated(ByVal sender As Object,
ByVal е As System.EventArgs) Handles Me.Activated
Dim а, Ь, с, d , max As In t ege r
а = InputBox ( " Введите , пожалуйста , значение а

"' " Ввод числ а " )

Ь = Inpu tBox ( " Введите , пожалуй с т а , з н а чение Ь

"' " Ввод числа " )

с = InputBox ( " Введите , пожалуйста , значение с

"' " Ввод числ а " )

d = Inpu tBox ( " Введите, пожалуйс т а , з н а чение d


"' " Ввод числа " )

max = а
If Ь > max Then
max Ь
End If
If с > max Then
max = с
End If
If d > max Then
max = d
End I f
MsgBox ( " Максимальное из че тырех чисел " &
max , MsgBoxStyle . Inf ormation , " Ответ " )
Ме . Close ()
End Sub
End Class

На основе рассмотренных алгоритмов решим следующую за­


дачу.

Задача 4. Вычислите значение у, если дана следующая функция:

min (а1 , а2 , аз), если - 1 <х< 1


у= max {Ь1, Ь2, min {с 1 , с2}}, если х> 1
1, есл и х <- 1

Алгоритм решения задачи представлен на рис. 62.

108
Начало

Да

min = с1

уЗ = 1 min = а1

min = с2

mах = Ы
min = а2

шах= Ь2
min =аз

у2 = min

max = 111ш

у1 = max

Конец

Рис. 62. Алгоритм решения задачи

Листинг программы

PuЬlic Class Forml


Private SuЬ Forml Activated(ByVal sender As Object, ByVal
е As System.EventArgs) Handles Me.Activated

109
Dim a l, а2 , аЗ , Ы , Ь2 , c l, с2 , yl , у2 , уЗ ,
max , min , х As DouЬle
a l - In рutВох( " Введите , пожалуйста , значение
a l ", " Ввод ч и сл а " )
а2 - I nputBox ( " Введи т е, пожалуйста , з на чение а2
" , " Ввод числа " )
аЗ - InрutВох ( " Введите , пожалуйста , значение аЗ
" , " Ввод числа " )
Ы - I nputBox ( " Введит е, пожалуйста , з начение Ы
" , " В:вод числа " )
Ь2 - InputBox ( " Введите , пожалуйста , значение Ь2
" , " Ввод числа " )
c l - I nрutВох( " Введит е, пожалуйста , з начение c l
" , " Ввод числа" )
с2 - I nputBox ( " Введит е, пожалуйста , з начение с2
" , " Ввод числа " )
х - InputBox ( " Введите значение х х< = - 1 - З
ветвь , x>=l - 2 ве т вь, -1 <x<l - 1 ветвь ", "В вод
числа " )
If х >= 1 Then
min = c l
I f с2 < min Then
min = с2
End I f
max = Ы
If Ь2 > max Then
max Ь2
End I f
If min > max Then
max min
End I f
yl = max
MsgBox ( " Тес т 2 ветви ", MsgBox-
Style . Information , " Ответ " )
MsgBox ( "yl " & yl , MsgBoxSt у le .
Inf ormati on , " От вет " )
Els e i f (-l<x) and (x< l )Then
min - al
If а2 < min Then
min а2
End If
I f аз < min Then
min аз

11 о
End If
у2 = min
MsgBox ( " Тест 1 ветви ", MsgBox-
St yl e . I nformati on , " О т вет " )
MsgBox (" у2 - " & у2 , MsgBox-
St yl e . I nformati on , " О т вет " )
El se
уЗ = 1
MsgBox ( " Т ест 3 ветви ", MsgBoxS t yl e . I n -
f o r ma tion , " Отве т " )
MsgBox ( " уЗ - " & уЗ , MsgBoxS t yle . I n f o r -
mation , " Ответ " )
End I f
Ме . Close ()
End Sub
End Class

УПРАЖНЕНИЯ

Вопрос 1. Каким будет значение переменной S после выпол­


нения фрагмента программы:

n= 2.5
f = 0.5
d = True
If n < f Then
s = 12
End If
If f >= n Then
s = 28
End If
If d Then
s = 39
End If

Ответ. В этом упражнении значение переменной s равно 39. Рас­


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

в ячейкеd хранится значение True (Истина), поэтому выполняется


оператор s = 39.

111
Вопрос 2. Каким будет значение переменной j после выпол­
нения условного оператора?
Исходные значения переменных:

w = 3; р = 5; j = 3.5;
If (j < р) And (j > w) Then
j =j + 0.5
j =j + 10
Else
j = 11
End If

Ответ. Рассуж:дать нуж:но следующим образом: подставив зна-


чения переменны х w, р,
.
J и пров ерив логическое выражение, по-

лучаем, что его значение есть True (Истина). Следовательно, вы­


полняется оператор j = j + 0.5, а затем оператор j = j + 10. Ответ
в примере: значение переменной j = 14.

Вопрос 3. Каким будет значение переменной j после выпол­


нения условного оператора?
Исходные данные: j = 3; k = 5; m = 8;

If j <= k Then
If m > k Then
j=k \ 5
j = 20 Mod 2
Else
j = 10
End If
End If

Ответ. Подставив значения переменных k, rn, j и проверив


оба логических выражения, получаем, что их значения есть True
(Истина). Следовательно, выполняется оператор j = k \ 5, а затем
j = 20 Mod 2. Ответ в упражнении: значение переменной j равно О.

Вопрос 4. Каким будет значение переменной j после выпол­


нения условного оператора If?
Исходные данные: j = 6; k = 6;

If j > k Then
j =j + 2
j =j + 3
11 2
Else
j=k-3
j =j + 4
End If

Ответ. Подставив значения переменных k и j, проверив логи ­


ческое выраж:ение, получаем, что его значение есть False ( Ло)КЬ ).
Следовательно, выполняются операторы j = k- З и j = j + 4. Ответ
в упражнении: значение переменной j = 7.

Вопрос 5. Каким будет значение переменной j после выпол­


нения условного оператора?
Исходные данные: w = 3; р = 5; j = 3.5;

If (j < р) and (j > vv) Then


j = j + 0.5
j = j + 12
Else
j = 11
End If

Ответ. Подставив значения переменных, получим, что два


простых условия (j < р) и (j > w) оказываются истинными, сле­
довательно, и все логическое выражение имеет значение True.
Выполняются два оператора в ветви Then. После их выполнения
в ячейке j будет число 16.

Вопрос 6. Каким будет значение переменной j после выпол­


нения условного оператора?
Исходные значения переменных: j = 7; k = 7; f = 10;

If j >= k Then
If f <= k Then
k = 30 \ 5
j = (j Mod 2) * k
Else
j =1
j=O
End If
End If

Ответ. П одставив значения переменных в первое логическое


выражение, получим результат True (Истина). П одставив зна-

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

результат: False (Ло)кь), следовательно, выполняются операторы


в ветви Else. Таким образом, после выполнения условного опера­
тора в ячейке j будет находиться О.

Вопрос 7. Каким будет значение переменной f после выпол­


нения фрагмента программы?
Исходные данные: х = 55; у= 5Е1; d = False;

If d Тhen
f =х / 2
End If
If х <у Then
f =х
End If
If х >у Then
f = 2.9
End If

Ответ. Проверив первое логическое выражение, получим, что


результат: Ложь - в ячейке d хранится значение False. Поэтому
оператор f =х / 2 не выполняется. Для того чтобы определить,
истинно или лож:но второе логическое выра)кение, надо з нать, что

число 5Е1 записано в форме с плавающей точкой и равно 50. Сле­


довательно, второе логическое выраж:ение ложно, и оператор f = х
не выполняется. Проверив третье логическое выра)кение, убежда­
емся в том, что оно истинно, так как 55 > 50. Таким образом, после
выполнения условного оператора в ячейке f будет 2.9.

Вопрос 8. Какое количество ошибок в следующем фрагменте


программы?

Private Sub Buttoni_Click(ByVal sender As Systern.Object,


ByVal е As Systern.EventArgs) Handles Button1.Click
Dirn х As Byte
Dirn а, s As Boolean
х = 0.5
s = 0.4
а= True
If х < 5 Тhen
s=5
End Sub

11 4
Ответ. П ервая ошибка допущена в операторе х = 0.5. Пе ­
ременная х описана как ц елочислен н ая п еремен н ая, а с пр ава

от оператора присваивания находится дробное число 0.5, что не­


допустимо. Вторая ошибка в операторе s = 0.4. Переменная s опи­
сан а как логическая, а ло гич еские п ереме нны е могут прини мать

только два значения: Истина или Ложь. Третья ошибка допущена


в операторе s = 5. Переменная s описана как логическая, число 5-
целое число. Четвертая ошибка: в условном операторе пропущен
оператор End If. Таким образом, в данном фрагменте программы
четыре ошибки.

Вопрос 9. Каким будет значение переменной j после выпол­


нения фрагмента программы?
Исходные значения переменных: j = 1О; k = 1О;

If j > k Then
j =k - 3
Else
k=k-3
j =k-3
End If

Ответ. Проверив логическое выражение, убе)кдаемся в том, что


оно ложно. Следовательно, выполняются операторы в ветви Else.
После выполнения оператора k =k - З в ячейке k оказывается зна­
чение 7, а после выполнения оператора j =k - З в ячейке j нахо ­
дится число 4. Ответ в упражнении: j = 4.

ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

Задача 1. Вычислите значение функции у:

sinx, если х >= 1


у=
{ cosx, если х < 1

Разработка алгоритма решения задачи представлена на рис. 63.

115
Начало

Нет Да

у = Cos ( х) у= Sin (х)

Конец

Рис. 63. Алгоритм решения за дачи

Листинг программы с использованием функций lnputBox


и MsgBox
Impo r ts System . Ma t h
PuЬlic Class Forml
Private Sub Forml_Load(ByVal sender As System.Ob-
ject, ByVal е As System.EventArgs) Handles MyBase.Load
Dim х, у As Single
х = InрutВох( " Введите, пожалуйста, значение х " ,
" Ввод значения х" )
If х >= 1 Then
у - Sin (х)
Else
у = Cos (х)
End If
МsgВох( " Значение функции у - " & у, vЫnfor ­
mation , " Ответ " )
Ме . Close ()
End Sub
End Class

11 6
Задача 2. Вычислите значение функции у:

sinx, если х <О

у = cos х, если О < х <1


tgx, если х > 1

Разработка алгоритма решения задачи представлена на рис. 64.

Начало

Нет Да

у= Sin (х)
Нет Да

у = Cos ( х) у = Sin(x) / Cos (х)

Конец

Рис. 64. Алгоритм решения задачи

Листинг программы с использованием функций lnputBox


и MsgBox
I mport s Sys t em . Math
PuЬlic Class Forml
Private Sub Forml_Load(ByVal sender As System.Ob-
ject, ByVal е As System.EventArgs) Handles MyBase.Load

117
Dim х, у As Single
х = I nрutВох( " Введите , п ожалуйста , значе ние х ",
" Ввод числа " )
If х < О Then
у Sin (х)
El se i f х > 1 Then
у Sin (х) / Cos (х)
El se
у = Cos (х)
End I f
MsgBox ( " Зна ч ение функции у " & у, vЫn f o r -
mati on , " Ответ " )
Ме . Close ()
End Sub
End Class

Контрольные вопросы и задания


1. Дайте определение разветвляющегося алгоритма.
2. Как записывается простой условный оператор в блок-схемах?
3. Как записывается пр остой условный оператор в п р ограммах?
4. Как работает простой условный оператор?
5. Как записывается сокращенный условный оператор в блок-схемах?
6. Как записывается сокр ащенный условиый операто р в прогр аммах?
7. Как работает сокращеиный услов~-rый оператор ?
8. Как записывается составной условный оператор в блок-схемах?
9. Как записывается составной условный оператор в п р ограммах?
10. Как работает составаой условный оператор?
11. Как записываются многозначные ветвления в блок-схемах?
12. Как записываются многозначные ветвления в программах?
13. Как работает условный оператор If при проверке иескольких условий?
14. Поясиите оптимальные алгор итмы иахождения максимального и ми ­
нимального значений, написав синтаксис операторов .

Задачи для самостоятельного решения


1. Разработайте алгоритм и программу вычисления значения у по фор­
муле

у - { Х, если Х ~ О,
2Х, если Х > О .

2. Разработайте алгоритм и программу, которая суммирует только поло­


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

3. Даны значеиия трех перемеиаых. Напишите последовательиость опе ­


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

11 8
4. Разработайте алгор итм и прогр амму, которая выводит на экраи тр и
типа ответа : ~ вы имеете удовлетвор ит ельную усп еваемость~, ~ вы
имеете хорошую успеваемо сть ~, ~ вы имеете отличную успе ваемо сть ~
в зависимости от введениого пользователем числа.

5. Раз работайт е алгоритм и программу решения следующей задачи :


найти корни квадратного урав нения по формулам

d= Ь 2 - 4ас-,

Х1 =
-b+Jd

-ь-Jd
Х2 =

6. Раз работайт е алгоритм и программу решения следующей задачи .


Опр еделить стоимость железнодорожного билета туда и обратно,
если извесп-rы расстояиие до пункта ~-rаз~-rачения и длительность пре ­

бывания в нем, учитывая, что если расстоя~-rие превышает 1000 км,


а длительность пребывания превышает 7 дней, то железнодорожная
компания дает скидку 30%.
7. Разработайте алго ритм и прогр амму решения следующей задачи.
Даны три числа: а, Ь, с. Проверьте, образуют ли они строго возрас­
тающую (а < Ь < с), строго уб ывающую (а > Ь > с) последователь­
ность или I-Ie выполняется ии одно из этих двух условий.
8. Разработайте алго ритм и прогр амму решения следующей задачи :
найти минимальное из трех чисел.
9. Разработайте алгоритм и программу решения следующей задачи: вы­
числить зиачеиие функции у:

О, если х < О,
у= х, если О ::; х ::; 1,

1, если х > 1.
10. Раз работайт е алгоритм и программу решения следующей задачи .
Пользователь вводит два числ а. Меиьшее из введе~-rных чисел заме ­
няется числом О, а в случае их равенства - числом 100.
Глава 5
ОПЕРАТОР ВЫБОРА SELECT CASE

Оператор выбора Select Case позволяет выбрать одно из не­


скольких возможных продолжений программы. Структура опера­
тора выбора Select Case гораздо лучше воспринимается, чем экви­
валентная ей структура If... Then ... Else. Она также гораздо более
эффективна в случае трех и более возможных ветвлений в прог­
рамме (конструкция многозначных ветвлений). Тем не менее если
вам необходимо выполнить несколько операций сравнения при
использовании в программе небольшого количества переменных,
тогда, вероятно, удобнее использовать ранее изученные условные
операторы.

Общий вид оператора Select Case в алгоритме можно предста­


вить следующим образом (рис. 65). Здесь приведены обозначения:
М 1 , М 2 , Mn - метки, Р 1 , Р 2 , Pn - операторы.

Р1 о о о о

Рис. 65. Общий вид оператора Select Case

В общем виде синтаксис оператора Select Case записывается


следующим образом:

Select Case Ключ выбора


Case Метка М 1
Оператор Р 1
Case Метка М 2
Оператор Р 2

Case Метка М 11
Оператор Pn
End Select

120
Следовательно, мож:но говорить о том, что оператор Select Case
передает управление тому оператору Р, с одной из меток которого
совпало значение переключателя ( Ключа выбора).
Язык программирования Microsoft Visual Basic позволяет про ­
граммисту приме нять опера ции сравнения. В качестве оп ераций
сравнения используются операторы=,<>,<=,>=,<, >. Чтобы при­
менять о п ерации срав н ения, нужно включить в запись оператора

ключевые слова Is или То, которые задают диапазон значений.


Ниже приведен пример, с помощью которого можно проана­
лизировать возраст человека от 1 года до 60 лет и выдать соответ­
ствующее сообщение. Если человеку больше 60 лет, то выдается
сообщение «Вы на заслуженном отдыхе~.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System .
Object, ByVal е As System . EventArgs) Handles Buttonl .
Click
Dim vozrast As Byte - InputBox ( " Введите
возраст " , "П роект " )

Select Case vozrast


Case Is <= 5
Labell . Text - " Ты ходишь в детский

сад "

Case 6 То 16
Labell . Text - " Ты учишься в школе "

Case 17 То 21
Labell . Text - " Ты учишься в инс титуте "

Case 22 То 60
Labell . Text - " Вы рабо таете "

Case Else
Labell . Text - " Вы на заслуженном

о т дыхе "

End Select
End Sub
End Class

121
УПРАЖНЕНИЯ

Вопрос 1. Какое значение находится в ячейке k после выпол­


нения фрагмента программы?

k = 14
Select Case k
Case 5
k=9
Case 10
k = 10
Case 14
k = k + 100
Case 25
k = k + 50
End Select
k = k + 50

Ответ. После выполнения оператора k = 14 в ячейку k, которая


является ключом выбора, заносится значение 14. Это значение
ключа совпадает с меткой 14, выполняется оператор k = k + 100
и в ячейку k заносится число 114. После этого управление переда­
ется на следующий после End Select оператор: k = k + 50. Следова­
тельно, ответ в примере: 164.

Вопрос 2. Какое значение находится в ячейке f после выпол-


нения оператора Select Case?
f = 14
f=f \ 2
Select Case f
Case О
f =9
Case 14
f = 10
Case 7
f = f + 100
Case 28
f = f + 50
End Select

Ответ. В ячейке f хранится число 14, поэтому результат опе­


рации 14 \ 2 равен 7. Переход осуществляется на метку 7, выпол­
няется оператор f = f + 100.

122
Следовательно, в ячейке f после выполнения оператора Select
Case находится число 107.

Вопрос 3. Какое значение будет в ячейке z после выполнения


оператора Select Case?

s = 10
k = (s \ 2) Mod 3
Select Case k
Case 3 То 5
z = k + 10
Case 1То2
z = k + 20
Case Is > 10
z = k + 15
Case Else
z = k + 25
End Select

Ответ. Подставив число 10 в выражение s \ 2, получаем число 5.


Р езультат оп ерации 5 Mod 3 будет равен 2. Таким образом,
в ячейке k находится число 2. Осуществляется переход на метку 2
в операторе Select Case. Выполняется оператор z = k + 20 . Следо ­
вательно, в ячейке z после выполнения оператора Select Case будет
находиться число 22.

Вопрос 4. Какое значение будет находиться в ячейке р после


выполнения фрагмента программы?

j = 3 Е1
Select Case j
Case 3 То 10
р =j + 1
Case 11То1 5
р =j +2
Case 16 То 30
р =j +3
End Select

Ответ. Оператор j = 3Е1 заносит в ячейку число


30. В опера­
j
торе Select Case осуществляется переход на диапазон 16 То 30.
Выполняется соответствующий оператор р = j + 3. Следовательно,
в ячейке р будет находиться значение, равное 33.

123
ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

В следующем проекте рассмотрим, как используется структура


Select Case дляобработки входных значений из поля со списком.
Условие задачи ясно из рис. 66.

а Программа приветствий D х

Выберите страну

Англия
Германия
Испания
Италия

Россия

Привет. программист!

Рис. 66. Внешний в ид формы «Междун арод н ая программа приветствий»

Список стран заполняется программным образом в обработчике


события Load путем применения метода Add по отношению к кол­
лекции элементов компонента ListBox1. Свойство .Selectedlndex
обеспечивает выбор ну)кного элемента списка (список нумеруется
с нуля) и вывод его в элемент управления Label.

PuЬlic Class Forml


Private Sub Forml_Load(ByVal sender As System . Ob-
ject, ByVal е As System.EventArgs) Handles MyBase.Load
Li s tBox 1 . I tems . Add ("А нглия ")
ListBoxl .It ems . Add( " Гepмaния " )
Li s tBox 1 . I t ems . Add ( " Испания " )
Li stBox l .Items.Add("И т aлия ")
ListBoxl .It ems . Add( " Poccия " )
End Sub

Private Sub ListBoxl_SelectedindexChanged(ByVal


sender As System.Object, ByVal е As System.EventArgs)
Handles Listвoxl . SelectedindexChanged
Label2 . Text = ListBoxl . Text
Se l ect Case Lis tBoxl. Select edindex

124
Case о
L abelЗ . Text - "He l lo , programme r"
Case 1
LabelЗ . Text - "Hallo , Programmierer "
Case 2
LabelЗ . Text - "Hola , programador "
Case 3
LabelЗ . Text - "Ciao, programmatori "
Case 4
LabelЗ . Text - " Привет , программист! "
End Select
End Sub
End Class

Контрольные вопросы и задания


1. Как записывается оператор выбора Select Case в блок-схемах?
2. Как записывается оператор выбора Select Case в программах?
3. Расскажите о работе оператора выбора Select Case.
4. Выполните сравнительный анализ работы конструкции многозначных
ветвлений и оператора выбора Select Case.
5. Приведите пример использовааия операций сраваеаия в операторе
Select Case.

Задачи для самостоятел ьного решения


1. Разработайте программу, которая бы по введенному номеру времени
года (1 - зима, 2- вeci-ra, 3- лето, 4 - ocei-rь ) выдавала соответ ­
ствующие этому времеаи года месяцы, количество даей в каждом
из месяцев.

2. Разработайте программу, которая бы по введеааому аомеру едиаицы


измереиия (1 - дециметр, 2- километр, 3- метр, 4- ми ллиметр,
5- сантиметр ) и длине отрезка L выдавала бы соответствующее зна­
чение длины отрезка в метрах.

3. Разработайте программу, которая по данному натуральному числу


от 1 до 12 ( номеру месяца) выдает все приходящиеся на этот месяц
празд~-rичI-Iые дии ( например, если введе~-rо числ о 1, то: 1 января -
Новый год, 7 января - Рождество ) .
4. Разработайте программу, позволяющую получить словесное описание
школьных отметок (1 - плохо, 2- неудовлетворительно, 3- удовле ­
творительно, 4- хорошо, 5- отлично) .
5. И меется пронумерованный список деталей: 1) шуруп; 2) винт;
3) гвоздь; 4) гайка; 5) болт. Разработайте программу, которая по но­
меру детали выводит на экран ее название .

6. Разработайте программу, которая по введенным номеру единицы из­


мерения (1 - миллиграмм, 2- грамм, 3- килограмм, 4- центнер,

125
5- тонна) и массе М выводит соответствующее зi-raчei-rиe массы в ки ­
лограммах.

7. Разработайте программу, которая по номеру месяца выдает название


следующего за иим месяца (при т = 1 получаем февраль, 4 - май).
8. Разработайте программу, которая выдает I-Ia экраи словесиое пред ­
ставление числа в диапазоне от О до 9 (О - ноль, 1- единица и т .д . ) .
9. С клавиатуры вводится любой символ. Разработайте программу,
которая выводит на экран тип символа, различая случаи: цифра,
строчная буква, прописная буква, специальаый символ.
10. Разработайте программу, которая по введенному пользователем но­
меру дая недели выводит аа экраи его назвааие.

11. Программа для целого числа от 1 до 50, введенного пользователем,


выводит на экран фразу «Мне S лет», где S - введенное пользова­
телем число, при этом в нужных случаях слово «Л ЕТ» заменяется
словом «ГОД» или «ГОДА».
12. Разработайте программу, которая анализирует студента по его
оценкам и выводит на экран одно из сообщений: «Вы учитесь плохо»,
« Вы учитесь посредственно» и т .д.
13. Разработайте программу, которая после введеиаого с клавиатуры
числа (в диапазоне от 1 до 100), обозначающего денежную единицу,
дописывает слово «рубль» в правильной форме . Например, 12 рублей,
21 рубль и т.д.
14. Разработайте программу, которая после введеи~-rого с клавиатуры
числа (в диапазоне от 1 до 100), обозначающего денежную единицу,
дописывает слово «копейка» в правильной форме . Н апример, 5 ко­
пеек, 21 копейка и т.д.
Глава 6
ЦИКЛИЧЕСКИЙ АЛГОРИТМ

Очень часто в программах нужно выполнить определенные опе­


раторы несколько раз. Нелогично записывать эту последователь­
ность действий 20 или 50 раз подряд. В этих случаях организуют
циклические вычисления. Алгоритм называется циклическим , если
определенная последовательность шагов выполняется несколько

раз в зависимости от заданной величины, которая называется па­


раметром цикла. Цикл заканчивается, когда параметр принимает
определенное значение. Для организации циклов с известным ко­
личеством повторений в языке Visual Basic используется оператор
For.

6.1. ОПЕРАТОР ЦИКЛА FOR


Общий вид в алгоритме оператора цикла For представлен
на рис. 67.

Рис. 67. Общий вид оператора цикла For

127
Синтаксис оператора цикла For... Next следующий:

For i = N1To N 2 [Step h]

Р }
1
Тело цикла
pn
Next

где For (для), То (до), Step (шаг), Next (следующий) - служебные


слова Visual Basic; Р 1 , Pn - операторы, N1, N2 - границы, в которых
изменяется параметр цикла
.1.
Step является
необязательным параметром. В данном примере
на это указывают квадратные скобки, которые при записи опера­
тора следует опустить. Если он отсутствует в программе, то зна-
чение параметра цикла
.
1 увеличивается на единицу по умолчан ию.

Параметр Step может быть любым действительным числом, как


целым, так и дробным, как положительным, так и отрицательным.
Работа оператора цикла For... Next заключается в следующем.
При первом вхождении в цикл параметр цикла i принимает зна­
чение, равное величине ниж:ней границы N 1, и выполняется опе ­
ратор (или операторы) в теле цикла. Затем значение параметра
увеличивается на величину шага и вновь выполняется тело цикла.

Подобные действия будут повторяться до тех пор, пока значение


параметра цикла не станет больше величины N 2, после чего осуще ­
ствляется выход из цикла.

Задача 1. Найдите сумму целых чисел от 1 до 50. Разработка


алгоритма решения задачи представлена на рис. 68.

Начало

s=O

i = 1 '50

s=s+i

Коиец

Рис. 68. Алгоритм решения задачи

128
При первом вхождении в цикл параметр цикла примет значение,
равное единице, и выполнится оператор sum=sum+i. Затем пара­
метр i будет последовательно увеличиваться на величину шага, ко­
торый равен единице, и всякий раз в цикле будет выполняться опе ­
ратор sum=sum+i. Счетчик, как иногда называют параметр цикла,
остановится на значении, равном 50, и произойдет выход из цикла
с последующим выводом ответа.

Несмотря на то, что переменные в VB инициализируются с ну­


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

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim s, i As Integer
s = о
For i = 1 То 50
s = s + l
Next
Labe l 1. Text = s
End Sub
End Class

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


Сумма целых чисел= 1275.

Сложный циклический процесс. Вложенные циклы. Если


телом цикла является циклическая структура, то такие циклы на­

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


называют внешним, а цикл, содер)кащийся в теле другого цикла,
называют внутренним. Общий вид алгоритма сложного цикличе­
ского процесса представлен на рис. 69.
Синтаксис операторов сложного цикла следующий:

For i = N 1 То N 2
For j = М 1 То М2
Р1
тело цикла

pll
Next
Next

129
Рис. 69. Общий вид алгоритма сложного циклического процесса

При первом вхо:>кдении в цикл параметр внешнего цикла i при­


нимает значение, равное N 1. Управление передается во внутренний
цикл, в котором параметр цикла j принимает значение, равное М 1 ,
и выполняется оператор (операторы), который записан во внут­
реннем цикле. Затем параметр внутреннего цикла j увеличивается
на единицу и вновь выполняется тело цикла. Операторы Р1 , ... ,
Р n будут выполняться до тех пор, пока параметр цикла j не станет
больше величины М 2 . Затем параметр внешнего цикла i увеличива­
ется на единицу и вновь начинает свою работу внутренний цикл,
в котором параметр цикла j будет изменяться от М 1 до М 2 и при
каждом прохождении цикла будут выполняться операторы Р 1, ... ,

Р n· Внешний цикл закончит свою работу, когда параметр цикла i


станет больше величины N 2 .

Задача 2. Вывести таблицу умножения в окно Вывод консоль­


ного прилож:ения. В программе будет использован вывод ответа
оператором Debug.WriteLine, который мо:>кно использовать в кон­
сольном ре:>киме.

130
Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System .
Object , ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim i , j As Inte ge r
For i 1= То 5
For j = 1 То 5
Debug. Wri teLi ne (i & "* " & J & "-" & l * j)
Ne xt
Debug . Writ e Line ("")
Next
End SuЬ
End Class

Результат работы программы представлен на рис. 70.


• 11 х

Показать еыход1-1ы• даииы• из: Отладка


'"Wi ndowsдppl . ехе " (CLR v4 . е . 30319: WindowsAppl . ехе). Эаrружено " С: \Windows\Microsoft . Net\a ssemЫy\GAC _MSIL\System.Xml \v4 . е_4. е . e . e_b77aScSбl93 ..,
"wi ndowsдppl . ехе " (CLR v4 . е . 3&319 : Wind owsдppl . ехе) . За r ружено "С: \Windows\M1crosoft . Net\il ssemЫy\GAc_мstL\Accessibi 1 ity\v4 . е_4. е . e . e_ьeзfSf7f
·windowsAppl.txe" (CLR v4 . е. 30319: WindowsAppl . ехе). загружено " С: \Windows\Microsoft. Net\ass embly\GAC_МSIL\System.Runtiм. Reмot1ng\v4 .е_4 .0.0 . в
1•1=1

--- 8Ы80А lllliiiiiiiiiiiiiiiiiiiiiiiiiillll•---------------"


Рис. 70. Результат работы про граммы

6.2. БАЗОВЫЕ АЛГОРИТМЫ, ИСПОЛЬЗУЕМЫЕ ПРИ


ПРОГРАММИРОВАНИИ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ

Алгоритмы регулярной циклической структуры позволяют опи-


сать широкий класс задач, из которых можно выделить следующие:
1) нахождение суммы значений при заданном условии;
2) нахождение количества значений при заданном условии;
3) нахождение произведения значений при заданном условии;
4) нахождение максимального значения при заданном условии;
5) нахождение минимального значения при заданном условии.
Рассмотрим их подробнее.

Задача 1. В последовательности из пяти чисел, которая вво ­


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

131
Начальное значение переменной sum, в которой будет накапли­
ваться значение суммы, принято обнулять до начала циклического
процесса. В цикле мы осуществляем ввод данных с использованием
функции InputBox, делаем проверку на положительность очеред­
ного введенного числа и, в случае истинности логического выра ­

)Кения, к тому, что было в ячейке sum (первоначально - ноль), при­


бавляем введенное число.
Фрагмент кода программы представлен НИ)Ке.

sum=O
For i = 1 То 5
chislo = lnрutВох("Введите 5 чисел", "Ввод")
If chislo > О Then
sum = sum + chislo
End If
Next

Задача 2. В последовательности из пяти чисел, которая вво­


дится с клавиатуры, найдите количество полож:ительных чисел.
Алгоритм нахождения количества значений заключается в пер­
воначальном обнулении ячейки, в которой будет храниться ре­
зультат, и во включении так называемого счетчика (переменная
kol) оператором kol = kol + 1. Фрагмент кода программы приведен
НИ)Ке:

kol = О
For i = 1 То 5
chislo = lnрutВох("Введите 5 чисел", "Ввод")
If chislo > О Then
kol = kol + 1
End If
Next

Задача 3. В последовательности из пяти чисел, которая вво­


дится с клавиатуры, найдите произведение положительных чисел.
Для того чтобы найти произведение некоторой последователь­
ности чисел, необходимо до выполнения цикла присвоить пере­
менной (назовем ее pr), в которой будет накапливаться искомое
произведение, начальное значение, равное единице. Далее, осуще ­
ствляя ввод данных, будем умножать очередное введенное число
на содержимое переменной pr оператором pr = pr * chislo. Фраг­
мент кода программы приведен ниже.

132
pr = 1
For i = 1 То 5
chislo = lnрutВох("Введите 5 чисел", "Ввод")
If chislo > О Then
pr = pr * chislo
Епd If
Next

Задача 4. В последовательности из пяти чисел, которая вводится


v
с клавиатуры, наидите максимальное из поло)кительных чисел.

Для реализации алгоритма поиска максимального числа мы от­


водим ячейку, например с именем max, в которую предварительно
рекомендуется занести какое-то очень маленькое по значению

число. Например, в случае ввода вещественных чисел, подошло бы


значение 1Е-308. Главное, чтобы такое значение не входило в ди ­
апазон вводимых пользователем чисел. В примере, который при­
веден ниже, достаточно присвоить ячейке max нулевое значение,
поскольку по условию задачи пользователь будет вводить исклю­
чительно поло)кительные числа.

В цикле введенное пользователем число сравнивается с хра­


нящимся в ячейке max значением: если оно больше, то введенное
число заносится в ячейку max оператором max = chislo. Таким
образом, к моменту завершения цикла в ячейке max будет нахо­
диться максимальный элеме нт.

rnax =О
For i = 1 То 5
chislo = lпрutВох( " Введите 5 чисел", " Ввод" )
If chislo > О Тhеп
If chislo > rnax Then
rnax = chislo
Епd If
Епd If
Next

Задача 5. В последовательности из пяти чисел, которая вводится


с клавиатуры, найдите минимальное из положительных чисел .
Алгоритм поиска минимального числа обратен алгоритму по­
иска максимального числа. Считается, что до начала выполнения
циклического процесса переменная, в которой будет находиться ми­
нимальное по значению число, должна содержать какое-то большое
значение, которое не входило бы позж:е в диапазон вводимых поль­
зователем чисел, например 1 ЕЗО8 ( 10 308 ). Однако в рассматри-

133
ваемой задаче можно присвоить ячейке min нулевое значение, так
как пользователь будет вводить только положительные числа.
В цикле введенное пользователем число сравнивается с хра­
нящимся в ячейке min значением: если оно меньше, то введенное
число заносится в ячейку min оператором min chislo. Таким =
образом, к моменту заверш ения цикла в ячейке min будет нахо­
диться минимальный элемент.
Фрагмент кода программы приведен ниже.

rnin = 32767
For i = 1 То 5
chislo = lnрutВох( " Введите 5 чисел", " Ввод" )
If chislo > О Then
If chislo < min Then
min = chislo
End If
End If
Next

УПРАЖНЕНИЯ

Вопрос 1. Сколько раз будет выполнен оператор d = 4 в теле


цикла?

d=4
r = 15
For i = d + 1 То r - 1
d=4
Next

Ответ. Подставив значения переменных d и r , получаем, что па­


раметр цикла i меняется от 5 до 14. При первом вхождении в цикл
параметр цикла примет значение 5, а далее будет автоматически
увеличиваться на 1, пока не достигнет величины верхней границы,
равной 14. Следовательно, оператор выполнится 1О раз.
Вопрос 2. Какое значение будет в ячейке r после выполнения
фрагмента программы?

r= 50
For i = 5 То 1 Step -1
s=1
r =r - s
Next

134
Ответ. При первом вхождении в цикл параметр цикла при мет
значение 5. В заголовке цикла шаг (step) определен как - 1, сле ­
до вательно, параметр цикла при каждом вы полнении тела ц икла

будет уменьшаться на 1. При первом вхождении в цикл пере­


менн ая s принимает зн ачение, р авн ое 1. Вып олня ется оп ератор
r = r - s. После его выполнения в ячейке r будет значение 49. Затем
параметр цикла уменьшится на 1и будет равен 4. Вновь выполня­
ются s = 1 и r = r - s. Выполняя каждый раз операторы цикла и под­
считывая полученные значения, получим в ячейке r значение 45.
Вопрос 3. Определите, какое значение находится в ячейке у
после выполнения цикла с оператором F or.

а= 7
d=5
For i = 1То 3
y=d
у=а+ 2
Next

Ответ. В цикле с оп ератор ом For параметр цикла будет ме ­


няться от 1 до 3. В цикле выполняются два оператора: у = d иу=у+
+ 2. Операторы выполняются 3 раза. Каждый раз при прохождении
цикла в ячейке у будет находиться значение 5 (у = d), а после вы­
полнения оператора у = а+ 2 значение ячейки у будет равно 9. Сле ­
довательно, по сле выпол нения фрагме нта п рограммы в ячейке у
будет находиться значение 9.
Вопрос 4. Определите, какое количество ошибок в следующем
фрагменте программы.

а= 17
d =a
For i = 3 То 1
If а<> d Then
а=а +1
Else
у=а

Next
'у= у+ 2
TextBox1.Text = Str ( у)

135
Ответ. П ервая ошибка в данном фрагменте программы - зна­
чение нижней границы в заголовке цикла должно быть меньше
верхн его значения. В данном пр имере параметр цикла меняется
от 3 до 1. Вторая ошибка - в записи условного оператора. Он
должен заканчиваться оператором End If.
Вопрос 5. Определите, какое значение находится в ячейке у
после выполнения фрагмента программь1.
Исходные значения: а = 1; у = 1.

For i = 2 То 5
а= а + 10
у= а + 10
Next

Ответ. При первом вхождении в цикл параметр цикла примет


значение нижней границы, равное 2. В цикле будут выполняться
два оператора, таким образом, в ячейке а оказывается значение 11,
а после выполнения оператора у = а + 1О в ячейке у будет значение
21. Параметр увеличится на 1 и будет равен 3, выполнится оператор
а = а + 1О и в ячейке а окажется число 21, а в ячейке у - число 31.
Выполнив подобные действия еще 2 раза, получим в ячейке у зна­
чение 51.
Вопрос 6. Определите, какое значение находится в ячейке у
после выполнения фрагмента программы.
Исходные значения: а = 5; d = 5.

For i = 7 То 2 Step - 1
a=d
у= а + 10
Next

Ответ. При первом вхождении в цикл параметр цикла примет


значение 7. В ячейке а оказывается значение 5, а в ячейке у после
выполнения оператора у = а + 10 будет значение 15. В цикле с па­
раметром Step - 1 параметр цикла уменьшится на 1 и будет равен 6,
выполнится оператор а = d и в ячейке а снова окажется число 5.
В ячейке у после выполнения оператора у = а + 10 будет зна­
чение 15. Эти действия будут повторяться до тех пор, пока пара­
метр цикла не достигнет з начения границы, равного 2. Происходит
выход из цикла. В ячейке у находится значение 15.

136
Вопрос 7. Определите, какое значение находится в ячейке у
после выполнения цикла с оператором For.
Исходные значения: а = 5; d = 5.

For i = 2 То 5
у= d + 10
Next
у= а+ 10
y=a*d

Ответ. При п ервом вхождении в цикл параметр цикла при­


нимает значение 2. В цикле будет выполняться только один опе ­
ратор: у= d + 10. В ячейке у оказывается значение 15. Параметр
цикла увеличивается на 1. В ячейке у после выполнения оператора
у= d + 10 будет значение 15. Эти действия будут повторяться до тех
пор, пока параметр, не достигнет значения верхней грани цы, рав­
ного 5. Происходит выход из цикла, и в ячейке у будет значение 15.
Вопрос 8. Определите, какое количество ошибок в следующем
фрагменте программы.

Dim a As Byte
Dim d As Single
а= 5,1
d = 5.1
For i = 2 То 5
у= d + 10
Next
у= а+ 10
TextBox1.Text = Str (у)

Ответ. П ервая и вторая ошибка заключаются в отсутствии опи­


сания переменных i и у. Третья ошибка в операторе а = 5,1. Здесь
в дробном числе в качестве разделителя находится запятая. Таким
образом, в данном фрагменте программы допущено три ошибки.
Вопрос 9. Сколько раз будет выполнен цикл в следующем
фрагменте программы?

11=2
s = 13
For i = s + 2 То n + 4 Step - 1

137
Ответ. Подставив исходные значени.я переменных в заго ­
ловок цикла, видим, что параметр цикла 1 в цикл е с пар аметром

Step - 1 будет меняться от 15 до 6, изменяясь при этом с шагом - 1.


При первом вхож:дении в цикл параметр цикла примет значение 15,
затем он будет равен 14, 13, 12 и т.д., и цикл будет выполняться
до тех пор, пока параметр не станет равным 6. Таким образом, цикл
выполнится 10 раз.

ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

Задача 1. Последовательно вводятся шесть чисел. Определите,


каких среди них больше: поло)кительных или отрицательных.
Разработка алгоритма решения задачи представлена на рис. 71.
Начало

pol = О

otr = О

i = 1, 6

chislo

Нет Да

pol = pol + 1 otr = otr + 1

Нет Да

Положительиых
чисел больше

Нет Да

Отрицательных
чисел больше

Нет Да

Количество
одинаково

Конец

Рис. 71. Алгоритм решения задачи

138
Комментарий. Ячейки pol и otr выполняют роль счетчиков.
Счетчики в цикле будут увеличиваться на единицу операторами
otr = otr + 1 и pol = pol + 1, поэтому для того чтобы конечный ре ­
зультат не был искажен, ячейки предварительно обнуляются опе ­
раторами pol = О и otr = О.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim pol, ch i slo , i, otr As Integer
po l = О ' Сче т чик п оложите льных чи сел
предварительно обнуляется
otr = О ' Сче т чик о т рицательных чисел
предварительно обнуляется
For i = 1 То 5
chis l o = InputBox ( " Введите " & i &
" число " , " Ввод данных " ) ' Ввод исходных данных
If chislo < О Then ' П роверка :
о т р ицате л ьное введенное чис л о или н ет?
ot r = otr + 1 ' С ч ет чик отрица т ельных
чисел увеличивается на единицу

Else
pol = pol + 1 ' Счетчик
пол ожите л ьных чисе л увели чив ается на единицу

End I f
Next 'За вершение цикла
If pol > ot r Then
МsgВох( " По л ожи т ельных чисе л бо ль ше ", Msg-
BoxStyle . I nf or mati on , " О тв ет " )
End I f
If pol < ot r Then
МsgВох ("О т рицательных чисел больше ", Msg-
BoxStyle . I nf or mati on , " О тв ет " )
End I f
If pol = otr Then
МsgВох (" Количество чисел одинаково ", Msg-
BoxStyle . I nf or mati on , " О тв ет " )
End I f
Ме . Cl ose ()
End Sub
End Class

139
Задача 2. Последовательно вводится пять вещественных чисел.
Найдите минимальное из поло)кительных чисел.
Разработка алгоритма решения задачи представлена на рис. 72.

Н ачало

miп = 32767

i= 1 5
'

chislo

Нет Да

Нет Да

miп = chislo

ffilll

Коаец

Рис. 72. Алгоритм решения задачи

140
Комментарий. Для реализации алгоритма поиска минималь -
v •
ного числа мы отводим ячеику rn1n, в которую предварительно

заносим любое большое значение (например, в данной программе


самое большое число из диапазона Short равно +32 767) оператором
rnin = 32767. В цикле введенное пользователем число сравнивается
с хранящимся в ячейке rnin. Если оно меньше, то введенное число
заносится в ячейку rnin оператором rnin = chislo. Таким образом,
к моменту завершения цикла в ячейке rnin будет находиться мини­
мальный элемент.
При решении подобных задач следует учесть, что для их более
корректной работы можно дополнить код программ методами об­
работки исключений, изложенными выше, либо сделать дополни­
тельные проверки условий (в данной задаче можно было бы преду­
смотреть тот случай, когда пользователь вводит все отрицательные
числа).

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim i As Integer
Dim chislo As Single
Dim min As Integer
min = 32767
For i = 1 То 5
chislo = Inpu tBox ("В ведите " & i &
" чи с л о ", " Ввод данных " ) 'Вв од исходных данных
If chislo > О Then ' Проверка
на положительность очередного введенного числа

If chislo < min Then 'П о иск


минимального элемента

min = chislo
End I f
End If
Next ' Завершение цикла
MsgBox ( " Минималь н ое число из положительных
ра вно " & min , Ms gBoxStyle. Information , " Ответ " )
Ме . Close ()
End Sub
End Class

141
Задача 3. Последовательно вводятся N целых чисел. Найдите
максимальное из отрицательных значений.
Разработка алгоритма решения задачи представлена на рис. 73.

Начало

inax = - 32768

i = 1 n
'

chislo

Нет Да

Нет Да

inax = chislo

max

Коиец

Рис. 73. Алгоритм решения задачи

142
Комментарий. Алгоритм п оиска максимально го элеме нта
обратен алгоритму поиска минимального числа. Для реализации
алгоритма п оиска максимального числа отводим ячейку max, в ко­
торую предварительно заносим любое малое отрицательное зна­
чение (например, в данной программе отрицательное число из диа­
пазона Short равно - 32 768), оператором max = - 32768. В цикле вве­
денн ое пользователем число сравнивается с хранящимся в ячейке
max. Если оно больше, то введенное число заносится в ячейку max
оператором max = chislo. Таким образом, к моменту завершения
цикла в ячейке max будет находиться максимальный элемент.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim i , n , chi slo, max As I nteger
max = - 32768
n = Inpu tBox ( " Введите количество чисел ",
" Ввод данных " ) ' Ввод количества чисел , которые будут
обрабатываться в цикле
For i = 1 То n
chislo = Inpu tBox ( "В веди т е " & i &
" число " , " Ввод данных " ) ' Ввод исходных данных
If chislo < О Then ' Проверка
на отрицательность очередного введенного числа

I f ch i slo > max Then ' Поиск


макс ималь н о г о э л емента

max = chislo
End If
End If
Next 'З авершение цикла
MsgBox ( " Ма к сима л ьное из о т рицательных чи сел
равно " & max, MsgBoxS tyle. I nformati on , " Ответ " )
Ме . Close ()
End Sub
End Class

Задача 4. Последовательно вводятся пять вещественнь:nх чисел.


Найдите количество отрицательных чисел и минимальное из отри­
цатель ных.

143
Разработка алгоритма решения задачи представлена на рис. 74.

Начало

miп = 32767

kolotr =О

i = 1' 5

chislo

Нет Да

kolotr = kolotr + 1

Нет Да

min = chislo

Нет Да

kolotr
Нет
ffilll отрицател ьных

чисел

Конец

Рис. 74. Алгоритм решения задачи

144
Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System . Ob-
ject, ByVal е As System . EventArgs) Handles Button1 . Click
Dim kol otr , i , min As Integer
Dim chi slo As Si ngle
ko l ot r = О

min 327 67
For i = 1 То 5
chi slo = Inрu tВ ох( " Вве ди т е " & i & " число " ,

" Ввод да н ных " ) ' Ввод и сход ных данных

If chis l o < О Then


kolotr ko l otr + 1 'Я чейка kolot r
н а к а п ли в ае т к олич ес тв о отрица т ель н ых чи сел

End I f
If chi slo < mi n Then ' П оиск мин имал ьн о г о

элемен т а

mi n chis l o
End I f
Next ' Завер ш ение ци кла

If kolot r = Then
О

MsgBox ( " Не т о т рицате л ьных ч исе л " )

Else
МsgВох( " Количество о т рица т ельных чисел рав но "
& kolo t r & ", а минима льн ое из них рав н о " & mi n , Msg-
BoxSt yle . I nf ormati on , " О т вет " )

End I f
Ме . Close ()
End Sub
End Class

Задача 5. Последовательно вводятся n целых чисел. Найдите


количество положительных чисел и максимальн ое из них.

Разработка алгоритма решения задачи представлена на рис. 75.

145
Начало

max = -32768

kolpol = О

i = 1, n

chislo

Нет Да

kolpol = kolpol + 1

Нет Да

max = cl1islo

Нет Да

kolotr
Нет
inax положительных

чисел

Ко нец

Рис. 75. Алгоритм решения задачи

146
Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim kolpol, n , i , chislo, max As Integer
ko lpo l = О
max = - 32768
n = Inpu t Box ( " Введите количество чисел ",
" Ввод данных ") ' Ввод количества чисел , которые б удут

обрабатываться в цикле

For i = 1 То n
chislo = Inpu tBox ( " Введите " & i &
" число " , " Ввод данных " ) ' Ввод исходных данных

If chislo > О Then ' Проверка :

положительно число или нет?

ko l pol = kolpol + 1
End If
If chislo > max Then ' Поиск

максималь н ого числа

max - chislo
End If
Next ' Завершение цикла

If kolpol = О Then
MsgBox ( " Нет п оложи те ль ных чисел " )

Else
МsgВох (" Количество положительных чисел

ра вно" & ko l pol & " , а максимальное из них ра вно " &
max, MsgBoxStyle . Inf ormation , " От вет " )
End I f
Ме . Close ()
End Sub
End Class

Задача 6. Последовательно вводятся пять целых чисел. Найдите


количество положительных чисел и их среднее арифметическое.
Разработка алгоритма решения задачи представлена на рис. 76.

147
Начало

kolpol = О

sum = О

i = 1, 5

chislo

Нет Да

kolpol = kolpol + 1

sum = su1n + chislo

Нет Да

srarifin = sum/ kolpol


Н ет
srarifm, kolpol положительных

чисел

Конец

Рис. 76. Ал го р итм р е ш е н ия за да чи

148
Комм е нтарий . П оиск ср едн его арифметическог о поло:>ки ­
тельных значений заключается в нахождении суммы чисел (ячейка
surn), нахождении их количества (ячейка kolpol) и вычислении
среднего арифметического по формуле srarifrn = surn / kol.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System .
Object , ByVal е As System . EventArgs) Handles Buttonl .
Click
Dim kol pol, chislo , sum, i As Int ege r
Dim srarifm As Single
kolpol = О
sum = О
For i = 1 То 5
chis l o = InputBox ( " Вве дите " & i &
" число " , " Ввод данных " ) ' Ввод исходных данных
If chislo > О Then ' Проверка
на по л ожи т е л ьност ь вве де нн о г о числа

ko l pol = kolpol + 1 'Ув е личе ние

счетчика на единицу в случае истинности условия

sum = sum + chislo ' Накапливание

суммы

End I f
Next ' Завершение цикл а

If kolpol = О Then
MsgBox ( " Нет положительных чисел ")

Else
srari fm = sum / kol pol
МsgВох ("Сред нее арифметическое

положительных чисел равно " & srarifm & " , Количество


положительных чисел =" & kolpol, MsgBoxStyle . Informa-
tion , " О тв е т " )

End I f
Ме . Close ()

End Sub
End Class

149
Задача 7. Вводится последовательность из N целых чисел. Най­
дите, сколько в ней чисел, равных числу 100, и количество отрица ­
тел ьных чисел.

Разработка алгоритма решения задачи представлена на рис. 77.

Начало

11

k=O

kolotr = О

i = 1 11
'

chislo

Нет Да

k=k + 1

Нет Да

kolotr = kolotr + 1

kolotr, k

( _ _ _к_он_ец_ _)

Рис. 77. Алгоритм решения задачи

150
Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System.
Object , ByVal е As System . EventArgs) Handles Buttonl .
Click
Dim ko l otr , n, i, chis l o , k As Integer
ko l o t r = О ' Сче т чик для п одс ч е т а количества
отрицательных чисел

k = О ' Сче т чик для подсчета количе ства


чисел , равных числу 100
n = InputBox ( " Введите количество чисел ",
" Ввод данных " ) ' Ввод количества чисел , которые будут
обрабатываться в ци кле
For i = 1 То n
' Ввод исходных данных

chislo = InputBox ( " Введите " & i &


" чи сл о ", " Ввод да н ных " )
If chislo Then = 100' Проверка :
введенное число равно числу 100
k = k + 1 'Ув е личе ние счетчика
на един ицу в с лучае ист ин нос т и условия

End If
If chislo < О Then ' Проверка : Введено

о т р ицате л ьное число?


ko l o tr = kolot r + 1 'Ув е личе ние
счетчика на единицу в случае истинности условия

End I f
Next ' Завершение цикл а
MsgBox ( " Количество отрицательных чисел равно "
& kolotr & " . Количество чисел равных 100 равно " & k,
MsgBoxS t y l e . I nformation, " Ответ " )

Ме . Close ()
End suЬ
End Class

Задача 8. Последовательно вводится 1О вещественных чисел.


Определите, сколько из них совпадает с первым числом.
Разработка алгоритма решения задачи представлена на рис. 78.

151
Начало

chislo1

kol = О

i = 2, 10

chislo

Нет Да

kol = kol + 1

Нет Да

У вас иет
kol
совпадеиий чисел

Коиец

Рис. 78. Алгоритм решения задачи

152
Комментарий. В ячейку chislo1 заносим первое число. Все по ­
следующие введенные числа будем сравнивать в цикле с тем числом,
которое находится в ячейке chislo1. В случае совпадения будем уве ­
личивать значение ячейки kol, которая выполняет функцию счет­
чика, на единиц у .

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System . EventArgs) Handles Buttonl .
Click
Dim kol , i As Integer
Dim c hi s l o , chi slo l As Si ngl e ' Описа ние
чисел как вещес т в е н ных з н ач ений
ko l = О
chislol = InputBox ( " Введите первое число " ,
" Ввод данных " ) ' Ввод первого числа
For i = 2 То 10 ' Первое число было введено ,
поэто му цикл на чинаетс я с д в о й ки
c hi s l o = I nputBox ( " Вве ди т е " & i &
" чи сл о ", " Вв о д да н ных " ) 'Вв о д и с х од ных да нных
If chislo = chislol Then ' Проверка :
равно ли очередное введенное число первому числу

kol = kol + 1 ' Увеличение счетчика


на е дин иц у в с луча е ист ин нос т и ус л о вия

End I f
Ne xt ' За в ершение цикл а
If kol = О Then
MsgBox ( " У вас нет совпадений чисел " )
Else
MsgBox ( " С пер в ым число м со в пал о " & ko l
& " чисе л " )
End I f

Ме . Close ()
End Sub
End Class

Задача 9. Последовательно вводится 10 целых чисел. Найдите


раз ность между максимальным и ми нимальным из них.

Разработка алгоритма решения задачи представлена на рис. 79.

153
Начало

inax = - 32768

inin = 32767

i = 1, 10

chislo

Нет Да

max = chislo

Нет Да

max = cl1islo

raznost = max - min

raznost

( _____К_он_ец____)

Рис. 79. Алгоритм решения задачи

154
Комментарий. В задаче реализуются алгоритмы поиска мини ­
мального и максимального элементов, описанные выше. П о окон ­
чании цикла в ячейке max будет находиться максимальный эле ­
мент, а в ячейке min - минимальный элемент. Оператором raznost =
.
= max - m1n находится разность чисел.
Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim chislo , i , min, max , raznost As Integer
max - - 32768
min = 32767
For i = 1 То 10
chislo = InputBox ("В ведите " & i &
" число " , " Ввод данных " ) ' Ввод исходных данных

If chislo > max Then ' реализация

алгоритма поиска максима л ьного элемен та

max - ch is lo
End If
If chislo < min Then ' реализация

алгоритма поиска минимального э л еме н та

min = ch is lo
End If
Next ' Заверше ние цикла

raznost = max - min 'Нах ожде ние разности

Мs gВох( " Разность между максимальным и минимальным

числом ра вна " & raznos t, MsgBoxStyle . Informat ion ,


" Ответ " )

Ме . Close ()
End Sub
End Class

Задача 10. Последовательно вводится 10 целых чисел. Найти


произведение всех положительны х и всех отрицательных чисел,

предварительно вычислив их сумму.

Разработка алгоритма решения задачи представлена на рис. 80.

155
Начало

sumpol = О

sumotr = О

i = 1, 10

chislo

Нет Да

sumotr = sumotr + chislo sumpol = sumpol + chislo

proiz = sumotr * sumotr

pro1z

Коаец

Рис. 80. Алгоритм решения задачи

156
Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim i , chislo , sumpol, sumot r , proi z As In-
teger

sumot r = О
sumpo l = О
For i = 1 То 10
chislo = InputBox ( " Введите " & i &
" число " , " Ввод данных " ) ' Ввод исходных данных

If chislo > О Then ' Прове рка :


Пол ожите л ьное число ил и н ет?

sumpol = sumpol + chi s l o 'Н ахождение

суммы по л ожи т е л ьных чисе л

Else
sumotr = sumotr + chislo
' Нахождение суммы отрицательных чисел
End I f
Next ' Завершение цикл а

pr oi z = sumotr * sumpo l ' Нахожд ен и е


произведения чисел

Ms gBox ( " Произведение всех положительных и всех

отрицательных чисел ра вно '' & proiz , MsgBoxStyle . Infor-


mation , " Ответ " )

Ме . Close ()
End Sub
End Class

Контрольные вопросы и задания


1. Дайте определение циклического алгоритма.
2. Расскажите о работе оператора цикла For, приведя общий вид в алго­
ритме и общий вид этого оператора в программе.
3. Расскажите о работе цикла с оператором For по убывающим значе­
ниям параметра цикла.

4. Расскажите о работе сложI-Iого циклического процесса, приведя общий


вид в алгоритме и общий вид этого оператора в программе.

157
5. Какой цикл ~-rазывается ВI-Iешиим, а какой - внутр еиним?
6. Какие базовые алгоритмы обработки последователыrостей вы зиаете?
Приведите соответствующие примеры.

Задачи для самостоятельного решения

1. Разработайте алгоритм и программу решения следующей задачи :


~ имее тс я N значений температур. Н айдите количество отрица­
тельных температур» .

2. Разработайт е алгоритм и программу решения следующей задачи :


~ имеется N значений температур . Н айдите среднюю температуру» .
3. Разработайте алго ритм и прогр амму решения следующей задачи :
~ и меется N зиачений темпе р ату р. О пр еделите ср едиее зиачение от ­
р ицательиых температур».

4. Разработайте алго ритм и прогр амму решения следующей задачи :


~ и меется N заачеаий температур. О п р еделите максимальиую темпе ­
р ату р у».

5. Разработайте алго ритм и прогр амму решения следующей задачи :


~имеется N значеаий темпе р атур. Найдите максимальаое и миаи ­
мальиое зиачения температуры».

6.3. ОПЕРАТОР ЦИКЛА DO .. . LOOP UNTIL

Для выполнения оператора For необходимо задать параметры,


которые будут определять, сколько раз дол)кен(ны) выполниться
оператор(ы) цикла. Альтернативой циклу с For ... Next является
цикл Do, в котором группа операторов выполняется до тех пор,
пока логическое выражение не примет определенное значение. Ци­
клическая структура, в которой число повторений цикла заранее
неизвестно , а определяется тол ько в процессе выполнения алго­

ритма, называется ит еративной.


Такие циклы н уж:но применять в тех задачах, где мы не мож:ем
знать точно, сколько раз будет повторен цикл. Например, пользова­
тель должен вводить пароль, для того чтобы начать работу с какой­
нибудь программой. Какое количество попыток он использует?
Неизвестно.
Следовательно, для реализации подобных задач необходимо
владеть соответствующими методами их решения. В языке VB для
реализации констр укции цикла с неизвестным колич е ством повто ­

рений существует несколько разновидностей цикла Do. Первый


оператор, который мы рассмотрим, имеет название Do ... Loop Until,
или цикл с постпроверкой условия. Его общий вид в алгоритме
представлен на рис. 81.

158
Нет Да

Рис. 81. Общий вид в алгоритме оператора Do .. Loop Until

Синтаксис оператора Do ... Loop Until следующий:

Do

рн
Loop Until <Логическое выражение>

где Р 1, Р 2, ... Р 11 - операторы, Do (выполнять), Loop (петля), Until


(пока, до тех пор) - служебные слова языка VB.
Цикл с оператором Do ... Loop Until начинается с выполнения
операторов внутри цикла, поэтому цикл, организованный с по­
мощью этого оператора, в любом случае выполнится хотя бы 1 раз.
Затем проверяется логическое выра)кение. Если оно истинно, то

159
осуществляется выход из цикла. Если :>ке значение логического вы ­
ражения ложно, то выполнение операторов Р 1, Р 2 , Р n повторяется,
а затем вновь проверяется логическое выражение.

Пример
Как будет организовано выполнение операторов при решении
задачи: ~найдите сумму целых чисел от 1 до 50 с применением опе ­
ратора цикла Do ... Loop Until~?
Комментарий. Переменная k необходима для подсчета коли­
чества повторений цикла. Поскольку мы знаем, что слагаемых 50, то
логично в качестве условия выхода из цикла задать условие k = 50.
Таким образом, накопление суммы в ячейке Sum будет происхо­
дить до тех пор, пока не будут просуммированы все 50 слагаемых.
Разработка алгоритма решения задачи представлена на рис. 82.

Начало

sum = О

k=k +1

sum = sum + k

sum

с~~~-К_о_1_1е_ц_~~-)
Рис. 82. Алгоритм решения задачи

160
Ниж:е приведен код событийной процедуры, отвечающей за ре ­
шение задачи.

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System .
Object , ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim sum, k As Integer
k - о
sum - о
Do
k + 1
k -

sum - sum + k
Loop Until k = 50
Labell . Text = sum
End Sub
End Class

Создадим проект, который будет осуществлять преобразование


из градусов по Фаренгейту в градусы по Цельсию. Внешний вид
окна запроса температуры представлен на рис. 83.
В цикле Do пользователю предлагается ввести значение темпе­
ратуры, которое затем преобразуется в градусы по Цельсию и ото­
бражается на экране с помощью функции MsgBox. Цикл выполня­
ется до тех пор, пока пользователь не щелкнет по кнопке Cancel,
которая возвращает пустое, или нулевое, значение для переменной
Ftemp.
Это условие проверяется в конце цикла с помощью оператора
Loop Until. В программе применяется функция Clnt, чтобы вы ­
ходное значение температуры в градусах по Цельсию не содержало
десятичной части.

Преобразование из Fв С х

Введите темпер.атур1 по Фаренгейту


ок

Рис . 83. Внешний вид окна запроса

16 1
Листинг программы

PuЬlic Class Forml


Private Sub Forml_Load(ByVal sender As System.Ob-
ject, ByVal е As System . EventArgs) Handles MyBase . Load
Dim ftemp , Cels ius As Single
Do
f temp = InрutВох( " Введите т ем п ера туру
п о Фаре нг ейту " , " П реобразо в ание из F в С " )

If ftemp <> О Then


Cel s i us = Cint ( (ft emp + 40) * 5 / 9 - 40)
MsgBox ( " Темп ература п о Ц ельсию равна "
& Cel s i us, MsgBoxS t yl e . I nf ormation, " От в ет " )
End I f
Loop Until f t emp <> О
Ме . Close ()

End Sub
End Class

УПРАЖНЕНИЯ

Вопрос 1. Определите, какое значение находится в ячейке у


после выполнения цикла с оператором Do ... Loop Until?
Исходные значения: а = 6; d = 4.

Do
а=а +1
y=d+a
Loop Until у< 13

Ответ. При первом прохождении цикла в ячейке а оказывается


число 7, а в ячейке у - число 11 . Проверяется логическое выра­
жение у< 13 (11 < 13). Его результат: True (истина). В цикле с опе­
ратором Do ... Loop Until выход из цикла происходит тогда, когда
логическое выражение имеет значение True (истина), следова­
тельно, в данном при мере происходит выход из цикла. Правильный
ответ: в ячейке у находится число 11.
Вопрос 2. Определите, какое значение находится в ячейке t
после выполнения цикла с оператором Do ... Loop Until?
Исходные данные: f = 5; t = 5.
162
Do
f =f - 1
t=t+ 1
Loop Until t > 7

Ответ. При первом прохож:дении цикла в ячейке f оказывается


число 4, а в ячейке t - число 6. Проверяется логическое выражение
t > 7 (6 > 7) . Его результат: False (ло)кь). В цикле с оператором
Do ... Loop Until выход из цикла происходит тогда, когда логиче­
ское выражение имеет значение True (истина), следовательно, опе­
раторы цикла выпол ня ются вновь. Увеличившись на 1, значение
ячейки t ста нет равным 7. Проверяется логическое выраже ние
t > 7 (7 > 7). Его результат: False (ложь) . В третий раз осуще­
ствляется выполн ение тела цикла, в ячейке t оказ ывается зн а­
чение 8. Проверяется логическое выражение t > 7 (8 > 7) . Его
результат: True ( истина) , происходит выход из цикла. Ответ:
в ячейке t находится число 8.
Вопрос 3. Опр еделите, како е значение находится в ячейке s
после выполнения цикла с оператором Do ... Loop Until?
Исходные данные: х = 6; m = 8.
Do
m=m- 2
х=8
S= m - 1
Loop Until s < 5

Ответ. При первом прохождении цикла в ячейке rn оказывается


число 6, а в ячейке s - число 5. Проверяется логическое выражение
s < 5 (5 < 5). Его результат: False (ложь) . В цикле с оператором
Do ... Loop Until выход из цикла происходит тогда, когда логиче­
ское выражение имеет значение True (истина), следовательно, опе­
раторы цикла выполняются вновь. После выпол нения оператора
rn = rn - 2 в ячейке rn находится число 4, а после выполнения опера­
тора s = rn - 1 в ячейке s оказывается число 3 ( 4 - 1). Проверяется
логическое выра)кение s < 5 (3 < 5). Его результат: True (истина).
Происходит выход из цикла. Ответ: в ячейке s находится число 3.
Вопрос 4. Какое количество ошибок в следующем фрагменте
программы?

Dirn х As Integer
Dirn n As Integer

163
Dim а As Boolean
rn =1
х=а

n = 1000
Do
х = х + 15
a= n
Loop Until

Ответ. Первая ошибка: переменная m, которая используется


в оператор е m = 1, не описана в разделе описания переменных.
Вторая ошибка: оператор х = а недопустим, так как переменная х,
которая о пи сана как целочисле нная перемен ная, не может п ри ни­

мать логические значения (переменная а описана как логическая:


Boolean). Третья ошибка в операторе а = n. Обратная ситуация: пе ­
р еменная а о пи сана как логическая, т.е. может п ри нимать два зна­

чения (Истина или Ложь) . Четвертая ошибка: оператор Do ... Loop


Until заканчивается проверкой логиче ского выраж:ения, которое
в данном примере отсутствует. Таким образом, в данном фрагменте
программы четыре ошибки.
Вопрос 5. Определите, какое значение находится в ячейке у
после выполнения цикла с оператором Do ... Loop Until?
Исходные данные: а = 6; d = 4.

Do
а=а* 2
y=d+a
Loop U ntil у > 40

Ответ. Рассу)кдать нужно следующим образом: цикл с опера­


тором Do ... Loop Until начинается с выполнения оператора а =
= а * 2. В ячейке а оказывается значение 12. П осле выполнения
оператора у = d +а в ячейку у заносится число 16 (4 + 12). Прове ­
ряется логическое выражение у > 40. Оно ложно, следовательно,
выполне ние операторов п овторяется. При втором п рохождении
цикла в ячейку а зан осится чи сло 24 (12 * 2), а в ячейку у - число
28 ( 4 + 24) . Л огиче с кое выраж:ение вновь оказ ываетс я ло)кны м
(28 > 40). При повторении тела цикла в ячейку а заносится зна­
чение, равное 48 (24 * 2), а в ячейку у - значение, равное 52. Про­
верив логическое выраж:ение, убе)кдаемся в том, что оно истинно,

164
а з начит, п роисходит выход из цикла. Следовательно, в ячейке у
находится число 52.
Вопрос 6. Сколько раз будет выполнено тело цикла в сле ­
дующем фрагменте программы?

m =З
n = 22
Do
n=m
m=n + 1
Loop Until m = 8

Ответ. В цикле с оператором Do ... Loop Until выход из цикла


п роисходит п ри исти нн ости ло гического в ы раже н ия, IIоэтому

в данном п римере выход из ц икла дол)кен произойти тогда, ко гда


в ячейке m будет число 8. Таким образом, при первом прохо)кдении
цикла в ячейку n заносится число 3 (n = m), а в ячейку m - число 4
(m = n + 1). Далее проверяется логическое выра)кение и снова начи­
нается выполнение операторов цикла. Значение ячейки m каждый
раз будет увеличиваться на 1 после выполнения оператора m = n +
+ 1. Следовательно, для того чтобы значение ячейки m увеличилось
с 4 до 8, нужно выполнить тело цикла 5 раз.
Вопрос 7. Определите, какое значение находится в ячейке у
после выполнения цикла с оператором Do ... Loop Until.
Исходные данные: а = 6; d = 4.

Do
d=d+ 1
y=d*a
Loop Until у> 41

Ответ. В данном примере выход из цикла должен произойти


тогда, когда в ячейке у будет число, которое больш е, чем 41.
При первом прохож:дении цикла в ячейку у заносится число 30,
а значение ячейки d увеличивается на 1 и становится равным 5.
Проверяется логическое выра)кение: оно ложно, а значит, начина­
ется выполнение операторов цикла. Значение ячейки d увеличива­
ется на 1 после выполнения оператора d =d + 1и равно 6. После

165
выполнения оператора у = d *а в ячейку у заносится число 36 (6*6).
Проверяется логическое выражение: оно ложно, а значит, вновь на­
чинается выполнение операторов цикла. Значение ячейки d увели­
чивается на 1и будет равно 7, а в ячейке а находится 6. Следова­
тельно, после выполнения оператора у = d * а в ячейке у будет 42.
Логическое выражение оказывается истинным, происходит выход
из цикла.

Вопрос 8. Определите, какое значение находится в ячейке х


после выполнения цикла с оператором Do ... Loop Until.
Исходные значения: d = 5; х = 2; i = 1.

Do
х =d + i
d=d - 1
i =i + 1
Loop Until i = 5

Ответ. Рассуждаем следующим образом: при первом прохо­


ж:дении цикла в ячейку х заносится число 6 (х = d + i), значение
ячейки d, уменьшившись на 1, станет равным 4, а значение ячейки i,
увеличив шись на 1, станет равным 2. Проверяется логическое вы­
ражени е: оно ложно, а з начит, начинается выполнение операторов

цикла. Можно проследить следующую закономерность: значение


ячейки х всякий раз увеличивается на сумму ячеек d и i. В свою
очередь, значение ячейки d при каждом прохождении цикла умень­
шается на 1, а значение ячейки i увеличивается на 1, следовательно,
до выхода из цикла значение ячейки х будет неизменным и будет
равно 6.
Вопрос 9. Какое количество ошибок в следующем фрагменте
программь1?

Dim х As Single
Dim 11 As Boolean
Dim mAs Byte
m = SE + 00
x=S
11 = 10

166
Do
х=х + 1
m=n
Loop Until х >m

Ответ. Первая ошибка в операторе rn = 5Е+ОО , так как пере­


менная rn описана в разделе описаний как целочисленная, а при­
сваивается ей число, записанное в форме с плавающей точкой. Опе­
ратор n = 1О недопустим, поскольку переменная n описана как ло­
гическая п еременн ая, а п ереме нны е это го тип а принимают т оль ко

два значения: Истина или Ложь. Третья ошибка заключается в том,


что п еремен ная rn описана как ц елочисленная переменная, н о ей
присваивается значение п еременной n, а n в разделе оп исаний опи­
сана как логическая переменная. Итого: три ошибки.
Вопрос 10. Определите, какое значение находится в ячейке t
после выполнения цикла с оператором Do ... Loop Until.
Исходные значения: f = З; t = 5.

Do
f=f+t
t =f + 1
Loop Until t > 15

Ответ. При первом прохождении цикла в ячейку f заносится


число 8, а в ячейку t - число 9. Логическое выражение оказыва­
ется ложн ым, следовательно, вновь выполняется тело цикла. После
выполнения оператора f = f + t в ячейке f оказывается число 17,
а после выполнения t = f + 1 в ячейку t заносится число 18. Логи­
ческое выра:>ке ние истинно, происходит выход из цикла. Следова­
тельно, в ячейке t после выполнения фрагмента программы оказы­
вается число 18.

ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

Задача 1. Вводится п оследовательность ц елых чисел, не равных


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

167
Начало

kolotr =О

sum =О

chislo

Нет Да

kolotr = kolotr + 1

sum = sum + chislo

Нет Да

srarifm = sum/ kolotr

kolotr, srarifin

Конец

Рис. 84. Алгоритм решения задачи

Комментарий. Выход из цикла с оператором Do ... Loop Until


происходит тогда, когда логическое выражение (заданное в ка­
честве усл овия выхода из цикла) становится истинным. Таким
образом, в данной задаче пользователь вводит любую последова­
тельность чисел; в ячейке kolotr, которая играет роль счетчика,

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

счет среднего арифметического значения по формуле srarifm =


= sum / kolotr.
Листинг программы

PuЬlic Class Forml


Private Sub Buttonl Click(ByVal sender As System.
~

Object, ByVal е As System.EventArgs) Handles Buttonl.


Click
Dim srarifm As Singl e
Di m kolo tr , sum, chislo As Integer
ko l o t r = О
sum = О
Do 'Выпол ня ть т ело цикла
chi slo - I nputBox ("Вве дите число ", " В в о д
чисел " ) 'Вв од числа
If chis l o < О Then ' Проверка :
отриц а т ел ьн о ли вве денное ч исло или не т ?

ko l o tr = kolot r + 1 ' Уве личе ние


зна ч ения я ч ейки на 1 в случ ае ис т ин н ос т и п роверяемо г о
усл овия

sum = sum + chi slo ' Увеличение


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

End I f
Loop Un til chis l o = О ' Цикл выполняется
до т ех п ор , п ока очере дн ое число , ко т орое вводит

поль зова те ль , не буде т равно нулю

srari fm = sum / ko l otr


MsgBox ( " Количество отрица т ель ных чисел = " &
kolot r & ", а их среднее арифметическое - " & sra r i f m,
MsgBoxS t yl e . Exc l amation , " Ответ " )
Ме . Cl ose ()
End Sub
End Class

Задача 2. Вводится последовательность чисел, О - конец после­


довательности. Определите, содержит ли последовательность хотя
бы два равных соседних числа.

169
Разработка алгоритма решения задачи представлена на рис. 85.

Начало

flag = False

chislo

chislo1

Нет Да

flag = True

chislo = chislo 1

chislo1

Нет

Нет Да

Нет равных Есть равиые


соседних чисел соседние числа

Конец

Рис. 85. Алгоритм решения задачи

170
Комментарий. В ячейку chislo заносится первое число из бу ­
дущей последовательности чисел, в ячейку chislo1 заносится
второй элемент последовательности. В цикле происходит проверка:
не равны ли два соседних элемента? В случае истинности проверяе ­
мого условия переменная булевского типа flag принимает значение
True. Подобные действия повторяются до тех пор, пока пользова­
тел ь не введет число, равное нул ю.

Листинг программы

PuЬlic Class Forml


Private Sub Forml_Load(ByVal sender As System.Ob-
ject, ByVal е As System.EventArgs) Handles MyBase.Load
Dim chi s l ol , ch i slo As Intege r
Dim flag As Boolean
flag = False
ch i slo = I nput Box ( " Введите ч и сло ", " Ввод
чисел " ) 'Вв од п ервого числа
ch i slol = I nputBox ( " Введите число ", "В вод
чисел ") 'Вв о д в т орого чи с л а
Do
If chis l o = ch i slol Then 'П роверка :
не равны ли два сосе дних элеме нт а?
flag = Tr ue
End I f
chis l o = ch i slol ' С ле дующее число
с т ановится т екущим

chis l ol = InputBox ( " Введи т е чи сл о ", " Ввод


чисел ") 'Вв од сле д ующего числа
Loop Unt il chis l ol = О
If flag Then
MsgBox( " B после д овате л ьност и ес ть рав ные соседние
числа ", MsgBoxStyle . Exclamati on , " О т ве т" )
Else
MsgBox( "B п ос ле довате льн ости нет рав ных
сосед них чисел ", MsgBoxStyle . Exclamation, " О т ве т" )
End I f
Ме . Close ()
End Sub
End Class

171
Контрольные вопросы и задания
1. В каких случаях примеияются циклы с иеизвестиым числом повто -
рений?
2. Приведите общий вид в алгоритме оператора цикла
Do".Loop Until.
3. Напишите синтаксис оператора цикла Do".Loop Until.
4. Расскажите о работе оператора цикла Do".Loop Until. Приведите
примеры.

5. В чем различие организации регуляриых и итеративных циклов?


6. Как определить числ о повторений операторов тела цикла в итера ­
тивной циклической структуре?

Задачи для самостоятел ьного решения


1. Разработайте алгоритм и программу решения следующей задачи: В ы­
числите значе~-rие функции у = sinx / х иа интервале [О; pi] с шагом 0,2.
2. Разработайте алгоритм и программу реше~-rия следующей задачи. Вы ­
числите сумму конечного ряда

3. Разработайте алгоритм и программу решения следующей задачи. Вво­


дится последовательность ненулевых чисел, О - коиец последователь ­
ности. Определите, сколько раз последовательиость меияет зиак.
4. Разработайте алгоритм и программу решения следующей задачи .
Программа запрашивает пароль пользователя. В случае правильиости
пароля выводится на экраи фраза: ~можно приступать к работе! ~.
5. Разработайте алгоритм и программу решения следующей задачи. Вы­
числите значение функции у = sin ( 3х + л/5 ) для х, изменяющегося
ОТ 2 ДО 15.
6. Разработайте алгоритм и программу решеиия следующей задачи. Вы ­
числите сумму нечетных чисел в диапазоне от 1 до 99 включительно .
7. Разработайте алгоритм и программу решения следующей задачи .
Программа определяет максимальное из всех введенных пользова ­
телем чисел (признаком конца ввода является введенное число О).
8. Разработайте алгоритм и программу решения следующей задачи .
Программа выводит на экран четиые числа от 2 до 30.
9. Разработайте алгоритм и программу решения следующей задачи.
О пределите количество чисел, сумма которых меньше заданного
числа.

6.4. ОПЕРАТОР ЦИКЛА DO WHILE ... LOOP


Вторая раз новидн ость ци кла Do, которая может применяться
пр икладн ым программистом в зависим о сти от ситуац ии, сложив­

шейся в программе, - это оператор Do While ... Loop (с предпро ­


веркой условия).

172
Например, в приведенном НИ)Ке листинге цикл Do While ... Loop
обрабатывает данные до тех пор, пока не будет введено сло:во ~ Сту­
дент ~.

Листинг программы

PuЬlic Class Forml


Private Sub Forml_Load(ByVal sender As System.Ob-
ject, ByVal е As System.EventArgs) Handles MyBase.Load
Dim name As String
Do Wh ile name <> " Студ ен т"
name = InputBox ( " Введите Ваше имя или слово
С т уде н т для выхода " )
If name <> " Студент " Then
MsgBox(name )
End If
Loop
Ме . Close ()
End Sub
End Class

Общий вид в алгоритме оператора Do While ... Loop представлен


на рис. 86.

Нет Да

Рис. 86. Общий вид в алгоритме оператора Do Whi le ... Loop

173
Синтаксис оператора Do While ... Loop следующий.

Do While < логическое выра)кение>


Р1
Р2

Здесь приведены обозначения: Р 1, Р 2, ... , Р n - операторы, Do


(выполнять), While (пока, до тех пор), Loop (петля) - служебные
слова языка VB.
Если логическое выражение после слу)кебного слова While имеет
значение True (Истина), то выполняются операторы Р 1 , Р 2 , ... , Pn,
после чего проверка логического выражения повторяется. Если
логическое выражение имеет значение False (Ложь), то проис­
ходит выход из цикла. Если условие в заголовке цикла не является
истинным с самого начала, то цикл Do While ... Loop не выполня­
ется .

Пример
Вернемся к задаче, которая была разобрана ранее: ~найдите
сумму целых чисел от 1 до 50».
В циклах с оп ератор ом For и с оператором Do ... Loop Until
ответом в задаче было число 1275. Что изменится в программе,
если применить оператор Do While ... Loop? Прежде всего, нужно
позаботиться о том, чтобы какая-нибудь переменная менялась
в цикле от 1 до 50. Ведь такой величины как параметр цикла нет
в конструкции Do While ... Loop. В нашем примере это будет пе­
ременная k. Задав в качестве условия выхода из цикла k <> 50
и применяя в цикле оператор sum = sum + k, мы просуммируем все
50 слагаемых и получим в ответе 1275.
Разработка алгоритма решения задачи представлена на рис. 87.
Ниже приведен код процедуры, отвечающий за решение задачи:

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim sum, k As Integer

174
k = о
sum = О
Do Wh ile k <> 50
k = k + 1
sum = sum + k
Loop
Label l . Text = St r (sum)
End Sub
End Class

Начало

k=O

sum =О

chislo

Нет Да

k = k+1

sum = su1n + k

SUlll

Конец

Рис. 87. Алгоритм решения задачи

175
Задача 1. Создадим проект, в котором будет осуществлено ре ­
шение следующей задачи : сумма денег (ячейка Sum) помещена
в банк под процент (ячейка Proc), но мы хотим знать, через сколько
лет эта сумма удвоится?
Разработка алгоритма решения задачи представлена на рис. 88.

Начало

sum, proc

god =О

udvsum = 2 * sum

Нет Да

sum = sum + (sum * proc) / 100

god = god + 1

god

Конец

Рис. 88. Алгоритм решения задачи

Ниже приведен код процедуры, отвечающий за решение задачи:

PuЬlic Class Forml


Private SuЬ Forml_Load(ByVal sender As System . Ob-
ject, ByVal е As System.EventArgs) Handles MyBase.Load

176
Dim proc , god, udvsum As In teger
Dim sum As Single
sum = InрutВох( " Введите исхо дную сумму

в рублях " )
proc = InputBox ( " Введите процент " )
god = О
udvsum = 2 * sum
Do Wh ile sum < udvsum
sum - sum + (sum * proc) / 100
god = god + 1
Loop
MsgBox ( " Сумма удвоилась через " & god &

" л ет ", MsgBoxStyle . Exclamation , " О тв е т " )


Ме . Cl ose ()

End Sub
End Class

УПРАЖНЕНИЯ

Вопрос 1. Определите, какое значение находится в ячейке у


после выполнения цикла с оператором Do While ... Loop?
Исходные значения: k = О; у = 3.

Do While k <у
у=у + 1
k=k+3
Loop

Ответ. В цикле с оператором Do ... While выход из цикла про­


исходит тогда, когда логическое выражение имеет значение False
(ложь). Подставив исходные значения, получаем, что логическое
выраж:ение истинно. При выполнении операторов цикла в ячейку
у заносится число 4, а в ячейку k- число 3. Вновь пров еряется
логич еское выра:>кение (3 < 4). Его результат: True. При втором
прохождении цикла в ячейку у заносится число 5 (у = у + 1),
а в ячейку k- число 6 (k = k + 3). Проверив логическое выражение,
убеждаемся в том, что оно ложно (6 < 5), следовательно , проис­
ходит выход из цикла. В ячейке у хранится число 5.

177
Вопрос 2. Определите, какое значение находится в ячейке s
после выполнения цикла с оператором Do While ... Loop?
Исходные значения: s = 7; i = 1.

Do While i * i = 2
s=s+1 / i
i =i + 1
Loop

Ответ. В данном примере надо быть внимательным и заме­


тить, что логическое выраж:ение всегда будет иметь значение False
(ложь), следовательно, тело цикла выполняться не будет. Значение
ячейки s останется неизменным и будет равно 7.
Вопрос 3. Каким будет значение переменной z после выпол­
нения фрагмента программы?
Исходные значения: а = 1; z = 4.

Do While а <= 3
а=а+ 1
z=a+1
Loop

Ответ. Для того чтобы логическое выражение стало ложным


и произошел выход из цикла, необходимо, чтобы в ячейке а нахо­
дилось число 4. Следовательно, при первом прохо)кдении цикла
в ячейке а будет значение 2, а в ячейке z будет находиться число 3.
Таким образом, цикл выполнится еще 2 раза. Оператор z = а + 1
увеличит значение ячейки z на 2. Окончательный ответ: z = 5.
Вопрос 4. Определите, какое значение находится в ячейке а
после выполнения фрагмента программы?
Исходные значения: а = 2; d = 1.

Do While а + d < =7
а=а +1
d=d+1
Loop
a=a*d

Ответ. При первом вхождении в цикл в ячейке а будет на­


ходиться значение 3 (после выполнения оператора а = а + 1),

178
а в ячейке d - знач ение 2 (после выполнения оператора d =
= d + 1). Сумма значений этих двух ячеек, пр оверяемая в логи­
ческом выражении, будет равна 5. Условие 5 <= 7 истинно, сле­
довательно , цикл выполнится еще раз. Увеличившись на единицу,
значения ячеек а и d примут соответственно значения 4 и 3. Их
сумма будет равна 7, значит, цикл выполнится третий раз. Увели­
чившись на единицу, значение ячейки а будет равно 5, а з начение
ячейки d равно 4. Логическое выражение: 5 + 4 <= 7 оказывается
лож:ным, происходит выход из цикла и выполняется о п ератор

а = а * d. Умножив 5 на 4, получим число 20, которое и будет от­


ветом в данном примере.

Вопрос 5. Определите, какое значение будет в ячейке n после


выполнения цикла с оператором Do While .. Loop.
Исходные значения: 11 = 2; х = 1.

Do While х <= 4
х=х + 1
11=11 + х

Loop

Ответ. Выход из цикла с оператором Do ... While происходит


тогда, когда логическое выражение принимает значе ние False
(ложь). В данном примере выход из цикла произойдет, когда
в ячейке х будет находиться число, больше по величине, чем
число 4. Видно и то, что в цикле ячейка х увеличивает свое з на­
чение на 1, т.е. выход из цикла произойдет, когда в ячейке х будет
число 5. Таким образом, в цикле ну)КНО подсчитывать значение
ячейки n, складывая его со значением переменной х. На момент
выхода из цикла в ячейке n находится число 16.
Вопрос 6. Каким будет значение переменной а после выпол­
нения фрагмента программы с оператором Do While ... Loop?
Исходные значения: а = 1; z = 1.

Do While а <= 3
а=а+1
Loop
a=a + z
а= а + 10

179
Ответ. Если в цикле выполняется один оператор а = а+ 1, то
выход из цикла произойдет тогда, когда в ячейке а будет число 4.
Выполнив оператор а а
+ z, получаем, что в ячейке а находится
=
число 5. Выполняется оператор а = а + 10, значение ячейки а = 15.
Вопрос 7. Определите, какое значение находится в ячейке s
после выполнения фрагмента программы?
Исходные значения: а= 20; d = 5.

Do While а - d >= 1О
а=а- 1
d=d+1
Loop
S=a+d

Ответ. Если вы хорошо знаете теоретический материал, то


данное упражнени е не покажется вам тяжелым. П роверив ло ­
гическое выражение, убеждаемся в том, что оно истинно. Далее
вам придется уме ньшать значе ни е ячейки а на единицу, з наче ние
ячейки d- увеличивать на единицу, каждый раз проверяя разность
значений ячеек. Выход из цикла происходит тогда, когда в ячейке а
будет находиться число 17, а в ячейке d- число
8. Выполнив опе ­
ратор s = а + d, получим, что значение ячейки s = 25.
Вопрос 8. Каким будет значение переменной а после выпол­
нения цикла с оператором Do While ... Loop?
Исходные значения: а = 1; z = 1.

Do While z <= 4
z=z + 1
z=a+1
a=z
Loop

Ответ. В данн ом при мере в теле цикла выполняю тся три опе ­
ратора. Мо)кно устан овить следующую закономерность: значе ния
ячеек z и а при выполнении операторов будут равны, так как то зна­
чение, которое находится в ячейке z, переходит в ячейку а после вы ­
полнения оператора а = z. Выход из цикла произойдет тогда, когда
в ячейке z будет находиться число 5, следовательно, и в ячейке а

180
тоже будет храниться число 5, что и является ответом в данном
упражнении.

Вопрос 9. Определите, какое значение находится в ячейке р


после выполнения фрагмента программы с оператором Do
While ... Loop?
Исходные значения: р = 1; i = 2.

Do While р < 9
р =р * i
Loop
i =i + 1
р =р * i

Ответ. В цикле выполняется оператор р = р * i. Остальные опе­


раторы выполняются после завершения цикла. Значение ячейки i
остается неизменным и будет равно 2, меняется только значение
ячейки р после выполнения оператора р = р * i. Таким образом,
необходимо умно)кать на 2 значение, которое находится в ячейке р
и проверять условие выхода из цикла. В ячейку р последовательно
будут заноситься значения 2, 4, 8, 16. Из этого перечисления
видно, что , когда в ячейке р находится число 16, происходит выход
из цикла. Выполнив оператор i = i + 1, получаем, что i = 3, а вы­
полнив оператор р =р * i (16 * 3), получим, что в ячейке р хранится
число 48.

ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

Задача 1. Вв одится последовательность вещественных чисел.


И звестно, что последний элемент последовательности равен 5.
Найдите количество положительных чисел и минимальное
из них.

Разработка алгоритма решения задачи представлена на рис. 89.


Комментарий. Выход из цикла с оператором Do While ... Loop
осуществляется тогда, когда логическое выражение прини~vrает зна ­

чение False. Следовательно, до тех пор, пока пользователь вводит


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

181
Н ачало

kolpol =О

min = 32767

Нет Да

chislo

Нет Да

kolpol = kolpol + 1

Нет Да

min = chislo

Нет Да

Нет положи­
kolpol, min
тельных чисел

Конец

Рис. 89. Ал гор итм р е ш е н ия зада чи

182
Листинг программы

PuЬlic Class Forml


Private Sub Forml_Load(ByVal sender As System.Ob-
ject , ByVal е As System . EventArgs) Handles MyBase . Load
Di m chislo As Single
Di m min, ko l pol As Integer
kol po l = О
mi n = 32767
Do Wh ile ch i slo <> 5 ' П о ка ч и сл о , вв еде н ное
в цикл е , не ра вн о чи сл у 5, в ыпол ня ть т ело ци кла
chi slo = InputBox ( " Вв е дите чи сло " , " Вв о д
чи сла " ) ' Вв од очере дн о г о числа
I f chi s l o > О The n ' П ро в ер ка :
пол ожите л ьно ли вв еде нн ое число?
kolpol = kol pol + 1 ' У в е ли ч ение
сче тчи ка на е ди ницу в случ ае истинности усл о в и я

I f ch i s l o < mi n Then ' Р еализация


ал г ор итм а п ои с к а мин ималь но г о эл ем ен т а

min = chi s l o
End I f
End I f
Loop ' За в ер ше н ие ци кл а
If kolpol = 1 The n
MsgB ox( " Bы вв е ли одно положите ль ное
число , нажми т е 5 - дл я в ыхо д а " )

El s e
MsgBox ( " Ко личест в о пол ожите ль ных чисе л ="
&kol po l & " , минималь ное из них = " & mi n , MsgBox-
St yle . Exclamati on , " От ве т " )
End If
Ме . Cl ose ()
End Sub
End Class

Задача 2. Вв одится последовательность в ещественных чисел.


Известно, что последн ий элемент последовательн ости равен нулю.
Определите, каких среди них больше: положительных или отрица­
тел ьн ы х.

Разработка алгоритма решения задачи представлена на рис. 90.

183
Начало

pol =О

otr = О

chislo

Нет Да

Нет Да

otr = otr + 1 pol = pol + 1

chislo

Нет Да

Положительных
Нет Да чисел больше

Количество Отрицательиых
одинаково чисел больше

Конец

Рис. 90. Алгор итм р е ш е н ия зада чи

184
Листинг программы

PuЬlic Class Forml


Private SuЬ Forml_Load(ByVal sender As System.Ob-
ject , ByVal е As System.EventArgs) Handles MyBase.Load
Dim chislo As Single
Dim pol, otr As Integer
pol = О ' Об нуление счетчиков положительных
и отрица т ельных чисел

otr = О
chislo = InputBox ( " Введите число " , " Ввод
числа " ) ' Вв од очеред н ого числа
Do While chislo <> О ' Пока введенное число
не ра вно числу О, выполнять тело цикла
If chislo > О Then ' Провер ка :
положительно ли введе нн ое число?
pol = pol + 1 ' Увеличение счетчика
на 1 в случае истинности п роверяемо го условия
Else
ot r = otr + 1 ' Увеличение с че т чи ка
на 1 в случае , если проверяемое условие ложно
End I f
chislo = Inpu tBox ( " Введи т е чис л о " , " Вв од
числа " ) ' Ввод очередного числа
Loop ' Завершение цикла
I f pol > otr Then
МsgВ ох( " По л ожи т ельных чисе л бо ль ше " , Msg-
BoxStyle . Critical , " Ответ " )
Elseif pol < otr Then
МsgВ ох( " Отрица т ельных чисе л бо ль ше " , Msg-
BoxStyle . Critical , " Ответ " )
Else
MsgBox ( " Количество чисе л - оди нак ово ",
MsgBoxStyle . Cri tical, " О т вет " )
End If
Ме . Close ()
End Sub
End Class

Задача 3. Вводится п оследовательность вещественных чисел,


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

Разработка алгоритма решения задачи представлена на рис. 91.

185
Н ачало

chislo

pol = О

otr = О

chislo
pol, otr

(~_ _К_о_
не_ц_ _~)
Рис. 91 . Алгоритм решения зада ч и

Листинг программы

PuЬlic Class Forml


Private SuЬ Forml_Load(ByVal sender As System.Ob-
ject , ByVal е As System.EventArgs) Handles MyBase.Load
Di m po l, otr, ch i slo As Single
pol = О ' Обнуление ячеек , отвечающих
за накопление суммы

otr = О
chi s l o = I nputBox ( " Вв еди т е чи с л о " , " Вв од
чисел " ) 'Вв од п ер в ого ч и сл а
Do While c hi s l o <> О ' Пока вв е д енное чи с л о
не равно числу О, выполнять тело цикла
If chislo > О Then
pol = pol + chislo ' Увеличение
з н аче ни я ячей ки на в е личи н у чи сл а в с л учае исти н ност и
про в еряемого усл о в ия

186
El se
otr = ot r + ch i slo ' Увеличе ние
зна ч ения я ч ейки на велич ину числа в случ ае , если
п роверяемое условие лож н о

End I f
chis l o = Input Box ( " Введи т е ч исло ", " Ввод
числа " ) 'Вв од очеред н ого числа
Loop ' Завершение цикла
MsgBox ( " Сумма положительных = " & pol &
чисел ",
а сумма отрица т е л ьных чисел =" & otr , MsgBoxStyle.
Inf o r ma tion , " О тв е т")
Ме . Close ()
End Sub
End Class

Задача 4. Вводится последовательность вещественных чисел,


не равных нулю. Известно, что п оследний элемент п оследова­
тельности равен нул ю. Найдите среднее арифметическое этих
чисел.

Разработка алгоритма решения задачи представлена на рис. 92.

( Н ачало )
chislo

kol =О

sum = О

Нет Да

kol = kol + 1

sum = s нm + chislo
srarifin = sum/ kol
chislo
srarifm

Коиец

Рис. 92. Алгоритм решения зада чи

187
Листинг программы

PuЬlic Class Forml


Private SuЬ Forml_Load(ByVal sender As System.Ob-
ject, ByVal е As System . EventArgs) Handles MyBase . Load
Dim chislo , sum, srarifm As Single
Dim kol As Integer
chis l o = InputBox (" Введите число ", " Ввод
чисел " ) 'В вод первого числа

ko l = О
sum = О
Do While chislo <> О ' Пока введенное число
не равно О, выполнять тело цикла
kol - kol + 1 ' С ч ет чик уве личивае т ся
на 1
sum = sum + chislo ' Увеличение значения

ячейки на величину числа

chis l o = InputBox ( " Введите чис л о ", " Ввод


числа ") 'В вод очередного числа
Loop ' Завершение работы цикла
s r a rifm = sum / kol
MsgBox ( " Сред н ее арифме тическое чисе л - " &
srarifm , MsgBoxStyle . Exclamation , " Ответ " )
Ме . Close ()
End Sub
End Class

Задача 5. Вводится последовательность целых чисел, не равных


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

Листинг программы

PuЬlic Class Forml


Private SuЬ Forml_Load(ByVal sender As System.Ob-
ject, ByVal е As System.EventArgs) Handles MyBase.Load
Dim kol otr As Int ege r
Dim srarifm, ch i slo , sum As Single

188
( Н ачало )
cl1islo

kolotr =О

sum = О

Нет Да

Нет Да

kolotr = kolotr + 1

su1n = sum + cl1islo

cl1islo

srarifm = sum / kolotr

kolotr, srarifm

Конец

Рис. 93. Алгоритм решения задачи

ch i slo = InputBox ( "Вв е дите ч и сло ", "Вв од


чисел " ) 'Вв од п ер в ого числа
kol ot r = О
sum = О
Do Wh ile ch i slo <> О ' По ка вв е д е нн ое ч и сло
не ра в но О, вып ол ня т ь те л о ци кл а
If chislo < О Then ' П роверка :
отрица т ельно ли введенное число или нет ?
kolotr = kolot r + 1 ' Увеличение
значения ячейки на 1 в случае истинности проверяемого
условия

189
sum = sum + chislo ' Увеличение
зна ч ения я ч ейки на велич ину числа в случ ае ис т ин н ос т и
п роверяемого условия

End I f
chi slo = I nputBox ( " Введите число ", " Ввод
ч исла " ) ' Ввод о ч ередного ч исла
Loop 'Завершение работы цикла
s r a r i f m = sum / kolo tr
MsgBox ( " Коли ч ес т во отрица т ельных чисел - " &
kol o t r & ", а сре д нее арифме т и ч еское ч исел = "
& s r arifm, MsgBoxStyle . Inf o r ma tion , " О т ве т" )
Ме . Close ()
End Sub
End Class

Контрольные вопросы и задания


1. В каких случаях применяются циклы с неизвестным числом повто-
реиий?
2. Приведите общий вид в алгоритме оператора цикла Do While ... Loop.
3. Напишите синтаксис оператора цикла Do While ... Loop.
4. Расскажите о работе оператора цикла Do While ... Loop. Приведите
примеры.

5. В чем отличие организации регулярных и итеративных циклов?


6. П роведите сравнение известных вам итеративных циклов с точки
зре~-rия их организации и работы.

Задачи для самостоятельного решения


1. Разработайте алгоритм и программу решения следующей задачи.
Н айдите максимальное значение функции у = cosx/sinx на отрезке
[а, Ь] с шагом h.
2. Вводится последовательность веществе~-rных чисел. Известно, что по ­
следний элемент последовательиости равен пяти. Найдите количество
положительных чисел и минимальное из них. Разработайте алгоритм
и программу.

3. Вводится последовательность целых чисел. И звестно, что последиий


элемент последовательности равен единице . О пределите, каких чисел
среди них больше : положительных или отрицательных. Разработайте
алгоритм и программу.

4. Вводится последовательиость вещественных чисел, ие равных нулю.


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

190
5. Вводится последователы-rость целых чисел . Опр еделите сумму поло ­
жительных чисел до первого отрицательного числа. Разработайте ал­
го р итм и программу.

6. Вычислите сумму не р авных аул ю чисел и выведите эту сумму в ка ­


честве ответа. Разработайте алгоритм и пр ограмму.
7. В программе определяется количество чисел, сумма котор ых меньше
зада1пrого числа. Разработайте алгоритм и программу.
8. Известны аачальиый вклад клиеита в баик и проце~-rт годового дохода.
О пределите срок, через который вклад превысит 1 млн руб.., и вели­
чину этого вклада. Р азработайте алгоритм и программу.
9. Вычислите сумму четных чисел на отрезке от 10 до 30. Разработайте
алгор итм и прогр амму.

10. О пр еделите идеальный вес для вз рослых людей по фо р муле : иде­


альаый вес = рост - 100. Выход из цикла: значение р оста = 250. Раз ­
работайте алгоритм и программу.
Глава 7
РАБОТА С ОДНОМЕРНЫМИ МАССИВАМИ

Массивы - это формальное объединение нескольких одно ­


типных объектов (чисел, символов, строк и т.п.), рассматриваемое
как единое целое.

К необходимости применения массивов мы приходим всякий


раз, когда требуется связать и использовать целый ряд род­
ственных величин. Например, результаты многократных замеров
температуры воздуха в течение года удобно рассматривать как со ­
вокупность вещественных чисел, объединенных в один сложный
объект - массив измерений. Чаще всего пользователь работает
с одномерными и двумерными массивами.

При создании массива Microsoft Visual Basic выделяет под него


место в памяти. Элементы массива из 10 составляющих нумеру­
ются числами от О до 9, а не от 1до10, поскольку для первого эле­
мента массива используется индекс О.
Размер массива в Microsoft Visual Basic определяется следующим
выра)кением:

a.Length,
где а - имя массива.

Так, если исходный массив а содержит элементы с а(О) по а(11),


то размер массива определяется как число 12.
Все массивы имеют доступ к методам и свойствам класса Systern.
Array, включая свойство Length. Например, метод GetUpperBound
возвращает индекс последнего элемента в массиве.

Для одномерных массивов аргумент, передаваемый методу


GetUpperBound, равен О. Например, выражение а. GetUpperBound( О)
относительно предыдущего примера возвращает число 11. Видно,
что значение, возвращаемое методом GetUpperBound, на единицу
меньше, чем значение свойства Length массива.
Синтаксис объявления одномерных массивов следующий:

Dirn ИмяМассива (i) As Тип_данных()

где i - количество элементов в массиве.

Круглые скобки после типа данных указывают на то, что а - это


массив.

Мож:но объявить массив без указания его размерности:

Dirn а As Integer()

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

слово New. Такой способ будет использоваться в примерах данной


главы.

Массивы в Microsoft Visual Basic представлены как объекты.


Чтобы выделить память для массива а после того, как он был объ­
явлен, используется о ператор

а= New Integer (11) {}


В данном случае число 11 устанавливает верхнюю границу мас­
сива. Границы массива определяют, какие индексы могут исполь­
зоваться для доступа к элементу массива. Границами нашего мас ­
сива являются О и 11, т.е. для доступа к элементам этого массива
не может использоваться индекс вне этих границ. Реальный размер
массива на единицу больше, чем верхняя граница, определенная
при выделении памяти.

Обязательные фигурные скобки{} называются списком иници­


ализаторов и определяют начальны е з наче ния элементов массива.

Список инициализаторов мож:ет содер:>кать список с запятой


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

Dim а As Integer ()
а= New Integer () {28, 19, 62}

Microsoft Visual Basic может определять границы массива


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

Выделение памяти для массива может быть объединено с объяв­


лением, как в следующем операторе:

Dim а As Integer () = New Integer ( 11) {}


Несколько массивов можно объявить с помощью единственного
оператора, например:

Dim а, Ь As DouЬle ()

Пример
В одномерном массиве заданн ых целых чисел найдите сумму
элементов массива.

193
Разработка алгоритма решения задачи представлена на рис. 94.
Н ачало

i = 1, 10

a(i)

sum = О

i = 1, 10

sнm = sum + a(i)

sum

Конец

Рис. 94. Алгоритм решения зада чи

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Di m output As String
Di m а As In t e ger () - Ne w Integer () {1 , 2, 3,
4, 5, 6 , 7 , 8 , 9 , 1 0}
Di m sum As Integer
Di m i As Byt e
ou t pu t &= " Индексы массива " & vbTab &
" Исход н ый массив " & vbCrLf
sum = О

194
For i = О То а . Ge t UpperBound (О)
s um = s um + а ( i )
out put &= i & vbTab & vbTab & a(i) & vb-
CrLf
Next
output &= vbCrLf & " Сумма элементов массива
равна " & sum
MessageBox . Show (output , " Сумма элементов ",
MessageBoxButtons . OK , MessageBoxicon . Information )
End Sub
End Class

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

Сумма элементов х

о ~ндексы массива Исходный массив


1
1 2
2 3
3 4
4 5
5 б
б 7
7 8
8 9
9 10

Сумма :элементов массива равна 55

ок

Рис. 95. Результаты выполнения программы «Сложение элементов


одномерного массива »

Заполнение массива случайными числами

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByValsender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl .
Click
Dim output As String
Dim а As Integer () = New Integer ( 9) {}

195
Dim sum As Integer
Dim i As Byt e
Randomize ()
output &= " Индексы массива " & vbTab &
" Исхо д ный массив " & vbC rLf
For i = О То а . Ge t UpperBound (О)
' а (i) = С I n t (I n t ( 1 О О * Rn d ( ) ) + 1 )
' заполнение массива на интервале от 1 до 100
а (i ) 8 * Rnd () ' случайное число
из диапазона от О до 8
Next
sum = О
For i = О То а . GetUpperBound (О)
s um = s um + а ( i )
output &= i & vbTab & vbTab & a(i) & vb -
CrLf
Next
output &= vbCrLf & " Сумма элемен т ов масс ив а
равна " & sum
MessageBox . Show(output , " Сумма э лемен т ов ",
MessageBoxBut tons . OK, MessageBoxicon .Information)
End Sub
End Class

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

Сумма элементов х

о1
Индексы массив.а Исходный массив
() 5
1
2 7
3 2
4 7
5 4
б 7
7 1
8 з
9 2

Сумма элементов массива равна 39

ок

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


«Сложе ние элементов одномерного массива»

196
Вывод элементов массива на элемент управления ListBox

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System.
Object , ByVal е As System . EventArgs) Handles Buttonl .
Click
Dim а As Integer () = New Integer ( 9) { }
Dim sum As I n t eger
Dim i As Byte
Randomiz e ()
Lis tB oxl . Items . Add( " Ин д е к сы массива " &
" Исходный масси в ")
For i = О То а. Ge t UpperBound (О)
а (i ) = 10 * Rnd () ' случайное число
из ди апазона от О до 10
Next
sum = О
For i = О То а . GetUpperBound (О)
s um = s um + а ( i )
Li s t Box 1 . I tems . Add ( " " & i & " "
& a(i))
Nex t
MsgBox ( " Сумма элементов - " & sum, MsgBox -
Style . In f o r ma ti on , " О тв е т " )
End Sub
End Class

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

•.._ Одномерные массивы о х

Индексы массива Исходный массив


о 9
1 6
2 7
з 2
4 10
5 6
6 1
7 1
8 5
9 6

Ok

Рис . 97. В ывод одномерного массива на элемент управления Li stBox

197
Информационное окно с сообщением об ответе пр едставлено
на рис. 98.

Ответ х

• Сумм,а эл:ементов = 5-3

ок

Рис. 98. Ответ, выведенный с использованием функции MsgBox

Вывод элементов массива на элемент управления TextBox

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim output As Str ing
Dim sum As I n t eger
Dim а As Integer () = New Integer ( 1 О) { }
Dim randomNumber As Random = New Random ()
Dim i As Byte
TextBoxl . Text = ""
Label l. Tex t = ""
For i = 1 То а . Ge t UpperBound (О)
a( i ) = randomNumber . Next(21) ' ди а пазон от О
до 20
Tex tBoxl . Tex t &= String . Format( " {O : dl} ",
a( i )) & " "
Labe ll. Tex t &= Stri ng .Format (" {O : d2} ", i)
& " "
Next
sum - О
For i - 1 То а.
GetUpperBound (О)
s um = s um + а ( i )
ou t put &= i & vbTab & vbTab & a(i) & vbCrLf

198
Next
MsgBox ( " Сумма элементов - " & sum, MsgBox-
St y l e . In f ormation, " О тв е т" )
End Sub
End Class

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

а Одномерные массив ы о х

Индексы

о 1 2 з 4 5 6 7 8 9

18 4 18 6 2 о 19 о 5

Ok

Рис. 99. Вывод одномерного массива на элемент управления TextBox

Вывод элементов массива на элемент управления DataGridView


Элемент управления DataGridView предназначен для ото­
бра)кения табличных данных. У становим свойство .RowCount,
равное 2, для отображения двух строк, в первую из которых осуще­
ствим вывод номеров элементов массива, а во вторую - их значения.

При использовании табличного компонента нам придется от­


крывать цикл с единицы, а не с нуля, как было ранее. Связано это
с тем, что в нулевой столбец DataGridView будут выведены пояс­
няющие надписи i (номер элементов) и a(i) (значения элементов).
В операторе DataGridViewi.Rows(O)Cells(O)Value = "i" метод
.Value отвечает за вывод значения в нулевую ячейку (.Cells(O))
строки с номером О (.Rows(O)) компонента DataGridViewi . Ме­
тоды ColumnHeadersVisihle и Row Headers Visihle, установленные
в положение False, отключают заголовочную часть табличного
компонента в строках и столбцах, которая имеется у них по умол ­
чанию .

199
При выводе сгенерированных элементов массива и их номеров
в табличный компонент мы конвертируем их значения в строковый
тип операторами Convert.ToString(a(i)) и Convert.ToString(i)

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Dim а As Integer () = New Integer ( 11 ) { }
Dim randomNumber As Random = New Random ()

DataGridViewl . RowCount = 2
DataGri dVi ewl. ColumnCoun t = a . GetLength(O) - 1
DataGridViewl . Rows (0).Cel l s (0).Value = " i "
DataGri dVi ewl . Rows(l) . Ce l ls(O) . Value = " a(i) "
DataGridViewl . ColumnHeadersVisiЬle = Fal se
DataGr i dV i ewl . RowHeadersV i siЫe = False

For i = 1 То 10
а ( i) = randomNumber . Next (21) 'диапазо н
от о до 20
Next
1 То 10
For i =
Da taGridViewl . Columns ( i) . Wi dth = 50
Da taGr idViewl . Rows (О). Cell s ( i ). Val ue -
Convert.ToString(i)
Da taGr idViewl . Rows ( 1 ). Cell s ( i ). Val ue -
Convert . ToString(a(i))
Next
End Sub
End Class

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


одномерного массива показан на рис. 100.
•J Одномерные массивы о х

Исход11ый массив

2 з 4 5 б 7 8 9 10

6 15 7 5 17 15 9 19 19 17

< >

Ok

Рис. 100. Одномерный массив выведен в компонент DataGridView

200
7.1. БАЗОВЫЕ АЛГОРИТМЫ ОБРАБОТКИ ОДНОМЕРНЫХ
МАССИВОВ

Решение задач, связанных с обработкой одномерных массивов,


базируется на элементарных приемах обработки данных. Разбив за­
дачу на логические части, можно значительно ускорить ее решение.

Выше было отмечено, что массив - это объединение нескольких


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

Из всего многообразия существующих приемов, позволяющих


манипулировать с данными, представленными в одномерных мас ­

сивах, мож:но выделить следующие:

1) нахождение количества элементов при заданном условии;


2) нахож:дение суммы значений элементов при заданном
условии;

3) нахо)кдение произведения значений элементов при заданном


условии;

4) поиск экстремальных значений элементов массива (поиск


максимального и (или) минимального значения);
5) вставка и (или) удаление значения элемента массива;
6) формирование массива В из элементов массива А в соответ­
ствии с некоторым критерием;

7) формирование массива в соответствии с определенными


правилами;

8) обмен значений элементов массива;


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

шении задач и в настоящее время не требуют комментариев. Однако


стоит отметить, что в последующих примерах очередной элемент
массива сравнивается с числом 10, хотя на практике лучше органи­
зовать запрос условия, например, с помощью функции InputBox.

Нахождение количества элементов при заданном условии

kol =О
For i =О То 9
If а ( i) > = 1О Then
kol = kol + 1
End If
Next

201
Нахождение суммы значений элементов при заданном условии

sum= О
For i =О То 9
If а ( i) > = 1О Then
sum = sum + а ( i)
End If
Next
Нахождение произведения значений элементов при заданном
условии

proizv = 1
For i =О То 9
If а ( i) > = 1О Then
proizv = proizv * а (i)
End If
Next
Поиск максимального элемента массива

max =а (О)
For i = 1То9
If а (i) > max Then
max =а (i)
End If
Next
Вставка значения нового элемента в массив

Прежде чем добавить новый элемент в массив, нужно осво­


бодить соответствующее место. Для этого, начиная с конца мас ­
сива, элементы сдвигаются вправо, т.е. 6-й элемент перемещается
на 7-е место, 5-й элемент перемещается на 6-е место и т.д. После
этого освободившееся место с порядковым номером poz з анимает
значение znach.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Dim poz , i , znach As Integer
Dim а As In t e ger () = New Intege r ( 1 О ) { }
Dim randomNumber As Random = New Random ()
TextBoxl . Text = ""

202
TextBox2.Text - ""
Labe l2 . Tex t = ""
For i = О То 9
a(i) - randomNumber . Next(21) ' ди а пазон от О
до 20
Tex tBox l . Text &= St rin g. Forma t (" {O : dl} ", a(i))
& vbTab
Label2 . Text &= String . Format ( " {О : d2} ", i ) &
" "
Next
znach = InрutВох( "Вв еди т е вс та вляемый э лемен т " )
poz = InputBox ( "Н а какое место в массиве вы
хо ти те вставить элеме нт? " )
For i = 9 То poz Step -1
a( i + 1) = a( i )
а (i ) znach
Next
For i - О То а . GetUpperBound (О)
Tex tBox2.Tex t &= St rin g. Forma t (" {O : dl} " , a(i))
& vbTab
Next
End Sub
End Class

Результат разработанной программы представлен на рис. 101.

о Одномерные массивы о х

Индексы

00 01 02 03 04 05 Об 07 08 09
Исхо,DJ-tый массив

14 18 9 10 18 18 12 15 11

1'
Ре:з~льтир~'lОщий массив

14 18 зз 9 10 18 18 12 15 11

1'

Ok

Рис. 101. Осуществлена вставка числа 33 на третье место

203
Удаление значения элемента из массива

Для удаления значения элемента массива, стояще го на позиции


poz, следует сдвинуть на соседнее место слева все п оследующие

элементы, начиная с poz + 1 и заканчивая позицией n.


Самый интересный момент в пр ограмме - э то удаление по ­
следнего элемента с 10-й позиции. В этом случае poz + 1 в цикле
будет равно 11 и цикл не выполнится ни разу, т.е. о ператор
a(i- 1) = a(i) не выполняется, а за счет выполнения For i = 1 То
a.GetUpperBound(O) - 1 мы избавляемся от последнего элемента
в массиве.

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Const n As Integer = 10
Di m poz As I nteger
Dim i As Byte
Di m а As Integer () = New Integer (n) { }
Dim randomNumЬer As Random = New Random ()
TextBox l . Text - ""
TextBox2. Text = ""
LabelЗ . Text = ""
For i = 1 То a . GetUpperBound(O)
a(i) = r andomNumЬer.Nex t (2 1 ) ' диа п азо н

ОТ 0 ДО 20
TextBoxl . Text &= String.Fo rmat( " {O : dl} ",
a( i )) & vbTab
LabelЗ . Text &= String. Format (" {O : dl} ", i ) &

" "
Next
poz - InputBox ( " Какой элемен т удаляем ? " )
For i - poz + 1 То n
a(i - 1) = a(i)
Next
For i = 1 a.Ge tUpperBound(O) - 1
То
TextBox2 . Text &= String.Format(" {O : dl} ",
a(i)) & vbTab
Next
End Sub
End Class

204
Результат разработанной программы представлен на рис. 102.

• Одномерные м а ссивы о х

Исходrtый массив

Индексы

о 2 з 4 5 6 7 8 9

14 9 13 10 з 6 15 14 14

1'
Результирующий массив

14 9 13 10 з 6 15 14

1'
Ok

Рис. 102. Восьмой элемент со зна чени ем 14 отсутствует в результирующем


массиве

Формирование массива В из элементов массива А в соответствии


с некоторым критерием

Задача. Из элементов одномерного массива произвольных


целых чисел сформируйте другой массив, элементы которого
по модулю больше некоторого значения.
После формирования одномерного массива с помощью гене­
ратора случайных чисел у пользователя запрашивается число.
После того как будет выполнена проверка условия: больше или нет
(по модулю) очередной элемент массива введенного пользователем
числа, должен формироваться рез ультирующий массив оператором
b(n) = a(i). Для формирования элемента массива Ь с индексом О,
т.е. Ь(О) служит оператор n = О . Затем значение ячейки n увеличи­
вается на единицу оператором n = n + 1, и в случае истинности про­
веряемого условия будет формироваться второй элемент массива
Ь, т.е. Ь(1). В конце программы предусмотрена проверка на случай,
если пользователь не введет нужного числа. В этом случае выво­
дится ответ, что ~в массиве нет чисел больше введенного вами
числа~, в противном случае с помощью цикла с оператором For
выводится результирующий массив.
Разработка алгоритма решения задачи представлена на рис. 103.

205
Начало

i=о 9
'

a(i)

zпach

n =O

i=о 9
'

Нет Да

b(n) = a(i)

n = n+1

Нет Да

i =О , n- 1 В массиве нет чисел


больше введенного

b(i)

Конец

Рис. 103. Алгоритм решения задачи

206
Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(sender As Object , е As Even-
tArgs) Handles Buttonl . Click
Const size As Integer = 9
Dim znach As Integer
Dim i , n As Byte
Dim а As Integer () = New Integer (size) {}
Dim Ь As I nteger () = New Integer (size) {}
Dim randomNumЬer As Random = New Random ()
TextBoxl . Text - ""
TextBox2 . Text = ""
LabelЗ . Tex t = ""
For i = a . GetUpperBound(O)
О То
a(i) = -10 + randomNumЬe r . Next(21)
TextBoxl . Text &= String . Format( " {O : dl} " ,
a(i)) & vbTab
Labe lЗ . Text &= String . Format (" {О: dl } ", i) &
" "
Next
znach = InputBox ( " Введите значение ", " Ввод
числа ") ' Пользователь вводит число
n = О ' Исход ное з на чен ие ячейки n
приравнивается нулю

For i = О То a . GetUppe rBound(O) ' Орган и зуе т ся


цикл для перебора элементов одномерного массива
If Math . Abs(a(i)) > znach Then ' Проверка
усл о в ия

b(n) = a(i) ' Формирование


э ле ме н то в результирующего масс ива в с лучае ист инн ос ти

про в еряемого усл о в ия

n = n + 1 ' Увеличение счетчика


на един ицу для формир о вания очеред н ого э ле ме н та масс ива
End If
Next
I f n = О Then 'Про верка на с л учай , если
в ячейке n остался предварительно занесенный нуль

и сче т ч ик не у ве ли чивал с в ое г о зна ч ения

MsgBox ( " В массиве нет чисел больше

введе н но г о вами ч и сла " , MsgBoxStyle . I nf or mation ,


" О тв е т " )

207
El se
For i = О То n - 1
TextBox2 . Te xt &= St ring .
Forma t (" {О : dl } ", Ь ( i) ) & vbTab
Next
End If
End Sub
End Class

Результат разработанной программы представлен на рис. 104.


•" Одномерн ы е массивы о х

Исходный массив

Индексы

о 2 з 4 5 6 7 8 9

-7 -4 4 -5 -З 9 8 6 4

1'"
Резуль-тирующий массив

9 8
1-10

Ok

Рис. 104. Результирующий массив содержит элементы, которые больше


по модулю введенного числа 7

Формирование массива в соответствии с определенными


правилами

Выше рассматривались способы заполнения массива с помощью


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

правилами, например в зависимости от некоторых условий.


Задача. Сформируйте одномерный массив из 1О элементов
по следующему правилу.

Листинг программы

PuЬlic
Class Forml
Private SuЬ Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click

208
Const n As I nteger 9
Di m i As Byte
Dim а As I ntege r () New Intege r (n) {}
TextBoxl . Text ""
TextBox2 . Text ""
LabelЗ . Text = ""
For i = О То а . GetUpperBound (О)
If i < 5 Then
а (i) (i * i * i - 4) / (i + 1)
Else
а (i) = (i * i - 36) / i
End If
TextBoxl .Text &= Str i ng .
Forma t (" {О : d l } ", а ( i ) ) & vb Tab
L abelЗ . Text &= Stri ng .Forma t (" {O : d l }",
i ) & " "
Nex t
End SuЬ
End Class

Результат разработанной программы представлен на рис. 105.

а Одномерные массивы о х

Исходный массив

Индексы

о 1 2 з 4 5 6 7 8 9

1~
-2 1 6 12 -2 о 2 4 5

Результирующий массив

Ok

Рис. 105. Одномерный массив, сформированный по определенному правилу

209
Обмен значений элементов массива

Задача. В одномерном массиве из 10 целых чисел найдите мак­


симальный и минимальный элементы, а также осуществите их
обмен.
Методы сортировки элементов одномерного массива, которые
будут рассмотрены позднее, потребуют вспомогательный алгоритм
обмена элементов одномерного массива.
Для того чтобы обменять элементы массива местами, нам по­
требуются две ячейки: nommax и nommin. Изначально считаем,
что номер максимального элемента в массиве равен нулю и номер

минимального элемента также равен нулю. Отсюда операторы


в программе: nommax =О и nommin =О. Приемы нахождения мак­
симального и минимального чисел рассматривались при програм­

мировании циклических алгоритмов, поэтому сейчас мы на них


останавливаться не будем. Для того чтобы осуществить обмен
ячеек, необходима третья ячейка, например n.
Пусть сгенерирован массив целых чисел (рис. 106).

~~2
12 з 56 4 8 34 23 87 29 20

n
1
Рис. 106. Алгоритм обмена элементов в массиве

Минимальный элемент в массиве равен 3 с порядковым но­


мером 1, т.е. А(1). Максимальный элемент в массиве равен 87,
с порядковым номером 7, т.е. А(7). Возьмем третью ячейку - n.
Первым действием (1) будет перемещение в нее найденного мини­
мального числа. Вторым действием (2) на освободившееся место
перемещаем максимальное число. И наконец, третьим действием
(3) минимальное число из ячейки n помещается на то место в мас­
сиве, где только что находилось максимальное число. В программе
эти действия можно было бы описать операторами:

n =а (1)
а (1) =а (7)
а (7) = n

Но поскольку заранее неизвестно, какой элемент в массиве будет


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

210
n =а (nommin)
а (nommin) =а (nommax)
а (nommax) = n

Разработка алгоритма решения задачи представлена на рис. 107.

Начало

i = о' 9

a(i)

nom1nax = О

no1nmin = О

1nin = 32767

max = - 32768

i =О, 9

Нет Да

min = a(i)

. .
nomm1n = 1

Нет Да

max = a(i)

nom1nax = i

Рис. 107. Алгоритм обмена элеме нтов в одномерном массиве (начало)

211
1
n 1 = а( nom1nin) 1

1
a(nommin) = a(nommax) 1

1
a(nommax) ;;:; n1 1

max, m1n

- i = о, 9
~

a(i)

( Кон ец )
Рис. 107. Алгоритм обмена элементов в одномерном массиве (око нчани е)

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Dim i As Byte
Dim max , min, nommin, nommax, nl As Integer
Dim а As I nt eger () = New I nt ege r ( 9) { }
Dim r andomNumЬe r As Random = New Random ()
TextBox l . Text - ""
TextBox2 . Text - ""
L abelЗ . T ext = ""

2 12
For i = О То a . Ge tUpperBound(O)
a(i) = randomNumЬe r.Nex t(21)
Text Boxl . Text &= String . Fo r mat( " {O : dl} ",
a( i )) & vbTab
Labe l З . Tex t &= Stri ng . For mat (" {O : dl} ", i ) &

" "
Next
nomm1n = О ' С ч итаем , ч т о н омер минималь н ого

элеме н та в массиве равен О


nommax = О ' С ч итаем , ч то н омер максимал ьно г о

э ле ме н та в массиве равен О
m1n - 32767
max - - 32768
For i = О Т о a . Ge tUpperBound(O)
I f а (i) < mi n Then ' Поиск ми нималь ного
элемен т а в массиве

min = а (i)
nomm1n = i 'Нах ожде ние его номера
End I f
I f a(i) > max Then 'П о и ск максима л ьно г о
элемен т а в массиве

max = а (i)
nommax = i ' Нахождение его

номера

End I f
Next
nl = а (nommi n) ' Обмен элемен т ов массива
a(nommi n) = a(nommax)
a(nommax) = nl
MsgBox ( " Мин имал ьн ое числ о - " & m1n, MsgBox-
Style . In f or ma ti on , " О т ве т" )
MsgBox ( " Максимальное число = " & max , MsgBox -
Style . In f or mation , " О тв е т" )
For i = О Т о a . Ge tUpperBound(O)
Text Box2 . Text &= String . Fo r mat( " {O: dl} ",
a( i )) & vbTab
Next
End SuЬ
End Class

213
Результат разработанной программы представлен на рис. 108.

•" Одн омерные масси в ы о х

ИсходНый массив

Индексы

о 1 2 з 4 5 6 7 8 9

5 з 16 7 4 о 2 12 10

1'
Резуль;ирующий массив

5 з о 7 4 16 2 12 10

1'
Ok

Рис. 108. Минимальный элемент в исходном массиве со значением О обменен


с максимальным элементом со зна чен ием 16

7.2. УПОРЯДОЧИВАНИЕ ОДНОМЕРНЫХ МАССИВОВ

П од упорядочиванием (сортировкой) массива подразумевается


процесс перестановки элементов массива, целью которо г о явля­

ется размещение элементов массива в определенном порядке. За­


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

Наиболее часто применяются следующие способы упорядочи ­


вания массивов:

· упорядочивание по возрастанию. Каждый следующий элемент


в массиве должен быть больше предыдущего;
· упорядочивание по уб·ыванию. Каждый следующий элемент
в массиве должен быть меньше предыдущего;
· упорядочивание по неубыванию . Каждый последующий эле­
мент в массиве должен быть больше предыдущего или равен ему;
· упорядочивание по невозрастанию . Каждый последующий
элемент в массиве должен быть меньше предыдущего или равен
ему.

Главным показателем качества алгоритма сортировки считается


его быстродействие, так как программы работают с большими объ -

214
емами данных, сохраняемыми в массивах. Повышение быстродей ­
ствия, под которым п онимается уменьшение количества просмо­

тров массива от начала до конца (проходов) с целью определения


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

зуется дополнительный цикл, который позволяет пользователю


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

7.2.1. Упорядочивание методом прямого выбора


Задача. Упорядочьте элементы одномерного массива произ­
вольных чисел по возрастанию их значений.
Алгоритм упорядочивания массива по возрастанию методом
прямого выбора может быть представлен следующим образом:
1) просмотреть массив от первого элемента, найти мини ­
мальный элемент и поместить его на место первого элемента,
а первый - на место минимального;
2) просмотреть массив от второго элемента, найти мини ­
мальный элемент и поместить его на место второго элемента,
а второй - на место минимального;
3) данный процесс осуществлять до предпоследнего элемента.
Разработка алгоритма решения задачи представлена на рис. 109.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Cons t s ize As Int e ger = 6
Dim min, j, bufer, i, k As Int e ge r
Dim а As I nt e ger () = New Int e ge r (size) { }
Dim randomNumЬer As Random = New Random ()
TextBox l . Text - ""
Text Box2 . Text = ""
Label З . Text = ""
For i = О То a . Ge tUpperBound (O)
a(i) = randomNumЬer . Nex t (З l )
TextBoxl . Text &= String . Format(" {O : dl }",
a (i )) & vbTab

215
Начало

i= О, Size

a(i)

i =О Size - 1
'

nom1nax = О

j = i + 1, Size

Нет Да

. .
m1n =J

bufer = a(i)

a(i) = a(1nin)

a(min) = bufer

k = 1, Size

a(k)

Конец

Рис. 109. Алгоритм решения задачи

216
LabelЗ . Tex t &= St r ing . Fo r ma t (" {O : dl} " , i)
& " "
Next
' Обработка массива
Fo r i =
О Т о s i ze 1 ' П оиск минимально г о
элемен т а в части массива от а (1) до а (S i ze)
m1n = i
Fo r j = i + 1 То si ze
I f a(j) < a(min) Then
m1n = J
End I f
Nex t
' Меняем мес т ами а (mi n) и а (i )
bufer = а (i)
а (i) = а (min)
a(min) = bu f e r
' Выво д массива н есколько раз для
д ос т иже н ия эффек т а н аглядности
For k = О То a . Ge tUpperBound(O)
Text Box2 . Text &= String . Format (" {О : d l }" ,
a( k )) & vbTab
Next
Next
End Sub
End Class

Результат разработанной программы представлен на рис. 110.


•} Одномерные массивы о х

Исхо.аttЬ~й массив

Индексы

о 2 з 4 5 6

1~
18 29 18 26 2 10

Результирующий массив

2 18 29 18 26 29 10
2 10 29 18 26 29 18
2 10 18 29 26 29 18
2 10 18 18 26 29 29
2 10 18 18 26 29 29
2 10 18 18 26 29 29

Ok

Рис. 110. Упорядочивание массива методом прямого выбора

217
7.2.2. Упорядочивание элементов методом обмена
(метод «пузырька»}

Задача. Упорядочьте элементы одномерного массива произ­


вольных чисел по возрастанию их значений.
Например, исходный массив представлен числами: 7 З 5 4
2, тогда после его обработки он будет выглядеть так: 2 З 4 5 7.
В основе алгоритма лежит обмен соседних элементов массива.
Каждый элемент массива, начиная с первого, сравнивается со сле ­
дующим, и если он больше следующего, то элементы меняются
местами. Таким образом, элементы с меньшим значением продви­
гаются к началу массива (всплывают), а элементы с большим зна­
чением - к концу массива (тонут). Поэтому данный метод сорти­
ровки часто называют методом «nузъ~рыса~.
Этот процесс повторяется столько раз, сколько элементов в мас­
сиве, минус единица.

Упорядочивание массива достигается, если после выполнения


очередного цикла проверки соседних элементов ни один элемент

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


Разработка алгоритма решения задачи представлена на рис. 111.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(sender As Object, е As
EventArgs} Handles Buttonl.Click
Cons t size As Int ege r = 6
Dim j, bufer, i, k As Integer
Dim а As Integer () = New Integer (si ze) { }
Dim randomNumber As Random = New Random ()
TextBox l . Text - ""
TextBox2 . Text = ""
Labe l З . T ext = ""
Fo r i = О То а. Get Uppe r Bound (О)
a(i) = randomNumber . Next(Зl)
TextBoxl . Text &= String .Format(" {O: dl} ",
a(i)) & vbTab
Lab e l З . Text &= St r ing . Format( " {O:dl}", i)
& " "
Next
' Обработка массива
Fo r i = О Т о s ize - 1
For j = i + 1 То s i ze

218
Начало

i = О, Size

a(i)

i = О, Size - 1

j = i + 1, Size

Нет Да

bнfer = a(j)

a(j) = a(i)

a(i) = bufer

k = О, Size

a(k)

Конец

Рис. 111 . Алгоритм решения задачи

219
If а (i ) > а ( j) Then
buf er= а ( j)
a(j) = a(i)
a(i) = bufer
'Вывод массива несколько раз
для дос тижения эффек т а наглядности
For k = О То a . GetUpperBound(O)
TextBox2 . Text &= String . Format
( " {О : d l } ", а (k)) & vbTab
Next
End I f
Next
Next
End Sub
End Class

Результат разработанной программы представлен на рис. 112.

а Одномерные массивы о х

Исходный массив

Индексы

о 1 2 з 4 5 6

19 12 7 15 11 2Э 12

Результир)'Ющий массив

12 19 7 15 11 29 12
7 19 12 15 11 2Э 12
7 12 19 15 11 29 12
7 11 19 15 12 29 12
7 11 15 19 12 29 12
7 11 12 19 15 29 12
7 11 12 15 19 29 12
7 11 12 12 19 29 15
7 11 12 12 15 29 19
7 11 12 12 15 19 29

Ok

Рис. 112. Упорядочивание массива методом пузырька

220
7 .2.3. Алгоритм упорядочивания элементов по убыванию

Задача. Упорядочить элементы одномерного массива произ­


вольных чисел по убыванию их значений.
Например, исходный массив представлен числами: 14 2 19 1
17, тогда после его обработки он будет выглядеть так: 19 17 14
2 1.
Словесный алгоритм работы программы можно выстроить сле ­
дующим образом:
1) сформировать исходный массив;
2) организовав внешний цикл, взять элемент массива с ну ­
левым номером и считать его максимальным;

3) организовав внутренний цикл, последовательно искать


среди оставшихся элементов массива такой элемент, который был
бы больше того, который считается максимальным;
4) если найден такой элемент, то осуществить перестановку;
5) взять следующий по порядку элемент массива и считать его
максимальным;

6) процедуру с поиском в цикле максимального элемента


и обмен элементов повторить.
Разработка алгоритма решения задачи представлена на рис. 113.

Листинг программы

PuЬlic Class Fo rml


Private Sub Buttonl_Click(sender As Object , е As
EventArgs) Handles Buttonl . Click
Cons t size As Integer = 9
Dim max, j, i As Integer
Dim а As Integer () = New Integer (s ize ) {}
Dim randomNumber As Random = New Random ()
TextBoxl . Text - ""
TextBox2.Tex t = ""
LabelЗ . Tex t = ""
For i = О То а. GetUpperBound (О)
a(i) = randomNumber . Next(Зl)
TextBoxl . Text &= String . Format( " {O : dl} ",
a(i)) & vbTab
LabelЗ . Text &= String . Format( " {O :dl}", i)
& " "
Next

221
Начало

i =о 9
'

a(i)

i =о 9
'

inax = a(i)

j = i + 1, 9

Нет Да

a(i) = aU )

aU ) = max

max = a(i)

i = О, 9

a(i)

Конец

Рис. 113. Алгоритм упорядочивания элементов массива по убыванию

222
For i = О То a . GetUpperBound (0) ' Организуется
цикл для перебора элемен т ов исходного од н омерно г о
масс и ва

max = a( i ) ' Макс имал ьным счи т ае т ся


нулевой элемент массива
For j = i + 1 То a . GetUpperBound(O)
' Организуется внутренний цикл для перебора элементов
и сход н ого о дн омерного масс и ва , н ачи н ая со в т оро г о

I f a(j) > max Then 'Е сли очеред н о й


э л еме н т масси в а бо ль ше , ч ем п ре дыдущий
а (i ) - а ( j) ' Происходит обмен
элементов массива

a(j) - max
max = а (i )
End I f
Next
Next
For i = О То а . GetUpperBound (О)
TextBox2 . Text &= String . Format( " {O : dl} ",
a( i )) & vbTab
Next
End Sub
End Class

Результат разработанной программы представлен на рис. 114.

а Одномерные массивы D х

Исходный массив

Индексы

о 1 2 з 4 5 6 7 8 9

22 6 7 8 о 25 14 23 5
18
Результирующий массив

1~
23 22 14 8 8 7 6 5 о

Ok

Рис. 114. Упорядочивание элементов массива п о убыванию их значений

223
7 .2.4. Метод бинарного поиска

Программисту часто приходится работать с большими мас ­


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

Например, массив фамилий упорядочен по алфавиту (осуществить


поиск фамилии), массив данных о погоде - по датам (осуществить
поиск температурного значения). Рассмотрим один из эффек­
тивных методов, который называется методом бинарно~о поиска.
Словесный алгоритм работы такого метода следующий:
1) сравнить образец со средним (по номеру) элементом мас ­
сива - если образец равен среднему элементу, то задача решена;
2) если образец больше среднего элемента, то искомый эле ­
мент располож:ен выше среднего элемента ( ме)кду элементами
с номерами Sred + 1 и verh), и за новое значение niz принимается
Sred + 1, а значение verh не меняется;
3) если образец меньше среднего элемента, то искомый эле­
мент расположен ниж:е среднего элемента (между элементами
с номерами и
Sred - 1), и за новое значение verh принимается
niz
Sred - 1, а значение niz не меняется;
4) после того как определена часть массива, в которой может
находиться искомый элемент, по формуле (verh - niz) / 2 + niz
вычисляется новое значение Sred и поиск продол)кается;
5) алгоритм заканчивает работу, если искомый элемент найден
или перед выполнением очередного цикла обнаруживается, что
значение niz больше, чем verh.
Таким образом, разобьем решение задачи на три этапа. На первом
v v
этапе с помощью генератора случаиных чисел выведем исходныи

одномерный массив. На втором этапе проведем упорядочивание


массива по возрастанию с помощью метода прямо~о выбора, рас­
смотренного выше. На третьем этапе осуществим поиска образца
в массиве с помощью метода бинарного поиска.
Разработка алгоритма решения задачи представлена на рис. 115.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object , е As
EventArgs) Handles Buttonl.Click
Const s i ze As I nteger = 9
Dim output As String = ""

224
Начало алгоритма следует смотреть в алгоритме «Метод прямого выбора~

niz = 1

veгh = Size

n=O

found = False

Sгed = Round ((veгh - пiz) / 2) + niz

niz, verh, sred

n = n+1

Нет Да

found = True
Нет Да

niz = sred + 1 Yei-h = яеd - 1

Нет Да

Да

Образец n, sred
не найден

Конец

Рис. 115. Алгоритм метода бинарного пои с ка

225
Dim obr As Integer ' Образец для поиска

Dim verh As I nteger 'Ве рх няя граница по и ска

Dim n1z As Integer ' Нижняя граница поиска

Dim sred As Integer ' Номер среднего элемента

Dim m1n As Integer


Dim f ound As Boolean ' TRUE - совпадение

образца с элементом массива

Dim n As Integer 'Чис л о срав н ений


с образцом

Dim buf er As Integer


Dim j As Integer , k As Integer , i As Integer
Dim а As Integer () = New Integer (si ze) { }
Dim r andomNumber As Random = New Random ()
TextBoxl . Text - ""
TextBox2 . Text = ""
LabelЗ . Tex t = ""
' 1 этап Ввод массива
For i = О То а . GetUpperBound (О)
a(i) = randomNumber . Next(51)
TextBoxl . Text &= String .For ma t(" {O : dl} ",
a(i)) & vbTab
LabelЗ . Text &= String . Format (" {O :dl} " , i )

& " "


Next
' 2 этап Упорядочивание элементов массива
с испол ь зова нием мето д а прямого выбора
For i = О То size - 1
' Поиск минимального элемента в части

массива от а (1) до а (si ze )


m1n - l
For ] - l + 1 То s 1ze
If а ( j) < a(min) Then
m1n - ]
End I f
Next
' Поменяем местами а (min ) и а (i )
bufer = а (i)
а (i) = а (min)
a(min) = bufer
Next

226
'В ыво д массива

For k = О То size
TextBox2 . Text &= St r i ng . Format( " {O : d l }",
a(k)) & vbTab
Next
' 3 э т ап Приме не н ие мето д а бинарного п оиска
niz = 1
ve r h = s i ze
n = О
found = Fal se
obr - I nputBox ( " Введите образец ", " Ввод")

Do
s r ed - Math . Round ( (ve r h niz) / 2) +
niz
out put &= vbC rLf & " niz = " & niz &
vbTab & "ve r h - " & ve r h & vbTab & " s r ed - " & s r ed
n - n + 1
If a(sred) = ob r Then
f ound - True
El se i f ob r < a(sred) Then
ve r h = sred - 1
Else
niz - sred + 1
End I f
Loop Until (ni z > verh) Or found
If f ound Then
output &= vbCrLf & s r ed & " -й элемент

совпа д ае т с образцом "

out put &= vbC rLf & n & " сравнен ия"

El se
output &= vbCrLf & " Образец в массиве

не найде н"

End I f
MessageBox . Show (output , " Одномер ные масс ивы ",
MessageBoxBut tons . OK , MessageBoxicon . I nfo r mation)
End SuЬ
End Class

227
Результаты разработанной программы представлены на рис. 116,
117.

•" Одн ом ерные массивы о х

ИсхоZ1Ный массив

Индексы

о 1 2 з 4 5 6 7 8 9

9 17 26 9 32 36 34 20 42

1'
Результирующий массив

9 9 17 20 26 32 34 36 42

1'
Ok

Рис. 116. Метод бинарного поиска. За образец принято число 32

Одном ерные м ассивы х

• 11iz
11 iz =б
11 iz =б
=1 verh = 9 sred = 5
=
verh 9 sred = 8
=
verh 7 яеd = 6
б - й эл ем ент совпадает с образцом
3 сравнения

ок

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

7.3. ДИНАМИЧЕСКИЕ МАССИВЫ

Существует возможность при объявлении массива не указывать


его размер. Это позволяет задать размер массива после начала вы­
полнения программы. Если при объявлении массива не указаны его
размеры, то такой массив называется динамическим. Например,
динамически изменяемый массив позволяет пользователю добав ­
лять или удалять строки и столбцы в процессе выполнения при­
ложения. Синтаксис объявления динамического массива имеет вид

228
Dim ИмяМассива ( ) As Тип данных

Для задания размера динамического массива во время выпол­


нения приложения используется оператор ReDim:
ReDim Имя Массива (размер)

Задание размера динамического массива производится в не­


сколько этапов, но поскольку этот размер не может быть точно
определен до начала выполнения программы, следует зарезервиро­

вать под него место на начальном этапе.

Таким образом, последовательность действий по созданию ди ­


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

PuЬlic а () As Integer
2. С помощью функции InputBox создаем запрос для опреде ­
ления количества элементов массива:

n = InputBox ("Введите количество элементов массива " ,


"Ввод массива ")

3. Используем переменную n в операторе ReDim для задания


нового размера массива:

ReDim a(n)
4. Далее можно использовать это число в качестве верхней гра­
ницы массива в цикле с оператором For:
For i = 1 То n
а (i) = InputBox ("Введите элемент массива", "Ввод массива")
Next
5. Для того чтобы не потерять содержимое массива при за­
дании его нового размера, в операторе ReDim следует использовать
служебное слово Preserve:
ReDim Preserve ИмяМассива (размер)

Динамические массивы часто используются совместно с опера­


тором Do ... Loop. Создадим процедуру, которая продемонстрирует
использование динамических массивов.

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


количество заранее неизвестно. Данные записываются в динами ­
ческий массив.

229
Листинг программы

PuЬlic Class Forml


Private Sub Forml_Load(sender As Object, е As
EventArgs) Handles MyBase.Load
Dim n As I nteger
Di m re z As Dial ogResult
Di m spisok () As I nt ege r
Dim i As I nteger
r ez = Dia l ogResu lt.Ye s
Do While r e z = Windows . Fo r ms . DialogResult . Yes
n = n + 1
ReDi m Pr ese r ve spiso k (n)
spisok (n) = InputBox ( "В ведите о ц енку ",
" Ввод да н ных " )
If spi sok(n) = О Then
r e z = МsgВох( " П родолжа ть ? ", vbYesNo ,
" Ввод да н ных " )
I f rez = Wi ndows . Forms . Dia l ogResult.
Yes Then
spiso k (n) = Inрu t Вох( " В в е ди т е
оце н ку ", " В в од да н ных " )
End I f
End I f
Loop
Fo r i = 1 Т о n - 1
MsgBox ( i & " - я о це нка " & " - " &
spi sok(i))
Next
Appli cation . Exit ()
End Sub
End Class

Переменная n играет роль счетч ика и увел ичивается на еди­


ницу при каждом выполнении цикла. Таким образом, массив
spisok (n) является динамическим массивом, размерность кото­
рого зависит от значения переменной n. Результат диалога с поль­
зователем о продолже нии или остановке ввода оценок фиксиру-
v v
ется в переменнои rez, з начение которои определяет перечисление

DialogResult, возвращающее значение Yes или No.


Необходимость вычитания единицы из значения параметра
цикла
.
1 воз никает из - за того , что эта пе реме нная изменяет свое зна-

чение в начале цикла Do. Таким образом, мы могли бы получить


лишнее окно сообщения при выводе оценок.

230
ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

Задача 1. В одномерном массиве произвольных чисел вычислите


произведение отрицательных элементов, имеющих нечетны е индексы.

Разработка алгоритма решения задачи представлена на рис. 118.

Н ачало

i =о 9
'

a(i)

proizv = 1

kol =О

i =о 9
'

Нет Да

Нет Да

proizv = proizv * a( i)

kol = kol + 1

Нет Да

Отрицательиых
чисел нет pro1zv

Конец

Рис. 118. Алгоритм решения задачи

231
Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object , е As
EventArgs) Handles Butto nl . Click
Const size As Integer = 9
Dim proizv , kol , i As Integer
Dim output As String
Dim а As Integer () = New Integer (s ize ) {}
Dim randomNumber As Random = New Random ()
TextBoxl . Text - " "
TextBox2 . Text - " "
LabelЗ . Text = ""
For i = О То а . GetUpperBound (О)
a(i) = - 10 + randomNumber . Next(Зl)
TextBoxl . Text &= String . Format( " {O : dl} ",
a(i)) & vbTab
LabelЗ . Text &= St ring . Format (" {O :dl} ", i )
& " "
Next
pro1zv - 1 ' Начальное значение
переменной устанавливаем в единицу

kol = О ' Обнуление счетчика


For i = О То 9
If (a( i ) < О) Then
If (i Mod 2 - 1) Then ' Пере бор
элементов с нечетными индексами

pro1zv = proizv * a(i)


' Нахождение произведения отрицательных элементов
kol = kol + 1 ' Подсчет
количества отрицательных э лементов

End If
End If
Next
If kol <> О Then
output &= vbCrLf & " Произведение
отрицательных элеме нтов , имеющих нечетные индексы = " &
pro1zv
Else
output &= vbCrLf & " Отрицательных
чисел или чисел , имеющих нечетные индексы , в массиве

нет "
End If
MessageBox . Show (output , " Одномерные массивы ",
MessageBoxButtons . OK , MessageBoxicon . Information )
End Sub
End Class

232
Задача 2. В одномерном массиве произвольных чисел А(9)
вычислите среднее арифметическое значение квадратов положи­
тел ьных элементов.

Разработка алгоритма решения задачи представлена на рис. 119.

Начало

i = о' 9

a(i)

sum = О

kol = О

i =О, 9

Нет Да

sнm = sнm + a(i) * a(i)

kol = kol + 1

Нет Да

Положительных чисел
в массиве ает

Нет Да

sum/ kol

Коаец

Рис. 119. Алгоритм разработанной программы

233
Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object , е As
EventArgs) Handles Buttonl.Click
Cons t size As Int ege r = 9
Di m sum , i , kol As I nt ege r
Dim output As String
Dim а As Integer () = New Integer (si ze) { }
Di m randomNumbe r As Random = New Random ()
TextBox l . Text - " "
TextBox2 . Text - ""
LabelЗ . Tex t = ""
Fo r i = О Get Uppe r Bound (О)
То а.
a( i ) = - 20 + randomNumbe r . Next(З l )
TextBoxl . Text &= String .For ma t( " {O: dl} " ,
a(i)) & vbTab
LabelЗ . Tex t &= St r ing . Fo r ma t (" {O:dl} " , i )
& " "
Next
sum = О ' Обнул ение я ч ейки, в которой буд е т
н ахо ди т ься значе н ие суммы

ko l - О ' Обнуле ние ячейки , " и грающей " роль


с че тчи ка

Fo r i = О То а. Get Uppe r Bound (О) ' Перебор


в цикл е зна че ний э л ементов од номер н ого массива
I f a(i) > О Then 'Е сли какой-то из них
оказыв ается положитель ным

s um = s um + а (i ) * а (i ) ' т огда
находится сумма ква дратов з на че ния элеме нта массива

ko l = kol + 1 ' увеличение с че т чи ка


на еди н ицу

End I f
Next
If kol = О Then ' Если сче тч ик не изменил
с в ое г о из н ачаль но г о зна ч ения, т о гд а выв оди т ся ответ

output &= vbCrLf & " П оложи те льных чи сел


в массиве не т "
End I f
If kol Then <> О
output &= vbCrLf & " Сред н ее
арифметическое = " & sum / kol
End I f
MessageBox . Show (output , " Одномер ные масс ивы ",
MessageBoxBut t ons . OK , MessageBoxi con . Inf ormation)
End Sub
End Class

234
Задача 3. В одномерном массиве произвольных чисел поме ­
няйте местами наибольший и наименьший элементы, предполО)КИВ,
что таких элементов по одному.

Алгоритм решения задачи представлен на рис. 120.

Начало

i=о 9
'
a(i)

i11d1ni11 = О

indmax =О

miп = а(О)

max = а(О)

i =О, 9

Нет Да

min = a(i)

indmin = i

Нет Да

1nax = a(i)

indmax = i

Рис. 120. Алгоритм решения задачи (начало)

235
a(indmin) = max

a(indmax) = min

i=о 9
'

a(i)

Кон ец

Рис. 120. Алгоритм решения зада чи (окончание)

Комментарий. Решение задачи поиска минимального и макси­


мального элементов рассматривалось в этой книге у)ке не один раз,
поэтому ограничимся кратким комментарием. Данный алгоритм
заключается в том, что и максимальным, и одновременно мини­

мальным элементом по умолчанию считается первый (нулевой)


элемент одномерного массива. За эти действия отвечают операторы

indmin = О
indmax = О
min = а (О)
max = а(О)

Затем организуем цикл и в нем, начиная со следующего эле­


мента, вып олня ем проверку условия, в которой пытаемся оп ре ­
делить, больше или меньше очередные элементы массива тех эле ­
ментов, которые уже хранятся в ячейках max и min. В случае истин­
ности проверяемых условий новые элементы ~приходят~ на место
существовавших, одновременно фиксируются их номера в массиве.
За эти действия отвечают операторы indmin = i и indmax = i.
В конце программы операторами

a(indmin) = max
и

a(indmax) = min

236
мы меняем местами найденные наибольший и наименьший эле ­
менты массива и выводим результирующий массив на экран.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Const s i ze As I nteger = 9
Dim indmax, max , i, min, indmin As Integer
Dim а As I nteger () = New Integer (si ze) { }
Dim r andomNumber As Random = New Random ()
TextBoxl . Text - ""
TextBox2 . Text - ""
Labe l З . T ext = ""
Fo r i = О То а. GetUppe r Bound (О)
a( i ) = r andomNumbe r . Next(З l )
TextBoxl . Text &= St r i ng . Format( " {O: d l }",
a(i)) & vbTab
L abe l З . Text &= St r ing . Format( " {O:dl }", i)
& " "
Next
i ndmi n - О ' И н декс минимально г о эл емента
счи т ае т ся О
i ndmax = О ' И н декс максималь но г о элемен т а
счи т ае т ся О
mi n = а (О) ' Минимал ьным с ч итается н улевой
э ле ме н т массива

max = а (0) ' Максимальным с читается нулевой


э ле ме н т массив

For i - 1 То а. Ge t UpperBound (О) ' Ор га низуе т ся


цикл дл я п еребора э леме н тов исхо дн о г о о д номер н ого
массива на ч иная с перво г о элемен т а (i =l) , потому чт о
н улевой э леме н т массива сравнива т ь с нул евым не п ри н ято
If a( i ) < mi n Then ' Проверка : если
очеред н ой элемен т массива мень ш е , чем т от, ко т орый
хранится в ячейке min
min = а (i) 'т о гда он сч ит ае т ся
ми нимал ьным элемен т ом

indmin = i ' е го и н декс (номер)


" от п равляе т ся " в ячейку indmin
End I f

237
If а (i) > max The n ' Провер ка: если
о чер е д ной э ле ме н т массива боль ше , ч ем то т, который
храни т ся в ячейке max
max = a(i) ' тогда он считается
максимальным элементом

indmax = i ' его индекс ( номер )


" отправляется " в ячейку indmax
End If
Next
а ( indmin) - max ' Обмен значений ячеек
местами

a(indmax) = m1n
For i = О То а . Ge t UpperBound (О)
TextBox2 . Text &= String .For mat(" {O : dl} ",
a( i )) & vbTab
Next
End Sub
End Class

Задача 4. Выведите элементы произвольного одномерного мас­


сива в обратном порядке.
Разработка алгоритма решения задачи представлена на рис. 121.
Н ачало

i =О, 9

a(i)

i=о 9
'

Ь(9 - i) = a(i)

i =О, 9

b(i)

Конец

Рис. 121. Алгоритм решения задачи

238
Комментарий. П о сравнению с предыдущими программами
дан ная задача реализована, по сути, в одном операторе, а именно

Ь(9 - i) = a(i) , выполняемом в цикле. Поскольку параметр цикла


примет последовательные значения от О до 9 посредством орга­
низации цикла For i = О То 9, то, подставив значения параметра
в оператор Ь(9 - i) = a(i), мы получим Ь(9 - О) = а(О) , т.е. элемент
массива Ь(9) заменяется на значение элемента а(О). Затем, вы ­
полнив оператор Ь(9 - 1) = а(1) , элемент массива Ь(8) заменится
на значение элемента а(1) и т.д. Следовательно, элементы массива
выстраиваются в обратном порядке.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Cons t size As In t ege r = 9
Dim i As In teger
Dim а As In teger () = New Intege r ( si ze) { }
Dim Ь As Integer () = New Integer (s ize ) { }
Dim randomNumber As Random = New Random ()
Tex tBox l . Text - ""
TextBox2 . Text = ""
LabelЗ . Tex t = ""
For i = О То а. Ge t UpperBound (О)
a(i) = randomNumbe r . Next(Зl)
TextBoxl . Tex t &= String . Format( " {O : dl} ",
a(i)) & v bTab
Lab e lЗ.Tex t &= St r ing . Format( " {O :dl}", i)
& " "
Next
For i = О То a . GetUpperBound (0) ' Организуется
цикл для пе ребора э лементов исходного одномерного
массива

Ь(9 - i) = a(i)
Next
For i = О То а.
Ge t UpperBound (О)
TextBox2 . Tex t &= String . Format( " {O : dl} ",
b(i)) & v bTab
Next
End Sub
End Class

239
Задача 5. В одномерном массиве произвольных чисел опре ­
делите число инверсий. Инверсией называется пара элементов,
в которой больш ее число расположено слева от меньш его. На­
пример, дан одномер ный массив, где стрелками п оказан о коли ­
чество инверсий:

24 35 29 44 8 22 4
~ ~ ~

Разработка алгоритма решения задачи представлена на рис. 122.

Начало

i =О, 9

a(i)

inv = О

i =О, 9

Нет Да

iпv = iпv + 1

lllV

Koi-reц

Рис. 122. Алгор итм р е ш е н ия задачи

Комментарий. Организовав цикл от О до 8, мы сравниваем


каждый элеме нт п оследовательности с предыдущим и о пределяем,
какой больше. Нет смысла организовывать цикл от 1 до 9, потому
что, выполнив проверку a(i) > a(i + 1), мы 9-й элемент после­
довательности будем сравнивать с 10-м, а такого не существует.
В случае истин ности проверяемого условия увеличиваем счетчик
на единицу оператором inv = inv + 1 и выводим ответ.

240
Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click (sender As Object, е As
EventArgs) Handles Buttonl.Click
Cons t size As Int ege r = 9
Di m i , i nv As Integer
Di m out put As St r i ng
Di m а As Int ege r () = New I nt eger ( si ze) {}
Dim randomNumber As Random ;:;: ; New Random ()
TextBoxl . Text ""
TextBox2 . Text - ""
Labe l З . Text = ""
Fo r i = О То a . Ge t UpperBound(O)
a(i) = r andomNumЬer . Nex t (З l )
TextBoxl . Text &= String .For ma t(" {O: dl} ",
a(i)) & vbTab
LabelЗ . Text &= St ring . Format (" {О: dl } ", i)
& " "
Next
i nv = О ' Счет чик колич ества и нв ерсий обнуляе т ся

For i О То 8 ' Ор гани зуе т ся цикл для


перебора элеме нт ов и сход н ого од н омерно г о массива
If а (i) > а (i + 1) Then ' Сравн ивают ся
дв а сосед н их элемен т а масси в а

inv = i nv + 1 'В случ ае истинности


п роверяемо г о условия с ч етчик уве личивае т ся на един ицу

End I f
Next
output &= vbC rL f & " Количес т во инверси й = " &
i nv
MessageBox . Show (out put , " О дн омерные масси в ы ",
MessageBoxBut tons . OK , MessageBoxicon . I nfo r mation)
End SuЬ
End Class

Контрольные вопросы и задания

1. Дайте определение циклического алгоритма.


2. Как записывается цикл с оператором For в блок -схемах?
3. Как записывается цикл с оператором For в пр ограммах?
4. Как работает цикл с оператором For?
5. С какой целью применяют одномерные массивы в программах?

241
6. Каким образом объявляются од~-rомерные массивы в программах?
7. Каким образом осуществляется доступ к каждому элемеиту одаомер -
ного массива при его обработке?
8. Каким образом осуществить вывод одномериого массива на экран?
9. Приведите базовые алгоритмы обработки одиомерных массивов.
10. Поясиите, каким образом осуществляется обмеа значений элемеитов
массива.

11. Назовите основные способы упорядочивааия массивов.


12. Расскажите алгоритм упорядочиваиия одномериого массива по возра ­
стаиию методом прямого перебора.
13. Расскажите алго р итм упорядочивания элемеитов одноме р ного мас­
сива методом обмена (метод ~пузырька~ ).
14. Рас скажите алгоритм упорядочивания элементов одноме р ного мас­
сива произвольных чисел по убыванию их значений.
15. Расскажите алгоритм упорядочивания элементов одномерного мас­
сива методом бинарного поиска.
16. Расскажите принципы создания динамических массивов .

Задачи для самостоятельного решения


1. Запишите положительиые элементы массива А подряд в массив В.
О пр еделите количество положительных элеме~-rтов. Найдите п р оиз ­
ведение элемеатов массива В.
2. В одномерном массиве произвольных чисел А(9) вычислите пр оизве ­
дение отрицательных элемеитов, имеющих нечетиые индексы.

3. Разработайте программу, заполняющую массив из n элементов слу ­


чайаыми целыми числами, находящимися в иате рвале от 1 до 50. Вы ­
ведите на экран компьютера созданный массив и сформируйте другой
массив, элементы которого по модулю больше некоторого значения С .
Число элементов массива, значение С, вводится с клавиатуры.
4. Раз работайт е программу, заполняющую массив из n элементов слу­
чайными целыми числами, находящимися в интервале от 1 до3 0 . Вы ­
ведите на экран компьюте ра созданный массив и сформируйте из него
два массива: массив четных чисел Ь и массив нечетных чисел с. Ч исло
элементов массива вводится с клавиатуры .

5. Раз работайт е программу, заполняющую массив из n элементов слу­


чайными целыми ч ислами, находящимися в интервале от 1 до 80.
Выв едите на экран компьютера созданный массив и найдите макси­
мальный и минимальный элементы, а также осуществите их обмен.
Число элементов массива вводится с клавиатуры.
6. О пределите с р еднее а р ифметическое элементов ода ом ераого
массива п ро извольиых чисе л А(9), удовлетво р яющих условию
Abs(A[i])<=C. Значеаие С вводится с клавиатур ы.
7. Разработайте программу, заполняющую массив из n элементов слу ­
чайаыми целыми числами, находящимися в иате рвале от 1 до 50. Вы ­
ведите на экр ан компьютера созданиый массив и вычислите пр оизве -

242
деиие четных и иечетиых чисел. Ч исло элементов массива вводится
с клавиатуры.

8. Разработайте программу, заполняющую массив случайными целыми


числами, находящимися в интервале от 1 до 50. Опр еделите макси­
мальный и минимальный элементы среди положительных нечетных
элементов целочисленного массива произвольных чисел А(9).
9. Разработайте программу, заполняющую массив из n элементов слу­
чайными целыми числами, находящимися в интервале от - 20 до 40.
Выведите на экран компьютера созданный массив и в данном массиве
положительные элементы уменьшите вдвое, а отрицательные - за­

мените на значения их индексов . Число элементов массива вводится


с клавиатуры.

10. Разработайте программу, заполняющую массив из n элементов слу­


чайными целыми числами, находящимися в интервале от 1 до 40.
О пр еделите, сколько п роц ентов от всего количества элеме:гпов мас ­
сива составляют иечетные элемеаты. Ч исло элементов массива вво ­
дится с клавиату ры .

11. Разработайте программу, заполняющую массив из n элементов слу ­


чайиыми целыми числами, находящимися в иI-Iтервале от 1 до 50.
Выведите на экраи компьютера созда~п1ый массив и упорядочьте
элеме:гпы даи:гrого одномер:гrого массива по возраста:гrию их значений.
Число элементов массива вводится с клавиату ры.
12. Из одномер:гrого массива п роизволыrых чисел А(9) сформируйте
другой массив таким образом, чтобы саачала шли отрицательаые эле ­
менты исход:гrого массива, затем - положительные и, I-Iаконец, - I-Iу ­

левые.

13. Разработайте программу, заполняющую массив из n элементов слу­


чайными целыми числами, находящимися в интервале от 1 до 30.
Выведит е на экран компьютера созданный массив, найдите макси­
мальный элемент, его номер и поменяйте местами максимальный
и первый элементы массива. Число элементов массива вводится с кла­
виатуры .

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


в массив А(9), упо рядоченный по возрастанию, с сохранением упо­
рядоченности .

15. Удалите из массива А, состоящего из n элементов, первые четыре ну­


левых элемента.

16. Разработайте программу, заполняющую массив из n элементов слу­


чайными целыми числами, находящимися в интервале от -30 до 50.
Выведите на экраа компьютера созда~п1ый массив и определите, есть
ли в нем серии элеме:гпов, состоящих из знакочередующихся чисел.

Если есть, то выведите на экраа количество таких серий. Число эле ­


ментов массива вводится с клавиату ры.

17. Разработайте программу, которая выводит иа экраи два одномериых


массива А(9), содержащих диаметры и веса шин. Следует отобрать две

243
шины, диаметры которых отличаются не более чем на К см, а вес -
не более чем на S грамм.
18. Из одномерного массива произвольных чисел А(9) сформируйте два
массива, содержащих номера положительных и отрицательиых эле ­

ментов .

19. Разработайте программу, заполняющую массив из n элементов слу­


чайными целыми числами, находящимися в интервале от -20 до 40.
Выведите иа экран компьютера созда~-rный массив и вычислите
среднее арифметическое значение квадратов положительных эле­
ментов . Число элементов массива вводится с клавиатуры .
20. Разработайте программу, заполняющую массив из n элементов слу ­
чайиыми целыми числами, находящимися в иI-Iтервале от 1 до 50.
Произведите обмен соседних элементов, стоящих на четных местах,
с элемеитами, стоящими на иечетных местах. Число элеме1-rтов мас­
сива вводится с клавиатуры.

21. Разработайте программу, заполняющую массив из n элементов слу­


чайными вещественными числами, находящимися в интервале от 1
до 30. Все элементы массива с чет~-rыми номерами, предшествующие
первому по порядку элементу с наибольшим ЗI-Iачением, умиожьте
на него. Число элементов массива вводится с клавиатуры.
22. Разработайте программу, заполняющую массив из n элементов слу­
чайными целыми числами, находящимися в интервале от -15 до 20.
Выв едите на экран компьютера созданный массив и найдите наи­
больший элемент из отрицательных. Число элементов массива вво­
дится с клавиатуры.

23. Разработайте программу, заполняющую массив из n элементов слу ­


чайными целыми числами, находящимися в интервале от 1 до 50. Вы­
ведите на экран компьютера созданный массив и найдите количество
тех элементов, зиачеиия которых иаходятся в диапазоне от А до В.
Число элементов массива, зиачения А и В вводятся с клавиатуры.
24. Пользователь вводит с клавиатуры элементы одномерного массива
A(n). О пределите, является ли заданиая последовательность чисел а 1 ,
а2 , ... , an мо~-rото~-п10 убывающей. Число элементов массива вводится
с клавиатуры.

25. Разработайте программу, заполняющую массив из n элементов слу­


чайиыми целыми числами, находящимися в иитервале от 1 до 30.
Замеиите нулями элементы между максимальиым и мииимальиым
значениями, кроме них самих . Число элементов массива JВводится
с клавиатуры.

26. Разработайте программу, заполняющую массив из n элементов слу ­


чайными целыми числами, находящимися в интервале от 1 до 20. Тре­
буется найти индекс последнего по счету в массиве отрицательного
элеме~-rта.

27. Разработайте программу, которая определяет, имеется ли в зада~-rном


целочисленном массиве А(9) хотя бы одна пара совпадающих по зна­
чению чисел.

244
28. Разработайте программу, которая выводит иа экраи два одномериых
массива А(9), содержащих массивы ростов игроков двух команд
(в сантиметрах) и определяет, имеются ли в данных командах игроки
одииакового роста.

29. Разработайте программу, заполняющую массив из n элементов слу­


чайными целыми числами, находящимися в интервале от 1 до 50.
Выведите i-ra экраи компьютера созда~-rиый массив и найдите макси ­
мальный и мииимальный элементы, вычислите их разность. Ч исло
элементов массива вводится с клавиатуры .
Глава 8
РАБОТА С ДВУМЕРНЫМИ МАССИВАМИ

При решении математических, экономических, статистических


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

столбца. В математике квадратные или прямоугольные таблицы на­


зываются матрицами. Поскольку индексация элементов матрицы
в языке Visual Basic начинается с ноля, матрица элементов а (4 ,4)
выглядит следующим образом:

а(О,О) а(О,1) а(О,2) а(О,3) а(О,4)

а(1,О) а(1,1) а(1,2) а(1,3) а(1,4)

а(2,О) а(2,1) а(2,2) а(2,3) а(2,4)

а(3,О) а(3,1) а(3,2) а(3,3) а(3,4)

а(4,О) а(4,1) а(4,2) а(4,3) а(4,4)

В этом примере каждый элемент матрицы имеет имя А. Первый


индекс - это номер строки, второй индекс - номер столбца. Диаго ­
наль матрицы А00 - А44 называется главной, а диагональ А 04 -А40 -
побочной.
Следует отметить, что все операции по обработке, вводу-выводу
элементов двумерного массива осуществляются поэлементно, с ис ­

пользованием сложного циклического процесса.

Двумерные массивы инициализируются в разделе описания пе­


ременных с использованием того )Ке процесса и тех ж:е форм за­
писи, которые используются для одномерных массивов. Например,
двумерный массив а с двумя строками и двумя столбцами можно
объявить и инициализировать следующим образом:

Dim а As In teger(,) = New Integer (l , 1 ) {}


А(О,0) - 1
А(О , 1) - 2
A(l ,0) - 3
A(l,1) - 4

246
Альтернативный способ записи в одну строку:

Dim а As I n t ege r (, ) = New I nt eger (, ) { {1 , 2 } } , { { 3 , 4}}


Значения группируются в строки, заключенные в фигурные
скобки. Элементы А(О,О) и А(О, 1) инициализируются значениями
1 и 2, а элементы А(1 ,О) и А(1 ,1) - значениями 3 и 4.
Ввод, вывод и обработка двумерного массива происходят с по­
мощью сложного циклического процесса (вложенных циклов).
При обработке матрицы для определения верхних границ, в ко­
торых из меняются п араметры внешнего и внутреннего циклов,

можно использовать метод GetUpperBound() для заданного из ­


мерения. Таким образом, для первого измерения, т.е. строк, будет
использоваться запись a.GetUpperBound(O), а для второго изме­
рения - столбцов - запись a.GetUpperBound(1).
Второй тип многомерных массивов - ]аggеd-массивы. Они
пр едставляю тся как массивы массивов, в которых строки могут

быть разной длины.


Объявление]аggеd-массивов происходит следующим образом:

Dim а As I nteger () ()
а = New I nteger (1) () {} ' соз д ае м две с т роки

а(О) - New I nt eger () {1 , 2}


a( l ) = New I nt eger () {3 , 4 , 5}

В результате будет создан массив целых чисел а, в котором ну­


левая строка содержит два элемента: 1 и 2, а первая строка - три
элемента: 3, 4, 5.
Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim output As String
Dim i , j As I nteger
Dim а As I nteger () () = New Intege r ( 2) () { }
а(О) - New Intege r() {1, 2}
a(l) = New Intege r() {3}
а(2) = New Intege r() {4, 5 , 6}
output = " Формирование Jagged-мaccивa " & vb-
CrLf
Fo r i = О То а. Get Uppe r Bound (О)

247
For j = О То а (i ) . GetUpperBound (0)
out put &= а (i ) (j) & vbTab
Next
output &= vbCrLf
Next
MessageBox . Show (out put , " Jаggеd - массивы " ,
MessageBoxBut tons . OK , MessageBoxicon . I nfo r mation)
Appl i cat i on . Exi t()
End Sub
End Class

Р езуль т ат формирования ]аggеd- массива п редставле н


на рис. 123.

Jаggеd-м.а•:смвы l'X]
·-
Формирование Jagged-мaccивa
1 2
3
4 5 6

r:································1
: Г1К ;~
;,
'1
- . . . .
·-·
-
••
- . . . . ;

Рис. 123. Сфо рми рованный Jagged-мacc и в

Задача 1. В двумерном массиве произвольных целых чисел най­


дите сумму всех элементов.

Разработка алгоритма решения задачи представлена на рис. 124.


Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl . Click
Di m i , j , sum As I nteger
Dim output As String
Dim а As I nteger (, ) = New Intege r (4, 4) { }
Di m randomNumЬe r As Random = New Random ()
DataGri dViewl . RowCount = 5 ' Количество стро к
и с т олб ц ов
DataGri dVi ew l . Col umnCount = 5
For j = О То 4
Da taG r idVi ewl . Co l umns ( j) . Widt h - 60
'Уста навливаем ширину стол б ц ов

248
Н ачало

i = О, 4

j = О, 4

a(i,j)

sum =О

i = О, 4

j =О , 4

SUlll = SUlll + a(i, j)

SUlll

Коиец

Рис. 124. Алгоритм решения задачи

Next
Fo r i = О То а.Ge tUpperBound (О)
For j = О То а . GetUpperBound ( 1 ) ' Выводим
номера строк и столбцов матрицы
DataGridViewl . Columns (i) . Name =
i . ToString ()
DataGridViewl . Rows(j) . HeaderCell .
Value = j . ToString ()
Next
Next
For i = О То а. GetUpperBound (О)
For J = О То a . GetUppe rB ound(l)

249
a(i , j) = randomNumber . Next(21)
' Генерируем и заполняем значения элемен т ов ма т рицы
DataGridViewl . Item(j , i ) . Value = Con-
vert . ToString (а (i , j))
Next
Next
sum = О
For i = О То а . Ge t UpperBound (О)
For j = О То a . GetUppe rBound(l)
sum sum + а ( i, j ) 'Н ахождение
суммы элеме нт о в ма т р ицы

Next
Next
out put &= vbCrLf & " Сумма элементов матрицы = "
& sum
MessageBox . Show (out put, " Дв умерные масси вы " ,
MessageBoxButtons . OK , MessageBoxicon . I nformation)
End Sub
End Class

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


rQ Двумерные массивы о х

ИсходНая матрица

2 3 4

17 10 9 4

1 8 13 о 13 16

2 17 11 19 о

з 9 17 18 8 17

• 4 17 13 16 15 19

Ok

Двумерные массивы х

8 Сумма злементов матрицы= 301

ок

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


«Сложение элементов двумерного массива»

250
В следую щем л истинге рассматривае тся ре шени е пр едыдущей
задачи, с той разницей, что ответ выводится в информационное
окно, а не в элемент управления DataGridView.

Листинг программы

PuЬlic Class Forml


Private SuЬ Forml_Load(sender As Object, е As Even-
tArgs) Handles MyBase.Load
Dim i , j, sum As Integer
Dim output As String
Dim а As Integer (, ) = New Integer ( 4, 4) { }
Dim r andomNumber As Random = New Random ()
output &= vbCrLf & " Исход н ая матрица : " &
vbC r Lf & vbCrLf
For i = О То а . Ge t UpperBound (О)
out put &= vbC rLf
For j = О То a . GetUppe r Bound(O)
a( i, j) = randomNumbe r. Next(2 1 )
output &= а (i , j) & vbTab
Nex t
output &= vbCrLf
Next
sum = О
For i = О То а . GetUpperBound (О)
For j = О То a . GetUpperBound(O)
sum = sum + a(i, j) ' Нахождение

суммы элементов матрицы

Next
Next
output &= vbCrLf & " Сумма элементов матри цы - "
& sum
MessageBox . Show (output , " Двумер ные массивы ",
MessageBoxButt ons . OK , MessageBoxi con . Inf ormation)
Application .Exit()
End Sub
End Class

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

251
Двумерные массивы х

• Исходная м атрица :

19 3 11 15 12

14 5 11 15 s
11 11 о 8 6

3 5 17 8 18

8 4 4 13 10

Сумм а .элементов матрицы= 236

ок

Рис . 126. Результаты выполнения программы «Сложение элементов двумер­


но го масс и ва»

8.1. ОСНОВНЫЕ СВОЙСТВА МАТРИЦ


При разработке программ по теме ~Двумерные массивы» нам
придется часто заниматься поиском элементов, находящихся

в какой-либо части матрицы. Поиск можно оптимизировать, если


сформулировать некоторые правила (свойства матриц), согласно
которым будет найден искомый элемент. Действительно, если
рассматривать квадратную матрицу размером 4 х 4 (n = 4), то со ­
гласно примеру, приведенному в начале гл. 8, видно, что элементы,
имеющие координаты А00 , А 11 , А22 , А33 , А44 находятся на главной ди­
агонали. Следовательно, для того чтобы в реальной задаче найти
v v
элемент, находящиися на главнои диагонали , следует проверить

условие If i = j Then. Основные свойства матриц сведены в табл. 34.


Таблица 34
Основные свойства матриц

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


v
1= J на главнои диагонали

Н омер строки больше номера столбца Элемент матрицы находится


v
i>j ниже главнои диагоI-Iали

252
Окончание табл. 34

Н омер столбца меньше номера строки Элемент матрицы находится


u
i<j выше главиои диагоиали

Удовлетворяется равенство Элемент матрицы находится


i + j-i =n на побочI-rой диагонали

Удовлетворяется неравенство Элемент матрицы находится


i + j- 1<n выше побочпой диагонали

Удовлетворяется неравенство Элемент матрицы находится


i + j- 1>n ниже побочиой диагоиали

8.2. БАЗОВЫЕ АЛГОРИТМЫ ОБРАБОТКИ


ДВУМЕРНЫХ МАССИВОВ

В силу принятого нами подхода работы с одномерными масси ­


вами можно выделить ряд приемов, позволяющих реализовать ос­

новные задачи обработки двумерных массивов, а именно:


1) нахо)кдение количества элементов матрицы при заданном
условии;

2) нахождение суммы значений элементов матрицы при за­


данном условии;

3) нахождение произведения значений элементов матрицы при


заданном условии;

4) поиск экстремальных значений элементов матрицы (поиск


максимального и (или) минимального значения);
5) обмен столбцов элементов матрицы;
6) обмен строк элементов матрицы;
7) удаление заданной строки матрицы;
8) замена значений элементов матрицы;
9) формирование матрицы в соответствии с определенными
правилами;

1О) транспонирование матриц;


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

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


комментариев. В качестве критерия нахождения элементов мы
укажем условие if a(i) >= 10.

253
Нахождение количества элементов матрицы при заданном
условии

kol = О
For i = О То 4
For j = О То 4
If a(i, j ) > = 10 Then
kol = kol + 1
End If
Next
Next
Нахождение суммы значений элементов матрицы при заданном
условии

sum = O
For i = О То 4
For j = О То 4
If a(i, j) > = 10 Then
sum = sum + a(i, j )
End If
Next
Next
Нахождение произведения значений элементов матрицы
при заданном условии

proizv = 1
For i = О То 4
For j = О То 4
If a(i, j) > = 10 Then
proizv = proizv * a(i, j )
End If
Next
Next
Поиск максимального элемента матрицы

max = а(О, О )
For i = О То 4
For j = О То 4
If a(i, j) > max Then
max = a(i, j )
End If
Next
Next

254
Обмен столбцов элементов матрицы

Задача. В двумерном массиве произвольных чисел поменяйте


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

становку столбцов массива:


n = a(i, 1)
a(i, 1) = a(i, 4)
a(i, 4) = n
Поскольку при первом вхождении в цикл параметр цикла z
примет з начение, равное единице, во вспомогательную ячейку n от ­
правляется первый элемент второго столбца, т.е. элемент, имеющий
координаты А 01 . На его место приходит элемент с координатами
А04 . На освободившееся место приходит элемент, находящийся
в ячейке n. П роисходит обмен. П оскольку все действия осуще ­
ствляются в цикле For i =О То 4, происходит обмен элементов вто ­
рого и пятого столбцов.
Разработка алгоритма решения задачи представлена на рис. 127.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click (sender As Object , е As
EventArgs) Handles Buttonl.Click
Dim i, j, n As In teger
Dim output As String
Dim а As In teger (, ) = New Integer ( 4, 4) { }
Dim randomNumber As Random = New Random ()
' Установка зна ч ений свойств исх од н ой ма т р ицы
DataGridViewl . RowCount = 5 'К оличе с тв о строк
и столбцов
DataGridViewl . ColumnCount = 5
For j = О То 4
DataGr idViewl . Columns (j). Width - 60 ' Уста ­
навливаем ширину столбцов
Next
For i = О То а. GetUpperBound (О)
For j = О То a . GetUpperBound(l) ' Выводим
номе ра строк и столбцов матрицы
Da taGr idViewl . Co l umns ( i) . Name =
i . ToString ()
DataGridViewl . Rows(j) . HeaderCell .
Value = j . ToSt ring ()

255
Начало

i = О, 4

j =О, 4

a(i,j)

i =о 4
'

n = a(i, 1)

a(i, 1) = a(i, 4)

a(i, 4) = n

i = О, 4

j = О, 4

a(i,j)

Конец

Рис.127. Алгоритм решения зада чи

256
Next
Next
' Ус т ановка зна ч е н ий с в ойств результирующей
матрицы

DataGridView2 . RowCount = 5 'К оличе с тв о стро к


и сто л бцо в
DataGridView2 . ColumnCoun t = 5
Fo r j = О Т о 4
DataGr i dVi ew2 . Col umns(j) . Wi d t h - 60
' Ус т анавливаем шири н у с т олбцов
Next
For i = О То а.Ge t UpperBound (О)
For j = О То a . Ge t UpperBound( l) 'Выв одим
н омера строк и с т олб ц ов ма т ри цы
Da t aGridView2 . Columns(i) . Name =
i . ToS t r i ng ()
DataGridVie w2 . Rows(j) . HeaderCe l l .
Va lue = j . ToSt ring ()
Next
Next
' Ге н ерируем и за п ол н яем значе н ия элемен т о в исходной
матрицы

For i = О То а.
Ge t UpperBound (О)
Fo r j = О Т о a . GetUppe rB ound(l)
a(i, j) = ra ndomNumbe r . Next(21)
DataGr i dVi ew l . Item (j, i ). Va l ue = Conver t .
ToString(a(i , j))
Next
Next

For i = О То а. Ge t UpperBound (О) ' О ткры т ие


цикла дл я обмена элеме нт о в столб цо в ма т рицы
n = a( i , 1)
a( i , 1) = a( i , 4)
a(i, 4) = n
Next ' За в ершение рабо ты цикла
'Выв о д результирующей матрицы

Fo r i = О То а.
Get Uppe r Bound (О)
For j = О То а . Ge tUpperBound ( 1 )
Da t aGridView2 . I tem (j, i) . Value - Con-
ve r t . ToS tri ng (а (i , j))

257
Next
Next
End Sub
End Class

Результат выполненной программы представлен на рис. 128.


Двумерные массивы о х

ИсходНая матрк.&а Резуль1>1рующая матрица

2 3 4 2 3 4
9 18 5 14 14 18 5 9

1 10 14 17 о 2 1 10 2 17 о 14

2 8 12 з о з 2 8 з з о 12

з 4 14 17 4 2 з 4 2 17 4 14

• 4 14 4 7 7 • 4 14 7 7 4

Ok

Рис. 128. Результат работы программы: второй столбе ц исходной матрицы


поменяли с пятым столбцом

Обмен строк элементов матрицы

В данной задаче происходит обмен тех строк, номера которых


(n_st_ 1 и n_st_ 2) задает пользователь. Алгоритмически метод
ничем не отличается от рассмотренного выше: при обмене следует
воспользоваться третьей ячейкой (bufer).

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object , е As
EventArgs) Handles Buttonl . Click
Dim i, j, n_ s t _ l, n_ s t_2 , bufer As Integer
Dim output As String
Dim а As Int eger (, ) = New Integer ( 4, 4) { }
Dim randomNumber As Random = New Random ()
'Установка зна че ний свойс тв исходной матрицы
Dat aGridViewl . RowCount = 5 'К оли че с тв о строк
и столбцов
Dat aGridViewl . ColumnCoun t = 5
For j = О То 4

258
DataGr idViewl . Columns (j) . Width - 60
' Устанавливаем ширину столбцов
Next
For i = О То а. GetUpperBound (О)
For j = О То а . GetUpperBound ( 1) ' Выводим
номе ра строк и столбцов матрицы
DataGridViewl . Columns (i) . Name -
i . ToSt r ing ()
DataGri dV i ewl. Rows(j) .Header Cel l. Val ue -
j . ToSt r ing ()
Nex t
Nex t

' Уста н овка з н ачен ий свойс т в результ ирующей


ма т р ицы

DataGri dVi ew2 . RowCoun t = 5 ' Коли ч ес т во строк


и столбцов
DataGridView2 . ColumnCount = 5
For j = О То 4
DataGr idView2 . Columns (j) . Width - 60
' Устанавливаем ширину столбцов
Next
For i = О То а. GetUpperBound (О)
For j = О То a . GetUpperBound(l) ' Выводим
номе ра строк и столбцов матрицы
Da taGr i dVi ew2 . Co l umns ( i ). Name =
i . ToSt r ing ()
DataGri dVi ew2 . Rows(j) . HeaderCel l.
Val ue = j . ToSt ri ng ()
Nex t
Nex t
' Генерируем и запо лн яем з н ачен и я э л еме н тов
и сход н ой ма т р ицы
For i = О То а.
Ge t UpperBound (О)
For j = О То а . GetUpperBound ( 1)
a(i, j) = randomNumber . Next(21)
DataGridViewl . I tem (j, i) . Value = Con-
vert . ToString (а (i , j))
Next
Next
n st 1 = InputBox ( " Введите номе р строки ,
которая подлежит замене " , " Ввод " )

259
n st 2 = Inp ut Box ( " Введи т е н оме р с т р оки ,

кот о рую обменяем " , " Ввод " )


' О б мен ст р ок
Fo r j = О 4То
bu f e r = a (n st 2 , j )
a(n_ st_ 2 , j) - a(n_ st 1 , j)
а (n s t 1 , j ) = bufer
Nex t
'Выв о д резул ьтирующе й матрицы

Fo r i =
Ge t Uppe r Bound ( О )
О То а.
Fo r j = О Т о a . Ge tUpperBoun d (l )
Da t aGridView2 . I t em ( j , i ). Va lue - Con-
ve r t. ToString (a (i, j))
Nex t
Next
End Sub
End Class

Результат выполненной программы представлен на рис. 129.

Двумерны е м асси вы о х

Исхо.сtiая матрица Резуль1ИРующая маl'РИца

2 3 4 2 3 4

8 12 9 12
• о 15 11 17 20

1 10 9 5 16 1 10 9 5 16

2 18 7 4 11 18 2 18 7 4 11 18

з 19 12 9 13 11 з 19 12 9 13 11

• 4 4 15 11 17 20 • 4 1 8 12 9 12

Ok

Рис. 129. Результат работы программы: первую строку исходной матри цы


поменяли с пятой строкой

Удаление заданной строки матрицы

Удаление заданной строки с номером n_ st происходит с по­


мощью сдвига на один шаг вверх всех последующих строк, начиная

с n_st + 1. Задачу удаления столбца мож:но решить аналогично.

260
Листинг программы

PuЬlic Class Forml


Private SuЬ Butto nl_Click(sender As Object , е As
EventArgs) Handles Butto nl . Click
Dim i , j , n_st As Integer
Dim output As String
Dim а As In teger (, ) = New Integer ( 4, 4) { }
Dim randomNumber As Random = New Random ()
'Ус та н о вка значений свойств ис ходной матрицы
DataGr idViewl . RowCount = 5 'К оличе с тв о строк
и столбцов
DataGr idVi ewl . ColumnCount = 5
For j = О То 4
Data Gri dViewl . Columns ( j) . Width - 60
'Ус та навли вае м шир ину стол б ц о в
Next
For i = О То а. GetUpperBound (О)
For j = О То a . GetUpperBound(l) ' Выводим
номе ра строк и столбцов матрицы
DataGridViewl . Columns (i).Name =
i . ToString ()
DataGridViewl . Rows(j) . HeaderCell .
Value = j . ToString ()
Next
Next
' Уста н о вка з начений с в о йств результ ирующей
ма трицы

DataGr idVi ew2 . RowCount = 5 'К оличе с тв о строк


и столбцов
DataGr idVi ew2 . ColumnCount = 5
For j = О То 4
Data Gri dView2 . Columns ( j) . Width - 60
'Ус та навли вае м шир ину стол б ц о в
Next
For i = О То а. GetUpperBound (О)
For j = О То a . GetUpperBound(l) ' Выводим
номера строк и столбцов матрицы
DataGridView2 . Columns (i).Name =
i . ToString ()
DataGridView2 . Rows(j) . HeaderCell .
Value = j . ToString ()
Next
Next

26 1
'Ге нерируем и заполняем з на чения э ле ме н тов
исходной ма т рицы
=
Ge t UpperBound (О)
For i О То а.
For j = О То а . GetUpperBound ( 1 )
a(i, j) = randomNumber . Next(21)
DataGridViewl . I tem (j, i) . Value = Con-
vert . ToString (a (i, j))
Next
Next
n st = I nрutВох( " Введите номер строки , которую
хоти т е удалить ", " Ввод ")
'Удаление заданной строки
For i =n_ st + 1 То a . Ge t UpperBound(O)
Fo r j = О То а . GetUppe rBound ( 1)
a(i - 1, j) = a(i, j)
Next
Next
'Выв о д результирующей ма т рицы
For i = О То a . Ge t UpperBound(O) - 1
For j = О То а . Ge t UpperBound ( 1)
DataGridView2 . Item(j, i ).Value = Convert .
ToString(a(i, j))
Next
Next
End Sub
End Class

Результат выполненной программы представлен на рис. 130.

Двумерные массивы о х

Исхо.аt<аЯ МOtplt.ja РеsуJЬтирующая мalJ)ИU.!

о 2 3 4 2 з 4
~ ~ о 2 6 14 о 2 6 14

1 19 13 8 8 8 1 19 13 8 8 8

2 17 6 8 5 3 2 14 3 19 7 4

з 14 3 19 7 4 з 8 5 6 6 8

• 4 8 5 6 6 8 • 4

Ok

Рис. 130. Удалена вторая строка исходной матрицы

262
Замена значений элементов матрицы

Задача. Все элементы исходной матрицы замените нулем,


u u
а каждыи элемент глав нои диагонали замените его номером.

Вполне логично первоначально выполнить проверку условия:


« Находится ли элемент матрицы на главной диагонали? ~, т.е.
If i = j Then, а затем выполнить присваивание a(i, j ) = i (где i -
номер элемента) или оператор a(i, j) = О.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object , е As
EventArgs) Handles Buttonl . Click
Dim i , j As Integer
Dim а As Integer (, ) = New Integer (4 , 4) { }
Dim randomNumber As Random = New Random ()
' Установка значений свойств исходной матрицы
DataGridViewl . RowCount = 5 ' Количество строк
и столбцов

DataGridViewl . ColumnCount = 5
For j = О То 4
DataGridViewl . Columns (j). Width - 60
' Устанавливаем ширину столбцов
Next
For i = О То а.GetUpperBound (О)
For j = О То a . GetUpperBound(l) ' Выводим
номера строк и столбцов матрицы

DataGridViewl . Columns (i).Name =


i . ToString ()
DataGridViewl . Rows(j) . HeaderCell .
Value = j . ToString ()
Next
Next
' Установка значений свойств результирующей матрицы

DataGridView2 . RowCount = 5 ' Количество строк


и столбцов

DataGridView2 . ColumnCount = 5
For j = О То 4
DataGridView2 . Columns (j). Width - 60
' Устанавливаем ширину столбцов
Next

263
Fo r i = О То а. GetUppe r Bound (О)
For j = О То a . Get UpperBound( l ) ' Выводим
номера с т рок и стол бцов матрицы

Da taGr i dVi ew2 . Co l umns ( i ). Name =


i . ToSt r i ng ()
Da t aGridView2 . Rows(j) . Heade r Cel l .
Value = j . ToSt ring ()
Next
Next
' Генерируем и запо лн яем з н ачения э л еме н тов
исхо д ной матрицы

Fo r i = GetUppe r Bound (О)


О То а.

For j = О То а . GetUpperBound ( 1 )
a( i, j) = randomNumbe r. Next(2 1 )
DataGridVi ewl. I t em (j , i ). Va l ue = Con-
vert. ToString (a (i , j))
Next
Next

For i = О То а. Ge t UpperBound (О)


For j = О То a . GetUppe r Bound(l)
If i = j Then ' Проверка : находится
элемен т на гла в ной диа г онали матрицы или нет

a( i , j) = i
Else
a( i, j) = О ' Замена оста л ьных
э л еме н тов ма т ри цы на н уль

End I f
Next
Next
'Вывод резул ьт ирующей матрицы
For i = ОGe t UpperBound (О)
То а.
For j = О То a . GetUppe r Bound(l)
DataGridVi ew2 . I t em (j , i ). Va l ue - Con-
ve r t . ToStri ng (а (i , j))
Next
Next
End Sub
End Class

264
Результат выполненной программы представлен на рис. 131.
Двумерные массивы о х

Ис:хо~• мгтриuа P~ynьtмP)'IOIUг• мг1'J)КJ11

2 3 4 2 3 4

9 17 13 6
• с о о о о

1 15 6 3 6 1 о о о о

2 20 2 20 з 2 о о 2 о о

з 6 6 8 9 19 з о о о 3 о

• 4 9 о 19 12 • 4 о о о о 4

Ok

Рис. 131. Все элементы матрицы заменены нулем, элементы главной


диагонали - порядковыми номерами

Транспонирование матрицы

Транспонирование - одна из важных операций линейной ал ­


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

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Dim l , J As Integer
Dim а As Integer (, ) = New Integer(4 , 4) { }
Dim ь As Integer( ,) = New I nteger(4, 4) { }
Dim randomNumber As Random = New Random ()
'Ус тановка зна чений свойс тв исходной матрицы
DataGridViewl.RowCount = 5 ' Количество строк
и сто л бцов
DataGridViewl . ColumnCount = 5
For j = О То 4
DataGri dViewl . Columns ( j) . Width - 60
'Ус танавливаем шир ину столбцов
Next
For i = О То а. Ge t UpperBound (О)

265
Fo r j = О То a . GetUppe r Bound(l) ' Выв о дим
н омера строк и с т олб ц ов ма т ри цы
Da t aGridViewl . Columns (i).Name =
i . ToSt r i ng ()
Da t aGridViewl . Rows(j) . Heade r Cel l .
Value = j . ToSt ring ()
Next
Next
' Уста н о вка з на чен ий с в о й с тв результ ирующей
ма трицы

DataGridVi ew2 . RowCount = 5 'К оличе с тв о строк


и с т олб ц о в
Dat aG r idView2 . ColumnCount = 5
Fo r j = О Т о 4
DataGri dVi ew2 . Col umns (j). Width - 60
'Ус та навли вае м шир ину стол б ц о в
Next
For i = О То а.Ge t UpperBound (О)
For j = О То a . Get UpperBound( l) 'Выв одим
номера с тр ок и столбцов матрицы
Da t aGridView2 . Columns (i).Name =
i . ToSt r i ng ()
Da t aGridView2 . Rows(j) . Heade r Cel l .
Value = j . ToSt ring ()
Next
Next
'Ген ерируем и заполняем з на чен ия э ле ме н то в
и сход н о й ма т р ицы
For i = О Ge t UpperBound (О)
То а.
For j = О То а . GetUpperBound ( 1 )
a(i , j) = r andomNumber . Next (21)
Da t aGridViewl . I tem(j , i) . Val ue =
Conve r t . ToStri ng (а (i, j))
Next
Next
' Транс п о нируем матрицу
For i = О ТоGe t UpperBound (О)
а.
For j = О Т о a . GetUppe rBound(l)
b(j , i) = a(i , j)
Next
Next

266
'Выв о д ре з ул ьт ир ующей мат р ицы
For i = О То
GetUpperBo und ( О ) а.
Fo r j = О Т о a . GetUpperBoun d (l )
Da t aGridView2 . I t em ( j , i ). Value - Con-
ve r t. ToS tri ng (Ь (i , j ))
Nex t
Nex t
End Sub
End Class

Результат выполненной программы представлен на рис. 132.


• Двумерные массивы о х

Исхопн11• м~триw Ре3Уль~ующ~• М11триw

2 3 4 2 3 4
10 2 19 9 15 5

1 9 8 18 17 1 10 8 18 9 17

2 1 18 4 11 9 2 2 18 4 8 13

з 15 9 8 8 13 з 1 11 8 19

• 4 5 17 13 19 20 • 4 19 17 9 13 20

Ok

Рис. 132. Транспонированная матрица

Произведение двух матриц

В соответствии с правилами линейной алгебры произведением


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

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl . Click
Di m i , j , k As In t ege r
Di m а As In t ege r (, ) - New I n t ege r ( 4 , 4 ) {}
Di m Ь As In t ege r (, ) - New I n t ege r ( 4 , 4 ) {}
Di m с As In t ege r (, ) - New I n t ege r ( 4 , 4 ) {}

267
Dim randomNumber As Random = New Random ()
' Уста н овка з н а ч ен ий свойс т в исходной матрицы
DataGridViewl . RowCount = 5 ' Количество строк
и сто л бцов

DataGridViewl . ColumnCount = 5
For j = О То 4
DataGridViewl . Columns (j) . Width - 60
' Устанавливаем ширину столбцов

Next
For i = О То а.GetUpperBound (О)
For j = О То a . Get UpperBound( l ) 'В ыводим
номе ра строк и столбцов матрицы

Da taGr i dVi ewl. Co l umns ( i ). Name =


i . ToString ()
DataGridVi ewl. Rows(j) . HeaderCel l.
Value = j . ToString ()
Next
Next
' Установка значений свойств результирующей
ма т ри цы

DataGridView2 . RowCount = 5 ' Количество строк


и сто л бцов

DataGridView2 . ColumnCount = 5
For j = О То 4
DataGridView2 . Columns (j) . Width - 60
' Устанавливаем ширину столбцов

Next
For i = О То а.GetUpperBound (О)
For j = О То a . Get UpperBound( l ) 'В ыводим
номе ра строк и столбцов матрицы

Da taGr i dVi ew2 . Co l umns ( i ). Name =


i . ToString ()
DataGridVi ew2 . Rows(j) .HeaderCel l.
Value = j . ToString ()
Next
Next
' Установка значений свойств третьей матрицы

DataGr i dV i ewЗ . RowCoun t = 5 ' Коли ч ес т во строк


и сто л бцов

268
Da t aG r idViewЗ . ColumnCount = 5
Fo r j = О То 4
D ataGr i dV i ewЗ . Col umns (j). Width - 60
' Ус т анавливаем шири н у с т олбцов
Next
Fo r i = О То а. Get Uppe r Bound (О)
Fo r j = О Т о a . Get Uppe r Bound(l) ' Выв о дим
номера с тр ок и стол бцов матрицы
DataG ridV ie wЗ . Co lumn s (i) . Name =
i . ToString ()
DataG ridV ie wЗ . Rows(j) . HeaderCell .
Value = j . ToSt ring ()
Next
Next
'Ген ерируем и заполняем з на чен ия э ле ме н тов
и сход н ой ма т р ицы
Fo r i = О То а.
Get Uppe r Bound (О)
For j = О То а . Ge tUpperBound ( 1 )
a(i, j) = r andomNumber . Nex t (5)
Da t aGridViewl . I tem (j, i) . Value = Con-
ve r t . ToS tri ng (а (i , j))
Next
Next
' Г е н ерируем и за п олняем зна ч е н ия элемен т о в
второй исходной матрицы
For i = О То а.
Ge t UpperBound (О)
Fo r j = О То a . GetUppe rB ound(l)
b( i, j) = randomNumbe r.Nex t(5)
DataGridVie w2 . I tem (j, i). Va lue = Con-
vert . ToString (b (i, j))
Next
Next
' Перемн ожаем ма трицы
For i = О То а. Ge t UpperBound (О)
For j = О То а . Ge tUpperBound ( 1 )
c(i, j) = О
Fo r k = О То 4
c( i , j) = c(i , j) + a( i , k) *
ь (k , j)
Next
Next
Next

269
'Выв о д результирующей матрицы
For i = О a . GetUpperBound(O)
То
For j = О Т о a . GetUpperBound(l)
DataGridViewЗ . I tem (j, i) . Value - Con-
ve r t. ToString (с (i , j))
Next
Next
End Sub
End Class

Формирование первой и второй строк матрицы С показано


в табл. 35.

Таблица 35
Формирование строк матрицы

аоо *Ьоо=12 аоо *Ьо1 =12 аоо *Ьо2=16 ............... аоо *Ьо4=0
ао1 *Ъ10=16 ао1 *Ь11=4 ао1 *Ъ12=8 ао1 *Ь14=0
ао2 *Ъ20=8 ао2 *Ъ21=2 ао2 *Ъ22=2 ао2 *Ь24=0
аоз *Ьзо=О аоз *Ъз1=0 аоз *Ъз2=0 аоз *Ьз4=0
ао4 *Ь4о=О ао4 *Ь41=0 ао4 *Ь42= О ао4 *Ь44=0
С00=36 С01 = 18 С02=26 ............... С04 =0

а 10 *Ь 00=12 ............... а1о *Ьо4=0


а 11 *Ь 10=4 а11 *Ь14=0
а12 *Ъ2о=О а12 *Ь24=0
а1з *Ьзо=О а1з *Ьз4=О
а14 *Ь4о=З а14 *Ь44=1
С10= 19 ............... С14 = 1

Результат выполненной программы представлен на рис. 133.


~ Деумерные м.асси.вы l:J х

Р.,ув.~м~ МltJ;IИUf ~....~~~

2 3

о о о 26 2• о

1 • о 1 • 2 • о 18 9

2 2 з о з 2 4 о 2 о 13 18 25 з

3 4 о э 2 о 2 3 23 14 19 11

• 4 о 2 2 о . 4 3 о о . 4 12 8 12 8

Ok

Рис. 133. Результат выполненного перемножения двух матриц

270
Формирование матрицы в соответствии с определенн 1ыми
правилами

Выше рассматривался способ заполнения матрицы с помощью


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

например, как в следующей задаче.


Задача. Сформируйте двумерный массив а(4,4) по следующему
правилу:

a(i,j) = 2(i + 2) 2 - (j + 2) 2.
Найдите максимальный элемент, лежащий ниже главной диаго-
u u u
нали , и минимальныи элемент, лежащии выше главнои диагонали.

Найденные максимальный и минимальный элементы поменяйте


местами.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl . Click
Di m i , j , max , mi n , bu f e r , s t r max , s t o l max ,
s tr_min, s t ol _min As Integer
Di m а As Int ege r (, ) = New I nt ege r ( 4, 4 ) { }
' Ус т ановка значе н ий свойств исхо дн ой ма т ри цы
Dat aGridVi ewl.RowCount = 5 'К оличе с тв о с тр о к
и сто л бцо в
Dat aG r idViewl . ColumnCount = 5
Fo r j = О Т о 4
DataGri dViewl . Col umns ( j) . Width - 60
'Уст анавли вае м шир и н у стол б ц о в
Next
For i = О То а.GetUpperBound ( О )
For j = О То a . Get Uppe r Bound(l) 'Выв о дим
н омера строк и с т олб ц ов ма т ри цы

Da t aGridViewl . Columns (i ). Name =


i . ToString ()
Da t aGridViewl.Rows(j) . He aderCel l.
Value = j . ToSt ring ()
Next
Next

271
' Уста н о вк а з на чен ий с в о й с тв результ ирующей
ма т р ицы

Dat aG r idView2 . RowCount = 5 ' Количест в о с т рок


и сто л бцо в
DataGridView2 . ColumnCount = 5
Fo r j = О Т о 4
Da taGr idVi ew2 . Col umns ( j). Wi d t h - 60
'Уста навли в аем ширину стол б ц о в
Next
For i = О То а. Ge t UpperBound (О)
For j = О То a . Ge t UpperBound( l) 'Выв одим
н омера строк и с т олб ц о в ма т рицы
Dat aG ri dView2 . Columns (i) . Name =
i . ToS t r i ng ()
Da t aGridView2 . Rows(j) . Heade r Cel l .
Value = j . ToSt ring ()
Next
Next
' Запо лняем з на чен ия э ле ме н то в и схо дн о й ма т р ицы
Fo r i = О То а. Get Uppe r Bound (О)
For j = О То а . Ge tUpperBound ( 1 )
а (i, j) = 2 * (i + 2) л 2 (j +
2) л 2
Da t aGridViewl . I tem (j, i) . Value - Con-
ver t. ToString (a (i, j))
Next
Next
' По и ск max и min з на чен ий
mi n = а (0, О)
Fo r i = О Т о a . Get Uppe r Bound(O) - 1
Fo r j = 1 То a . GetUppe rB ound(l)
I f i < j Then
I f a(i , j) < min Then
min = a( i, j)
s tr min = i
stol min = J
End If
End I f
Next
Nex t
max = а (0, О)
Fo r i = 1 Т о а . Get Uppe r Bound (О)
Fo r j = О То a . GetUppe rB ound(l) - 1
I f i > j Then

272
I f a(i, j ) > max Then
max - а (i, j)
str - max - l
stol max - J
End If
End I f
Next
Next
MsgBox ( " Максимальный элемен т матрицы равен " &
max , MsgBoxStyle . Inf ormation , " От вет " )
MsgBox ("Минимальный э ле ме н т ма трицы равен " &
m1n , MsgBoxStyle . Information, " Ответ ")
' Организуем обмен
bu f e r = a(s t r min , s t o l min)
a(s tr min , stol min) = a(st r max , stol max)
a(s tr max , stol max) = bu fer
' Вывод резуль т ирующей матрицы
For i =
GetUpperBound (О)
О То а.
For j = О То a . GetUppe rBound(l)
DataGridView2 . I tem(j, i ). Va l ue Con-
vert . ToString (а (i , j ))
Next
Next
End Sub
End Class

Результат выполненной программы представлен на рис. 134.


Двумерные массивы о х

Иаод1<ая матрищ~ Ре~уnьтирующая матрищ~

2 з 4 2 з 4

~ о ·1 -8 ·17 -28 ~ о -1 -8 -17 168

1 14 9 2 -7 -18 1 14 9 2 -7 -18

2 28 23 16 7 -4 2 28 2З 16 7 -4

з 46 41 34 25 14 з 46 41 34 25 14

• 4 68 6З 56 47 З6 • 4 -28 6З 56 47 З6

Ok

Рис. 134. Максимальный (68) и минимальный (-28) элементы исходной


матрицы поменяли местами

273
ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

Задача 1. В двумерном массиве произвольных чисел найдите


максимальный элемент на глав ной диагонали и его номер (индекс).
Разработка алгоритма решения задачи представлена на рис. 135.

Н ачало

i =о 4
'

j =О, 4

a(i,j )

max = а( О , О)

index =О

i = О, 4

Нет Да

inax = a(i, i)

iпdex = i

max, index

Ко нец

Рис. 135. Алгоритм решения задачи

274
Комментарий. Элементы главной диагонали рассматриваемой
матрицы име ют следующие инде ксы: а(О,О), а(1,1) , а(2,2), а(З,3) ,
а( 4,4) . Поэтому для поиска максимального элемента применим
следующий алгоритм реш ения з адачи: максимальным считается
первый элемент главной диагонали, а именно а(О,О). В программе
за это действие отвечает оператор max = а(О, О). Индекс этого эле ­
мента равен нулю. В программе осуществляется сравнение очеред­
ного элемента главной диагонали с тем элементом, который хра­
нится в ячейке max, и если сравниваемый элемент больше, то он
заносится в ячейку max оператором max = a(i, i) .

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Dim output As String
Dim i, j , max , i ndex As Integer
Dim а As Integer (, ) = New Integer ( 4 , 4 ) {}
Dim r andomNumber As Random = New Random ()
' Установка значений с во йств исходной матрицы
DataGri dVi ewl.RowCount = 5 'Колич ес тв о строк
и с то лб ц о в

DataGridViewl . ColumnCount = 5
For j = О То 4
DataGri dVi ew l . Columns (j) . Width = 60
' Уста н ав ливаем ширину стол бцов
Next
For i = О То а. GetUppe rBound ( О )
For j = О То а . Get UpperBound ( 1) ' Выводим

номера с т рок и стол бцов матрицы

Da taGridViewl . Columns (i) . Name =

i . ToString ()
DataGridViewl.Rows(j) . HeaderCel l.
Val ue = j . ToSt ring ()
Next
Next
'Ге нерируем и запо лняем з н ачения э ле ме н тов
исхо дно й матрицы

For i = О То a . GetUpperBound(O)
For j = О То а . GetUpperBound ( 1 )

275
a(i, j) = randomNumber . Next(21)
Dat aG ridViewl . Item(j , i) . Value = Con -
ve r t . ToStri ng (а (i , j))
Next
Next
max = а (0 , О) ' Макс имал ьным счи та е т ся
пер вый э л еме н т гла вн ой диагонали
index = О ' Е г о и ндекс сч и т ается ра в ным нулю
For i = 1 Т о а . GetUppe r Bound (О) ' Обрабо т ка
в цикле 2 , 3 , 4 строки ма т ри цы
If а (i, i) > max The n ' Поис к
макс ималь н о г о э л емента главной диаг онали
max = а ( i , i)
index = i
End I f
Next 'З аверше н ие работы цикла

out put &= vbCrLf & " Макс ималь ный элеме нт
главной диаг онали = " & max & " Ег о и ндек с = " & index
MessageBox . Show (out put, " Двумерные массивы ",
MessageBoxBut tons . OK , MessageBoxicon . I nfo r mation)
End Sub
End Class

Задача 2. Из двумерного массива произвольных чисел сформи­


руйте другой массив, содер)кащий квадраты чисел исходного мас ­
сива.

Разработка алгоритма решения задачи представлен на рис. 136.


Комментарий. Нахождение квадратов чисел исходной матрицы
осуществляется в цикле оператором b(i, j) = a(i, j) * a(i, j).

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object , е As
EventArgs) Handles Buttonl.Click
Di m l , J As Int ege r
Di m а As Int ege r (,) = New I nt ege r (4, 4) { }
Di m ь As Int ege r (,) = New I nt ege r (S, 5) { }
Dim randomNumber As Random = New Random ()
'Уста н о вка з начений с в ойст в исходной матрицы
DataGri dVi ewl . RowCount = 5 'К оличе с т в о строк
и с т олб ц ов

276
Начало

i = О, 4

j = О, 4

a(i, j)

i =о 4
'

j = О, 4

b(i, j) = a(i, j) * a(i, j)

i =о 4
'

j = О, 4

b(i, j )

Конец

Рис. 136. Алгоритм решения задачи

277
Dat aG r idViewl . ColumnCount = 5
Fo r j = О Т о 4
DataGri dVi ew l . Col umns (j). Width - 60
'Уста навливаем ширину стол б ц ов
Next
For i = О То а. Ge t UpperBound (О)
For j = О То а . Get UpperBound ( 1) ' Выво дим
н омера строк и с т олб ц ов ма т ри цы
Da t aGridViewl . Columns (i).Name =
i . ToString ()
DataGridViewl.Rows(j) . HeaderCell .
Value = j . ToString ()
Next
Next
' Ус т ановка зна ч е н ий с в ойств результирующей
ма трицы

DataGridView2 . RowCount = 5 'К оличе с тв о строк


и сто л бцов

Dat aG r idView2 . ColumnCount = 5


Fo r j = О Т о 4
DataGri dVi ew2 . Col umns (j). Width - 60
'Уста навливаем ширину стол б ц ов
Next
For i = О То а. Ge t UpperBound (О)
For j = О То а . Get UpperBound ( 1) ' Выво дим
н омера строк и с т олб ц ов ма т ри цы
Da t aGridView2 . Columns (i).Name =
i . ToString ()
DataGridView2 . Rows(j) . HeaderCell .
Value = j . ToString ()
Next
Next
' Г е н ерируем и за п олняем зна ч е н ия элемен т о в
и сход н ой ма т р ицы
For i = О То a . GetUppe rBound(O)
For j = О То a . GetUppe rBound(l)
a(i, j) = r andomNumber . Next (21)
Da t aGridViewl . I tem (j, i) . Value = Con-
ve r t . ToStri ng (а (i , j))
Next
Next

278
Fo r i = О То а.
Get Uppe r Bound (О)
For j = О То а . Ge tUpperBound ( 1 )
Ь ( i , j) = а ( i , j) * а ( i , j) ' Нах ожд е­
ние квадратов чисе л исх о дн ой ма т рицы
Next
Next
Fo r i = О То а.
Get Uppe r Bound (О)
For j = О То а . Ge tUpperBound ( 1 )
Dat aG ri dView2 . Item (j, i) . Value - Con-
ve r t. ToS tri ng (Ь (i , j))
Next
Next
End Sub
End Class

Задача 3. В двумерном массиве произвольных чисел вычислить


среднее ари фметическое положитель ных элементов и количество
элементов, равных нулю.

Разработка алгоритма решения задачи представлена на рис. 137.


Комментарий. Организовав циклический процесс, проверяем
каждый элемент матрицы на равенство нулю. В случае истинности
проверяемого условия увеличиваем счетчик на единиц у оп ератором

kol = kol + 1. Затем проверяем каждый элемент матрицы: является


ли он поло)кительн ым числом? В случае истинности условия на­
капливаем сумму положительны х чисел о ператором sum sum +
:=
+ a(i, j) и увеличиваем счетчик на единицу оператором pol =
= pol + 1. В программе предусмотрена защита на случай, если
в матрице нет положительных чисел. В этом случае выводится
надпись: «Положительных элементов в массиве нет~, в противном
случае оператором Clnt( sum / pol) находится среднее арифметиче ­
ское п оло)кительных элементов.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object , е As
EventArgs) Handles Buttonl . Click
Di m l , J ' kol, sum , pol As Integer
Dim output As String
Dim а As I nteger (, ) = New Integer( 4 , 4) { }
Dim ь As I nteger (, ) = New Integer(5 , 5) { }
Dim randomNumber As Random = New Random ()

279
Начало

i =о 4
'

j = О, 4

a(i,j)

kol = О

pol =О

sum =О

i = О, 4

i =о 4
'

Да

kol = kol + 1

Да

pol = pol + 1

sнm = sum + a(i, j)

Нет Да

П оложительных
Cint (sum / pol)
элементов нет

Коиец

Рис. 137. Алгоритм решения зада чи

280
' Установка зна ч ений свойс т в исходной матрицы
DataGridViewl.RowCount = 5 ' Количество строк
и столбцов

DataGri dVi ewl. Col umnCount = 5


For j = О То 4
Dat aG r idViewl . Columns ( j) . Wi dt h - 60
' Устанав ливаем ширину стол бцов
Next
For i = О То а. Ge t UpperBound (О)
For j = О То a.GetUpperBound(l) ' Выводим
номера с т рок и стол бцов матрицы

DataGridVi ewl . Co l umns (i ). Name =


i . ToString ()
DataGridVi ewl. Rows(j) . HeaderCel l.
Value = j . ToString ()
Next
Next
' Генери руем и заполняем значения элементов
исход н ой ма т рицы
For i = О GetUpperBound (О)
То а.
For j = О То а . GetUpperBound ( 1 )
a( i, j) = -1 5 + randomNumbe r.
Next (2 1 )
DataGridVi ewl. I t em (j , i ). Va l ue - Con-
vert. ToString (a (i , j))
Next
Next
kol - О
po l - О
sum - О
For i - О GetUpperBound (О)
То а.
For j = О То a . GetUppe r Bound(l)
If a(i , j) = О Then ' Поиск элементов
матрицы равных нулю

kol = ko l + 1 ' Увели ч ение


счетчика на единицу в случае истинности условия

End I f
If a(i , j) > О Then ' Поиск
положительных элеме нтов матрицы

pol = po l + 1 ' Увели ч ение


счетчика на единицу в случае истинности условия

281
sum = sum + a (i , j )
' Н а х ожде ние суммы п оложи т е л ьных чисел
End I f
Next
Next
If po l = О Then
output &= vbCrLf & " Положи т ельных
элемен т ов в массиве не т . "

Else
out put &= vbC r Lf & " Сред н ее
арифме т ическое положительных элементов =" & Cint (sum /
pol )
End I f
Mes sageBox . Show (output , " Д в уме р ные ма сс ивы ",
MessageBoxBut tons . OK , MessageBoxicon . I nfo r mation )
End Sub
End Class

Задача 4. В двумерном массиве произвольных чисел найдите


ч етные элементы и выведите их как одноме рный массив.
Алгоритм решения задачи представлен на рис. 138.
Комментарий. Проверка на четность очередного эл емента ма­
трицы осуществляется оператором a(i, j) Mod 2 = О . Переменная
k необходима для формирования очередного элемента результи ­
рующего массива. Поскольку она будет увеличиваться на единицу
оператором k = k + 1, последовательно будут формироваться эле­
менты результирующего массива: Ь (О) , Ь (1), Ь (2) и т.д.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object , е As
EventArgs) Handles Buttonl . Click
Di m i , j , k As Int ege r
Dim а As I nt eger (, ) = New I nt e ge r ( 4 , 4) { }
Di m Ь As Int ege r () = New Intege r ( 24 ) { }
Di m randomNumbe r As Random = New Random ()
' Уст ан о вк а з наче н ий с в ойст в ис х одной матрицы
Dat aG r idViewl . RowCount = 5 ' Количество с т рок
и с т олбцов

282
Начало

i =о 4
'

j =О, 4

a(i,j)

k=O

i =о , 4

j = О, 4

Нет Да

k=k +1

b(k) = a(i, j)

i= 1 k
'

b(i)

Конец

Рис. 138. Алгоритм решения задачи

283
Dat aG r idViewl . ColumnCount = 5
For j = О То 4
DataGri dVi ew l . Col umns (j). Width - 60
'Уста навли вае м ширину стол б ц о в
Next
Fo r i = О Т о а. GetUppe r Bound (О)
For j = О То a . Get UpperBound( l) 'Выв одим
н омера строк и с т олб ц ов ма т ри цы

Da t aGridViewl . Columns(i) . Name =


i . ToString ()
Da t aGridViewl . Rows(j) . HeaderCel l .
Value = j . ToString ()
Next
Next
'Ген ерируем и заполняем з на чен ия э ле ме н то в
исхо д ной матрицы

For i = Ge t UpperBound (О)


О То а.
For j = О Т о a . GetUppe rBound(l)
a(i , j) = r andomNumber . Next (21)
DataGridViewl . I tem (j, i) . Va lue = Con-
ve r t . ToStri ng (а (i , j))
Next
Next
' Ус т ановка зна ч е н ий с в ойств о дн омерно г о
масс ива

Dat aG r idView2 . RowCount = 2


Dat aG r idView2 . ColumnCount = b . Get Length(O) - 1
DataGridView2 . Rows (0) . Ce l ls (0) . Value = " i "
Dat aG r idView2 . Rows (l).Cel l s (0) . Val ue = " Ь (i)"
Da taGr idV i ew2 . Co lu mnHeadersV i s iЫ e = Fa lse
Da t aG r idView2 . RowHeade r sVis i Ьle = False
k = О ' П ереме н ная k необхо дима дл я форми ­
рования п оря дк о вых номеров э л ементо в резуль тирующе г о

масси в а

For i ;;;:; О То а. Ge t UpperBound (О) ' Орган и за ция


вне шнего цикла по стро кам ма тр и цы

For j = О То а. GetUpperBound ( 1)
' Орга низация вну тренне г о цикла по сто л бцам матрицы
I f a(i , j) Mod 2 = О Then
'Про верка: является ли о чередн ой э л еме н т матрицы четным
числом

284
k = k + 1 'В случае истинности
проверяемого условия k увеличивается на единицу
Ь (k) = а (i , j) ' Формирование
результирующего масс ива че т ных чи се л

End I f
Next ' За вершаем внут ренний цикл
Next ' Завершаем внешний цикл
For i = 1 То k
DataGridView2 . Columns(i) . Width = 50
DataGri dView2 . Rows (О) . Cells (i ). Val ue -
Convert . ToString( i)
DataGri dView2 . Rows ( 1 ). Cells (i ). Value -
Convert . ToString(b( i ))
Next
End Sub
End Class

Задача 5. В двумерном массиве произвольных чисел требуется


v v v
в каждои строке наити минимальныи элемент и записать его в вы-

ходн ой массив.
Алгоритм решения задачи представлен на рис. 139.
Комментарий. Для поиска минимального элемента в каждой
строке матри цы исп ользуется стандартный прием нахожде ния ми ­
нимального элемента. Оператором x(i) = 32767 первому элементу
матрицы присваивается какое-то большое значение (в нашем при­
мере - число 32 767). Затем каждый элемент в строке l\1атрицы
будет сравниваться с этим числом, и если какой-то из них будет
мень ш е дан но го числа, то о н считается минималь ным и у)ке с ним

будут сравниваться оставшиеся элементы в текущей строке ма­


трицы. Таким образом, в каждой строке происходит поиск мини ­
мальн ого элемента и одн овременно формирование резул ьтиру­
ющего массива оператором x(i) = a(i, j). Поскольку в каждой строке
матрицы может быть только один минимальный элемент (а строк
всего пять), то параметр цикла при выводе результирующего мас ­
сива меняется от О до x.GetUpperBound(O).

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object , е As
EventArgs) Handles Buttonl . Click
Dim i , j As Integer

285
Начало

i =о 4
'

j =О, 4

a(i,j)

i = О, 4

x(i) = 32767

j = О, 4

Нет Да

x(i) = a(i, j )

i =о 4
'

x(i)

Конец

Рис. 139. Алгоритм решения задачи

286
Dim а As Integer ( , ) = New Intege r ( 4 , 4) { }
Dim х As Integer () = New Integer ( 4) { }
Dim r a ndomNumber As Random = New Ra ndom ()
' Уста н овка з н а ч ен ий свойс т в исходной матрицы
DataGri dVi ewl. RowCoun t = 5 ' Колич ес т во стро к
и сто л бцов
DataGridViewl . ColumnCount = 5
For j = О То 4
Da taGr idViewl . Columns (j) . Width - 60
' Устанавливаем ширину столбцов
Next
For i = О То а. Ge t UpperBound (О)
Fo r j = О То а . GetUppe rB ound ( 1) ' Выводим
номера с т рок и стол бцов матрицы

Da taGr i dVi ewl. Co l umns ( i ). Name =


i . ToString ()
DataGridViewl . Rows(j) . HeaderCell .
Value = j . ToString ()
Next
Next
'Г енерируем и запо лн яем з н ачен и я э л еме н тов
и сход н ой ма т р ицы
For i = О То
Ge t UpperBound (О) а.
Fo r j = О То a . GetUppe rB ound(l)
a(i, j) = randomNumber . Next(21)
DataGridViewl . I tem (j, i) . Value = Con-
vert . ToString (а (i , j))
Next
Next
' Уста н овка з н ачен ий свойс т в одномер н ого мае-
сива

DataGri dVi ew2 . RowCoun t = 2


DataGri dVi ew2 . Col umnCoun t = x . GetLeng t h(O)
For i = О То а . GetUpperBound (О) ' Организация
цикла по строкам

x(i) = 32767 ' Формирование первого


элемента массива

For j = О То а. GetUpperBound ( 1 )
' Орга ни за ци я цикла по стол б ц ам
If а ( i, j) < х ( i ) Then ' Проверка
к аждо г о элемен т а массива

287
x(i) - a(i, j)
End I f
Next
Next
Fo r i = О То х.
Get Uppe r Bound (О)
DataGr i dVi ew2 . Col umns (i ). Width = 50
DataGr i dVi ew2 . Rows (0).Ce ll s (i ).Val ue -
Conve r t . ToS tri ng( i )
DataGr i dVi ew2 . Rows (1 ).Ce ll s (i ).Val ue -
Conve r t . ToS tri ng(x(i))
Next
End Sub
End Class

Задача 6. В двумерном массиве произвольных чисел вычислите


сумму элементов, сумма индексов которых равна 4.
Алгоритм решения задачи представлен на рис. 140.
Комментарий. В данной программе перебирать все элементы
матрицы не следует. По сути, требуется найти сумму элементов
матрицы А04 , А 13 , А22 , А31 , А40 . Именно у этих элементов сумма ин ­
дексов равна четырем. Поскольку индексация начинается с нуля,
первый индекс (номер строки, за который отвечает параметр
цикла i) может принимать значения от О до 4, а второй (номер
столбца, за который отвечает параметр цикла j) - от 4 до О. Для
решения задачи достаточно организовать один цикл с параметром
.
1.
В нем будет вычисляться первый индекс элемента, второй индекс
будет вычисляться в цикле оператором j = 4 - i.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object , е As
EventArgs) Handles Butto nl . Click
Di m i , j, sum As Integer
Di m out put As St r i ng
Dim а As In teger (, ) = New Intege r ( 4, 4) { }
Dim randomNumber As Random = New Random ()
'Уста н овка з наче н ий свойс тв исходной матрицы
DataGridViewl . RowCount = 5 'Коли ч ес тв о стро к
и сто л бцов
DataGridViewl . ColumnCoun t = 5
For j = О То 4

288
Н ачало

i =о 4
'

j =О , 4

a(i, j)

Sllffi = 0

i =О, 3

j=З-i

su1n = sum + a(i, j)

sum

Коаец

Рис. 140. Алгоритм решения зада чи

DataGri dVi ew l . Col umns(j) . Wi dt h = 60


' Ус т анавливаем шири н у с т олбцов
Next
Fo r i = О То a . GetUpperBound(O)
For j = О То а . GetUppe rBound ( 1) 'Выво дим
номера с т рок и стол бцов матрицы
Da taGr i dViewl. Co l umns ( i ). Name =
i . ToString ()
DataGridViewl.Rows(j) . HeaderCell .
Val ue = j . ToS t r i ng ()
Next
Next

289
' Генерируем и запо лн яем з н ачения э л еме н тов ис­
ход ной матри цы
For i = О То а.
GetUppe r Bound (О)
For j = О То а . GetUpper Bound ( 1 )
a( i, j) = r andomNumbe r. Next(2 1 )
DataGridVi ewl. I t em(j , i ) . Value =
Convert. ToString(a( i, j))
Next
Next
sum = О
For i = О То a . GetUpperBound(O)
j = 4 - i
sum = sum + a(i , j)
Next ' За вершение работы цикла
output &= vbCrLf & " Сумма элементов , сумма
и нд ексов ко т орых равна 4 = " & sum
MessageBox . Show (output, " Двумер ные масс и вы ",
MessageBoxButt ons . OK , MessageBoxi con . Inf ormation)
End Sub
End Class

Контрольные вопросы и задания


1. Что называется циклическим алгоритмом?
2. Как записывается сложный циклический процесс в блок-схемах?
3. Как записывается сложный циклический процесс цикл в программах?
4. Как работает сложный циклический пр оцесс?
5. Каким образом осуществляется доступ к каждому элементу двумер-
ного массива при его обработке?
6. Поясните, как выполнить инициализацию двумерного массива.
7. Поясните, как выполнить объявление]аgg·еd-массива.
8. Каким образом осуществить вывод двумерного массива на экран?
9. Приведите базовые алгоритмы обработки двумер ных массивов.
10. Назовите основные свойства матр иц.
11. Поясиите, каким образом осуществляется обмеи значений элемеитов
двумерного массива.

Задачи для самостоятельного решения


1. Раз работайте программу, заполияющую матрицу А( 4,4) случайными
целыми числами, находящимися в инте рвале от 1 до40 . Сформируйте
одномерный массив, в кото рый запишите номера строк максимальных
элементов каждого столбца.
2. Раз работайте программу, заполияющую матрицу А( 4,4) случайными
целыми числами, находящимися в и~-rте рвале от 1 до 40. В созда~-rной

290
матрице ~-rайдите средиее арифметическое элемеитов, сумма ИI-Iдексов
которых равна 4.
3. Разработайте программу, заполияющую матрицу А( 4,4) случайными
целыми числами, находящимися в иатервале от 1 до 40. В создааной
матрице требуется найти наибольший элемент побочной диагонали.
4. Разработайте программу, заполияющую матрицу А( 4,4) случайными
целыми числами, находящимися в интервале от 1 до 80. В созданной
матрице найдите четные элементы и выведите их как одномерный
массив.

5. Разработайте программу, заполняющую матрицу А(4,4) случайными


целыми числами, находящимися в интервале от - 15 до 40. В со­
зда~п1ой матрице вычислите средаее арифметическое положительных
элементов и количество элементов, равных нулю.

6. Разработайте программу, заполияющую матрицу А( 4,4) случайными


целыми числами, находящимися в и~-rтервале от 1 до 40. В созда~-rной
матрице для каждой строки вычислите среднее арифметическое
элементов, значеаия которых ааходятся в заданном диапазоне. Диа ­
пазон задаа значеаиями нижаей и верхней границ, при этом значения
границ в диапазон не входят.

7. Разработайте программу, заполияющую матрицу А( 4,4) случайными


целыми числами, находящимися в и~-rтервале от 1 до 20. Сформи ­
руйте два одномерных массива, в один запишите элементы матрицы,
расположениые на главной диагоаали и выше, в другой - элементы
матрицы, лежащие ниже главной диагонали, и выведите оба массива.
8. Разработайте программу, заполняющую матрицу А( 4,4) случайными
целыми числами, находящимися в и~-rтервале от 1 до 50. Выведите
на экран только главную и побочную диагонали.
9. Разработайте программу, заполняющую матрицу А( 4,4) случайными
целыми числами, иаходящимися в интервале от 1 до 40. В результи ­
рующей матрице выведите на экран половину матрицы относительно
главной диагонали исходной .
10. Разработайте программу, заполияющую матрицу А(4,4) случайными
целыми числами, находящимися в интервале от 1 до 40. В созданной
матрице найдите сумму элемеатов иа диагоиали , параллельиой по ­
бочиой, А 14 , А 23 , А32 , А4 1> и сумму элемеитов аа диагонали, парал ­
лельной главной, А 10 , А21 , А32 , А43 .
11. Разработайте программу, заполияющую матрицу А( 4,4) случайными
целыми числами, I-Iаходящимися в интервале от 1 до40. Преобразуйте
матрицу таким образом, чтобы строки с нечетными индексами были
упорядоче~-rы по убыванию, а с чет~-rыми - по возраста~-rию.
12. Разработайте программу, заполняющую матрицу А(4,4) случайными
целыми числами, находящимися в интервале от 1 до 40. В созданной
матрице вычислите сумму ааибольших заачеиий в столбцах, выведите
на экран массив наибольших элементов.
13. Разработайте программу, заполняющую матрицу А(4,4) случайными
целыми числами, находящимися в и~-rтервале от 1 до 40. Все элемеиты

291
исходной матрицы замените нолями, а каждый элемент побочI-rой ди­
агонали замените его номером .

14. Разработайте программу, заполняющую матрицу А(4,4) случайными


целыми числами, ааходящимися в иатервале от 1 до 40. Требуется
взаимно поменять местами вторую и четвертую строки. Выведите обе
матрицы на экран.

15. Разработайте программу, заполияющую матрицу А( 4,4) случайными


целыми числами, находящимися в интервале от 1 до 40. Вычислите
две суммы элементов : расположенных выше и ниже от главной диа­
гонали.

16. Разработайте программу, заполияющую матрицу А( 4,4) случайными


целыми числами, иаходящимися в иитервале от 1 до 20. Преобра­
зуйте матрицу так, чтобы первый элемент каждой строки был заменен
средним арифметическим элементов этой строки.
17. Разработайте программу, заполияющую матрицу А(4,4) случайными
целыми числами, находящимися в интервале от 1 до 40. Определите
номера столбцов, в которых среднее арифметическое его элементов
меньше, чем среднее арифметическое элемеитов матрицы.
18. Пользователь вводит с клавиатуры элементы двумерного массива
A(i,j). Определите, является ли матрица единичной . Единичной ма­
трицей называют матрицу, у которой элементы главной диагонали -
единицы, все остальаые - ну ли.

19. Разработайте программу, заполняющую матрицу А(4,4) случайными


целыми числами, находящимися в интервале от 1 до 40. Преобра­
зуйте матрицу таким образом, чтобы каждый столбец был упорядочеи
по убыванию.
20. Разработайте программу, заполняющую матрицу А(4,4) случайными
целыми числами, находящимися в интервале от - 20 до 20. Вычислите
количество положительных элемеатов матрицы, расположеиtrых по ее

периметру и на диагоналях.

21. Разработайте программу, заполняющую матрицу А( 4,4) случайными


целыми числами, находящимися в интервале от 1 до 40. В созданной
матрице вычислите суммы элементов строк.

22. Разработайте программу, заполняющую матрицу А( 4,4) случайными


целыми числами, находящимися в интервале от 1 до 40. В созданной
матрице требуется в каждой строке найти максимальаый элемент
и записать его в выходной массив.
23. Разработайте программу, заполняющую матрицу А( 4,4) случайными
целыми числами, находящимися в интервале от 1 до 40. В созданной
матрице вычислите сумму максимальных зиачений в строках, выве ­
дите на экран массив максимальных элементов .

24. Разработайте программу, заполняющую матрицу А( 4,4) случайными


целыми числами, иаходящимися в иитервале от 1 до 50. Определите
максималыrый элемент среди элемеитов матрицы, рас пол ожениых
выше главной диагонали, и минимальный элемент среди тех, которые
находятся ниже главной диагонали.

292
25. Разработайте программу, заполияющую матрицу А( 4,4) случайными
целыми числами, находящимися в интервале от - 20 до 20. Н айдите
в строках самые правые наименьшие элементы и определите их ме­

стоположение, т.е. выведите аа экраи номер столбца.


26. Разработайте программу, заполняющую матрицу А( 4,4) случайными
целыми числами, находящимися в интервале от 1 до 60. Вычислите
зиачение среднего арифметического ее элемеитов, больших 20.
27. Разработайте программу, заполияющую матрицу А( 4,4) случайными
целыми числами, находящимися в интервале от 1до30. Осуществите
поворот матрицы на 90° по часовой стрелке и выведите результат
на экран.

28. Разработайте программу, заполияющую матрицу А( 4,4) случайными


целыми числами, находящимися в интервале от 1 до 40. Опр еделите,
имеются ли среди ее элементов, лежащих ниже главаой диагоиали,
отрицательаые числа.

29. Разработайте программу, заполняющую матрицу А(4,4) случайными


целыми числами, находящимися в интервале от - 15 до 30. Е сли хотя
бы одии элеме~-rт строки матрицы отрицателен, то все элемеиты этой
строки заме~-rите ~-rолями.

30. Разработайте программу, заполняющую матрицу А(4,4) случайными


целыми числами, находящимися в ин т ервале от - 20 до 40. В со­
зданиой матрице вычислите количество, сумму и среднее арифмети ­
ческое отрицательных чисел.
Глава 9
РАБОТА С ФАЙЛАМИ

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


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

зывает большие неудобства.


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

· двоичного доступа , состоящие из компонентов одного типа,


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

9.1. ОПЕРАТОРЫ ДЛЯ РАБОТЫ С ФАЙЛАМИ


ПОСЛЕДОВАТЕЛЬНОГО ДОСТУПА

Открытие файлов с последовательным доступом осуще ­


ствляется оператором FileOpen. Синтаксис оператора:

FileOpen (FileNumber, FileName, Mode, Access, Share, RecordLength)


где FileNumber - номер файла - целое число;
FileName - представ­
ляет собой путь к открываемому файлу; Mode - способ использо ­
вания файлов:
· Output - открытие файла для записи в него информации;
· Input - открытие файла для чтения из него информации;
· Binary - двоичный файл;
· Append - дозапись текста в конец файла;
Access - доступ: Read (чтение) и Write (запись);

294
Share - ограничения при коллективном использовании файлов:
Shared (разделяемый), LockRead (заблокировано для чтения) ,
LockWrite (заблокировано для записи);
RecordLeпgth - число, меньшее или равное 32 767 байт.

Пример:

FileOpen (1 , "c:\avto.txt", OpeпMode.Output, OpeпAccess.Write)

Оператор FileClose используется для закрытия файлов.

Пример:

FileOpen (1 , "c:\avto.txt", OpeпMode.Output, OpeпAccess.Write)


FileOpen (2, "c:\avto1.txt", OpeпMode.Output, OpeпAccess.Write)
FileClose ( 1)
FileClose (2)

Запись в файл мож:но организовать, используя операторы Print


и PrintLine.
Синтаксис операторов записи в текстовый файл следующий:

Print ( FileNиmber, Список значений)


PrintLine ( FileNиmber, Список значений)

где FileNиmber - номер файла; Список значений - перечисленные


через запятую значения, предназначенные для записи в файл.
В списке значений оператора PrintLine возможно использо­
вание функции Spc(n) - для вставки п пробелов между значениями
в текстовой строке, и функции Tab(n) - чтобы указать номер п по ­
зиции для записи следующего з начения.

Задача 1. Разработайте программу записи сведений об автомо ­


билях. Используйте операторы Print и PrintLine.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click

295
Dim ma r ka , god , col or As St ring
Dim i As Intege r
FileOpen ( 1, " с : \avto . tx t ", OpenMode . Output ,
OpenAccess . Wri te)
For i = 1 То 5
ma rka - InputBox ( " Ввод данных ", " Введите
мар ку автомобиля " )

god - InputBox ( " Вв од да н ных ", " Введите


год вып ус ка " )

color = InputBox ( " Ввод данных ", " Введите


цвет машины " )

Print(l , marka , god , co l or)


PrintLine( l)
PrintLine( l , ma rka , ТАВ(), god , col or)
PrintLine( l , ma rka , " " ' go d '
col or)
PrintLine( l , SPC(5) , marka , god , color)
PrintLine( l , ТАВ(10) , marka , god , co l or)
Next
FileClose(l)
End SuЬ
End Class

Результаты работы программы представлены на рис. 141.


- ------- ---- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------- ---

е avto. txt - Блокнот [;J[g]l:'XI


Файл !Jравка Фор~ат ~ид Справка

~ойота 1985 бел1::.1й


тойота 1985 белый
то йота 1985 белый
тойота 1985 белый
то йота 1985 белый
~
~ '1 .:
.~J •••

Рис. 141. Р езультаты работы программы с использованием опера то ров Print


и Print line

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


Write и WriteLine.

296
Синтаксис операторов записи в текстовый файл следующий:

W rite (FileNиmber, Список значений)


WriteLine (FileNиmber, Список значений)

где FileNиmber - номер файла; Список значений - перечисленные


через запятую значения, предназначенные для записи в файл.
Следует отметить, что в программе, написанной с использова­
нием оператора W rite, элементы списка значений записываются
в текстовую строку файла через запятую, причем элементы списка
будут заключены в кавычки. В программе с оператором Print зна­
чения записываются в 14-символьные зоны вывода.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Clic k(ByVal sender As Sys t em.
Object , ByVal е As System . EventArgs) Handles Buttonl .
Click
Dim marka , god , color As String
Dim i As Integer
FileOpen(l, "c : \avto .txt " , OpenMode . Output ,
OpenAccess . Wri te)
For i = 1 То 5
marka = InputBox ("Ввод данных", "Введите марку

автомобиля")
god = InputBox ( " Ввод данных " , " Введите год

выпуска " )

color = InputBox ( " Ввод данных ", " Введите цвет

машины " )

Write(l , marka , god, color)


WriteLine(l)
WriteLine(l, marka, ТАВ(), god, color)
WriteLine (1, marka, " ", god, color)
WriteLine(l, SPC(5) , marka, god, color)
WriteLine(l , TAB (lO ), marka , god, color )
Next
FileClose( l )
End SuЬ

End Class

297
Результаты работы программы представлены на рис. 142.
- - - - - - - - - - - - - - - - - - -

8 avto. txt - Блокнот GJ(g]~


Файл Qравка Фор~ат ~ид ~правка
11 11

"т ойота ", белый ,


11 11
1 98 5 ,
11 11
"тойота" белый
11 11
198 5
11

Т ойота"
'' 11 ' "1985" "белый" "
' ' '
"тойота" "1985" "белый"
' 11

То йота
,
'
"198 5 белый"
11
,
11
,
11

1
-
..--.
Рис. 142. Результаты работы программы с исполь зованием операторов Write
и Writeline

Операция чтения даннъ1х из файла возможна с помощью опе­


ратора Input. Оператор Input имеет следующий синтаксис:

Input (FileNumber, Переменная)

Задача 2. Прочитать информацию из созданного ранее файла


avto.txt (оператор Write ). Данные занести в списки (элемент управ­
ления ListBox) на форму. Функция EOF (End Of File) возвращает
значение True, если достигнут конец файла.

Листинг программы

Private Sub Buttonl_Click(ByVal sender As System.Ob-


ject, ByVal е As System . EventArgs) Handles Button1 . Click
Dim ma r ka , god, color As String
Fi leOpen( l, " c : \av t o . t xt ", Ope nMode .I nput,
OpenAccess.Read)
Do Unti l EOF(l)
I npu t (l, ma r ka )
Input ( 1 , god)
Input(l , col or )
Li stBoxl .I tems .Add(mar ka )
Li stBox2 .I tems .Add(god)
L i s t BoxЗ . I t ems . Add(co l o r )

Loop
Fi leClose (l)
End SuЬ

298
Операция чтения из файла возможна и с помощью функции
Linelnput. Эта функция используется для одновременного чтения
всего текстового файла и размещения его в текстовом поле формы.
При этом необходимо выяснить размер файла в символах, для чего
применяется функция LOF (Length Of File) - длина файла.
Для текстового поля, в которое помещается содержимое файла,
следует установить значение свойства MultiLine ( многострочный
вывод) равным True, а значение свойства ScrollBars (полоса про­
крутки) равным V ertical.

Задача 3. Прочитать информацию из созданного ранее файла


avto.txt. Вывести информацию в объект Текстовое поле на форму.

Листинг программы

Private SuЬ Buttonl_Click(ByVal sender As System .


Object, ByVal е As System.EventArgs) Handles Buttonl .
Click
Di m n Asinteger
Fi leOpen (l , " c : \avt o . txt " , OpenMode . I nput ,
OpenAccess . Read )
n = LOF ( 1 )
TextBox l . Te x t - Lineinp ut(l)
FileC l ose( l )
End SuЬ

Неудобство работы с текстовыми файлами состоит в последова­


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

Листинг программы

Private SuЬ Buttonl_Click(ByVal sender As System .


Object, ByVal е As System.EventArgs) Handles Buttonl .
Click
Dim zap1 s As New Sys t em . IO . St reamW ri te r (" с : \avto .
txt ", True )

299
Dim ma rka , god , col o r As St ring
Dim i As Integer
For i = 1 То 2
marka - InputBox (" Ввод данных " , " Введите
марку автомобиля " )
god = InputBox( " Bвoд данных ", " Введите
г од выпуска ")
Color = InputBox (" Ввод данных " , " Введите
цвет машины ")

zapis . WriteLine (marka )


zapis . WriteLine (god )
zapis . WriteLine (Color )
Next
zapis . Close ()
End SuЬ

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


придется выполнить три действия:
1) загрузить информацию из файла в память;
2) изменить информацию в оперативной памяти;
3) сделанные изменения записать в файл.
Поскольку при чтении количество строк, находящихся в файле,
заранее неизвестно, вместо использования оператора цикла For по­
дойдет метод Peek. Если файл кончился, то метод возвращает - 1.
Предположим, надо заменить в имеющемся файле, который со­
держит названия марок автомобилей, одну из них. В следующем
листинге марка Тойота заменяется на Suzuki.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System .
Object, ByVal е As System . EventArgs) Handles Buttonl .
Click
' Процедура записи информации в файл
Dim zapis As New System .I O. Stre amWri ter(" c : \
avto . t xt " )
Dim ma r ka , god , col or As St ring
Dim i As Intege r
For i = 1 То 2
ma rka = InputB ox ( " Ввод данных ", " Введи те
марку автомобиля " )

300
god = InputBox( " Bвoд данных " , " Введите
год выпуска " )
color = I npu t Box ( " Вво д данных ", " Введите
цвет машины " )

zapis.WriteLine(marka)
zapis . WriteLine(god)
zapis.WriteLine(color)
Next
zapi s . Close ()
End SuЬ

Private Sub Button2_Click(ByVal sender As System .


Object, ByVal е As System.EventArgs) Handles Button2.
Click
' Считывание информации из файла

Di m ma r ka( l O) As Stri ng
Di m read As New Sys t em . I O. Str eamReader ( " с : \av t o .
txt " )
Dim n As Integer = 1 ' Сче тчик строк файла
Do While r ead . Peek() <> -1
ma r ka(n) - read . ReadLine
n = n + 1
Loop
r ead . Close ()
'Обработка информации в оперативной памяти
Dim kol _st ro k As Integer = n - 1
For n = 1 То kol str ok
If ma rka(n) - " Тойота " Then
marka (n) = "Suzuki "
End If
Next
' Обновле н ие файла
Dim zapis As New Sys tem . IO . StreamWri ter ( " с : \avto.
t xt " )
For n = 1 То kol str ok
zapis.WriteLine(marka(n))
Next
zapis . Cl ose()
End SuЬ
End Class

301
9.2. ОПЕРАТОРЫ ДЛЯ РАБОТЫ С ФАЙЛАМИ
ПРОИЗВОЛЬНОГО ДОСТУПА

Файлы с последовательным доступом не подходят для так на­


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

банковским автоматом, соответствующий счет проверяется на на­


личие денег в течение нескольких секунд. Такой тип мгновенного
доступа возмо)кен благодаря файлам с произвольным доступом.
Файлы с произвольным доступом иногда называют файлами пря­
мого доступа.
П ре)кде чем открыть файл для произвольного доступа, следует
объявить все переменные, необходимые для управления данными,
находящимися в этом файле. Структура данных включает опреде-
~

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

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


оператором FileOpen. Синтаксис оператора:

FileOpen (FileNuтber, FileNaтe, Mode)


где FileNuтber - номер файла - целое число; FileNaтe - представ­
ляет собой путь к открываемому файлу; Mode - способ использо­
вания файлов: Random - открытие файла для записи или чтения
информации.

Задача. Разработать базу данных, содержащую сведения об ав­


томобилях.
Для каждого автомобиля известны:
• город, в котором находится дилер;

• название салона;

• марка автомобиля;
• год выпуска автомобиля.
Требуется создать:
• файл с пронумерованными записями этой информации обо всех
автомобилях;

302
• процедуру чтения всех записей из файла;
• процедуру чтения записи с указанным номером;

• процедуру исправления записи с указан ным н омером.

Создадим структуру:

Structure LegendAvto
Di m marka As String
Dim god As Integer
Di m salon As String
Di m adress As Str i ng
End Structure

Создадим массив структур для всех автомобилей:

Di m а(4) As LegendAvto

Записъ информации в файл произвольного доступа осуще­


ствляется оператором FilePut. Синтаксис оператора:

FilePut(FileNuтber, ИмяПеременной, НомерЗаписи)

где FileNuтber - номер файла - целое число; ИмяПеременной -


переменная, значением которой является запись; НомерЗаписи -
целое положительное число, обозначающее порядковый номер за­
писи в файле.
Чтение информации из файла произвольного доступа осуще­

ствляется оператором FileGet. Синтаксис оператора:

FileGet ( FileNuтber, ИмяПеременной, НомерЗаписи)

где FileNuтber - номер файла - целое число; ИмяПеременной -


переменная, значением которой являе тся запись; НомерЗаписи -
целое положительное число, обозначающее порядковый номер за­
писи в файле.

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


на рис. 143.

303
-------------------------------

111 Файлы с произвольным доступом GJ[QJ~


Введите номер записи Ацрес Название салона Марка Год выпуска

_lз_ _ _ _I_lд_
ед_
овс_к_~l l_Еж_и_
к _ _ _l _lто_йот
_а_ _ _l 1~2о_
о6_ _~
Создание Чтение Исправление Чтение всех
записей записи записи записей

tvlocквa
Авrоваз
Волга
2006
Петерб':jрг
Крокус
Жигули
2006
Дедовск
Е жик
Т ойота
2006

Рис. 143. Экранная форма разработанного приложения

Листинг программы

PuЬlic Class Forml


Structure Legend Avto
Di m marka As Stri ng
Di m god As Integer
Dim salon As Str ing
Dim ad r ess As St ring
End Structure
Dim а(4) As LegendAvt o
'Процедура соз д ания файла с за писями
PrivateSuЬ
Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
' Создаем в памя т и компьютера информацию о всех
автомобилях
а (1) . adress = " Москва "
а (1) . salon = " Ав т оваз "
а (1) . ma r ka = " Волга "
a( l ) . god = 2006
а (2) . adress = " Пе т ербург "
a(2) . sal on = " Крокус "
а(2) . ma r ka = " Жигули "
а(2) . god = 2006
а(З) . adress = " Дедовск "
a(З) . sa l on = " Ежик "

304
а(З) . marka = " Тойота "
а(З) . god = 2006
а (4) . adress = " Дедовск "
а ( 4) . salon = " Ежик "
а (4) . mar ka = " Тойо т а "
а(4) . god = 2006
' Записываем информацию в файл
FileOpen ( 1, " с : \ Baza . tx t", OpenMode . Random)
Dim i Asinteger
For i = 1 То 4
F i 1 е Pu t ( 1 , а ( i ) )
Next
FileClose (l )
End SuЬ

' Процедура чтения одной записи


PrivateSub Button2_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Button2.
Click
Di m auto As LegendAvto
Dim number As Integer = Cint(TextBoxl . Text )
' Считываем информацию об одном автомобиле
Fi leOpen ( 1, " с : \Ba za . t xt ", OpenMode . Random)
FileGet(l , auto , number)
FileClose(l)
' Отображаем и н формацию об одном автомобиле
TextBox2 . Text - auto . adress
TextBoxЗ . Text - auto . salon
TextBox4 . Text - auto . mar ka
TextBoxS . Text - auto . god
End SuЬ

' Процедура исправления записи


PrivateSub ButtonЗ_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles ButtonЗ.
Click
Dim auto As LegendAvto
Di m numbe r As Integer = Cint(Text Box l. Text )
' Создаем в памяти компьютера информацию
об одном авто
au t o . adress = TextBox2 . Text
au t o . sa l on = Tex t BoxЗ . Tex t
au t o . marka = Text Box4 . Text
au t o . god = Cint(Text BoxS . Text)

305
' Записываем в файл
Fi leOpen(l , " c : \Ba za.txt " , OpenMode.Random)
Fi l ePut( l, auto, number)
Fi leClose( l )
End SuЬ

'Процедура ч тения всех записей


Private SuЬ Button4_Click(ByVal sender As System.
Object, ByVal е As System . EventArgs) Handles Button4 .
Click
Fi leOpen(l , " c : \Ba za.txt ", OpenMode.Random)
Dim i As Integer
Fo r i = 1 Т о 4
Fi leGet(l, a( i))
ListBoxl. Items.Add(a(i) .adress)
Li s tBox l. Items . Add(a( i) . salon)
Li s tBox l. Items . Add(a( i) . ma r ka)
ListBoxl. Items.Add(a(i) .god)
Next
Fi leClose( l )
End SuЬ
End Class

9.3. ОПЕРАТОРЫ ДЛЯ РАБОТЫ С ФАЙЛАМИ


ДВОИЧНОГО ДОСТУПА

Для открытия файлов двоичного доступа используется оператор


FileOpen. Синтаксис оператора следующий:

FileOpen ( FileNumber, FileName, Мode)

где FileNumber - номер файла - целое число;


FileName - представ­
ляет собой путь к открываемому файлу; Mode - способ использо ­
вания файлов:
Binary - двоичный режим.
Записъ информации в файл двоичного доступа осуществляется
оператором Put. Синтаксис оператора:

FilePut (FileNumber, ИмяПереме1-l1-tОЙ, НомерЗаписи )


где FileNumber - номер файла - целое число; ИмяПереме1-l1-lОЙ -
переменная, значением которой являе тся запись; НомерЗаписи -

306
целое положительное число, обозначающее порядковый номер за­
писи в файле.
Чтение информации из файла двоичного доступа осуще­
ствляется оператором Get. Синтаксис оператора:

FileGet ( FileNumber, ИмяПеременной, НомерЗаписи)

где FileNumber - номер файла - целое число; ИмяПеременной -


переменная, значением которой является запись; НомерЗаписи -
целое положительное число, обозначающее порядковый номер за­
писи в файле.

Задача. Записать информацию об автомобилях в двоичный


файл auto.Ьin. Обеспечить чтение данных и вывод их в объект Тек­
стовое поле на форме.

Листинг программы

PuЬlic Class Forml


Structure LegendAvto
Dim mar ka As String
Dim type As String
End Structure
Dim marka_ type As LegendAvto

Private SuЬ Buttonl_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Buttonl .
Click
Dim 1 , i , L_mar ka , 1 t ype As In t e ger
Dim s As Ne w String ( "", 100 )
Fi leOpe n ( 1 , " с: \ auto . Ьin ", Ope nMode . Bina r y)
1 = 1
For i = 1 2 То
marka type . marka - Inрu t Вох (" Введите ма р ку

автомо б иля ", " Ввод оче р едного значения в двоичный


ф айл " )

1 marka = Len(mar ka t ype . ma rka)

marka type . t ype = Inpu t Box (" Введите тип


автомо б иля " , " Ввод оче р едного значения в двоичный

файл ")

307
L_t ype = Len (marka_t ype . type )
FilePut (l , marka_type .marka )
FilePut (l , ma rka_type .type , L + L ma r ka)
L = L + L_marka + L_type
Next
Text Boxl . Text = LOF (l )
FileGet (1, s, 1)
TextBox2 . Text = s
FileClose( l )
End SuЬ
End Class

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


на рис. 144.

~ Двоичные <J>айлы GJ[~~l


Длина файла (Байт) 1_7_ ____.
._l

8,B,. •.-,···1·'
..:i..··r·.J·iГ~ . ·-·Б· С1.11 Г.:.
JlH Г,В,.;:,,1

Рис. 144. Результаты работы разработанно го приложения

ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

Ранее был рассмотрен доступ к файлам с помощью дескрип­


торов (номеров). Для того чтобы сделать операции чтения и за­
писи более эффективными и удобными, имеются и другие средства
в пространстве имен System.10 для открытия и отображения тек­
стовых файлов. Так, помимо функций Visual Basic имеются классы
StreamReader (для ввода текста из файла) и StreamW riter (для
вывода текста в файл). Поскольку эти средства используют объ ­
екты .NET Framework, доступные во всех языках программиро -

308
вания среды Visual Studio, рекомендуется использовать именно их,
а не специфичные только для Visual Basic функции.
Чтобы использовать классы StreamReader и StreamWriter,
в начале программного кода следует импортир овать пр остранство

имен System.10 для доступа к этим классам: lmports.System.10.


Это пространство имен включает в себя определения для по ­
токовых классов StreamReader, StreamWriter и FileStream (как
для ввода из файла, так и для вывода в файл). Файлы открыва­
ются путем создания объектов этих потоковых классов TextReader,
TextWriter и Stream соответственно.
Задача 1. Пользователь вводит имя файла или каталога. Разра­
ботать программу для доступа к информации о файлах и каталогах,
используя различные методы классов File и Directory.
КлассFile в VB предоставляется для выполнения операций над
файлами, а класс Directory - для выполнения операций над ката­
логами.

Когда пользователь на)кимает клавишу Enter, метод TextBox1_


Кеу Down выводит на экран содержимое или файла, или каталога,
в зависимости от того текста, который пол ьзователь ввел в окно
TextBox. Методом Exists класса File определяется содержимое тек­
стового окна. Если пользователь указывает существующий файл,
то вызывается метод Getlnformation, который использует методы
GetCreationTime, GetLastWriteTime, GetLastAccessTime класса
File для доступа к информации о файле. Когда метод Getlnformation
заканчивает выполнение, пр ограммны е строки

Di m s t r eam As St r eamReader
s t ream = New St reamReade r (fil eName)

создают экземпляр класса StreamReader для чтения текста


из файла. StreamReader - конструктор принимает в качестве ар­
гумента строку, содержащую имя того файла, который нужно от­
крыть. Затем вызывается метод ReadToEnd класса StreamReader
в строке

TextBox2 . Text &= s t ream . ReadToEnd()

для чтения из файла содержимого файла, а затем происходит его


вывод в текстовое поле.

Строки программного кода File.Exists(fileName) или Directory.


Exists(fileName) соответственно по отношению к имени файла

309
или директории определяют их существование. Метод Exists()
является методом класса Directory. Если пользователь указал
существующий каталог, то вызывается метод Getlnformation
для доступа к информации о каталоге. Затем вызывается метод
GetDirectories класса Directory для получения String-мaccивa,
содержаще го имена подкаталогов в указан н ом катало ге, которые

затем будут выведены на экран.

Листинг программы

Imports System .I O
PuЬlic Class Forml
' Получить информацию о файле или каталоге

Private Function Getinformation (ByRef fileName As


String) As String
Dim info As String
' Вывести сообщение , что файл или каталог
сущес твует

info = fileName & " существует " & vbCrLf &


vbCrLf
'Вывес ти сообщение о времени создания файла
или каталога

inf о = " Создан : " & File .


GetCreationTime(fileName) & vbCrLf
' Вывести сообщение о времени п ос леднег о
и зменения файла или каталога
inf о = " Последняя модификация : " & Fi le .
GetLastWriteTime(fileName) & vbCrLf
' Вывести сообщение о времени п ос леднег о
доступа к файлу или каталогу

inf о = " Последний доступ : " & File .


GetLastAccessTime(fileName) & vbCrLf
Return inf o
End Function

Private SuЬ TextBoxl_KeyDown(ByVal sender AsObject,


ByVal е As System.Windows.Forms.KeyEventArgs) Handles
TextBoxl.KeyDown
' Опреде ление, нажал ли п о л ьзовате ль клавишу
ENTER
If e . KeyCode = Keys . Enter Then
310
Dim fil eName As St ring ' имя файла или кат ало га
' Получить указанный пользователем файл или

к а талог

fi l eName - TextBoxl . Text


' О п редели т ь , fil eName
является ли файлом

If Fi le .Exists(fileName) Then
' п олучи т ь дату создания , изменения файла

TextBox2 . Text =
Get i nfo r mation(fil eName)
' Отобраз и ть на экра не содержимое файла
Tr y
' Счи т ывается содержимое файла

Dim s t ream As St reamReade r


stream = New St reamReade r (fileName)
TextBox2 . Text &= stream.ReadToEnd()
' Обрабо т ать исключ ение , если п оток для ч тения

недос т у пе н

Catch excepti onCat ch As I OExcepti on


' Отобраз и ть на экра не ошибку
Mes sageBox . Show ("О шибка файла ", " О шибка ",

MessageBoxButtons. OK , MessageBoxicon .E r r or)


End Try

' О пр е д ели ть, является fileName каталогом


ли
Elsei f Di recto r y . Exi s t s(fil eName) Then

Di m direct o r yLi st As St ring () ' массив

для каталогов

Di m i As I nt ege r
' По лучить да ту созда ния, и зме не ния

ка та л ога

TextBox2 . Text -
Ge t inf ormation(fileName)
' П олуч ить с п исок каталогов указанного

ка та л ога

direct oryLi s t = Di recto r y .


Ge tDi recto ries(fileName)
TextBox2 . Text &= vbCrLf & vbC r Lf &
" Директория со д ержит : " & vbCrLf

311
'В ыв ес ти на экра н содержимое дир ек тор ии
For i = О То di recto r yLi st . Le ngt h - 1
TextBox 2 . Text &= di recto r yLi st (i) &
vbCr Lf
Next
' Сообщи т ь , что ни файл , ни ка т ало г
не сущес тв уют

El se
Messa g eBo x . Show (Te x t Bo xl . Text &
" не сущес т вует ", " Оши б ка ", MessageBoxButtons . ОК , Mes -
s ageBox icon .Erro r)
End If
End I f
End SuЬ
End Class

Результаты работы программы представлены на рис. 145.

Задача 2. Сформировать файл, содер:>кащий текстовую ин­


формацию. Вывести информацию построчно в элемент управ­
ления ListBox. Использовать потоковые классы StreamWriter
и StreamReader.
Комментарий. Для з аписи информации в файл использу ется
объект класса StreamW riter, обеспечивающий запись в текстовые
файлы. Запись осуществляется методом WriteLine() объекта zapis.
После завершения записи в файл его нужно закрыть метод ом
Close().
Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System.
Object, ByVal е As System . EventArgs) Handles Buttonl .
Click
Dim zapis As New Sys t em . IO . StreamWri ter (" с : \
a vto . t xt " )
Dim mar ka , god , col o r As Stri ng
Dim i As I nteger
For i = 1 Т о 2
ma r ka = InputB ox ( " Вв од д анных ",
" Введи т е марку автомобил я " )
god = I npu t Box ( " Ввод данных ",
" Введи т е г од вы п уска ")

312
а Работа с файлами и директо ... о х

Введите имя Файла или директории

1с :\ Windows\ Dtc lnstall .logl

Последний дос.туп : 04. 11.201813:44:17


09-15-2018 00:36 : DTC lnstall erтor =О. Enter
Ms Dtc.Advanced lnstaller: :Configure. base \ wcp \plugins \rnsdtc
\msdtcadvancedinstaller\msdtcadvancedinstaller.cpp (419)
09-15-2018 00:36: DTC lnstall erтor =О. Action: None. base
\ wcp \plugins\msdtc \msdtcadvancedinstaller
\msdtcadvoncedinstaller.cpp (448)
09- 15-2018 00:36 : DTC lnstall erтor =О, Errtering
CreateXAТmSecurityКeyCNG. base\ ...,•cp\plugins\msdtc
\msdtcadvoncedinstaller\msdtcadvancedinstaller.cpp (1752)
09-15-2018 00:36 : DTC lnstall erтor = О. Exiting
CreateXAТmSecurttyКeyC NG. base \ wcp \plugins\msdtc
\msdtcadvoncedinstaller\msdtcadvancedinstaller.cpp (1928)
09- 15-2018 00:36 : DТС lnstall erтor = О. Exit
Ms DtcJ\dvanced lnstaller: :Configure. base \ wcp \plugins \msdtc
\msdtcadvoncedinstaller\msdtcadvancedinstaller.cpp (506)

а Работа с файлами и директо ... о х

Введите имя Файла или директории

c:\Wlndows~
1

Последний дос.туп : 23. 11.201822:51 :39

Директория содер,жит:
с :\ Windows\addins
с :\ Windows \appcompat
с :\ Wlndows\apppatch
с :\ Windows\App Readiness.
с :\ Windows \assembly
с :\Windows \Ьcastdvr
c:\ Windows\ BitlockerDiscoveryVolumeContents
c:\ Windows\ Boot
с :\ Windows \ Branding
c:\ Windows\Cbs Тemp
с :\ Windows\Containers
с :\ Wlndows\CSC

Рис. 145. Резул ьтаты ра боты про граммы

313
color = InputBox (" Ввод данных " , " Введите
ц ве т машины")
zapis . WriteLine(marka)
zapis . WriteLine(god)
zapis . WriteLine( col or)
Next
zapis . Close ()
End SuЬ
End Class

Для чтения из текстового файла применяется объект класса


StreamReader. Чтение осуществляется методом ReadLine () объ ­
екта zapis. Этот метод считывает очередную строку файла целиком.
После завершения чтения из файла его нужно закрыть методом
Close().
Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System.
Object , ByVal е As System . EventArgs) Handles Buttonl .
Click
Dim zapis As New System . I O. StreamReade r ( " с : \avto .
txt " )
Dim ma r ka , god, color As Stri ng
Dim i As I ntege r
For i = 1 То 2
mar ka = zapis . ReadLine
god = zapis . ReadLine
color = zapis . ReadLine
ListBoxl . Items . Add(marka)
ListBox2 . Items . Add(god)
ListBoxЗ . Items . Add(color)
Next
zapis . Close ()
End SuЬ
End Class

Контрольные вопросы и задания


1. Что собой представляет файл?
2. Приведите классификацию файлов.
3. Напишите синтаксис операторов, используемых для р аботы с фай ­
лами последователы-rого доступа .

314
4. В чем вы видите разницу между операторами Write, WriteLine, Print,
PrintLine?
5. В чем заключается действие функций Spc(n) и Tab(n)?
6. Напишите синтаксис операторов, используемых для работы с фай­
лами произвольиого доступа .

7. Напишите синтаксис операторов, используемых для работы с фай­


лами двоичного доступа.

8. Назовите oci-roвi-rыe методы классов File и Directory и поясI-Iите их


действие.

Задачи для самостоятельного решения

1. О существите ввод двух матриц А( 5,5 ) в пустой текстовый файл . Р аз­


работайте программу умножения двух матриц, результирующую ма­
трицу выведите на экраи и в текстовый файл.
2. Сформируйте файл последовательиого доступа, содержащий массив
целых чисел. Удалите из него максимальный и минимальный эле­
менты. Выведите результаты выполиения программы иа экраи.
3. Создайте текстовый файл, элемеитами которого будут строковые пе ­
ременные - буквы греческого алфавита (первые пять). Разработайте
программу, с помощью которой по порядковому номеру буквы в ал­
фавите можно определить ее I-Iазвание, и I-Iаоборот, по I-Iазванию буквы
определить ее положение в алфавите.
4. Создайте файл произвольного доступа, в котором будут храниться
коэффициенты квадратного уравнеиия. Найдите кории квадратиого
ураваеаия и выведите на экран соответствующее сообщение.
5. Разработайте программу, которая создает на диске текстовый файл,
записывает в I-Ieгo построчно информацию (количество строк заранее
неизвестно, а признаком окончания ввода является ввод в конце оче ­

редной строки символа~*~ ). Подсчитайте количество строк, которое


содержится в этом файле.
6. Сформируйте файл произвольного доступа. Из компоиеатов исход ­
ного файла целых чисел создайте массивы четных и нечетных чисел .
О пределите наибольший четный компонент файла и наименьший не­
четный. Результат запишите в текстовый файл.
7. Сформируйте файл последователыrого доступа. Создайте массив уд ­
военных нечетных чисел . Упорядочьте его по возрастанию элементов .
Результат запишите в текстовый файл.
8. Сформируйте файл последователыrого доступа. Из компоне~-rтов ис ­
ходного файла вещественных чисел создайте массив, записав в него
компонеаты, распо л оженаые в файле до миаимального элемеата
и после максимальаого элемента. Результат запишите в текстовый
файл.
9. Сформируйте файл последовательного доступа, содержащий веще­
ственные числа. Создайте массив, у двоив каждый его элеме~-rт через

315
два пробела. Результат запишите в текстовый файл и выведите
на экран .

10. Сформируйте файл произвольного доступа . В файле в виде строк


храиятся аикеты студеитов. Строка содержит фамилию и ииициалы
(15 символов), год рождения, пол. Подсчитайте, сколько анкет отно­
сится к лицам мужского пола. П ол задан одной из подстрок: «муж»,
«жен». Результат выведите на экран.
11. Разработайте программу, которая позволяет просматривать текстовые
файлы (выводит на экран содержимое файла). Н еобходимо учесть,
что число выводимых строк равно 20.
12. Разработайте программу, позволяющую протестировать студента. По ­
следовательность вопросов и вариа~-rты ответов должны находиться

в текстовом файле. Количество вопросов - не более пяти . Текст


вопросов и ответов ие должеи занимать более одиой строки экраиа.
Программа выставляет оценки: «5» - все правильные ответы, «4» -
более 80% - менее 90% ответов верные, «3» - более 60% - менее 80%
ответов верные, «2» - менее 60% ответов верные .
13. Разработайте программу, которая формирует файл последователыrого
доступа, содержащий иI-Iформацию о иекоторых измерениях, выра ­
женных в сантиметрах. П ереведите результаты измерений в дюймы .
Результат запишите в текстовый файл.
14. Разработайте программу, которая создает на диске текстовый файл,
построчно записывает в него информацию (количество строJК заранее
неизвестно, а признаком окончания ввода является ввод в конце оче­

редной строки символа «*» ). В коI-Iец текстового файла допишите


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

15. Сформируйте файл последовательного доступа. Создайте массив по­


ложительиых чисел, делящихся на пять без остатка, используя эле ­
менты исходаого массива целых чисел. Упорядочьте его по убыванию
элементов. Результат запишите в текстовый файл.
16. Сформируйте файл последователыrого доступа. Из компоне~-rтов ис ­
ход~-rого файла вещественных чисел создайте массив, записав в иего
элементы, расположенные в файле между минимальным и макси­
мальным элементами. Результат запишите в текстовый файл .
17. Сформируйте файл последовательного доступа, элемеатами которого
будут строковые переменные. И з компоиентов исходного файла со ­
здайте текстовый файл, удвоив все буквы «а» . Р езультат выведите
на экран .

18. Сформируйте файл последовательиого доступа, содержащий n цело ­


численных элементов (количество элементов вводит пользователь),
далее подсчитайте сумму элементов, содержащихся в этом файле . До­
бавьте в файл еще одии элемент - подсчитан~-rую сумму. Осуществите
вывод всех да~-rных на экран.

19. Сформируйте файл последовательного доступа. Из элементов исход­


ного файла целых чисел создайте массив отрицательных чисел. Вы -

316
числите количество нулевых элементов файла. Результат запишите
в текстовый файл .
20. Сформируйте файл последовательного доступа. Из компонентов ис­
ходного файла целых чисел создайте массив, записав в него только
ненулевые значения, находящиеся после максимального элемента .

Результат запишите в текстовый файл.


21. Сформируйте файл последователы-rого доступа. Из компоне~-rтов ис ­
ходного файла, содержащего символы и целые числа, I-Iайдите сумму
цифр, встречающихся в нем . Результат запишите в текстовый файл
и выведите на экран .

22. Сформируйте файл последовательного доступа. Выполните коика ­


тенацию (объединеиие) исходиого файла самого с собой. Результат
запишите в текстовый файл и выведите на экран.
23. Разработайте программу, которая дописывает в текстовый файл фа­
милию и номер телефона товарища по группе. Если файла на диске
нет, то программа должна создать его . В файле каждый элемент
данных должен находиться в отдельной строке.
24. Сформируйте файл последовательиого доступа. Уда.лите в исходном
файле текст после первой точки. Результат запишите в текстовый
файл и выведите на экран .
25. Сформируйте файл произвольного доступа, содержащий следующую
введенную пользователем информацию о прочитаниой им книге: но ­
мера глав и их названия, причем номера должны записываться в файл
как целочисленные элементы, а названия - как строковые. Коли­
чество глав пользователь вводит с клавиатуры. В ыведите I-Ia экраи
содержимое файла, причем номер и I-Iазвание каждой главы должны
выводиться в отдельной строке .
26. Сформируйте файл произвольного доступа. Разработайте программу,
которая позволяет аайти иужные сведения в телефоиаом справоч ­
нике, хранящемся в файле. П рограмма позволяет запрашивать фа ­
милию человека и выводить его телефон . Если в справочнике есть
одииаковые фамилии, то программа должиа вывести список всех
людей, имеющих эти фамилии.
27. Сформируйте файл последовательного доступа. В ыполните конкате­
нацию ( объединение) исходного файла самого с собой, только запи­
санного задом наперед. Результат запишите в текстовый файл и вы ­
ведите на экраа.
Глава 10
РАБОТА С ФУНКЦИЯМИ И ПРОЦЕДУРАМИ

Часто несмотря на наличие встроенных функций программист


на VB выну)кден создавать собственные, нестандартные функции
и процедуры (заметим, что и то, и другое понятие относятся к раз ­
ряду так называемых подпрограмм). Это связано с тем, что, во ­
первых, при разработке программ участки кода, которые носят
определенное функциональное назначение, могут быть исполь­
зованы повторно. Таким образом, вызвать по имени ранее напи­
санный программный блок оказывается гораздо рациональнее, чем
писать его снова и снова.

Во - вторых, следует учесть, что разработка большого прог ­


раммного проекта - это, как правило, удел не одного человека,

а коллектива разработчиков. Соответственно, в задачи одной


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

1) связывание часто используемой группы операторов прог­


раммного кода со знакомым именем;

2) устраняются повторы фрагментов программного кода, т.е.


мож:но один раз определить функцию или процедуру, а вызывать
(обращаться к ним) любое количество раз;
3) программный код становится более простым и легко чита­
емым, так как разделенный на небольшие части он легче восприни­
мается;

4) упрощается разработка программ, поскольку проект, раз­


деленный на логические (функциональные) единицы, легче раз ­
рабатывать и отлаживать. Кроме того, если программный проект
разрабатывается группой разработчиков, то можно обмениваться
готовыми функциями и модулями;
5) мож:но повторно использовать функции или процедуры
в других проектах;

6) расширяется язык программирования (пользовательские


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

318
В Visual Basic используется несколько типов подпрограмм:
· событийные процедуры представляют собой процедуры Sub,
которые выполняются в ответ на событие, вызванное действием
пользователя или определенными условиями в программе;

· полъзовательские процедуры - выполняют действие(я),


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

10.1. СОБЫТИЙНЫЕ ПРОЦЕДУРЫ

Графические интерфейсы пользователя управляются собы ­


тиями - они генерируют события в ответ на взаимодействие поль­
зователя программы с графическим интерфейсом. Типичными ви­
дами взаимодействия являются перемещение мыши, щелчок мыши,
щелчок по кнопке и т.д. Информация о событиях передается обра­
ботчикам событий.
Рассмотрим пустой обработчик события. Это метод, который вы­
зывается в ответ на щелчок по кнопке. Другими словами, когда мы
выбрали событие Click (щелчок), среда создала сигнатуру метода,
совпадающую с делегатом обработчика события Click, генерируе­
мого элементом Button1 . Обработчикам события передаются два
объекта: ссылка на объект, который генерирует событие (Sender),
и объект аргументов события ( е ). Аргумент е имеет тип EventArgs.
Класс EventArgs является базовым классом для объектов, которые
содержат информацию о событии:

Private SuЬ Buttonl_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
' программа обработки события
End SuЬ

Имя обработчика события по умолчанию совпадает с именем


управляющего элемента, за которым следуют символ подчерки ­

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


которые принимают два аргумента: Object (обычно Sender) и эк­
земпляр класса EventArgs.Handles трактуется как управление чем­
либо.

319
10.2. СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ПРОЦЕДУР

Для объявления процедур используется следующий синтаксис:

[Уровень доступности] Sub Имя_процедуры ( Список_пара­


метров)
Оператор(ъt)

End Sub

В качестве уровня доступности наиболее распространены па­


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

При вызове процедуры количество и тип аргументов, переда­


ваемых в процедуру типа Sub, должны соответствовать количеству
и типу аргументов, указанных в объявлении процедуры.
Синтаксис Списка параметров:

[ByVal ByRef] ИмяПеременной As ТипДанных


1

При передаче параметра по значению ByVal (ByValue - по зна­


чению) процедуре передается только копия переменной, высту­
пающей в качестве параметра процедуры. Если процедура изменяет
значение параметра, то это затрагивает только копию переменной,
а не саму переменную.

Передача процедуре параметров по ссылке ByRef (ByRefereпce -


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

Имя_ процедуры (Список_ Фактических_ Параметров)

Например, Proc (Argument_1, Argument_2)

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

должно быть полное соответствие:


• число параметров и аргументов должно быть одинаково;
• тип ка)кдого параметра должен совпадать с типом соответству­

ющего аргумента;

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


И ТОТ )Ке .

Задача 1. Разработайте процедуру нахождения суммы квадратов


двух чисел и вывода ее на экран.

Процедура sumkvadr() согласно синтаксису содержит входные


параметры х и у, а также выходн ую переменную sum, возвраща­

ющую значение по ссылке.

В процедуре обработки события Form1_Load() мы органи ­


зовали описание фактических параметров а, Ь, rez и их ввод. За­
метим, что следует абстрагироваться от того, что вы сами, как поль­
зователь, пишете код подпрограммы и сами организуете ее вызов.

Таким образом, крайне нежелательно давать одинаковые имена


формальным и фактическим параметрам, поэтому сейчас, при ор­
ганизации вызова процедуры , мы используем другие имена пере­

менных.

Листинг программы

PuЬlic Class Forml


PuЬlic SuЬ Sumkvadr(ByVal х As Single, ByVal у As
Single, ByRef sum As Single)
х = х л 2
у = у л 2

sum - х + у
End Sub

Private Sub Forml_Load(sender As Object, е As


EventArgs) Handles MyBase.Load
Dim а, Ь, rez As Sing l e
а - I nputBox ("Вве дите 1 ч исл о ", " Вво д
д ан н ых " )
Ь = I nputBox ("Вве дите 2 ч исл о ", " Вво д
д ан н ых " )
Sumkvadr(a , Ь, r ez)

321
М sg Вох ( " Сумма кв а др ат о в чи с ел -" &rez , MsgBox -
Style . Exc l amat ion , "О твет ")
Appli ca t ion . Exit ()
End Sub
End Class

10.3. СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ФУНКЦИЙ

Теперь перейдем к рассмотрению функций. Функция анало ­


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

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


у = abs(x) определяет модуль числа х и возвращает результат
в точку вызова у.

Для объявления функции используется следующий синтаксис:

[Уровень доступности] Function Имя_функции [(Список_пара­


метров)] As [Тип_Данных]
Инструкции
End Function

Функция вызывается по своему имени, за которым следует


список фактических параметров, заключенный в скобки:

Имя_переменной = Имя_функции (Список_фактических_пара­


метров)

Отметим, что при использовании такого синтакиса имя функции


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

В данном примере имя функции Surn_kvadr согласно изложен­


ному выше синтаксису совпадает с именем переменной, куда возвра­
щается значение, вычисленное функцией, оператором Surn_kvadr =
=Х +у .

PuЬlic Class Forml


PuЬlic Function Sum_kvadr(ByVal х As Single, ByVal
у As Single) As Single
х - хл 2
у = ул 2

322
Sum kvad r - х + у
End Function

Private Sub Forml_Load(sender As Object , е As


EventArgs) Handles MyBase . Load
Di m а , Ь , re z As Single
а - I nputBox ( " Вве дите 1 ч исл о " , " Вво д
данных " )
Ь = Inpu tBox ( " Введи т е 2 число " , " Вв од
данных " )
r e z = Sum kvadr(a, Ь)
MsgBox ( " Сумма квадрато в чисе л - " & rez, Msg-
BoxS t yle . Exc lamati on, " О т в ет " )
Appl i cat i on . Exi t()
End Sub
End Class

Другой возможный синтаксис функции языка VB заключается


в использовании оператора Return:

[ Уровень доступности] Function Имя_функции [( Список_пара­


метров) ] As [Тип_Данных]
Ин струкции
Return переменная
End Function

В этом случае имя функции может не совпадать с именем пере ­


менной, куда возвращается значение, вычисле нное функцией. Так,
в приведенн ом ниже коде мы вводим новую п ереме нную sum, пред ­
варительно описав ее в разделе описания переменных. Теперь вы ­
численное функцией значение будет находиться в этой переменной
и возвращаться в вызывающий код оператором Return.

PuЬlic Class Forml


PuЬlic Function Sum_kvadr(ByVal х As Single , ByVal
у As Single) As Single
Di m sum As Single
х - хл 2
у - ул 2
sum - х + у
Re t urn sum
End Function

323
Private Sub Forml_Load(sender As Object, е As
EventArgs) Handles MyBase.Load
Dim а , Ь , rez As Sing le
а - InputBox ( "В ведите 1 ч исло ", "В вод
данных " )
Ь - Inp u t Box (" Введи те 2 чи сл о", " Вв о д
данных " )
rez = Sum kvadr(a, Ь)
МsgВох( " Сумма квадра т ов чисел - " & rez, Msg-
BoxStyl e . Exclamation, " Отве т " )
Appli c a t i on . Exit ()
End Sub
End Class

Задача З будет носить расчетный характер и заключаться в вы­


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

создать программный код функции с соответствующими


2)
входными формальными параметрами;
3) разработать программный код пр оцедуры с соответству ­
ющими входными и выходными формальными параметра~vrи;
4) создать событийную процедуру, из которой вызвать ранее
созданные подпро гр аммы.

Исходное выражение:

х-у ху 2
z= + .
~х+у sin x 2 ·cos 2 y
Разработаем блок-схемы алгоритма решения данной задачи.
На рис. 146 представлен алгоритм пользовательской функции ре­
шаемой задачи.

Функция Fun_z (х, у)


Начал о Func_z(x, у)
В ходные параметры х, у
1

Fun z= х -у +--х_у_--
2

- )х+у sinx 2cos 2y

Коиец Fнnc_z(x, у) )

Рис. 146. Блок-схема алгоритма функции Fun_z()

324
На рис. 147 представлен алгоритм пользовательской процедуры
решаемой задач и.

Проц ед ура Proc_Z ( х, у, z)


Входны е
1
Начало Proc_Z(x, у, z) 1 параметры х, у

Выходи ой параметр z
1

х-у ху 2
z= +
)х+у sinx 2cos 2y

Конец Proc_ Z(x, у, z) ]

Рис. 147. Блок-схема алгоритма процедуры Razv_Z()

На рис. 148 представлена общая (событийная) блок-схема реша­


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

Н ачало

Ввод а, Ь

rez = Func_ z(a, Ь)

Proc_ Z(a, Ь, z)

Вывод rez, z

Кон ец

Рис. 148. Блок-схема алгоритма событийной процедуры

В приведенном ниже листинге представлен программный код


всех функций и процедур данной задачи.

325
Imports System . Math ' Объявляем би блиотеку
математических подпрограмм

PuЬlic Class Forml


PuЬlic Function Func_z(ByVal х As Single , ByVal у
As Single) As Single
Func_z = (х - у) / Sqrt (x + у) + (х * у)л 2 /
(S i n(xл 2) * Соs(хл 2))
End Function

PuЬlic SuЬ
Proc_Z(ByVal х As Single, ByVal у As
Single , ByRef z As Single)
z = (х - у) / Sqrt (х + у) + (х * у) л 2 /
(S in (xл 2) * Соs(хл 2))
End Sub

Private Sub Forml_Load(sender As Object , е As


EventArgs) Handles MyBase.Load
Dim а , Ь , rez , z As Single
а - Inpu tBox ( " Введи т е 1 число " , " Вв од
данных " )
Ь = InputBox ( " Введите 2 число " , " Ввод
данных " )
rez = Func z (а, Ь) ' Вызов пользовательской
функци и
Proc Z (а , Ь, z) 'Выз о в п ользо ва те ль ско й
процедуры

Мsg В ох( " Резуль та т вычисле ния 1 -го выражения -"


& rez , MsgBoxStyle . Exclamation , " Ответ " )
MsgBox ( " Резуль та т вычисле ния 2- г о выражения -"
& z, MsgBoxStyle . Exclamati on , " От ве т" )
Application . Exit ()
End Sub
End Class

ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

Здесь, помимо новых задач, будут рассмотрены задачи, решения


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

326
Задача 1. Разработайте функцию, которая возвращает котангенс
числа.

Комментарий. Как известно, встроенная функция Ctg(x) отсут­


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

Import s Sys tem . Ma t h


PuЬlic Class Forml
PuЬlic Function ctg(ByVal chislo As Single) As
Single
Dim rez As Sing le
rez = Cos (chislo ) / Sin (chislo )
Return rez
End Function

Private Sub Forml_Load(sender As Object, е As


EventArgs) Handles MyBase.Load
Dim а, Ь,rez , rezl As Single
а = I nputBox ("Введите з начение для выч исл ения
ф ункци и к от анген с ", "Вв о д данных")
Ь = Input Box (" Введите др угое значение для
вычисления функции котангенс ", " Ввод данных " )
rez = ctg (а) 'Выз о в п о льз о вательской ф ункци и
rez l = c tg (Ь) 'П о в то рный выз о в функции
MsgBox ( " Функция Ctg первый вызов -" & rez ,
MsgBoxSt yle . Exclamation , " Ответ ")
MsgBox ( " Функция Ctg вто р ой вызов -" & rezl ,
Ms gBo xStyle. Exc lamat ion, " От ве т ")
Appl ication .Exi t ()
End Sub
End Class

Задача 2. Найдите максимальное из четырех чисел, написав со ­


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

327
а результат нахож:дения максимального из четырех значений будет
находиться в ячейке max. В таких случаях в теле функции дол)кен
присутствовать до п олнительный оператор, который присваивает
результат выполнения функции имени функции. В текущей задаче
это оператор Return max. Ни)ке приведен код пользо вательской
функции и ее вызов, отвечающий за решение задачи.

Impor ts System . Math


PuЬlic Class Forml
PuЬlic Function poisk(ByVal а As Single, ByVal Ь
As Single, ByVal с As Single, ByVal d As Single) As
Single
Dim max As Singl e
max = а
If Ь > max Then
max = Ь
End If
If с > max Then
max = с

End I f
If d > max Then
max = d
End I f
Return max
End Function

Private Sub Forml_Load(sender As Object, е As


EventArgs) Handles MyBase.Load
Dim у, аа, ЬЬ , се , dd As Single
аа - InputBox ( " Введите зна ч ение а ", " Ввод
данных " )
ьь - In рu tВох ( " Введите значение ь "' " Ввод
данных " )
се - In рu tВох ( " Введите значение с "' " Ввод
данных " )
dd - InрutВох( " Введите зна ч ение d " " Ввод
'
данных " )
у - poisk(aa , ЬЬ , се , dd) ' Вызов
пользовательской функ ции
MsgBox ( " Максимальное из четырех чисел - " &
у, MsgBoxS tyle. Exc lamation , " Ответ " )
Application . Exi t()
End Sub
End Class

328
Задача 3. Выполните табулирование функции у= sin(x) и най­
дите ее максимальное значение, если из вестны начальное значение

интервала, на котором изменяется функция, конечное значение ин­


тервала и шаг ее изменения. Перечислим требования к программе:
1) вычисление функции у= sin(x) оформить в виде пользова­
тельской фун кции;
2) задачу табулирования функции и нахож:дения ее максималь­
ного значения выполнить в виде пользовательской процедуры;
3) разработать процедуру вывода значений на элемент управ­
ления ListBox;
4) разработать функцию ввода значения в элемент управления
TextBox;
5) разработать функцию вывода значения на элемент управ ­
ления TextBox;
6) создать событийную процедуру, из которой вызвать ранее
разработанные подпрограммы.

Imports System . Math


PuЬlic Class Forml
'Функция ввода исходных TextBox
данных из
Function Vvod(ByVal Т As TextBox) As DouЬle
Return Val(T . Text)
End Function

'Пр оцедура форматированного вывода результата вTextBox


SuЬ Vivod(ByVal Z As DouЬle, ByVal Т As TextBox)
Т . Text = Format (Z, " 00 . 0000 " )
End Sub

' Процедура форма тирован ного вывода результата ListBox


в
SuЬ VivodList(ByVal Z As DouЬle, ByVal LB As
ListBox)
LB . I tems . Add (Format (Z, " 00 . 0000 " ))
End Sub

'Функция вычисления sin(x)


значения
PuЬlic Function Func(ByVal х As DouЬle) As DouЬle
Dim у As DouЫ e
у=Sin(x)
Return у
End Function

'Процедура решения задачи


PuЬlic SuЬ
Proc(ByVal а As DouЬle, ByVal Ь As
DouЬle, ByVal h As DouЬle, ByRef max As DouЬle)

329
Dim i , n As I nt eger , у , х As DouЫe
n = Cint ( (Ь - а) / h + 1) ' количес т во
пов т орений ци кл а
х = а

ma x = DouЬle . MinVa lu e ' П ри нах ожден ии


мак сималь н ог о зн а ч е н и я п ри с ва и ваем ячейке ma x
мин имал ь н о е значение из ди а па з о на Dou Ьl e
For i = 1 То n
у = Func ( х )
If у > max Then
ma x = у
End If
Vi vodList (y, Li s t Box l )
х = х + h
Next
End Sub

Private Sub Buttonl_Click(sender As Object, е As


EventArgs) Handles Buttonl.Click
Dim аа , ЬЬ , hh , maxi As DouЫe
аа - Vvod (Text Box l )
ЬЬ = Vvod (TextBox2 )
hh = Vvod ( ТехtВох З)
Proc( aa , ЬЬ , hh , maxi )
Vivod( ma xi , TextBox4 )
End Sub
End Class

Задача 4. Вводится последовательность целых чисел, не равных


нулю. И звестно, что последний элемент последовательности равен
нулю. Разработайте процедуру нахождения колич ества отрица­
тельных чисел и их среднего арифметического.
Комментарий. П одобная задача уже рассматривалась нами
в параграфе 6.2, однако теперь мы выполним ее решение на основе
создания функций и процедур. Стоит обратить внимание на за­
головок пользовательской процедуры Proc(ByVal х AsDouhle,
ByRef kolotr As Integer, ByRef srarifm As Douhle). Выходными
параметрами процедуры являются переменные kolotr и srarifm,
отв ечающие за хран ени е найденн ого процедур ой количества отри­
цательных чисел и с редн его арифметическ ого з начения соотв ет­
ственно. Переменная х является входнъ1м параметром процедуры,
в ней будет находиться введенное пользователем число за счет вы-

330
зова функции ввода данн ых оператором х = InрutВох("Введите
число, последний элемент последовательности - О ", "Ввод
данных").
Код программы представлен в следующем листи нге .

Impor ts System . Math


PuЬlic Class Form9
'П ро ц едура решения зада чи
PuЬlic SuЬ
Proc(ByVal х As DouЬle, ByRef kolotr As
Integer, ByRef srarifm As DouЬle)
Dim sum As DouЬle
sum = О
kolotr = О
Do
х = InрutВох( " Введите число , последний
элемент последовательности - О ", " Ввод данных " )
If х < О Then
ko l otr = kolot r + 1
sum - sum + х
End I f
Loop Until х - О
s r a rifm = sum / kolo tr
End Sub

Private Sub Buttonl_Click(sender As Object, е As


EventArgs) Handles Buttonl.Click
Dim sr As DouЬle
Dim chislo , kolotr As Integer
Proc (chi slo , kolotr, sr) ' вызов
пользовательской процедуры
МsgВох ( " Количество отрицательных чисел "
& kolotr , MsgBoxStyle . Exclamation , " Ответ ")
MsgBox ( " Их среднее арифметическое - " & sr,
MsgBoxStyle . Exclamation , " Ответ ")
End Sub
End Class

Задача 5. Сформируйте одномерный массив х из ше сти слу ­


чайны х чисел. Пе репишите элеме нты исходного массива, принад ­
лежащих отрезку [-1; 1] в массив у и выведите его. Пр оцедуры
вв ода, вывода элементов массива оформите в виде пользователь­
ских процедур. Кроме того, создайте подпрограмму, которая решает

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

Комментарий. Следует обратить внимание на то, что :в проце­


дуре Vvod() закомментирован ввод элементов массива вручную,
соответственно, можно исключить из процедуры генерацию мас ­

сива и вводить необходимые числа самостоятельно. Способ фор ­


мирования результирующего массива y(j) рассматривался в пара­
графе 7.3.
Код программы представлен в следующем листинге.

PuЬlic Class Forml


' П р оцедур а формирования массива
PuЬlic Sub Vvod(ByRef х() As Single)
Dim i As Int ege r
Randomi ze ()
Fo r i = О Т о UBound (х)
х ( i ) = (Rnd () * 5)
' x (i ) = CSn g( Val ( In p utBox ( " Bвeдитe " & i
& " -й э лемент " ) ) )
Ne xt
End SuЬ

' Пользовательская п р оцедур а , отвечающая за решение


з адачи

PuЬlic Sub Vibor (ByRef х () As Single, ByRef у () As


Single)
Dim i, j As Int ege r
Fo r i = О Т о UBound (х)
I f (x (i ) >= - 1 ) And (x ( i ) <= 1) Then
ReDim Preserve у (j )
y ( j ) = x (i )
j = j + 1
End I f
Ne xt
End SuЬ

' П р оцедур а вывода массива на э лемент Lis t Box


PuЬlic SuЬ Vivod(ByRef а() As Single, ByRef L As
ListBox)
Dim i As Int eger
Dim m As St ring = " "
For i = О То UBound ( а )
m = m + Forma t( a ( i ), " 0 . 00 " ) + Sp ace ( 4 )
Ne xt
L .Items . Add(m)
End Sub

332
Private Sub Buttonl_Click(sender As Object , е As
EventArgs) Handles Buttonl.Clic k
Dim х( б ) As Singl e, у() As Single
Vvod(x)
Vivod( x , Li s tBoxl )
Vi bor (x , у )
Vivod( y , Li s tBox2 )
End Sub
End Class

Задача 6. В двумерном массиве a(n,m) произвольных вещест­


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

Комментарий. Метод GetLength() отвечает за определение ко ­


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

Для определения максимального элемента строки, использовался


блок операторов:

max - DouЫe . M inVa l ue


For J - о То k
If m( i , j ) > ma x Then
max - m( i , j )
imax - l
Jmax - J
End If
Next

В ячейках imax и jmax фиксировались номер строки и номер


столбца найденного максимального элемента. В дополнительном
цикле с оператором for проверялось нахождение элемента матрицы
на главной диагонали и осуществлялся обмен с уже найденным
максимальным элементом строки:

333
For s - о То k
If s - Thenl
х - m(i , s)
m (i , s) - max
m (imax , jmax) - х

End I f
Next

Код пр ограммы представлен в следующем листинге.

PuЬlic Class Forml


' Фу н кция дл я вво д а коли ч ес т ва строк и с т олбцов
матрицы

Function Vvod(ByVal Т As TextBox) As Integer


Return Cint(Val (T . Text))
End Function

'П ро ц едура ге н ера ц ии двумер н ого массива


PuЬlic SuЬ Vvodmassiv (ByRef а (,) As DouЫe)
Dim i , j , m, n As I nt eger
m = а . GetLength (О) 1
n = a . GetLength( l ) - 1
Randomize ()
For i = О То m
For j = О То n
а ( i , j ) = 1 О * Rn d () - 5
Next
Next
End Sub

' Процедура вывода матрицы на элеме нт Lis tBox


PuЬlic SuЬ Vivodmassiv (ByRef х (,) As DouЬle, ByRef
L As ListBox)
Dim i , j , m, n As I nt eger
Dim z, zl As String
m = x . GetLength(O) - 1
n = x . GetLength(l) - 1
1 .It ems . C l ear() ' Oчиcткa Li s t Box
For i = О То m
z = ""
For j = О То n
zl = Format(x(i , j) , " 0 . 000 " )
I f х ( i, j) < О Then

334
zl - Space(2) + zl
Else
zl - Space (3) + zl
End I f
z = z + zl
Next
L . I t ems . Add ( z)
Nex t
End Sub

'П о л ьзовате ль ская проце дура , о т ве ч ающая за решен и е


зада ч и

PuЬlic SuЬ Findmax (ByRef m(,) As DouЬle)


Dim i , j , k, s , imax , jmax As I nt eger
Di m max , х As D ouЬle
k = m. GetLengt h(O) - 1
For i = О То k
max = DouЬle . MinV alue
For j = О То k
I f m( i, j) > max Then
max = m( i , j)
i max - i
Jmax = J
End I f
Next
For s = О То k
I f s = i Then
х = m (i , s)
m(i , s) = max
m( i max , jmax) - х
End I f
Nex t
Next
End Sub

Private Sub Buttonl_Click(sender As Object, е As


EventArgs) Handles Buttonl . Click
Dim i , j As I nteger
Di m m(i , j) As D ouЬle
i = Vvod(Tex t Boxl)
j = Vvod(TextBox2)
If i > j Then
МsgВох( " Не в озможно вып олни ть . В в е дите
корректное коли ч ес т во строк и с т олбцов " )

335
Else
ReDim m (О То i, О То j)
Vvodmass i v(m)
Vivodmass iv (m, Li stBox l )
Findmax(m)
Vivodmass iv (m, Li stBox2)
End I f
End Sub
End Class

Результат разработанной программы представлен на рис. 149.

-3.514 -4.050 -2.772 -1,248


4,981 3,268 -0,641 2,607 Количество строк .....
lз____,
-4,822 -0,101 0,310 -0,272
-3,606 1,009 -4,795 2,866 ____.
Количество сто.-~бцов .....

< >

-1,248 -4,050 -2.772 -3,514


3,268 4,981 -0,641 2,607
-4,822 -0,101 0,310 -0,272
-3,606 1,009 -4,795 2,866

Выполнение

< >

Рис. 149. Р езультат разработанной программы

Несмотря на то, что работа с символами и строками будет рас ­


смотрена в следующей главе, сейчас мы рассмотрим задачу, ре­
шение которой основано на использовании не только пользова­
тельских функций и процедур, но и программных методов для об­
работки строк.
Задача 7. В заданной строке, состоящей из слов, разделенных
одним или несколькими пробелами, определите количество слов,
которые содержат ровно три буквы «а~.
Комментарий. В качестве пользовательских процедур в рас­
сматриваемой программе написаны подпрограмма Sub Udal()
и Sub Proc() . В первой метод .Trim() удаляет из текущей строки
начальные и конечные пробелы, а метод .IndexOf используется

336
в цикле While для выявления количества пробелов. Таким образом,
если пробелов в исходной строке несколько, то метод .Replace()
заменяет их на один оператором s = s.Replace(Space(2), Space(1) ).
Во второй подпрограмме SubProc() метод .Split() используется
для разбиения массива символов на отдельные слова, поэтому в ка­
честве параметра указывается единица, т .е. один пробел (Dim mas()
As String = s.Split(CChar(Space(1)))).
Метод .Substring() извлекает подстроку из очередного слова
строки, поскольку находится в цикле. Соответственно, операторы

If slovo.SubstringU, 1) ="а" Or slovo.SubstringU, 1) = " А" Then


k=k+1
End If

определяют наличие букв ~а» и ~А» в слове и подсчитывают их ко­


личество.

Содержимое счетчика k по отношению к каждому слову строки


будет проверено в условном операторе If и передано в качестве вы ­
ходного параметра процедуры Proc():

If k = 3 Then
n=n + 1
End If

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


стинге.

PuЬlic Class Forml


Function Vvod(ByVal Т As TextBox) As String
Return T . Text
End Function

SuЬ Udal(ByRef s As String)


s = s. Trim
' цикл заме ны двух пробелов одним
Do Wh ile s .I ndex0f(Space(2)) >=О
s = s . Replace(Space(2), Space(l))
Loop
End Sub

SuЬ Proc(ByRef s As String, ByRef n As Integer)


Dim i, j, dlina, k As Integer

337
Dim slovo As String
Dim mas() As St rin g = s .Split(CChar(Space(l)))
'разбиение строки на массив слов
For i = О Tomas.Length - 1
slovo = mas ( i)
k = О ' количество символов "а" в сл о ве
dlina =
slovo .Length 'длина слова
For j =
О То dlina - 1
If s l ovo.Substring (j, 1) = "а" Or
slovo . Subs tring(j, 1) = " А " Then
k = k + 1
End I f
Next
If k3 Then
-

n = n + 1
End If
Next
End Sub

Private Sub Buttonl_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim n As I nteger
Dim s As St ring
s = Vvod (TextBoxl)
Udal (s)
Proc ( s, n)
TextBox2 . Text - CStr(n)
End Sub

Задача 8. В заданной строке, состоящей из слов, разделенных


одним пробелом или более, замените каждое третье слово -«мама»
словом ~мамочка». Запишите в тестовый файл исходную строку,
а так:>ке отредактированную строку.

Комментарий. Код процедуры Sub Proc() реализует задачу за­


мены каж:дого третьего слова ~мама» словом ~мамочка». Для этого,
в частности, оператором а = Split( s) исходная строка преобра­
зуется в массив, содержащий подстроки. Затем в цикле указанными
ни:>ке операторами организуется поиск слова ~мама» и включается

счетчик n, определяющий частоту повторения слова. Если она ста-

338
новится равной трем и проверка на нечетность (n Mod 3) оказыва­
ется истинной, то в массиве а происходит замена слов:

If a(i) = "мама" Then


n=n+1
If n Mod 3 =О Then
а( i) = " мамочка"
End If
End If

Затем оператор rezs = Join(a) возвращает в переменную rezs


(результирующая строка) строку, созданную путем присоединения
подстрок, т.е. функция Jоin() совершает обратное действие по отно­
шению к функции Split().
Запись информации в файл организуется с помощью класса
SaveFileDialog, который позволяет пользователю осуществить
выбор местополо:>кения его будущего файла. Соответствующее
окно, которое появляется в результате работы событийной проце­
дуры Button1_Click(), показано на рис. 150. П осле подтверждения
сохранения информации (рис. 151) можно быть уверенным в том,
что исходная строка записана в файл.
Вывод отредактированной строки в тестовое окно на форме осу­
ществляется с помощью событийной процедуры Button2_Click().
Именно в ней происходит вызов процедуры Proc(s, ss), которая
отвечает за решение задачи. Ее результат представлен на рис. 152.
Далее пользователь имеет возмо:>кность сохранить измененную
информацию в текущем или новом файле. Это действие реали­
зует событийная процедура ButtonЗ_Click(). В ней так:>ке за счет
использования класса SaveFileDialog организуется появление
диалогового окна сохранения файла, в котором указывается путь
на диск. Результат выполнения операции сохранения информации
представлен на рис. 153.
В настоящем комментарии не рассматриваются приемы записи
информации с точки зрения программных методов, они описаны
в главе 9.
П рограммный код решенной задачи представлен в приведенном
ни:>ке листинге.

PuЬlic Class Forml


Dim save As New SaveFileDialog
Dim zap As String

339
' Функция ввода исходных данных в текстовое окно

Function Vvod(ByVal Т As TextBox) As String


Return Т . Text
End Function

' Процедура вывода результата в текстовое окно

SuЬ Vivod(ByVal z As String, ByRef t As TextBox)


If z.Length <> О Then
t . Text - z
El se
t . Text - " Все удалено "

End I f
End Sub

' Процедура, реализующая задачу замены слов


SuЬ Proc(ByVal s As String, ByRef rezs As String)
Di m а() As St r i ng , i , n As Int ege r
Wh i 1 е I n S t r ( 1 , s , " " )
s = Replace (s, " "' " ")
End Whi le
а= Sp lit( s)
Fo r i = О Т о UBound (а)
I f а ( i ) = " мама " Then
n = n + 1
I f n Mod 3 = О Then
а ( i) = " мамочка "

End I f
End I f
Next
rezs = Join(a)
End Sub

' Создание текстового файла и запись информации в файл


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
save . Fi l eName = Input Box ( " Введи т е имя файла ",
" Ввод " )

save .Fi lte r = " Файлы . tx tl*.txt"


If save . ShowDia l og = DialogResult . Cance l Then

340
Exi t Sub
End I f
zap = TextBoxl . Text
Fi l eOpen( l, save . FileName , OpenMode . Output)
Print (1, zap , "" )
FileClose (l )
MsgBox ( " Ин форма ция сохранена в - " & save .
FileName , , " За пи сь текс та в файл " )
End Sub

' Вывод отредактированной строки


Private Sub Button2_Click(sender As Object, е As
EventArgs) Handles Button2.Click
Dim s As St r ing
Dim ss = ""
s = Vvod (TextBoxl)
Proc (s, ss)
Vivod(ss, TextBox2 )
End Sub

' Создание результирующего текстового файла и запись

обновленной информации в файл


Private Sub ButtonЗ_Click(sender As Object, е As
EventArgs) Handles ButtonЗ . Click
save . Fi leName = InputBox ( " Введите имя файла ",
" Ввод ")

save . Filter = " Файлы . txt l*.txt "


If save . ShowDia l og - DialogResult . Cance l Then
Exi t Sub
End If
zap = TextBox2 . Tex t
File0pen (2, save . FileName , OpenMode . Output)
Print (2, zap , "")
Fi l eC l ose(2)
MsgBox ( " Информация сохранена в - " & save .
FileName , , " Запись текста в файл ")
End Sub
End Class

341
•} Сохранение х

у 1' 8 > Эrот комnьютtр > Поиск: Эrот комnьютtр р

Упорядочить •

v Пan1G1 (6)
> Jt Быстрый доСl)'Тl

>6 OntOrivt • Oesktop

> DI Эrот комnьютtр


~ Oocuments
> r/# Сtть

• Oownloads

• Movies

Имя файла: 22
=-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-=

Тиn файла: Файлы .tct

"' Скрыть nаnки Сохранить

Рис. 150. Диалоговое окно сохранения файла

Запись текста в файл х

Информация сохранена в - X:\ 22.txt

ок

Рис . 151 . Диалоговое окно подтверждения записи информации в файл

Работа со строками о х

Исходна. строка

папа мама максик 1<р0т мама

программирование мама авrуст


Запись в файл исходной
строl<И

Вывод
Отредакmрованнu строка О"Iредакmрованной
cтpoIGt
папа мама максик 1<р0т мама

проrраммирование мамоЧЮl август

Сохранение в файл
редактированного текста

Рис . 152. Внешний вид формы разработанного приложения

342
]1 22 - Блокнот о х

Файл Правка Формат Вид Справка


rana мама максик крот мама программирование мамочка август

< >

Рис. 153. Измененная строка записана в текстовый файл

Контрольные вопросы и задания


1. В чем заключается принцип процедурного программирования?
2. Сформулируйте преимущества использования подпрограмм.
3. Какие типы процедур существуют в VB?
4. Какие два объекта передаются обработчикам событий?
5. Напишите синтаксис SuЬ-процедуры. Каков синтаксис списка пара­
метров?
6. В чем заключается различие между функцией и процедурой?
7. Какими способами можио произвести вызов процедуры Sub из другой
процедуры?
8. Какой сиатаксис используется для объявлеиия фуакций?
9. Какой сиатаксис используется для объявлеиия процедур?
10. Охарактеризуйте два способа передачи аргументов: передачу по зна­
чению и передачу по ссылке .

Задачи для самостоятельного решения


1. Одномерный массив А содержит N чисел. П ерепишите из массива
А в массив В только те элементы, значения которых ае равиы задан ­
ному значению Znacl1. Назначение процедуры: переписывание из од­
ного массива в другой только тех элементов, которые не совпадают
с задаиным ЗI-Iачением.

2. Одиомерный массив А содержит N элементов, значения которых


не определены. Организуйте запрос: ~Сколько элементов массива сле­
дует заполнить?~. Заполните массив заданным числовым значением
Znach. Назначение процедуры: заполнеаие заданного числа элемеитов
задааиым зиачением.

3. Одномерный массив А содержит N чисел. Найдите количество эле­


ментов массива , заачения кото ры х превышают задаиаое заачение

Znach. Назначение функции: подсчет количества элемеитов, превы ­


шающих заданное значение.

4. Одномерный массив А содержит N чисел. Н айдите сумму значений


элементов массива, меньших зада1пrого зиачения Znach. Назначение
функции: суммирование элемеитов , зиачеиия кото рых меньше задан ­
ного.

343
5. Од~-rомерный массив А содержит N чисел. Найдите произведение ЗI-Iа ­
чений элементов массива. Назначение функции: вычисление произве­
дения элементов массива.

6. Подсчитайте количество элемеатов заданной мат р ицы A(i, j), зиа ­


чения которых превышают заданное значение Z11ach. Назначение
функции : подсчет количества элементов, значения которых превы­
шают задаиное значение.

7. Одноме рный массив А содержит N чисел. Удалите из массива зиа ­


чение с порядковым номером К . Назначение функции : удаление
из массива значения с заданным порядковым номером.

8. Зада~-rа исходная мат рица A[i, j]. Умиожьте ее иа зада~-rиое число


Chislo. Назначение функции: умножеиие зада~-rной матрицы I-Ia число.
9. В заданной матрице A[i, j] значения всех элементов, отличающихся
от задаиного значеаия Znach1, замеиите другим задаиаым значением
Znach2. Назначение функции: значеиия всех элемеитов, отличающиеся
от заданного значения, заменить другим заданным значением.

10. Одноме рный массив А содержит N упорядоченных по возрастанию


чисел. Вставьте в массив I-Iекоторое зиаче~-rие Znach так, чтобы упо ­
рядоче~-rиость массива не нарушилась. Назначение функции: вставка
заданного значения в упорядоченный массив.
11. Одноме рные массивы А и В содержат N и М целых чис ел соответ­
ствеано. Разработайте программу, которая выводит сообщение о том,
в каком массиве произведение элементов имеет большее значение .
Назначение 1-й функции: нахождение произведения элементов каж­
дого из даи~-rых массивов. Назначение 2 - й функции: сравнение I-Iай ­
денных ЗI-Iачений.
12. Одномерный массив А содержит N чис ел. Разработайте программу,
с помощью которой можно определить количество наибольших эле­
меитов в аем. н·азначение 1 - й функции: нахождение максимальиого
элемента. Назначение 2 -й функции: подсчет количества максимальных
элементов.

13. Одноме рный массив А содержит N чисел. Задаи~-rое число вставьте


на место с по рядковым номером К. Назначение функции: вставка
в массив заданного значения на место с заданным порядковым но­

мером.

14. Одиоме рны й массив А содержит N чисел. Найдите в нем элемент


с наибольшим значением. Назначение функции: поиск в массиве эле ­
мента с наибольшим значением.
15. Разработайте программу для определения числа сочетаний из 11 по in.
111
Число определяется по формуле С~1 = ( . ) . Вычислеиие факто -
m! n-m !
риала оформите в виде функции.
16. Из заданной матрицы A(i, j) удалите строку с порядковым номером
N_st. Назначение функции: удалеаие строки по задаиаому по рядко ­
вому номеру.

344
17. Разработайте программу, которая заполияет од~-rомерный массив А(9)
случайными целыми числами от 1 до 99. Определите, сколько в мас­
сиве имеется простых чисел . ( Число, которое делится только на еди­
ницу или само на себя, иазывается простым.) Процесс определеаия
того, является ли число простым, оформите в виде процедуры.
18. Разработайте программу, в которой осуществляется подсчет, сколько
раз встречается в заданной целочисленной матрице А( 4, 4) макси ­
мальиое по величине число. Оформите в виде процедур: 1) вызов
процедуры ввода-вывода матрицы; 2) вызов процедуры поиска мак­
симального элемента; 3) вызов процедуры подсчета числа вхождений
максимального элемента.

19. Одн омер~-rый массив А содержит N чисел . З~-rачения всех элеме~-rтов


массива, отличающихся от заданного значения Z11acl11, замените
другим заданаым зиачеиием Znach2. Назиачение фуикции: замеаа заа­
чений элементов массива.
20. Заданы матрицы А и В согласованного размера . Найдите произве­
дение этих матриц . Назuачеuие фуикции: вычисление произведения
двух матриц.

21. Найдите сумму ЗI-Iачеиий элементов зада~-rной матрицы A(i, j),


меньших заданного значения Zпach. Назuачеuие фуикции: суммиро­
вание элементов, значения которых меньше заданного значения .

22. Разработайте программу решения группы квадратаых уравнеаий


pix 2 + qix + ri = О, где р, q, r - массивы вещественных чисел, состоящие
из k элементов. Решение одного уравнения оформите в виде проце­
дуры.
23. Дai-ro n целых чисел. Найдите среди них число, у которого сумма цифр
имеет максимальное значение. Назuачеuие первой фуuкции : нахо­
ждение суммы цифр числа. Назuачеuие второй фуикции: выбор числа
с максимальиой суммой цифр.
24. Дана матрица п х т. Найдите индексы всех максима.тrы1ых элемеитов
двумерного массива. Назuачеuие фуикции: нахождение индексов мак­
симального элемеита.

25. Сформируйте одномерный массив, каждый элемеит которого равен


сумме отрицательных элементов соответствующей строки заданного
двумерного массива . Назиачеuие фуикции: подсчет суммы отрица­
тельных элемеитов в каждой строке двумераого массива.
Глава 11
РАБОТА С СИМВОЛАМИ И СТРОКАМИ

Язык VB поддерживает символьный тип Char. Переменная


типа Char сохраняется как 16-битовое число ( 2 байта) без знака.
Диапазон значений находится от О до 65 535. Каждое число пред­
ставляет одиночный символ уникода. В VB применяется кодировка
Unicode.
Объявить символьную величину можно двумя способами.
В п ервом из них указывается строковая константа, после которой
дол)кен стоять символ с, информирующий компилятор о создании
величины типа Char. Естественно, в одном операторе можно объ­
явить только один символ .

Оба метода создания символьных величин продемонстрированы


НИ)Ке.

Dim simvol As Char = " а " с


Dim а As Char
а= ChrW(97)

В разделе описания переменные строкового типа описываются


как

Dim name As String

Тогда до пустим следующий оператор:

name = " Студент "

11.1. ФУНКЦИИ МОДУЛЯ STRINGS


В табл.
36 представлены наиболее распространенные функции
модуля Strings.

Таблица 36
Функции модуля Strings

Назваиие функции Описание фу~-rкции

AscW("Row") Функция возвращает АSСП-код указанного сим-


вола.

Например, AscW("A") возвратит 65

346
Продолжение табл. 36
Н азвание функции Описание функции

UCase ("Row" ) П ереводит все символы строки в верхний ре-


гистр .

Например, UCase ("Pentium") возв ратит


PENTIUM
LCase("Rovv") П ереводит все символы строки в иижни:й ре-
гистр .

Н апример, LCase("PENТIUM") возвратит


pentium
Len ("Row") Опр еделяет длииу строки ( количество сим -
волов ).
Н апример, Len ("Pe11tiu1n") возвратит 7
Strings.Right ("Row'', Функция возвращает заданное число символов
11) от конца строки .

Например, Right ("Пе~-rтиум'', 4) возвратит тиум.


Фу~-rкция Right встречается не только в модуле
Strings, поэтому указана явно
Strings.Left ("Row'', Функция возвращает заданное число символов
11) от начала строки.

Например, Left ("Пентиум'', 4) возвратит Лент.


Фу акция Left встречается не только в модуле
Strings, поэтому указана явно
Mid ("Row'', 11, m) Функция возвращает подстроку строки, содер-
жащую указанно е число символов .

Row - строковое выражение, из которого извле-


кается подстрока;

n- позиция символа в строке Rovv, с кото ро го


начинается нужная подстрока;

1n - число возвращаемых символов подстроки.

Например, Мid("П ентиум'', 3, 5) возвратит


нтиум

ChrW(x) Фуакция возвращает символ для указааного


АSСП-кода.
Например, ChrW (65) возвратит А

LTrim("Row") Функция удаляет начальные пробелы в строке


Rovv
RTrim("Row") Фуакция удаляет коиечаые пробелы в стро ке
Rovv

347
Продолжение табл. 36
Н азвание функции Описание функции

InStr ("Row1 ", Функция возвращает позицию первого обнару­


"Row2") жения строки Row1 в строке Row2.
InStr ([Start, ] Row, Row_ Match [, Compare ])
Start - числовое выражение, задающее позицию,
с которой начинается каждый поиск. Если этот
параметр опущен, то поиск начинается с первого

символа строки;

Rovv - строковое выражение, в котором выпол ­


~-rяется поиск;

Row_ Matcl1 - искомое строковое выражение;


Compare - указывает способ сравнения строк.
Допустимые з~-rачения : О - для дв оичиого срав ­
аения, 1- для посимвольного сравиения без
учета р егистра.

Н апример, InStr( ~ п овидло~, ~идло~ ), воз­


вратит 4, поскольку строка ~идло~ входит
в строку ~повидло~ начи~-rая с четвертого символа

InStrRev("Row1 ", Действие функции противоположно фунJКции


"Rovv2") InStr - позволяет просматр ивать строку
от коица к началу

Clnt(Row) Осуществляет преобразование строкового типа


в числовые даиные целого типа

CStr(Row) Осуществляет преобразование числового выра­


жения в строковый тип

GetChar ("Row", 11) Н аходит нужный символ в строке .


Например, GеtСhаr("Информатика и програм­
мирование", 13 ) вернет и

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


подстрокой .
Replace (Rovv, Rovv1, ReplaceWith [ , Start [ ,
Count [ , Compare] ]])
Rovv - строка, в которой заменяется подстрока;
Row1 - заменяемая подстрока;
ReplaceWitl1 - подстрока, на которую заменя­
ется подстрока, указаиная в качестве значеиия

параметра Row 1;
Start - позиция в строке, с которой ищется под­
строка, указанная в качестве значения параметра

Rovv1. Если этот параметр опуще~-r, то поиск про ­


изводится с пе рвой позиции ;

348
Продолжение табл. 36
Н азвание функции Описание функции

Count - указывает, сколько найденных подстрок


i-raдo заме~-rить. Если параметр опущен, то будут
произведены все замены;

Compare - критерий сравнения при поиске


подстроки. Допустимые значеиия: О - для дво ­
ичного сравнения, 1- для посимвольного срав­
нения без учета регистра.
Например, Rovv = "Эх раз, еще раз, еще маого,
много раз "
Rez = Replace (Row, "еще'', "вот'', , , 1)
В результате получим : «Эх раз, вот раз, вот
много, много раз~

Split Пр еобразует строку в одномерный массив, нуме­


руемый с иу ля.
Split(Row, [Razdelit], [Limit])
Row - преобразуемое строковое выражение;
Razdelit - разделитель между элемеитами стро ­
кового выражения, из которых создается массив .

По умолчанию используется пробел;


Limit - максимальиое число элементов в массиве
Н апример :
Dim Row As String
Dim mass As String()
Dim i As Byte
Row = "Да здравствует КПСС!"
Mass = Split(Row)
For i = О То UBound(Mass)
MsgBox(Mass( i))
Next
String Возвращает строку, состоящую из указанного
числа повторений одного и того же символа.
String(n, simvol)
n - число повторений символа;
simvol - повторяемый символ
StrReverse("Row" ) Возвращает строку в обратном порядке
Space(n) Функция возвращает n пробелов
Str(x) П ереводит числовое зиачение пе р емен~-rой х
в символьное значеаие

Trim(" Row") Функция удаляет начальные и конечные про­


белы в строке Rovv

349
Окончание табл. 36
Н азвание функции Описание функции

Join Выполняет операцию, противоположную тому,


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

от соседней заданным разделителем .


j oin(Array, [Razd] )
Array - преобразуемый массив;
Razd - разделитель между элементами строко­
вого вы ражеиия, из кото рых создается массив.

По умолчанию используется пробел.


Н апример, Mass = Array ("Я", "Ты", "Он", "Она")
Rovv = join(Mass, '', ")
В результате получим строку: ~я , Ты, Он, Она~

Filter Используется совместно с функциями Split


и j oin. Ищет в массиве строк заданиую под ­
строку и возвращает массив строк, содержащих

эту подстроку

Val(" Row") Фуакция читает строку слева ааправо, пока


не встретит символ, отличный от числа.
Например, Val("S экзаменов в сессию") воз­
вратит число 5

11.2. МЕТОДЫ СТРУКТУРЫ CHAR


По отношению к переменным, описанным типом Char, можно
применять различные методы: IsDigit , IsLetter, IsLetterOrDigit ,
IsLower, IsUpper, IsPunctuation, IsSeparator - для определения
того, принадлежит ли символ к определенной категории, такой как
цифра, буква, знак препинания и т.д. Методы ToLower, ToUpper
используются для изменения регистра того или иного символа. Ра­
бота с перечисленными выше методами показана на примере сле­
дующего листинга.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System .
Object , ByVal е As System . EventArgs) Handles Buttonl .
Click
Dim simvol AsCha r = "с"
'Эт о цифра?

350
MessageBox . Show (Char. IsDigit ( simvol), " Символ " ,

MessageBoxButtons . OKCancel , MessageBoxicon . Information )


' Эт о буква?

Mes sageBox . Show (Char . IsLetter ( simvol) , " Символ ",

MessageBoxButt ons . OKCance l, MessageBox i con . In f or mation)


' Это буква или цифра?

MessageBox . Show(Char .IsLetterOrDigit( simvol) ,


" Символ ", MessageBoxButt ons . OKCance l, MessageBox i con .
Information )
' Эт о строчная буква?

MessageBox . Show (Char . IsLower (simvol) , " Символ ",

MessageBoxButtons . OKCancel , MessageBoxicon . Information )


' Эт о заг л ав н ая буква?

MessageBox . Show (Char. IsUpper ( simvol), " Символ " ,

MessageBoxButt ons . OKCance l, MessageBox i con . In f or mation)


' Эт о знак препи н ания?

MessageBox . Show(Char .IsPunctuation( simvol) ,


" Символ ", MessageBoxButt ons . OKCance l, MessageBox i con .
Information )
' Это пробел?

MessageBox . Show(Char.IsSeparator (s i mvol),


" Символ " , MessageBoxButtons . OKCancel , MessageBoxicon .
Inf or mation)
'Пре вратить в строчную

MessageBox . Show (Char . ToLower (s imvol ), " Символ ",

MessageBoxButt ons . OKCance l, MessageBox i con . In f or mation)


' Превратить в заглавную

MessageBox . Show (Char . ToUpper (simvol), " Симво л",

MessageBoxButt ons . OKCance l, MessageBox i con . In f or mation)


End SuЬ

End Class

351
11.3. МЕТОДЫ КЛАССА STRING
Строка является объектом класса String пространства имен
System. Любая переменная строкового типа является экземпляром
класса String. Чтобы воспользоваться его свойством или методом,
следует после имени переменной добавить точку и за ней - на­
звание свойства или метода.
Строка представляет собой последовательность символов, про­
нумерованных начиная с нуля. Тогда можно обращаться к каждому
символу по его номеру (индексу).
Методы класса предоставляют возможности, например, для
определения доступа к объектам Char в строке (Chars), получения
индекса подстроки или знака Unicode (IndexOf, LastlndexOf), со ­
здания новых строк из частей исходной строки (Substring), моди­
фикации всей строки или ее части (Remove, Insert, Replace ), срав­
нения (StartsWith, EndsWith). Использование некоторых методов
класса String показывается на примере следующего листинга.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System .
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
' Сим в ол с 5 в с тр о ке = м
инд е к сом
MessageBox . Show (" Информа т ика " . Chars (5), " Строка " ,
Me s sageBoxBut t ons . OKCance l, Mes s ageBoxi con . I nfor mation)
' Ище т ся первое вхождение символа " м" и находи т ся его
инд е к с - 5
MessageBox . Show (" Инфopмa т икa ". I ndexOf (" м " ),
" Строка " ,MessageBoxBut tons . OKCancel , MessageBoxicon .
I nfor mation)
' Ище т ся последнее вхождение символа "а" и находится его
инд е к с - 10
MessageBox . Show (" Инфopмa т икa ". Last i ndexO f (" a " ),
Me ssageBoxBut t ons . OKCancel, MessageBoxi con .
" С т ро к а ",
I nformation )
'Нах о ди тс я длина с тр о ки - 11
MessageBox . Show (" Информа т ика ". Length , " С т рока ",
MessageBoxBut tons . OKCancel , MessageBoxicon . I nformation )
' З а по лн е ние стро кой сим в ольн о г о ма сс ива
Di m simvol () As Char

352
simvol = " Информатика ". ТоСhаrАrrау

' Выво ди тся символ а

MessageBox . Show (s imvol (10), " Строка " , MessageBox -


But t ons . OKCance l, MessageBox i con . In f or mation)
' Выводится часть строки длиной 5, начиная с символа

с ин д ексом 6 - " ма ти ка "

MessageBox . Show ( " Информатика ". Substring (5 , 6),


" С т рока ", MessageBoxButt ons . OKCance l, MessageBox i con .

Information )
'Проверка , д ейс т ви т ель н о " И н форматика " на чинается

с " Инф "

MessageBox . Show( " Инфopмaтикa ". S t a rt sWith( " Инф " ) ,

" Строка " ,MessageBoxButtons . OKCancel , MessageBoxicon .


Inf or mation)
' Проверка, действительно " Информатика " заканчивается

на " Инф "

MessageBox . Show( " И н фopмaтикa ". EndsW i th( " Инф " ) ,

MessageBoxButt ons . OKCance l, MessageBox i con .


" С т рока ",

Information )
' Мето ды , в ид о и зменяющие с т року

' Убрать из строки 6 символов начиная с номера 2


" Ин ика "

MessageBox . Show ( " Информатика " . Remove (2, 6),


" С т рока ", MessageBoxButt ons . OKCance l, MessageBox i con .

Information )
' Вставить в строку перед симво л ом н омер 1 другую с т року

" Моя " результат : ИМоянформатика

Mes sageBox . Show ( " Информа ти ка " . I nsert (1, " Моя " ) ,
" Строка " , MessageBoxButtons . OKCancel , MessageBoxicon .

Inf or mation)
' Заменить в строке одну часть ( " Инфор " ) на другую
( " Мате " ) резул ьта т: Матема т ика

МеssаgеВох . Shоw( " Информатика ". Rерlасе( " Инфор " ,

, " С т рока ", MessageBoxButtons . OKCance l,


" Мате " ) Ме ssage-

Boxicon . Inf orma tion )


End SuЬ
End Class

353
11.4. БАЗОВЫЕ АЛГОРИТМЫ ОБРАБОТКИ СТРОК

Примеры, приведенные в табл. 36, ознакомили нас с возмож­


ностями обработки строк и символов в Visual Basic. При решении
задач следует научиться находить необходимые функции, понимая
их предназ начение, а та1оке использовать в совокупности простые

приемы и методы обработки строк (назовем их базовыми алгорит­


мами), среди которых мож:но выделить следующие:
1) определение количества символов;
2) замена символов в строке;
3) удаление символа в строке;
4) вставка символа в строку;
анализ символа на принадлежность к группе;
5)
подсчет количества фрагментов;
6)
поиск строки в блоке текста.
7)
Данные базовые алгоритмы можно использовать не только для
решения учебных задач, но и для разработки текстовых редакторов,
программного обеспечения, предназначенного для верстки текста,
и т.д.

11.4.1. Определение количества символов

Задача. Пользователь вводит исходную строку Ro\v и символ


Simvol. П одсчитать, сколько раз заданный символ встречается вис­
ходной строке.
П араметрами функции Kol_Simv являются строка ro\v и пе­
ременная simvol. Параметры вводятся с клавиатуры, в основной
части программы их роль выполняют переменны е r и s соответ ­

ственно. В цикле происходит выделение символа с помощью


функции Mid оператором tmp = Mid(row, i, 1). ПараметJР row -
наша исходная строка, i - параметр цикла, который будет изме­
няться в цикле от 1 (начало строки) до конца строки ( за это отве ­
чает функция Len), 1 - количество возвращаемых символов. При ­
менение счетчика kol = kol + 1 обеспечивает подсчет количества
заданного символа.

Листинг программы

PuЬlic Class Forml


Function Kol_Simv(ByVal row As String , ByVal simvol
As Char) As Byte
Dim kol As Byt e , i As Byte
Dim t mp As St ri ng
kol = О
For i = 1 То Len( r ow)
tmp = Mi d( r ow, i, 1)

354
If tmp = s imvol Then
kol = kol + 1
End I f
Next
Return kol
End Function

Private SuЬ Buttonl_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim r As St ring
Dim s As Char
r = TextBoxl . Text
s = InputBox (" Введите символ " )
Labe l2 . Text = " Количество найденных сим волов
в с т роке = " & Kol Simv (r , s )
End SuЬ
End Class

11.4.2. Замена символов в строке

Задача. Пользователь вводит исходную строку Row и символ


Sirnvol. Заменить пробелы в исходной строке указанным символом.
П араметрами функции Zarn являются строка row и п ере ­
менная sirn. П араметры вводятся с клавиатуры, в основной части
программы их роль выполняют переменные r и s соответственно.

В функции Replace используем в качестве параметров исходную


строку Row, в качестве заменяемой подстроки применяем пробел
и подстроку, на которую заменяется подстрока - sirn. Цель исполь­
зования операции логического отрицания Not очевидна, так как
оператор row = Replace (row, будет выполняться тогда,
11 11
, sirn)
когда логическое выражение будет иметь значение True.

Листинг программы

PuЬlic Class Forml


Function Zam(ByVal row As String, ByVal s1m As
Char) As String
Dim zamena As Boolean
If Not zamena Then
row - Replace(row , " " ' sim)
Else
row - Replace(row , Slffi, " " )
End If
zamena - Not zamena

355
Retu r n r ow
End Function

Private SuЬ Buttonl_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim r As St r ing
Dim s As Char
r = TextBoxl . Text
s = Inpu tBox ("Введите символ ")
Label2 . Text = "Р езул ь тир ующая с тр ока : " & Zam(r, s)
End SuЬ
End Class

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

-----------------
111 Работа со строкамн GJLQJ~
Введите строку символов

1 Мама Папа Бабушка Дедушка

Результирующая строка: М амаиП апаиБ абушкаиДедушка

Ок ~

Рис. 154. Результат выполнения функции Zam. Пробелы в исходной строке


заменяются символом «И»

11.4.3. Удаление символов в строке

Задача. Пользователь вводит исходную строку Row и символ


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

В пользовательской функции Delete используется строковая


функция Mid, которая анализирует строку с целью нахож:дения
в ней указанного символа. Результатом выполнения первой
части (до конкатенации) оператора row = Mid(row, 1, i - 1) +
+ Mid(row, i + 1, х) для слова ~мама», в котором требуется уда­
лить символ ~а», станет возвращенный символ ~м» , а вторая часть
возратит ~ма». Результатом объединения станет ~мма». Очевидно,

356
что при следующем проходе останутся два символа ~мм», которые

и будут результатом.

Листинг программы

PuЬlic Class Forml


Function Delete(ByVal row As String, ByVal simvol
As Char) As String
Dim х As String
Dim i As Byt e
х = Len( row)
For i = 1 Т о х
If Mid( r ow , i, 1) = simvol Then
r ow = Mid( r ow, 1 , i - 1) + Mid( r ow ,
i + 1, х)
End I f
Next
Return row
End Function

Private SuЬ Buttonl_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim s As Char
Dim r As St r ing
r = TextBox l . Tex t
s = Inpu tBox ("Введите символ ")
Labe l 2 . Text = " Р езул ьтирующая строка : " &
Delete (r, s)
End SuЬ
End Class

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

~ Работа со строками GJ[g]I~]


Введ~.-пе строку символов

1t"·1 at-.·1a Папа Б .:~бушка Дедушка

Результир!:Jющая строка: Мм Пп Ббушк Дедушк

[ Ок ] )

Рис. 155. Результат выполнения функции Delete.


Из исходной строки удаляется символ «а»

357
11.4.4. Вставка символа в строку

Задача. Пользователь вводит исходную строку Row. В ис­


ходную строку добавить символ V stavka после символа Simvol, ко­
торый пользователь также вводит с клавиатуры.
Особенности пользовательской функции Insert состоят в том,
что во-первых, при определении длины строки с помощью функции
Len необходимо добавить единицу (оператор х = Len(row) + 1),
так как пользователь мож:ет добавить символ в конец строки, и ее
длина должна в этом случае увеличиться. Во-вторых, анализ сим­
вола производится с помощью функции AscW, которая воз вращает
ASC II- кoд.

Листинг программы

PuЬlic Class Forml


Function Insert(ByVal row AsString, ByVal vstavka As
Char, ByVal simvol As Char) As String
Di m i , х As Byte
х = Len (row ) + 1
For i = 1 Т о х
I f As cW (Mi d (row , i , 1)) = As cW (simvo l) The n
row = Mid( row , 1 , i) + vs t av ka +
Mid (row , i + 1 , х )
End If
Next
Return r ow
End Function

Private SuЬ Buttonl_Click(ByVal sender As System .


Object, ByVal е As System . EventArgs) Handles Buttonl .
Click
Dim r As St r ing
Dim s, v As Cha r
r = Text Box l . Te x t
s = I nputBox (" Введите символ , п осле которо г о Вы

встави т е друг ой сим в ол " )


v = I nputBox (" В в едите сим в ол , который Вы хо т ите
в с тав ит ь в с тр о к у ")

Labe l 2 . Text = " Рез ульт и р ующая с т ро ка: " &


I nser t (r, v, s)
End SuЬ
End Class

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

lii Работа со строками ~(QJ~


Введите C'Ipoxy символов:

lпаламамапаламама
Результирующая С'Iрока:
пZапZамамапZапZамама

1i::::::::::::::::: ?.:~:: : : : : : : : :i1


Рис. 156. Результат выполнения функции lnsert. В исходную строку после
за явленного с имвола «П» добавляется символ «Z»

11.4.5. Анализ символа на принадлежность к группе

Задача. Пользователь вводит исходную строку Row. Опре­


делить, сколько в исходной строке Row символов Simvol_ 1
и Simvol_2, которые пользователь вводит с клавиатуры. Под
группой понимается принадлежность символа к гласным или со ­
гласным буквам русского или латинского алфавита, цифрам,
строчным или прописным буквам.
Параметрами функции Analiz являются строка row и пере­
менные simvol_1 и simvol_2. Параметры вводятся с клавиатуры,
в основной части программы их роль выполняют переменные r, s _1
и s_2 соответственно. В функции Analiz используем функцию Mid,
которая выделит символ и поместит его в ячейку tmp. Затем содер­
ж:имое ячейки сравнивается со введенными пользователеl\1 симво ­
лами. Если условие истинно , то счетчик увеличивается на единицу.

Листинг программы

PuЬlic Class Forml


Function Analiz(ByVal row As String, ByVal simvol 1
As Char, ByVal simvol_2 As Char) As Byte
Dim i , ko l As Byt e
Dim х, tmp As String
х - Len (row )
Fo r i = 1 То х
t mp = Mid (row , i , 1 )
If t mp = simvo l _ l Or t mp - s imvol 2 Then
kol = ko l + 1
End I f

359
Next
Re t urn ko l
End Function

Private SuЬ Buttonl_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim r As St ring
Dim s 1 , s 2 As Char
r = Tex tBox l . Text
s _ 1 = InputBox (" Введите п ервый символ " )
s _ 2 = InputBox ( " Введите второй символ " )
Label 2 . Tex t = "В сего символ ов " & s 1 &
" и " & s 2 & " - " & Anal i z ( r, s 1, s 2)
End SuЬ
End Class

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


- - .
~ Работ.а со строкамн [~](~fX]
Введите строку символов

Всего символов а и д =9
([ Ot::. Jl
Рис. 157. Результат выполнения функции Analiz. В исходной строке осуще­
ствляется подсчет символов «а» и «Д»

11.4.6. Подсчет количества фрагментов

Задача. Пользо ватель вводит исходную строку Row. Опре­


делить, сколько раз подстрока Row_1 входит в исходную строку.
Пользовательская функция Vxod использует строковую
функцию InStr, которая возвратит позицию обнаружения под­
строки Row_1 в исходной строке Row, при этом счетчик будет уве­
лич иваться на единицу при каждом нахождении подстроки. В про­
тивном случае произойдет досрочный выход из цикла с по мощью
оператора Exit Do.

360
Листинг программы

PuЬlic Class Forml


Function Vxod(ByVal row As String, ByVal row 1 As
String) As Byte
Dim i, ko l As Byte
Dim х As Str ing
l = 1
Do
х = InStr (i , row , r ow 1)
If х > О The n
i = х + Len ( row 1)
ko l = kol + 1
Else
Exi t Do
End I f
Loop
Vxod = kol
End Function

Private SuЬ Buttonl_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim r, r _l As String
r = TextBox l . Text
r _ 1 = Input Box ( " Введи т е п одс т року ")
Label 2 . Text = " Все г о вхожде н ий п о д строки
" & r 1 & " в с т року " & Vxod ( r , r 1)
End SuЬ
End Class

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


- --·--- - --- -

~ Работа со строкамн GJ[Q)[x]


Введ~..пе строк~ символов

Всего вхождений подстроки ма в строку 4

([ Ot::. ] )

Рис. 158. Результат выполнения функции Vxod.


В исходной строке осуществляется подсчет подстроки символов «МА»

361
11.4.7. Поиск строки в блоке текста

Задача. Пользователь вводит исходную строку Row. Опр е­


делить, место положение подстроки, введенной с клавиатуJР Ы в ис­
ходной строке Row.
Для успешной работы программы необходимо для текстового
окна (TextBox1), расположенного на форме, выставить свойство
HideSelection в положение False, а в свойство Tahlndex занести О.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim Row As Str ing
On Error GoTo err NotFound
Row = Input Box ( " В в еди т е п одс т року для поис к а :",
" Выбор от н ачала к кон цу с т роки " )
Text Box l .Se l ectionSt ar t = InS tr (TextBoxl. Text ,
Row) - 1
TextBoxl . Selecti onLength = Len(Row)
Exi t Sub
e r rNot Found :
MsgBox (Row & " П одстрока не найдена .", vЫn-
f ormation)
End Sub
End Class

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

------ - - - ----- - ------- ----- - - - - - - - - - - - ---- --- ---- -------

~ Работа со строкамн [~]1_ l.8]


Веедиrе строку симеопое

Label2

[[ Ок Jl
Рис. 159. Результат выполнения программы.
В исходной строке осуществляется пои ск подстроки « папа»

362
ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

Задача 1. Задано слово. Заменить в этом слове букву «а»


на букву «О» . Если буквы «а» в этом слове нет - вывести соответ­
ствующее сообщение.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim i , flag, dlina_ st As Byte
Dim stroka As St ring
flag = О
stroka = InputBox ( " Введите слово " )
dlina st = Len(stroka)
For i = 1 То dlina st
If Mi d(stroka , i , 1) = " а " Then
Mi d(stroka , i , 1) - " о "
flag = 1
End If
Next
I f flag = О Then
Label2 . Tex t - " В слове " & stroka &
" нет бу квы а "
Else
Label2 . Tex t - "П олу чен о новое с л ово " &
stroka
End If
End Sub
End Class

Задача 2. Задано слово. Если оно четной длины, то перевернуть


его, иначе - удалить средний символ.
Комментарий. Проверка на четность происходит с помощью
оператора dlina_st Mod 2 = О. При этом первоначально объявля­
ется новая переменная stroka_izm, значение которой равно пустой
строке. Затем в цикле выделяемые с помощью функции Mid сим­
волы «прицепляются» к новой строке (применяется цикл с шагом
- 1). Значение stroka_ izm присваивается переменной stroka, т.е.
пр оисходит замена исходного слова.

Если введенное слово нечетной длины, то удаляе тся сред ний


символ конкатенаци ей левой и пр авой п оловин исходного слова,

363
причем средний символ не учитывается, так как операция dlina_
st \ 2 - целочисленное деление.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim i, dlina_st As Integer
Di m s tro ka , stroka izm As St ri ng
stroka = Input Box ("Введите слово ")
dl ina st = Len (s t ro ka)
If dl ina st Mod 2 = О Then
Label l. Text = " Слово четной длины "
st r oka i zm = ""
For i = dlina st То 1 Step - 1
stroka izm - s t ro ka izm +
Mi d(st r oka , i , 1)
Next
stroka = str oka izm
El se
Labe l 2 . Text = " Слово н ечетной
длины "
st r oka = St rings . Left (st ro ka ,
dlina st \ 2) + Strings . Right(stroka, dl ina s t \ 2)
End I f
Label2. Text = "Н овое с л ово : " & s troka
End Sub
End Class

Задача 3. Задано слово. Если в нем есть буква М (англ.) и слово


четной длины, то удалить вторую половину слова, а первую поло­
вину перевернуть. Если слово нечетной длины, то вставить перед
первой по порядку буквой М букву А (англ.). Если буквы Мв слове
нет - вывести сообщение.
Комментарий. В данной задаче с помощью функции InStr опре ­
деляется позиция poz первого вхождения буквы М в слово stroka.
Если poz > О, то с учетом того, что слово четной длины, удаляется
его вторая половина, а затем производится обмен равноудаленными
символами в новом слове. В задаче рассматривается второй способ
«переворачивания» слова за счет введения дополнительной пере-

364
менной stroka_izm. В противном случае происходит ~сцепление»
левой части исходного слова до поз иции вхо:>кдения буквы М,
исключая саму букву М (т.е. до poz - 1), буквы А, и затем остав ­
шейся части слова, начиная с поз иции poz и до конца слова, - т.е.
вставка буквы А перед буквой М.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System.Ob-
ject, ByVal е As System . EventArgs) Handles Buttonl.
Click
Dim i , poz , dlina st As Integer
Dim stroka, s troka izm As String
stroka = InputBox ( " Введите слово " )
poz = InStr ( str oka , " М " )
If po z > О Then
dlina s t = Len(stroka)
If dlina s t Mod 2 = О Then
s t ro ka = Strings .Le f t(st r oka , dl ina
st \ 2)
dl ina s t = Len(stroka)
For i = 1 То dlina st \ 2
stroka izm = Mid(stroka , i , 1)
Mid(stroka , i , 1 ) = Mid(stroka ,
dlina st - i + 1, 1)
Mid( str oka , dlina s t - i + 1,
1) = str oka izm
Next
Else
stroka - Strings . Left(stroka , poz -
1) + " А " + Mid(s t ro ka, poz)
End If
Labe l 1 . Text - " Буква М есть ! " & s t r oka
Else
Label 1 . Text - " Буквы М нет ! "
End If
End SuЬ
End Class

Задача 4. Задана строка символов. Считаем, что слова в строке


отделены одним или несколькими пробелами. Вывести в качестве

365
ответа все слова, в которых есть буква « М» (англ.). Если таких слов
нет - вывести сообщение.
Комментарий. После ввода строки символов следует дополнить
ее пробелом для того, чтобы можно было выделить последнее слово,
если за ним нет пробела. В цикле с оператором Do While будем
перебирать каждый символ строки от первого до последнего. Если
i-й символ - пробел, то переходим к следующему символу, иначе
запоминаем позицию начала слова в переменной n_ slovo (первый
символ, отличный от пробела).
Далее с помощью функции InStr находим позицию первого про­
бела, начиная поиск от i-го символа, - это будет позиция конца
слова kon_slovo (точнее, первого пробела после текущего слова).
Найдя dl _ slovo - длину текущего слова как разность kon_ slovo
и n_ slovo, выделяем само текущее слово tek_ slovo и ищем в нем
букву « М».
Если буква « М» присутствует (в текущем слове flag > О) , то
следует присвоить значение 1 переменной flag и вывести это слово
на экран. После этого перемещаемся к первому пробелу после те ­
кущего слова, т.е. к позиции kon_slovo, и продол)каем поиск нового
слова по тому же алгоритму до конца строки.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System .
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim i, flag, dl slovo , n s l ovo , kon slovo ,
pri sut As Intege r
Dim str oka , te k slovo As St r ing
st ro ka = InputBox ( " Введите строку символо в ")
st ro ka = stroka + " "
flag = О
i = 1
Do Wh i le i <= Len (st r oka)
If Mid(stroka , i, 1 ) <> " " Then
n s l ovo = i
ko n slovo = InS t r(i , stroka , " " )
dl slovo = kon s l ovo - n s l ovo
tek s l ovo = Mid(stroka , n s lovo , d l
slovo)
prisut = InStr (te k slovo , " М " )

366
I f p ri sut > О Then
flag = 1
MsgBox ("Бук в а М ес т ь в сло в е! "
& t ek s l ovo)
End I f
i = kon slovo
End I f
l = i + 1
Loop
I f p r isut - О Then
MsgBox ( " Буквы М не т в данных
")
с л о вах!

End If
End SuЬ
End Class

Задача 5. Провести поиск и замену подстроки ~2007» на ~2008»


в тексте, состоящем из нескольких строк.

В данном примере построчно вводится массив из заданного ко ­


личества строк. Константа Text1 содержит заменяемую подстроку
текста, а константа Text2 - заменяющую подстроку.
В каждой строке массива находится позиция первого вхождения
подстроки Text1 - npoz. Если подстрока Text1 найдена, то про ­
исходит замена подстроки Text1 на Text2. Замещение подстроки
Text1 на Text2 происходит с помощью функции Mid, которая, нахо­
дясь в левой части оператора присваивания производит замещение
четырех символов строки a(i), начиная с позиции npoz, на строку
Text2.
Этот процесс продол)кается до тех пор, пока з начение npoz
не станет равным нулю, а это значит, что или подстрока Text1
не найдена, или закончилась строка a(i) .

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System .
Object , ByVal е As System . EventArgs) Handles Buttonl .
Click
Const Textl As integer = 2007
Const Text2 As integer = 2008
Dim n, i, npoz As Intege r
Dim out put As St r ing

367
n = InputBox ( " Введите количество строк " )
Dim а As St ring () = New String (n) {}
For i = 1 То n
a(i) = InрutВох( " Введите строку " )
output &= a(i) & vbCrLf
Next
MessageBox . Show (output, " Просмотр ", Message -
BoxBut t ons . OK , MessageBox i con . Inf or ma tion)
For i = 1 То n
npo z = InS t r(a( i ) , Textl)
Do Whi le npo z > О
Mid(a( i ) , npoz , 4) - Text 2
npoz = I nSt r (a(i) , Textl )
Loop
МеssаgеВох . Shоw( "Преобразова н ная
строка = " & a( i ))
Next
End SuЬ
End Class

Контрольные вопросы и задания


1. Перечислите иаиболее распространеиные функции модуля Strings.
2. Приведите примеры методов структуры Char.
3. Приведите примеры методов класса String.
4. Каким образом происходит объявле~-rие перемеиных символыrого
типа?
5. Поясните работу функций Len, Mid, InStr, Replace на примерах.
6. Приведите примеры базовых алгоритмов строк.

Задачи для самостоятельного решения


1. Даны строка s, изображающая вещественное число в формате с пла­
вающей точкой, и целое число n (n > О) . Выведите набор символов,
изображающих первые n цифр дробной части этого вещественного
числа (без округления).
2. Даиа строка, изображающая двоичную (десятичную ) запись целого
числа. Выведите строку, изображающую десятичную (дв оичную) за­
пись этого же числа.

3. Даны строка s и число n. Преобразуйте строку s в строку длины n сле­


дующим образом: если длииа строки s больше n, то следует отбросить
первые символы, если длина строки s меньше n, то в ее начало нужно

добавить символы ~ .~ (точка).


4. Даны две строки: s1 и s2. Удалите из строки s1 все подстроки, совпа ­
дающие с s2 . Если таких подстрок иет, то выведите s1 без измеиений.

368
5. Дана строка. Выведите подстроку, расположе1пrую между первой
и последней точками исходной строки. Е сли в строке менее двух
точек, то выведите всю исходную строку.

6. Дана строка, состоящая из русских слов, разделенных пробелами


( одним или несколькими). Определите количество слов, которые на­
чинаются и заканчиваются одной и той же буквой.
7. Дана строка, состоящая из русских слов, разделенных пробелами
(одним или несколькими ) . Определите количество слов, которые со ­
держат ровно три буквы «А~.
8. Дана строка, состоящая из русских слов, разделенных пробелами
(одии м или несколькими). Выведите строку, содержащую эти же
слова, ио разделе1п-rые одним символом «.~ (точка) . В конце точку
не ставьте.

9. Дана строка, состоящая из русских слов, разделенных пробелами


(одии м или несколькими). Выведите строку, содержащу1'° эти же
слова (разделенные одним пробелом), но расположенные в обратном
порядке.

10. Дана строка, состоящая из русских слов, разделенных пробелами


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

12. Дана : строка, состоящая из русских слов, разделенных пробелами


(одним или несколькими). Преобразуйте строку так, чтобы каждое
слово аачииалось с заглаваой буквы.
13. Даны строка - предложение на русском языке и число k (О< k < 10).
Зашифруйте строку, выполнив циклическую замену каждой буквы
на букву того же регистра, расположен~-rую в алфавите на k-й позиции
после шифруемой буквы (~-rапример, для k = 2 «А~ перейдет в «В~,
«а~ - в «в~, « Б ~ - в « Г~, «я~ - в «б~ и т .д.). Б укву «ё~ в алфавите
не учитывайте, знаки препинания и пробелы не изменяйте.
14. Дана строка, состоящая из слов. Зашифруйте ее, поместив вначале все
символы, расположеиаые на четных местах, а затем, в обратаом по ­
рядке, - все символы, расположенные на нечетных местах (например,
строка " Программа" превратится в " ргамамроП ").
15. Напишите программу, позволяющую определить, является ли данаое
слово палиндромом (т . е . читается ли оно справа налево так же, как
и слева направо).
Библиографический список

1. ГОСТ 19.701- 90 ~ЕС ПД. Сх ем ы алгоритмов, программ данных


и систем. У славные обозначения и правила выполнения~ [Текст] .
2. Волчен:ков Н.Г. Программирование на Visнal Basic 6 [Текст] : учеб. по ­
собие/ Н .Г. В олченков. - М.: И Н ФРА-М, 2000. - 280 с.
3. Гаргtаев А .Ю. Самоучитель Visнal Stнdio .NET 2003 [Текст] / А. Ю. Гар­
наев. - СПб.: БХВ - Петербург, 2003. - 688 с.
4. Гуриков С.Р. Введеиие в программирование иа языке Microsoft Visual
Basic .NET [Текст]: учеб. пособие для ссузов / С. Р . Гуриков. - М. :
Дрофа, 2010. - 528 с .
5. Гусева О.Л. Практикум по Visual Basic [Текст] / О.Л. Гусева. - М.:
Фииа~-rсы и статистика, 2007. - 544 с.
6. Дейтел Х.М. Как программировать на Visual Basic.NET : Кн. 1. Основы
программирования [Текст]: пер. с аигл. / Х.М. Дейтел, П.Дж. Дейтел. -
М.: ООО ~Бииом - Пр есс~, 2003. - 768 с.
7. Князева М.Д. Программирование на Visual Basic 6 [ Текст] : учеб. по­
собие/ М.Д. Князева. - М.: Кудиц-образ, 2006. - 176 с.
8. Лукии С.Н. Поият~-rо о Visual Basic. NET [Т екст ] : самоучитель /
С.Н. Лукин. - М.: Диалог-МИФИ, 2005. - 736 с.
9. Халъворсогt М. Visual Basic для профессионалов [Текст] / М . Халь­
ворсон. - М. : ЭКОМ, 2000. - 720 с .
10. Шакиu В.Н. Базовые средства программирования иа Visн al Basic
в среде Visual Studio.NET [Текст] : учеб. пособие/ В . Н. Шакин . - М .:
Ф орум; ИНФРА-М, 2015. - 304 с.
11. Шевякова Д.А. Самоучитель Visual Basic 2005 [Текст] / Д.А. Шевя ­
кова, А.М. Степа~-rов, Р.Г. Карпов; под общ. ред . А.Ф. Тихонова. -
СПб.: БХВ -Петербург, 2007. - 576 с .
12. Якушева Н.М. Введение в программирование на языке Visual Basic.
NET [Текст]: учеб. пособие/ Н .М. Якушева. - М.: Ф инансы и ста­
тистика, 2006. - 320 с.
13. VB .NET для профессионалов [Текст ] . - Кр асногорск: Лори, 2004. -
767 с.
14. Vis нal Basic 6.0 [Текст]: пер. с англ. - СПб.: БХВ -Петербург, 2002. -
992 с .

370
Приложение 7

Примеры выполнения лабораторных работ

ЛАБОРАТОРНАЯ РАБОТА № 1.
ЗАПИСЬ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ
Цели работы: овладение практическими навыками использования
стандартных функций в языке программирования Microsoft Visual
Basic при записи арифметических выра)кений - получение практи ­
ческих навыков отладки программ; выработка при решении постав­
ленных задач таких профессионально значимых качеств, как самосто­
ятельность, ответственность, точность, творческая инициатива.

Пример выполнения работы


Условие: разработать проект, содер)кащий две формы. Первая
форма - за ставка. На второй форме реализовать решение сле ­
дующей задачи: вычислить значения арифметических выра:>кений
и вывести на экран результаты вычислений. Предусмотреть запрос
на выход из программы. Создать иконку с собственными инициа­
лами и скомпилировать .ехе -файл.
Исходные данные: х = 1,4444, Ь = 0,318, t = 2, 1, а= 1,3.
у= 9х2 + sin2 х~а + Ь;

Z = ~(ахз -~~}
Запись арифметических выражений на языке программирования

y =9*x л 2+Sin(x)*Sin(x)*Sqrt(a+ Ь)
z = (х л t) л (1 / 3) *(а* х * х * х - (х * х) / (1*2))
Разработка алгоритма решения задачи представлена на рис. 160.

Н ачало

а, Ь, х, t

у = 9х 2 + sin 2 х ~а + Ь

у, z
(_ _ _К_о_
не_ц_ __ )
Рис. 160. Алгоритм решения задачи

371
Листинг программы с использованием функций Str и Val
Imports System.Math
PuЬlic Class Forml
Private SuЬ Buttonl_Click(ByVal sender As System.
Object , ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim а , Ь , х , t , z , у As Singl e
а - Val( TextBox l . Text )
ь -- Va l (Text Box2 . Text)
х - Val( T extBoxЗ . T ex t )
t - Va l( TextBox4 . Text)
у - 9 * х л
2 + Si n(x) * Si n (х) * Sqrt (a +
Ь)
z = (х л t) л (1 / 3) * (а * х л 3 - (х * х) /
(1 * 2))
TextBox5 . Text - Str( y)
T extBoxб . Tex t - Str(z)
End SuЬ
End Class

Private SuЬ TextBoxб_KeyPress(ByVal sender AsObject ,


ByVal е As System.Windows.Forms.KeyPressEventArgs) Han-
dles Textвoxб.KeyPress
Butt onl . Focus () ' Пере дача уп равления н а кн о п ку
End SuЬ

Private SuЬ Button2_Click(ByVal sender As System.


Object, ByVal е As System . EventArgs) Handles Button2 .
Click
Di m resul t As Dial ogResult
r esult = MessageBox . Show( " Bы хотите вый т и
и з программы?? ", " Выход ", MessageBoxBut t ons . YesNo, Mes-
sageBox i con . Asteri s k)
If r esult = DialogResu l t . Yes Then
Appl icat ion . Exit()
End If
End Sub
End Class

Результат работы программы представлен на рис. 161.

372
- -- -- - -- - - - - -- - - - - - - - - - -- -- -- - -
111 заnнсь выра:+:еннн GJ[QJ@

Введите значение а Введите значение Ь Введите значение х Введите :значение 1

11.4444 l о. з 18 12.1 ....__1


1 .з_ _..
Ответ у= Ответ z=

140.6792 l 15.40789

Выход

Рис. 161 . Результат работы программы

Изменим усл овие задачи , введя две переменные целого типа: i


и j. При этом будут вычисляться два предыдущих арифметических
выражения с исходными данными: х = 1,4444, Ь = 0,318, t = 2, 1,
а= 1,3.
Переменная i = у, а переменная j = [z] , где j - целая часть числа.
Ввод и вывод дан ных осуществим с помощью фун кций InputBox
и MsgBox.
Листинг программы с использованием функций lnputBox
и MsgBox
Impor ts System . Ma th
PuЬlic Class Forml
Private SuЬ Forml_Load(ByVal sender As System . Object ,
ByVal е As System . EventArgs) Handles MyBase . Load
Dim а, Ь, t , z , у As Single
х,
Di m i, j As Integer
а - Inрu tВ ох( "Вве дите з н а че н ие А ", "Вв од 1
числа ")
ь - In рutВох( " Введите значение
в "' " Ввод 2
числа ")
х - I nрutВох( " Введите значение
х "' " Ввод 3
числа ")
t - Inрu tВ ох( "Вве дите з н а че н ие
т "' "Вв од 4
числа ")
у - 9 * х
л
2 + Sin(x) * Sin(x) * Sqrt (a + Ь)
z - (х
л
t )л (1 / 3) * (а * 3 - (х * х) /
х
л

(1 * 2) )

373
l = у

J = Fix ( z ) ' Для выделения цело и


v
части числа

МsgВох( " Значение у - " & у, vbinformation ,


" Получаем ответ ")
МsgВох( " З н ачение z - " & z, vЫnf ormation ,
" Получаем ответ ")
МsgВох( " Значение l - " & l , vЫnf ormation,
" П олу ча ем о тв е т " )
МsgВох( " З на чен ие J - " & J' vЫnf ormation ,
" Получаем ответ ")
End SuЬ
End Class

Результаты выполненной программы представлены на рис. 161-


165.
~

Получаем ответ 1)()


Значение У = 40, 6792

Рис. 162. Вывод значения у

По ..11учае м ответ ("'Х)

Значение Z = 15, 40789

Рис. 163. Вывод значения z

374
~-

Получаем ответ Гх)

Значение i = 41

Рис. 164. Вывод значения i

~-

Получаем ответ [)<)


Значение j = 15

rг··········а~(·············~
) 11 1 7 : -: : 11 1 : - : -: : 11 1 1 1 : :- : : : - : 1 1 : - : :- : 1 (

Рис. 165. Вы вод значения j

Задания для самостоятельной подготовки

Изучить:
• запись чисел с фиксированной и плавающей точкой;
• правила записи арифметических выражений;
• запись стандартных функций;
• организацию ввода-вывода данных.

Разработать:
u
• алгоритм решения поставленнои задачи в соответствии с вари-

антом;

• интерфейс программы;
• пр ограмму решения задачи;

• тестов ый вариант исходных данных.

375
Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект долж:ен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;
• вариант задачи.
3. Заставка к проекту выполняется на обычной форме.
4.На главной форме разрабатываемого прилож:ения студенты
1 -й подгруппы программируют задачу с использованием операторов
ввода и вывода данных на форму, студенты 2 -й подгруппы програм­
мируют задачу с использованием операторов InputBox и MsgBox.
5. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе, т.е. проявить свои знания по теорети­
ческой части курса.
6. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

7. Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы, номер варианта.
3. Цель лабораторной работы.
4. Условие задачи.
5. Запись арифметических выраж:ений на языке программиро -
вания.

6. Разработанный алгоритм.
7. Листинг программы.
8. Результаты выполнения программы.

Контрольные вопросы и задания

1. Дайте определение понятия ~алгоритм».


2. Какие существуют свойства алгоритма?

376
3. Какие способы описания алгоритмов вы знаете?
4. Перечислите этапы решения задач при работе в среде прог­
раммирования.

5. Как записываются алгоритмические блоки и каково их на-


значение?
6. В каких двух формах записываются дробные числа?
7. Дайте определение понятия « идентификатор».
8. Расскажите об основных правилах написания идентифика­
торов.

9. Дайте характеристику типам данных, расска)ките об особен ­


ностях каждого типа.

1О. Объясните суть работы оператора присваивания.


11. Какие операторы служат для ввода-вывода данных? Напи -
шите их синтаксис.

12. Дайте характеристику области видимости переменных.


13. Определите понятия « объект», «класс».
14. Какие три базовых принципа ле)кат в основе объектно-ориен ­
тированного программирования? Дайте характеристику каждому.
15. Какие две конструкции слу)кат для создания объекта? Напи­
шите их синтаксис.

16. Что понимается под понятиями «методы~, «свойства~, «со­


бытия»?

Варианты к лабораторной работе


« Запись арифметических выражений»

(порядковый номер студента по журналу соответствует его но­


меру варианта)

Таблица 37
Варианты заданий

Номер И сходные
Расчетные формулы
вар ианта даиные

1 2 cos (х - 7t / 6) х = 1,42
а = + cos 2 х 3 ех у= 1,220
1/ 2+ sin 2 у
z2 z = 3,5
ь = 1+
З+z 2 / 5
2 У= lxy/x l - ~Y / х х = 1,825
у= 18,225
y-z/(y-x)
и= (у-х) 2
z = -3,298
1 +(у - х)

377
Продолжение табл. 37
Номер Исходные
Расчетные формулы
варианта даиные

3 х2 хз х4 х = 0,335
s=1+x+-+- + - У. = 0,025
2! 3! 4!
f = x(sinxЗ +cos2 у)
4 У= e-bt sin(at+ Ь ) - ~lbt +al а= - 0,5
Ь = 17
s =bsin(at 2cos2t )- 1 t
'
0,44
а = 1,5
5 zv = NхЗ-х / .Ja2 +Ь2
ь = 15,5
у = J х 2 + ь - Ь 2 - Ь 2 sin3 ( х +а)/ х х 3,2
6 2 а = 16,5
s = x 3 tg(x+b) +а/ Jx +b
Ь = 34
Ьх 2 -а '
q= х = 0,61
еах -1
7 r - х 2 (х +1) / b- sin2 (х + а) а = 07
'
ь = 0,05
s = )хЬ /а +cos2 (х + Ь )
3
х - 05
'
2 ,
а = 11
8
y=sin(x 2 + a) -х/Ь ь = 0,004
х2 з
z = ~+cos(x+b) х=02 ,

9 f = ~mtgt+lcsintl lll =2
Ь = 07
,
z = mcos(btsint) + c с= -1
t 1,2
10 а = 32
у= btg 2x - 2
а ь
'
= 17,5
sin (х / а)
х = - 4,811
d = ае -Fa cos (Ьх / а)

11 f - ln (а+ х 2 ) + sin 2(х / Ь) а= 10,2


ь = 9,2
z =е-сх x +Jx+a с= 0,51 2
x-~lx bl х=22 ,

12 у= а 2 х + Ь х cos(a +b)x а = 03
'
Ь = 09
,
х+1
х = 0,6113
1' J -
= х 2 + ь Ь 2 sin 3 ( х + а)/ х

378
Продолжение табл 37
Н омер И сходные
Расчетные формулы
вар ианта даиные

13 z = ~ах sin 2х + е- 2 х (х + Ь) а = 0,5


Ь = 31
'
z~ = cos 2 х3 - х / .Ja2 + Ь2 х = 1,414
14 а 2 х + е-х cos Ьх а = 05
И= '
Ьх-е-х sinbx+ 1 х = 0,315
ь =2,9
h = 2 · 1о 1s + cos х - tg 2х
15 Slll X m = 0,7
Z= cmlnmx с = 2,1
.J1 + т 2 sin 2 х
х = 17
S = е-ах ,Jх + 1 + е-Ьх ~ х + 1, 5 '
а= 0,5
ь = 1,0816
а = 2,345
16 ь + .Jь 2 + 4ас
у= а 3 с+ь- 2 ь = 3,123

с = 0,57
а Ь аЬ -с
d = 1,36
z =- ·- -
с d cd
17 sinx+cosy х= 3,033
s= . ·tgxy у= 0,014
cosx-s1ny
х+у ху- 12
Z= -
х+ 1 34+х

18 З+еУ- 1 х = 2,03
!= у = 1,599
1+x 2 ly - tgxl
хз х5
z =6x - - +-
3 5
х
/
19 ' = 1,333
у = 5,014
d = ln(y - ~)
у
х -
х2
х+ -
\. 4
z = ( 1- tg х )ctgx + cos ( х - у)

20 х = -1,255
s = lnlcosxl
у = 5,23
ln(1 + х 2 )

f
(J
х+1
= --
х-1
+ 18ху 2

379
Продолжение табл. 37
Н омер И сходные
Расчетные формулы
вар ианта даиные

21 х = 1,005
z=(I+ :,J-12xy 2 у = 3,01

х 2 - 7х + 10
!=
х 2 - 8х+12
22 х = 1,236
z = cosx + 16х ·cos (ху ) - 2 у= 0,003
п - 2х

f = 2-х -cosx + sin(2xy)


23 1 х = - 1,777
z = 2ctg(3x )- ?
у = 2,66
12х- + 7у - 5

f = lx2 - x3 1- 7х
у 3 -15х

24 у х = 1,022
z = xlnx+ у = 0,333
х
cosx - -
3
f = sin .Jх + 1 - sin .Jх 1
25 у 2 +12ху - 3х 2 Х= 1,111
z =ex - у = -0,223
18у - 1

1+sin.Jx+ 1
! =
cos(12y - 4)
26 ( ) lncosx х = 0,663
z = 2ctg 3х - ( ) у = 3,112
ln 1+х 2

f = ех - Х - 2 + (1+ х )х

27 х=
z = 3х - 4х+(у - ~)
4,001
у= 1,295
k = х - 1o sin х + cos (х - у)
28 1+ sin 2(х + у) Х= 6,174
!= +х у= - 1,65

2+ х -
1+х 2у2

z = ~ I - 2·104 + sinx1+ -е5х


tgy

380
Окончание табл. 37
Н омер И сходные
Р асчетные формулы
вар иант а даиные

29 х = 0,388
у= )(хз +sinx) + а+;::56 - 0,003 а = 9,456
Ь = 2, 111
d = 5х 5 · 3а5 - .Jа + Ь
30 90 ajS . х = 1,104
т = 1·1012 +s1nxtgx а= 2,03
ь = - 1,6
р = ~ +ctgx+ -а + 1·1О-5 j = 3,456
3х5

31 х = 2,542
z = хе2х + 3,5·106
х
n = 0,3
cosx - -
3
f = п 2 -cos 3 х+ 1,23
x 2 - 8x+ctgx3

32 3,54+еУ 1 х = 4,001
!= у = 1,295
1·105 +х2 1у - Гхl а= 5,23
lll = 1,023
- ь + )cos 2 m + tgx2 ь = 1,36
У- - а5х+еьь-2

33 .Ja2 +ь2 Х= 6,174


w = cos 2 x2-x у = -1,65
3,23· 105
а= 4,45
ь = 0,233
z = Гх · l2,74·104 + sinЗ x l+ е5х
ctgy

34 х = 0,388
x(.Jx + a)
Z = е-СХ а = 9,456

ьl)
3
ь= 2,111
x - ()lx
с= 1,11

d = 5cos 5 х 2 . 3а5 - )ctgx

35 s е ax .Jx+ 1 +е Ьх l tgxЗI х = 1,104


а= 2,03

р
= ~ + е2хх+ -а + 3,66 ·1О-5 ь = - 1,6
3х6

381
ЛАБОРАТОРНАЯ РАБОТА № 2.
МНОГОЗНАЧНЫЕ ВЕТВЛЕНИЯ В ПРОГРАММАХ.
ИСПОЛЬЗОВАНИЕ ПРОВЕРКИ КОРРЕКТНОСТИ ВВОДА ДАННЫХ
И ИНДИКАТОРА ОШИБОК

Цели работы: овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с про ­

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


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

ская инициатива.

Пример выполнения работы

Условие: разработать проект, содер:>кащий несколько форм.


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

Перечислим требования к элементу управления Текстовое окно:


• разрешается вводить только цифры;
• можно ввести лишь одну десятичную точку;

• разрешается вводить знак ~минус», но только в первую позицию

текстового окна;

• отбрасываются (или игнорируются) все другие символы, вво ­


димые пользователем.

Вывести сообщение об ошибке в виде всплывающей подсказки,


используя элемент управления EттorProvider ( Индикатор ошибок).
Создать иконку с собственными инициалами и скомпилировать
.ехе-файл.
Разработка алгоритма решения задачи представлена на рис. 166.

Разработка программы с использованием функций


lnputBox и MsgBox
Import s Sys t em . Math
PuЬlic Class Forml
Private SuЬ Textвoxl_KeyPress(ByVal sender As Object ,
ByVal е As System . Windows . Forms . KeyPressEventArgs) Han-
dles Textвoxl.KeyPress

382
Начало

Нет Да

у= Sin ( х)
Нет Да

у= Cos ( х) у = Sin (х) / Cos (х)

Конец

Рис. 166. Алгоритм решения задачи

Di m KeyAsc i i As I nt eger
Dim х , у As Single
KeyAscii = Asc(e . KeyChar)
Select Case KeyAscii
Case 48 То 57 , 8, 13 'цифры от О до 9, а т а кже
символы возврата и перевода строки

Case 45 ' знак минус

' ес ли уже есть о дин знак минус , н овый


о т брасывается
I f InStr (TextBoxl . Text , " - " ) <> О Then
KeyAsci i = О
End I f
Case 46 ' десятичная точка
' отбрасываем ее , если у нас уже есть десятичная

то чка

I f I nSt r (TextBoxl. Text, ". " ) <> О Then

383
KeyAscii - О
End If
Case Else
'з апрещаем обработку нажатия других клавиш
KeyAscii = О
End Select
'если мы хотим проигнорировать нажатие клавиши ,
указываем программе,

' ч то это событие уже обрабо тан о . В противном


с лучае

'п озволя ем данному событию обрабатываться обычным


образом
I f KeyAscii = О Then
e . Handled - True
Else
e . Handled - Fa l se
End If
х = Val (TextBoxl . Text )
If х < О Then
у - Sin (х)
Elseif х > 1 Then
у - Sin (х) / Cos (х)
Else
у = Cos (х)
End If
TextBox2 . Text - Str(y)
End SuЬ

Private SuЬ TextBoxl_Validating(ByVal sender AsOb-


ject, ByVal е As System . Componentмodel.CancelEventArgs)
Handles Textвoxl.Validating
I f TextBoxl . Text = "" Then
Er r orProvide r l . SetEr ro r(TextBoxl,
" Не введены данные ")

Else
ErrorProviderl . SetError (TextBoxl , "")
End If
End SuЬ
End Class

На рис. 167 представлены результаты работы программы.

384
~ Проект LJ(g]L8]
В ведите значение :·:

Значение у=

[Qэоэ2974

-----------
~ Проект LJ(QJL8]
В ведите значение х

1Не введены данные \


Значение у=

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

Вычисленные значения функции У в формате с фиксированной


точкой:
при х = 1.3 у= 3.602 102
при х = -2 у= -0.9092974
при х = 0.5 у= 0.8775826

Задания для самостоятельной подготовки

Изучить:
• возможности яз ыка программирования для реали зации много ­

значных ветвлений;

385
• запись конструкции многозначных ветвлений в блок-схемах;
• запись многозначных ветвлений в программах;
• работу условного оператора If при проверке нескольких условий;
• методы проверки корректности ввода данных.
Разработать:
• алгоритм решения поставленной задачи в соответствии с вари-
антом;

• интерфейс программы;
• программу решения задачи;

• тестовые варианты (число тестов равно числу ветвей вычисли ­


тельного процесса) для проверки правильности функциониро­
вания программы.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект долж:ен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;
• вариант задачи.
3. Заставка к проекту выполняется студентами 1-й подгруппы
с использованием программного кода, который реализует появ­
ление нестандартной формы (см. приложение 2, заставка No 8), сту­
дентами 2-й подгруппы с использованием программного кода, ко­
торый реализует использование элемента управления ProgressBar
(см. приложение 2, заставка № 4).
4. Главную форму разрабатываемого прило:>кения студенты
1-й подгруппъt программируют с использованием обычной формы,
студенты 2-й подгруппъt программируют с использованием нестан­
дартной формы (см. приложение 2, заставка № 7).
5. В разработанном проекте применить методы проверки
корректности ввода данных и использовать элемент управления

ErrorProvider.
6. Обе подгруппы при окончательной компоновке проекта со­
здают иконку с собственными инициалами и демонстрируют пре­
подавателю .ехе-файл приложения.

386
7. Студент долж:ен уметь ответить на контрольные вопросы
по лабораторной работе, т.е. проявить свои знания по теорети­
ческой части курса.
8. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

9. Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы, номер варианта.
3. Цель лабораторной работы.
4. Условие задачи.
5. Запись математических формул на языке программиро-
вания.

6. Разработанный алгоритм.
7. Листинг программы.
8. Результаты выполнения программы.

Контрольные вопросы и задания

1. Дайте определение разветвляющегося алгоритма.


2. П риведите пример записи простого условного оператора
в блок-схемах.
3. Напишите программный синтаксис простого условного опе­
ратора. Поясните работу оператора.
4. П риведите пример записи сокращенного условного опера ­
тора в блок-схемах.
5. Напишите программный синтаксис сокращенного условного
оператора. Поясните работу оператора.
6. Приведите пример записи составного условного оператора
в блок-схемах.
7. Напишите программный синтаксис составного условного
оператора. Поясните работу оператора.
8. Приведите пример записи многозначных ветвлений в блок­
схемах.

9. Напишите программный синтаксис многозначных ветвлений


в программах.

10. Как работает условный оператор If при проверке нескольких


условий?

387
11 . П оясните работу оператора Select Case. Напишите прог­
раммный синтаксис оператора.
12. С какой целью используется в программах элемент управ ­
ления ErrorProvider?

Варианты к лабораторной работе


« Многозначные ветвления в программах»

(порядковый номер студента по :>курналу соответствует его но ­


меру варианта)

Таблица 38
Таблица вариантов

Номе р в ариаита Функция Условие


,
1 at 2 In t 1~t~2

у = 1 t> 1
e at cosbt t<2
,
2 х < 1,3
пх 2 - 7 / х2
у= ах 3 + 7Гх х = 1,3
ln(x + 1Гх) х > 1,3
'
,
3 ах 2 +Ьх + с х > 1,2

W=• а / x +.Jx 2 +1 х = 12
'
(а + Ьх) / .Jх 2 + 1 х < 1,2

4 х < 1,4
пх 2 - 7 / х 2

Q= ах 3 + 7Гх х= 1 4
'
ln(х + 7 ~lx + al) х > 1,4
'
,
5 х < 1
1,5cos 2 х
1 < х < 2
у = 1, 8ах

(х - 2) +6
2
х > 2
'

6 , xVx - a х > а

W=• xs1nax х = а

е -ах cosax х < а


'

388
Продолжение табл. 38
Н омер варианта Ф ункция Условие

7 bx-lnbx Ьх <1
Q= · 1 Ьх = 1
bx+lnbx Ьх >1

,
8 sinxlnx х > 3,5
у= cos 2 x х = 35
'
-5· 10-31 ·Х х < 3,5

,
9 х>1
ln(x+ 1)
= · sin 2 ~
х =1
!
х<1
cosx 2 + 2.10-s

10 х < 0,5
(lnЗ х+х2)/ .Jx+t
Х= 0,5
z =· .Jx+t +1 / х
х > 0,5
cosx + tsin 2 х

,
11
а+Ь
х < 2,8
ех +cosx
S= 2,8 < х < 6
(а + Ь)/(х+1)
ех +sinx х>б
'

,
12 х<1
alnx+~
1 <х< 10
у = 2асоsх+Зх2
5·10-7 +tgx х > 10

,
13 а
-:- +bt 2 +с i<4
1
W=•
1 4 ~i~ 6
ai + Ьi 3 i>6
'

389
Продолжение табл. 38
Н омер варианта Ф ункция Условие

14 '

. (i
as1n
2
+1)
п
Slll
i 2 +1
п
<0

со{+ ~J
Z=· i 2 +1
Slll >0
п

6
i 2+ 1
15у -=1
п

,
15 t < 0,1
"1at2 +bsint+1
W=• at +b t = 0,1
~at 2 + bcost+1 t > 0,1
'

,
16 -х 2 +3х+ 9 х<3

х
W=• х =5
х3 -6
3,156·10 3 х>3
'
,
17 -х 2 +3х+9 х=5

х
W=• х<3
х3 -6
,
3156·10 3 х =3
'

18 х~3
9 - cosz+Гx
1 х>3
Q =·
х +1
2

15х 6 + 3·10 2 X= Z
'
,
19 -5· 105 +sd5 х ~1

1 х> 1
у= ·
х+б
cosz X=Z
'

'
20 -3х + 9 х ~7

1 х>7
Z=·
х-7
3.10- 5 х= аЬ

390
Продолжение табл. 38
Н омер варианта Ф ункция Условие
,
21 3х-9 х '.5:.7

1 х > 12
у=
х2 -4
sin х + tg х - ctg х х = 1-10- 5
'

22 0'.5:.х<3
х 2 +ех + l- 2,123+xl
Q= · 4 х>3

'
rx; X=Z
,
23 х 2 +4х+5 х<О

1 х>2
W =· 2
х +4х+5
~6х 3 +tgx х= 2

,
24 о '.5:. х <1
х 2 -х

! =· x 2 - sin пх 2 х> 1

-х+~13х 5 X= Z
,
25 х15
s1nx- х'.5:. 0
1·105
у= ·
cosx х>О

ctgz+tga X= Z
'
,
26 х 2 +ех ·3х 2 +tgx3 0'.5:.х<3

Q= 3,111 ·105 х< 7t


е х + cos 2x х - 3 7777 x=t
' '

х<О
27 х 2 +~ctgx +9,222·105
1
W =· х> 7
х 2 +4х + 5
~ +lnx - cos 2 x x=S

28 x 2 -2x3z + 3,222+2,55 о '.5:. х <1

! = Зх 2 - sin пх 2 +ctgxЗ x>S


-х+~13х 5 +9х-е3х x=n
'

391
Окончание табл. 38
Н омер варианта Ф ункция Условие

29 х15
s1nx - х ~О
1·105
у =
cosx+ tg 2x + 3,333 · 1010 х > 2,55
ctgz+ tg 3a- bl х= 7
,
30 3х 2 + lnx 2 tgx3 О~х<5

µ = · 2,5. 1os +&, х > 2п


ех + cos 2x х - 3, 7777 х=Ь
,
31 ~ х 4 + 3х 3 + 5, 111·1015 х< О
cos 2 х
(t) = < х>1
x 2 +4x+tgx5
lnx - cos 2 х+езх ,J; x =n
r
32 x 2 -2x3z + 3,222 + 2,55 О~х<3

v = sin ТТХз + tg хз
< х > 15
~х 5 +cos9x - еЗх х = 2,33
'
r
33 х
15

15 +ctgx 2 +2sinx х~ О
3.10-
~=·
tg 2x+ 5,45 · 1016 -~54хз х>5

ctgb + tg3s-.JJ;;; х = 15
'
,
34 2
tgxЗ
+ 1,222·-COSX·5! О~ х <5
5
S= ·
) xtgx +ctgx 2 х <n
cos 2x+ 2x - lnx 2 + 31 ·1015 x=d
' '
,
35 5,334· 10-1s + l- 2xcosxl х < О

lnx 2x
(t) = < х>3
tgx5 +sinx5 + 3,111
Гх +~sin x 3 x=q
'
,
36 6х ·3х 5 + tg 2x3 + аз о~ х < 10

v = ~lnx +2,4·105 +2cos2x


< х > 20
еЗх + 5!+ 9xd + ctg3x х = р
'

392
ЛАБОРАТОРНАЯ РАБОТА № 3.
ИСПОЛЬЗОВАНИЕ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ СНЕСКВОХ,
RADIOBUTTON, LISTBOX, GROUPBOX В ПРОГРАММАХ

Цели работы : овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с ис ­

пользованием элементов управления CheckBox, RadioButton,


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

Пример выполнения работы

Условие : разработать проект, содержащий несколько форм.


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

можно осуществить ввод двух чисел, выбор одной из операций, на­


пример, «+» «- », «*», «/», «\», «Mod», «л» и выдачу результата.
Кроме того, с помощью элемента управления Список осуществить
вывод на третью форму название выбранной операции и ее перевод
на английский язык. Предусмотреть при вводе чисел реакцию прог­
раммы на ввод нечисловых данных. Организовать с помощью эле­
мента Флажок выбор опций окна сообщений MessageBox.
Создать иконку с собственными инициалами и скомпилировать
.ехе-файл. Внешний вид главной формы представлен на рис. 168.

111 Проект ~(QJC8J


Выберите операцию
Чис110 1 125
О С11ожение
Чис110 2
15
О В ычитание
Рез~11ьтат 1125
0 !dмножение
Еение
Вычитание О Де11ение
!dмножение
Де11ение
Выберите ф11ажок

Ок 0 Ok
~ OkCancel
О AbortR etrylgnore
В ыбор
О YesNoCancel

О YesNo
Нажали С анс еl О RetryCancel

Рис. 168. Внешний вид главной формы

393
Внешний вид третьей формы представлен на рис. 169, 170.
-------------------

fll Проект ~(QJLRJ


Сложение

IAdding

Рис. 169. Дополнительная программа-переводчик

Ручной выбор ~
Это ваш выбор окна

__н_ет_ _) (
1············~~·············~( Отмена

Рис. 170. Вы вод окна сообщения

Листинг программы

PuЬlic ClassForml
Private buttontype As MessageBoxButtons
Private SuЬ Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim а, As DouЬle
Ь, с

а - Val(TextBox l . Text )

Ь - Val(TextBox2 . Text )

If RadioButtonl . Checked = True Then


MsgBox ( " Вы выбрали о п ера цию с л оже ния",

MsgBoxStyle . Exclamation , " О тв е т ")


с = а + Ь
End I f
If RadioButton2 . Checked = True Then
MsgBox ("Вы выбрали операцию вычи т ания ",

MsgBoxStyle . Exclamation , " О тв е т ")


с = а - Ь

End I f

394
If RadioButtonЗ . Checked = True Then
MsgBox ( "Вы выбрали о п ера цию умн ожен ия",
MsgBoxStyle . Exclamati on , " О т ве т " )

с = а * Ь
End I f
If Radi oButton4. Checked = True Then
MsgBox ( " Вы выбрали о п ера цию деле н ия ", Msg-
BoxStyl e . Exclamati on , " Отве т " )
с = а / Ь
End I f
Tex tB oxЗ . Text - For mat( c , "##### . #### " )
End SuЬ

Private SuЬ Forml_Load(ByVal sender As System.Ob-


ject, ByVal е As System.EventArgs) HandlesMyBase.Load
Li stBox l . Items . Add( " Cлoжeниe ")
Li stBox l . Items . Add( " Bычи т aниe ")

Li s tBox 1 . I t ems . Add ( " Ум н оже ние")


Li stBox l . Items . Add( " Дeлe н иe " )
End SuЬ

Private SuЬ ListBoxl_DouЬleClick(ByVal sender As


Object, ByVal е As System.EventArgs) Handles ListBoxl.
DouЬleClick
Di m def As St r i ng
Fo r m2 . Labe ll . Text = Li s t Box l . Text
Se l ect Case Lis t Boxl. Select edindex
Case о
de f - "Adding "
Case 1
de f - "Subs truction "
Case 2
de f - "Mu l t iplicat i on"
Case 3
def - "Pa rtion "
End Se l ect
Fo r m2 . Show ()
Form2 . TextBoxl . Text - def
End SuЬ

395
PrivateSuЬ Textвox2_KeyPress(ByVal sender As Object ,
ByVal е As System . Windows . Forms . KeyPressEventArgs) Han-
dles Textвox2.KeyPress
Dim KeyAscii As Integer
KeyAsci i = Asc(e . KeyChar)
If KeyAsci i = 13 Then
TextBox3 . Focus ()
End I f
End Sub

Private SuЬ TextBox2_Validating(ByVal sender As Ob-


ject, ByVal е As System . Componentмodel . CancelEventArgs)
Handles Textвox2 . Validating
I f Not IsNumeric(Text Box2 . Text) Then
MessageBox . Show( " Bвo дитe только
ч исла ! " )
TextBox2 . Focus()
End If
End SuЬ

Private SuЬ TextBoxl_KeyPress(ByVal sender As Ob-


ject , ByVal е As System.Windows.Forms.KeyPressEvent-
Args) Handles TextBoxl.KeyPress
Dim KeyAscii As Integer
KeyAsci i = Asc(e . KeyChar)
If KeyAsci i = 13 Then
TextBox2 . Focus()
End I f
End SuЬ

Private SuЬ TextBoxl_Validating(ByVal sender As Ob-


ject, ByVal е As System . Componentмodel . CancelEventArgs)
Handles Textвoxl . Validating
I f Not IsNumeric(Text Boxl . Text) Then
MessageBox . Show ( " Вводите только числа! " )
Text Box l . Focus ()
End If
End SuЬ

Private SuЬ CheckBoxl_CheckedChanged(ByVal sender


As System.Object , ByVal е As System.EventArgs) Handles
CheckBoxl.CheckedChanged

396
but tont ype - MessageBoxButt ons . OK
End SuЬ

Private SuЬ Button2_Click(ByVal sender As System .


Object , ByVal е As System . EventArgs) Handles Button2 .
Click
Di m dial og As Dial ogResul t = MessageBox . Show ("Э т о
ваш в ыбор окна ", " Р уч ной выбор ", buttontype)

Se lect Case dialog


Case Windows . For ms . DialogResu l t . OK
Labe l 4 . Text = " Нажали ОК "
Case Windows . Forms . Dial ogResult . Cancel
Label 4 . Text = " Нажали Cancel "
Case Windows . For ms . DialogResu l t .Abor t
Labe 14 . Text = " Нажали Abort "
Case Windows . For ms . DialogResu l t . Retry
Label 4 . Text = " Нажали Retry"
Case Windows . Forms . Dial ogResult . No
Labe l 4 . Text = " Нажали No "
End Se l ect
End SuЬ

Private SuЬ CheckBox2_CheckedChanged(ByVal sender


As System.Object , ByVal е As System.EventArgs) Handles
CheckBox2 . CheckedChanged
but tont ype = MessageBoxButt ons . OKCancel
End SuЬ

Private SuЬ CheckBoxЗ_CheckedChanged(ByVal sender


As System . Object , ByVal е As System . EventArgs) Handles
CheckBoxЗ.CheckedChanged
buttontype = MessageBoxBut tons . AbortRe t ry-
I gnore
End SuЬ

PrivateSuЬ CheckBox4_CheckedChanged(ByVal sender As


System . Object , ByVal е As System . EventArgs) Handles
CheckBox4.CheckedChanged
buttontype = MessageBoxBut tons . YesNoCancel
End SuЬ

397
Private SuЬ CheckBoxS_CheckedChanged(ByVal sender
As System.Object, ByVal е As System.EventArgs) Handles
CheckBoxS.CheckedChanged
buttontype = MessageBoxBut tons . YesNo
End SuЬ

Private SuЬ CheckBoxб_CheckedChanged(ByVal sender


As System.Object, ByVal е As System.EventArgs) Handles
CheckBoxб.CheckedChanged
buttontype = MessageBoxBut tons . RetryCancel
End SuЬ
End Class

Задания для самостоятельной подготовки

Изучить:
• работу условного оператора, оператора выбора Select Case;
• работу элемента управления ListBox;
• назначение элементов управления CheckBox, RadioButton,
ListBox, GroupBox и их основные свойства;
• организацию вывода данных с помощью функции MsgBox.
Разработать:
• интерфейс программы;
• программу решения задачи;

• тестовый вариант исходных данных.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект долж:ен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи.

3. Заставка к проекту выполняется студентами 1-й подгруппы


с исполь зо ванием программного кода, который реализует появ­
ление нестандартной формы (см. прило)кение 2, заставка № 7), сту­
дентами 2-й подгруппы с использованием программного кода, ко­
торый реализует использование элемента управления ProgressBar
(см. приложение 2, заставка № 4).

398
4. Главную форму разрабатываемого прило:>кения студенты
1 -й подгруппы программируют с использованием обычной формы,
студенты 2-й подzруппъt программируют с использованием нестан­
дартной формы (см. приложение 2, заставка № 8).
5. Третья форма (форма-переводчик) имеет уменьшенные раз­
меры (прямоугольник).
6. В разработанном проекте предусмотреть при вводе чисел ре ­
акцию программы на ввод нечисловых данных.

7. Обе подгруппы при окончательной компоновке проекта со ­


здают иконку с собственными инициалами и демонстрируют пре­
подавателю .ехе-файл приложения.
8. Студент долж:ен уметь ответить на контрольные вопросы
по лабораторной работе, т.е. проявить свои знания по теорети­
ческой части курса.
9. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

1О.Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы.
3. Цель лабораторной работы.
4. Условие задачи.
5. Листинг программы.
6. Результаты выполнения программы.
Контрольные вопросы и задания

1. Дайте характеристику каждому элементу управления, при­


меняемому в данном проекте.

2. Поясните работу процедур, обеспечивающих реакцию прог­


раммы на ввод нечисловых данных.

3. Объясните принцип работы разработанного приложения.

ЛАБОРАТОРНАЯ РАБОТА NO 4.
ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РАЗВЕТВЛЯЮЩИХСЯ
СТРУКТУР С ИСПОЛЬЗОВАНИЕМ ПОИСКА МАКСИМАЛЬНОГО
И МИНИМАЛЬНОГО ЗНАЧЕНИЙ

Цели работы: овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с про­

веркой нескольких условий; уяснение различных способов нахож-

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

точность , творческая инициатива.

Пример выполнения работы

Условие: разработать проект, содер:>кащий несколько форм.


Первая форма является заставкой к прилож:ению. На второй форме
следует р еализовать р ешение следующей задачи.
Вычислить значение функции r =f (х, у, z), если:

miп( х 2 , siп y, cosz ), если у< х


r = max (ех+у, 1112 2 ) , если х <у< z
х + у+ z, в противном случае.

В разработанном проекте применить методы проверки коррект­


ности ввода данных. Предусмотреть запрос на выход из программы.
Создать иконку с собственными инициалами и скомпилировать
.ехе-файл.

Листинг программы

I mpor t s sys t em.math


PuЬlic Class Forml
Private SuЬ Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl .
Click
Di m х, z, r, rl, r2 As Single
у,

х - Va l( TextBoxl . Text)
у = Va l( TextBox2 . Text)
z - Va l( Tex tB oxЗ . Text)
If у < х Then
r l - Sin (у)
r2 - Cos ( z)
r - х 2 л

If r l < r Then
r - rl
End I f
If r 2 < r Then
r - r2
End I f

400
Elseif у <= z Then
r l = Lo g ( z л 2 )
r 2 = Ехр (х + у)
If r l > r2 Then
r - rl
Else
r = r2
End If
Else
r = х + у + z
End If
TextBox4 . Text = Str (r )
End SuЬ
End Class

Задания для самостоятельной подготовки

Изучить :
• возможности яз ыка программирования для реали зации много -

значных ветвлений;
• запись конструкции многозначных ветвлений в блок-схемах;
• запись многозначных ветвлений в программах;
• алгоритмы поиска минимального и максимального значений;
• работу условного оператора If при проверке нескольких условий.
Разработать:
• алгоритм решения поставленной задачи в соответствии с вари -
антом;

• интерфейс программы;
• программу решения задач и;

• тестовые варианты (число тестов равно числу ветвей вычисли ­


тельного процесса) для проверки правильности функциониро ­
вания программы.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект долж:ен иметь заставку, в которой указываются:
• название учебного заведения;

401
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;
• вариант задачи.
3. Заставка к проекту выполняется студентами 1-й подгруппы
с использованием программного кода, который реализует ис­
пользование элемента управления ProgressBar (см. прилож:ение
2, заставка № 4), студентами 2-й подгруппъt - с использованием
программного кода, который реализует появление нестандартной
формы (см. приложение 2, заставка № 7).
4. На главной форме разрабатываемого приложения студенты
1-й подгруппы программируют задачу с использованием операторов
ввода и вывода данных на форму, студенты 2-й подгруппъt програм­
мируют задачу с использованием операторов InputBox и MsgBox.
5. В разработанном проекте применить методы проверки кор ­
ректности ввода данных (студенты 1-й подгруппъt). Предусмотреть
запрос на выход из программы.

6. Обе подгруппы при окончательной компоновке проекта со­


здают иконку с собственными инициалами и демонстрируют пре­
подавателю .ехе-файл приложения.
7. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе, т.е. проявить свои знания по теорети­
ческой части курса.
8. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

Студент обязан соблюдать правила по технике безопасности


9.
при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы, номер варианта.
3. Цель лабораторной работы.
4. Условие задачи.
5. Запись математических формул на языке программиро-
вания.

6. Разработанный алгоритм.
7. Листинг программы.
8. Результаты выполнения программы.

402
Контрольные вопросы и задания

1. Дайте определение разветвляющегося алгоритма.


2. Как записываются многозначные ветвления в блок-схемах?
3. Как записываются многозначные ветвления в программах?
4. Как работает условный оператор If при проверке нескольких
условий?
5. Начертите алгоритмы оптимальных способов поиска макси­
мального значения из трех чисел.

6. Начертите алгоритм поиска минимального значения из че ­


тырех чисел.

Варианты к лабораторной работе « Программирование


алгоритмов разветвляющихся структур с использованием поиска

максимального и минимального значений »

(порядковый номер студента по журналу соответствует его но­


меру варианта)

Таблица 39
Таблица вариантов

Номер
Функция Условие
вариаата

1 х3 + lg(xy)cd ху>З

е= · Зmin{x, у, max{cx, dy}} 2~ х ~З

2cd _ x ху <0

2 ху > о
1-еху+ аЬ
ху = О
Z= · b-min{ax,y}

max{x3 , еУ, ~llny2 1 } ху < о


'
,
х> О иу> О
max{:.~.JY}
3

Z= ·
min{:.JY} х< О иу> О

2 х+у
в противном случае

у> О и ху2 > О


'
4
y~1+(zx) 2
g= · min{a+x,max{y, z}} у> О и ху 2 ~ О
-ЬеУ
в противаом случае

403
Продолжение табл. 39
Н омер
Функция Условие
вариа~-rта

5
min{ х х a, Fa+x,sinx } О <х~ 1

! =· max {)x, ах } х> 1

ах + Ь х~ О

6 min{xз, е-х+ 1 , max{lgx, х+ у}} х > о и е-х;;;;:: у

d=· 1-х 2 х ~ о и е-х ;;;;:: у

с 2 +dcos(x+ у) в противном случае


'
7 z ={min{a, max{x, у, Ь}} З~х~4

аз -уJЬ lg2 lx l в противиом случае

ь: У, sin2 у}
8
min { a-cosx, х<у

z=
max{a3,ln(x 2 + у 2 )} y~x<y + S

a+cos 3 (x - y) x;;;::y + S
'
/

сх' J
9
cos ( 1 - ъ О ~х~ 1

d=·
max {c, х, min {-Гx", JЬ + с}} х> 1

еЬх+с х< О
'

10
р ={min {max{x, у 2 }, -Гх, ~у+с} у;;;;:: о

max{sinx, cosy, tg(xy)} в противиом случае

11 ,х"1ь 2 + с 2 х> 1

z =· min{JЬ, х 2 , х+с} х ~ о

max{lnb, х +с} в противиом случае

12 max{x, у} х>1

р= min{x, Ь} -1~ х ~ о

min{sina, cosb, max{x 2, а+ Ь}} в противиом случае


'

404
Продолжение табл. 39
Н омер
Функция Условие
вариа~-rта
,
13
~lxl + lyj +lzl lzlxy < 3
r= min{~,.J[Yf,~} lzlx+y > 4
max{x, уЗ}+а 3 ~ lzlx+y ~ 4

14 { min(x, у, сх, dy} о ~ х ~ 1 иу>2

r = max {lg 2х, ~ х +у, ух} в противиом случае

,
15 asinx +bcosx х< 2

max{x3 , е х , 1оз} х>З


s= <

. { SIПX
m1n х ,max{ax ,xз},xln2x } в противиом случае

,
16
(1- .Jх 2 +а)· max{x, у} ху < о

t = · 1nin{x 2 , siny, cos(ay)} ху >2


х
а2+ - в противиом случае
у

17 {ln(x )min(x, z} х> О иz> О

и = max{x 2, z 2 -а 2 , min{x, z}} в противиом случае

,
18
min {Ьх 2 , сх3, 1nax {-vfcl, ~}} х<З

! =· Ь - сх 2 х>З

ь2
arctg 2 2 в противиом случае
, с +х

19
а + Ь+с ·ffilll
. { х, у, х+у} х<З
2 х-у
V=
min{x, у} х> О иу> 1

у(а+Ь+с) в противиом случае


'

20 , xЗ la jsiny lxlY< z
h = max{x, у, z}
< Z ~ lxlY~ -z

min{y, z} в противном случае

405
Продолжение табл. 39
Н омер
Функция Условие
вариа~-rта
,
21 min{x, у} ху < 2
max{x, у, Ь}
z= ху >5
min{x, у, Ь}
Ь+ ysinx в противном случае
'

22 , min {c, ..Гxmin{y, z}, y-z} х > О и yz > О


~ - <
xyz
в противиом случае
1-с

23 'Ja+xJ а>х

L= · еа +х а = х

sina х а<х

24 ау 2 cosx ху > 2
Z= · max{x, у}
ху ,,;; 2
min{a, х, у}
'

R}
,

. {х
25
m1n - , х<уиу> О
z= а а

max{ax, 2y, sin(x + y)} в противиом случае

min{ax, у, 1nax{F, siny}}


26
х,,;; О иу> 2
z= Ь + 2х
в противном случае
еа.11

27 , х~а+Ь а<Ь<с
у =< 1
- max{a, Ь, с} в противном случае
,3
28
.min{xxa,.Ja+x } x~S

у=<

max{M} х< О

о х>1
'

406
Окончание табл. 39
Номер
Функция Условие
вариа~-rта
,
29 е -а х~З

а+Ь+с
у=< е а<Ьис> о
3
еХ в противном случае
'

30 {sin 2 а, а Е [Ь, с]
У=
sina 2 , а~ [Ь, с]

ЛАБОРАТОРНАЯ РАБОТА № 5.
РАЗРАБОТКА ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ГЛАВНОГО
МЕНЮ И СТРОКИ СОСТОЯНИЯ

Цели работы: овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с по ­

строением графического интерфейса пользователя - GU I ( Graphical


User Interfасе); получение дальнейших навыков по отладке и тести­
рованию программ; выработка при решении поставленных задач
таких профессионально значимых качеств, как самостоятельность,
ответственность, точность, творческая инициатива.

Пример выполнения работы

Условие: разработать проект, содерж:ащий несколько форм.


Первая форма является заставкой к приложению. На второй
форме следует разместить элемент управления Label с заранее за­
данным текстом. Создать главное меню, меню верхнего уровня File
с пунктами меню About ( отобра:жает окно сообщения) и Exit ( за­
вершение работы программы).
Второе меню верхнего уровня называется Format. Меню Format
имеет подменю Color и подменю Fo nt, которые изменяют цвет
и шрифт текста на метке Labe l. На третьей форме разместить не ­
обходимые элементы управления и реализовать программу нахож­
дения действительных и комплексных корней квадратного урав ­
нения и программу нахож:дения корней квадратного уравнения
ах2 + Ьх + с= О (при этом использовать систему меню).
Внешний вид главной формы представлен на рис. 171.

407
!il Созданне меню r;J[Q)[8]
File 1 Format 1

МТУСИ

Рис. 171. Внешний вид приложения

Листинг программы

PuЬlic Class Forml


' выво д сообщения Пунк т ме н ю Abou t
Private SuЬ AЬoutToolStripMenuitem_Click(ByVal
sender As System.Object, ByVal е As System.EventArgs)
Handles AЬoutToolStripMenuitem.Click
MessageBox . Show ( " Э т о пример " & vbCrLf &
" создания меню " , "About " , MessageBoxBut tons . ОК , Mes -
sageBoxicon . I nf or mation)
End SuЬ

Private SuЬ ExitToolStripMenuitem_Click(ByVal sender


As System.Object, ByVal е As System.EventArgs) Handles
ExitToolStripMenuitem.Click
Application .Exit()
End SuЬ

' восс т ановле н ие цвета формы


Private SuЬ ClearColor()
' удаление всех галочек пунктов Color меню
BlackToo l Stri pMenu i tem . Checked = Fa l se
BlueToolStr ipMenuitem . Checked = False
RedToolStripMenuitem . Checked = Fal se
Gr eenToo l Stri pMenu i tem . Checked = Fa l se
End SuЬ

' обновле ние сос т оя н ия ме ню и ус т ановка цвета Bl ac k


Private SuЬ BlackToolStripMenuitem Click(ByVal
sender As System.Object, ByVal е As System.EventArgs)
Handles BlackToolStripMenuitem.Click

408
Clear Color() ' сброс гало ч е к пу нк то в меню
ц ве та

'уста н о вка че р н ого ц вета


Label l . ForeColor = Color . Black
BlackToo l Stri pMenui tem . Checked - True
End SuЬ

Private SuЬ BlueToolStripMenuitem_Click(ByVal sender


As System . Object , ByVal е As System . EventArgs) Handles
BlueToolStripMenuitem . Click
Clear Color()
Label l . ForeColor = Color . Blue
BlueToolStri pMenu item . Checked - True
End SuЬ

Private SuЬ RedToolStripMenuitem_Click(ByVal sender


As System . Object , ByVal е As System . EventArgs) Handles
RedToolStripMenuitem . Click
Cl earCol or ()
Labell . ForeColor = Color . Red
RedToolStripMenuitem . Checked - True
End SuЬ

Private SuЬ GreenToolStripMenuitem_Click(ByVal


sender As System . Object , ByVal е As System . EventArgs)
Handles GreenToolStripMenuitem . Click
Cl earCol or ()
Label l . For eCol o r = Col or . Gr een
GreenToo l Stri pMenui tem . Checked - True
End SuЬ

' сброс типа шрифта


Private SuЬ ClearFont()
' сброс г алочек пун к т о в м еню Font
TimesNewRomanToolStripMenuitem .Chec ked = False
Couri e rTool St r i pMenu i tem . Checked = Fal se
Comi cSansToolSt r ipMenuitem . Checked = False
End SuЬ

' обно в ле ние сос т оя ния ме ню и ус та но вка шриф та Times New


Roman

409
Private SuЬ TimesNewRomanToolStripMenuitem_Click
(ByVal sender As System . Object , ByVal е As System . Even-
tArgs) Handles TimesNewRomanToolStripMenuitem . Click
' сброс г алочек пун к т о в меню Font
ClearFont ()
'уста н овка шрифта Times New Roman
TimesNewRomanTool StripMenuitem. Checked = True
Labell . Font = New Font( "Ti mes New Roman", 30 ,
Labell . Font . St yl e)
End SuЬ

Private SuЬ CourierToolStripMenuitem_Click(ByVal


sender As System . Object , ByVal е As System . EventArgs)
Handles CourierToolStripMenuitem.Click
ClearFont ()
Courie rToolSt ri pMenu i tem . Checked = True
Labell . Font = New Font ( "Courier New " , 30 ,
Labell . Font . St yl e)
End SuЬ

Private SuЬ ComicSansToolStripMenuitem_Click(ByVal


sender As System . Object , ByVal е As System . EventArgs)
Handles ComicSansToolStripMenuitem.Click
Clear Font ()
ComicSansToo l St r ipMenu item . Checked = Tr ue
Label l . Font = New Font( "Comic Sans MS " , 30 ,
Label l . Font . St yl e)
End SuЬ

' в ключе н ие г ал очки и в ключение с т иля Bol d (жир н ый)


Private SuЬ BoldToolStripMenuitem_Click(ByVal sender
As System.Object , ByVal е As System.EventArgs) Handles
BoldToolStripMenuitem.Click
'вклю ч ение гало чки
Bo ldToolStri pMenuitem . Checked = Not BoldTool-
StripMenuitem. Checked
' ис п ользо в ание ло г и ч еской операции XOR для в ключе н ия
стил я Bold
Label l . Font = New Font(Labe ll . Font . FontFamily ,
30 , Label l . Font . Styl e Xo r FontSt yl e . Bold)
End SuЬ

410
Private SuЬ ItalicToolStripMenuitem_Click(ByVal
sender As System . Object , ByVal е As System .EventArgs)
Handles ItalicToolStripMenuitem.Click
ItalicToolStripMenuitem . Checked = Not Italic-
Tool Stri pMenu i tem. Checked
Label l. Font = New Font(Labe ll . Font . FontFamily ,
30, Labell . Font . Style Xor FontStyle . Italic)
End Sub
End Class

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


и комплексных корней квадратного уравнения.
Можно выделить следующие этапы решения задачи:
1) ввод коэффициентов квадратного уравнения а, Ь, с;
2) вычисление дискриминанта по формуле d = Ь 2 - 4ас;
3) проверка знака дискриминанта. Если дискриминант >=0, то
вычислить действительные корни и вывести их на экран:

-ь+Jd, -ь-Jd,
Xt = 2а
' Х2 = 2а

При отрицательном дискриминанте выводится сообщение о том,


что действительных корней нет, и вычисляются комплексные
корни:

Х1
-Ь +z. v'[df ,
= - Х2
-Ь . v'[df .
= --l
2а 2а 2а 2а
У обоих комплексных корней действительные части одина­
ковые, а мнимые отличаются знаком. Поэтому мож:но в переменной
u -Ь u
х
1 хранить деиствительную часть числа - ,в переменнои х
2 - мо -

дуль мнимой части Jldl, а в качестве корней вывести х 1 + 1х 2


Листинг программы

PuЬlic Class Form2


Private SuЬ Buttonl_Click(ByVal sender As System.
Object , ByVal е As System.EventArgs) Handles Buttonl.
Click

4 11
Dim kfc а, kf c - Ь, kf c - с, xl, х2 , diskr As
Singl e
k f c а - Va l(TextBox l. Tex t)
k f c Ь - Val(TextBox2 . Text)
k f c с - Va l(TextB oxЗ . Tex t)
d i skr - kf c Ь * kf c Ь - 4 * kf c а * kf c с
If diskr < О Then
MsgBox ( " Действительных корней н ет !", vb-
Cr i t i cal , " Ответ " )

xl = - kfc Ь / ( 2 * kfc а)
х2 = Sqrt (Abs (dis kr )) / (2 * kfc а)
MsgBox ( " Комплексные корни уравнения ", vb-
Cr iti cal , " Ответ " )
MsgBox( " xl= " & xl & " +i *" & х2, vb-
Cr iti cal , " Ответ " )
MsgBox( " xl= " & xl & " -i *" & х2, vb-
Criti cal , " О твет")
El se
xl - (-kf c Ь + Sqrt (diskr)) / (2 *
kfc а)
х2 = (-kf c Ь - Sqrt (diskr)) / (2 *
kfc а)
MsgBox ( " Действительные корни урав не ния ",

vbCr i ti cal , " Отве т " )


MsgBox( " xl= " & xl, vbCri ti ca l, " Ответ " )
MsgBox( " x2= " & х2, vbCri ti ca l, " Ответ " )
End I f
End SuЬ
End Class

Задания для самостоятельной подготовки

Изучить:
• работу условного оператора;
• принципы разработки главного меню;
• работу элемента управления StatusStrip (Строка состояния) .
Разработать:
• интерфейс программы;
• алгоритм нахо)кдения действительных и комплексных корней
квадратного уравнения;

• программу решения задачи;

• тестовый вариант исходных данных.

412
Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект должен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;
• вариант задачи .
3. Заставка к проекту выполняется студентами 1-й подгруппы
с использованием программного кода, который реализует ввод
пароля на форму с ограничением по времени (см. приложение 2,
заставка № 6), студентами 2-й подгруппъt с использованием прог­
раммного кода, который реализует эффект проявления и исчезно­
вения формы (см. приложение 2, заставка № 5).
4. Главную форму разрабатываемого приложения студенты
1-й подгруппъt программируют с использованием обычной формы,
студенты 2-й подгруппъt программируют с использованием нестан­
дартной формы (см. приложение 2, заставка № 7).
5. Третью форму разрабатываемого приложения студенты
1-й подгруппъt программируют с использованием обычной формы,
студенты 2 -й подгруппы программируют с использованием нестан ­
дартной формы (см. приложение 2, заставка № 7).
6. Обе подгруппы при окончательной компоновке проекта со ­
здают иконку с собственными инициалами и демонстрируют пре ­
подавателю . ехе-файл приложения.
7. Студент долж:ен уметь ответить на контрольные вопросы
по лабораторной работе, т.е. проявить свои знания по теорети ­
ческой части курса.
8. Студент долж:ен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

9. Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы.

413
3. Цель лабораторной работы.
4. Условие задачи.
5. Разработанный алгоритм.
6. Листинг программы.
7. Результаты выполнения программы.

Контрольные вопросы и задания

1. П еречислите основные свойства элемента управления


MenuStrip.
2. Объясните принципы создания главного меню и строки со­
стояния.

ЛАБОРАТОРНАЯ РАБОТА № 6.
ТАБУЛИРОВАНИЕ ФУНКЦИЙ

Цели работы : овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с по ­

строением таблиц; получение дальнейших навыков по отладке и те­


стированию программ с использованием оператора цикла For; вы­
работка при решении поставленных задач таких профессионально
значимых качеств, как самостоятельность, ответственность, точ­

ность, творческая инициатива.

Пример выполнения работы

Условие : разработать проект, содер:>кащий несколько форм.


Первая форма является заставкой к приложению. На второй
форме реализовать решение следующей задачи: вычислить зна­
чение функции у= Sin(x) для значений аргумента, изменяющегося
на отрезке [а, Ь] с шагом h. Результаты табулирования функции вы­
вести в текстовое окно, в окно сообщения, на элемент управления
ListBox.
В разработанном проекте применить методы проверки коррект­
ности ввода данных. П редусмотреть запрос на выход из программы.
Создать иконку с собственными инициалами и скомпилировать
.ехе-файл.
Задача реализуется с помощью цикла с заданным количеством
повторений, которое определяется по формуле

п= [ xk~xo ]+l
Разработка алгоритма решения задачи представлена на рис. 172.

414
Начало

/ а, Ь, h
/
х =а

11 = Rou11d ((Ь - а) / h) + 1

-
~

i = 1 11
'

у= Si11 (х)

х, у

x =x+h

/' "\
1 Коиец 1
\_

Рис. 172. Алгоритм табулирования функц ии

Листинг программы

Вывод результатов осуществляется в окне сообщения.

Impor ts System . Math


PuЬlic Class Forml
Private SuЬ Buttonl_Click(ByVal sender As System .
Object, ByVal е As System.EventArgs) Handles Buttonl .
Click
Dim а, Ь, х, h, у As Single

415
Dim i, n As I nteger
Dim output As String
а - Va l( TextBoxl .Text)
Ь = Val( TextBox2 . Text )
h = Val( T extBoxЗ . Tex t )
out put &= " х= " & vbTab & " у= " & vbCrLf
х = а
n = Ci nt ( (Ь - а) / h) + 1
Fo r i = 1 То n
у = Sin (х)
output &= х & vbTab & у & vbCrL f
х = х + h
Next
MessageBox . Show (output, "Просмотр ", MessageBoxBut-
t ons . OK , MessageBoxi con . Informati on)
End SuЬ
End Class

На рис. 173 представлены результаты табулирования функции


с выводом табличных значений в окно сообщения.

Просмотр ~
х= у=

1 0)841471
1)5 0)997495
2 0)9092974
2)5 0)5984721
3 0)1 4112
3)5 -0,3507832
4 -0,7568025
4)5 -о, 9775301
5 -0,9589243
5)5 -0,7055403
6 -0,2794155
6)5 0)21512
7 0)6569866
7)5 0)938
8 0)9893582
8)5 о) 7984871
9 0)4121185
9)5 -0,07515112
10 -0,5440211

[. . . . . . . . .""]
"ок"

Рис. 173. Вывод результатов в окне сообщения

416
Листинг программы

Вывод результатов осуществляется в текстовом окне.

I mpor t s Sys t em . Math


PuЬlic Class Forml
Private SuЬ Buttonl_Click(ByVal sender As System .
Object , ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim а, Ь , х, h, у As Sing le
Dim i , n As Integer
а - Val (Text Box l . Text )
Ь - Val( TextBox2 . Text)
h - Va l (Tex t BoxЗ . Tex t )
х - а

n - Ci nt ( (Ь - а) / h) + 1
For i = 1 Т о n
у = Sin (х)
TextBox4 . Text &= х & vbTab & у & vbCrLf
х = х + h
Next
End SuЬ
End Class

На рис. 174 представлены результаты табулирования функции


с выводом табличных значений в текстовом окне.
~ Табулнрованне функцнн GJ(Q]~

1 0,841471
1,5 0,997495
2 0,9092974
2,5 0,5984721
3 0,14112
3,5 -0,3507832
4 -0,7568025
4,5 -0,9775301
5 -0,9589243
5,5 -0,7055403
6 -0,2794155
6,5 0,21512
7 0,6569866
7,5 0,938
8 0,9893582
8,5 0,7984871
9 0,4121185
9,5 -0,0 7515112
10 -0,5440211

Рис. 174. Вывод результатов в текстовом окне

4 17
Листинг программы

Вывод рез ул ьтатов осуществляется на элемент управления


ListBox.

I mpor t s Sys t em . Math


PuЬlic Class Forml
Private SuЬ Buttonl_Click(ByVal sender As System .
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Di m а, Ь, х, h,
As Si ngleу
Dim i , n As I nteger
а - Val (TextBox l . Text )
Ь - Val( TextBox2 . Te xt )
h - Val ( T extBoxЗ . Tex t )
х - а

n - Ci nt ( ( Ь - а ) / h ) + 1
Li stBox l .Items . Add( " х " & " у ")
For i = 1 Т о n
у = Sin ( х )
ListBoxl . I tems . Add (" " & х & " " & у)
х = х + h
Ne xt
End SuЬ
End Class

На рис. 175 представлены результаты табулирования функции


с выводом табличных значений на элемент управления ListBox.

111 Табулнрованне функцнн ~[Q)~

х у

1 0.841471
2 0.9092974
3 0.14112
4 -о . 7568025
5 -0. 9589243
Б -0. 2794155
7 О. Б5Б98ББ
8 0. 9893582
9 0. 4121185
1 о -0.5 440211

Рис. 175. Вы вод результатов на элемент управления Li stBox

418
Задания для самостоятельной подготовки

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

табулирования функций;
• запись оператора цикла For в блок-схемах;
• запись оператора цикла For в программах;
• работу оператора цикла For.
Разработать:
• алгоритм решения поставленной задачи в соответствии с вари -
антом;

• интерфейс программы;
• программу решения задачи;

• тестовые варианты (число тестов равно числу ветвей вычисли ­


тельного процесса) для проверки правильности функциониро ­
вания программы.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект должен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;
• вариант задачи.
3. Заставка к проекту выполняется студентами 1-й подгруппы
с использованием программного кода, который реализует появ ­
ление нестандартной формы (см. прило)кение 2, заставка № 8), сту ­
дентами 2-й подгруппы - с использованием программного кода, ко ­
торый реализует появление нестандартной формы (см. приложение
2, заставка № 7).
4. Главную форму разрабатываемого приложения студенты 1-й
и 2-й подгрупп программируют с использованием обычной формы.
5. В разработанном проекте применить методы проверки
корректности ввода данных и использовать элемент управления

ErrorP rovider.
6. Обе подгруппы при окончательной компоновке проекта со­
здают иконку с собственными инициалами и демонстрируют пре­
подавателю .ехе-файл приложения.

4 19
7. Студент долж:ен уметь ответить на контрольные вопросы
по лабораторной работе, т.е. проявить свои знания по теорети ­
ческой части курса.
8. Студент долж:ен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро ­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

Студент обязан соблюдать правила по технике безопасности


9.
при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы, номер варианта.
3. Цель лабораторной работы.
4. Условие задачи.
5. Разработанный алгоритм.
6. Листинг программы.
7. Результаты выполнения программы.

Контрольные вопросы и задания

1. Дайте определение циклическому алгоритму.


2. Как записывается цикл с оператором For в блок-схемах?
3. Как записывается цикл с оператором For в программах?
4. Как работает цикл с оператором For?

Варианты к лабораторной работе «Табулирование функции»

(порядковый номер студента по журналу соответствует его но­


меру варианта)

Таблица40

Таблица вариантов

Н омер Параметры
Шаг
вари - Функция начальное конечное
h
анта значение значение

1 F= х - Sin ( х) + 3 Tg (х) 1 6 0,5


2 F = Siп 2 (х) + Ctg (х) 1 5 0,5
3 F = Cos2 ( х) + 1 1 8 0,5
4 F = Tg (х) + Sin (х) 1 6 0,5
5 F = Ctg (х) + Cos (х) 1 6 0,5
6 F = 5 Sin ( х) + Tg ( х ) о 10 0,7

420
Окончание табл. 40
Н омер П ар аметры
Шаг
в ари- Фун кция иачально е коиечиое
h
анта значение значение

7 F = Cos ( х) + Arctg ( х) о 10 0,7


8 F = Arctg ( х) + 3 Siп ( х) 2 8 0,5
9 F = Siп ( х) - Cos ( х) о 15 0,7
10 F = х2 Sin (х) + 2 Cos (х) о 13 0,7
11 F = Sin(1 / х) + 5 Sin 2 (х) 1 6 0,5
12 F = Cos(1 / х) + 2 Tg(x) 1 8 0,5
13 F = Siп (х2 ) + 4 Siп (х) 1 11 0,5
14 F = Cos (х 2 ) + Cos 2 (х) 1 13 0,7
15 F = 3 Sin ( х) + Tg (х) о 8 0,5
16 F = Cos (х) + Ctg2 (х) 1 9 0,5
17 F = Tg (х / 2) о 9 0,5
18 F = Тg ( х / 2) + Cos ( х) 2 14 0,7
19 F = Ctg (х / 3) + 2 Siп ( х) 3 13 0,7
20 F = Sin (х / 4) / 2 1 8 0,5
21 F = Cos ( х / 4) / 2 1 14 0,7
22 F = Ctg (х / 4) 1 9 0,5
23 F = Siп ( х) + 3 Cos (х / 2) о 8 0,5
24 F = 2 Cos (х2 ) + Siп (2 х) о 16 0,7
25 F = 2 Ctg (х) - Cos 2 (х) 1 8 0,5
26 F = 2 х Cos (х) 1 7 0,5
27 F = Sin ( х) + 5 Tg (х) 1 13 0,5
28 F=4 Siп( x) + Ctg(x) о 8 0,5
29 F = 3 Cos ( х) + Siп( x / 2) 1 9 0,5
30 F = x +Tg (x) о 9 0,5
31 F = 2 Sin (х) + Cos2 (х) 2 14 0,7
32 F = Arctg ( х) + Cos ( х) 3 13 0,7
33 F = Тg ( х) + 2 Cos2 ( х) 1 8 0,5
34 F = Tg 2 (х) + 5 Cos(x) 1 14 0,7
35 F = 9 Sin ( х) + 2 Cos (х) 1 9 0,5
36 F = 3 Ctg ( х) +2 Cos ( х) о 8 0,5

421
ЛАБОРАТОРНАЯ РАБОТА № 7.
ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РЕГУЛЯРНЫХ
ЦИКЛИЧЕСКИХ СТРУКТУР

Цели работы : изучение процесса формализации при решении


задач на ком пьютере, а такж:е изучение средств, приемов и полу ­

чение даль нейших навыков по отладке и тестированию программ:


выработка при решении поставле нных задач таких профессио ­
нально значимы х качеств, как самостоятельность, ответственность,

точность, творческая инициатива.

Пример выполнения работы

Условие : разработать проект, содер:>кащий несколько форм.


Первая форма является заставкой к приложению. На второй форме
реализовать решение следующей задачи: вычислить значения
функции у при изменении хна отрезке [- 2, 2], с шагом h = 1.
В разработанном проекте применить методы проверки коррект­
ности ввода данных. Предусмотреть запрос на выход из программы.
Создать иконку с собственными инициалами и скомпилировать
.ехе-файл.

х2 -1 при х< О,

у = sin (х -1) при О < х < 1,5,


cosx при х > 1,5.
Разработка алгоритма решения задачи представлена на рис. 176.
Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System.
Object , ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim х , а , Ь , h , у , pr As Single
Dim n, l As Int eger
а - Val (Text Boxl . Text)
ь - Val (Text Box2 . Text)
h - Val ( TextBox З. Tex t)
n - Cint ( (Ь - а ) / h ) + 1
х - а

For l - 1 То n
If х <= о Then
у - х * х - 1
El s eif х > 1 .5 Then

422
Начало

х = а

i = 1' n

Нет Да

у = х2 - 1
Нет Да

у = Siп ( х - 1) у= Cos (х)

х,у

x =x +h

Коаец

Рис. 176. Алгоритм разработанной задачи

у = Math . Cos (х)


Else
у = Ma t h . Sin(x - 1)
End I f
ListBoxl . I t ems . Add (" " & х & " " & у)
х = х + h
Next
End SuЬ
End Class

423
Задача. Вычислить пр оиз ведение отрицательных значений
функции у= f(x) при изменении х на отрезке [- 2, 2], с шагом h = 1:
х2- 1 при х < О,
у = sin (х -1) при О < х < 1,5,
cosx при х > 1,5.

Разработка алгоритма решения задачи представлена на рис. 177.

Начало

а, Ь, 11

n = ((Ь - а) / h) + 1

pr = 1

i= 1 n
'

х = а+ (i - 1) *h

Нет Да

Нет Да
у = х2 - 1

у = Sin (х - 1) у = Cos (х)

Х, у

Нет Да

pr = pr *у

х, у

(~_ _К_о_не_ц_~)
Рис.177. Алгоритм решения задачи

424
Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl Clic k(ByVal sender As Sys t em.
Object , ByVal е As Sys~em . EventArgs) Handles Buttonl .
Click
Dim х , а , Ь , h , у , pr As Single
Dim n , i As Integer
а - Va l (Text Boxl . Text)
Ь = Val(TextBox2 . Text )
h = Va l (Tex t BoxЗ . Text)
n = Cint ( (Ь - а) / h) + 1
pr = 1
For i = 1 То n
х = а + (i - 1) * h
If х <= О Then
у - х * х - 1
El se i f х > 1 . 5 Then
у = Math . Cos (х)
El se
у = Math . Sin(x 1)
End If
ListBoxl . Items .Add (" " & х & " " & у)
I f у < О Then
pr = p r * у
End If
Nex t
TextBox4 . Text = Str(pr)
End SuЬ
End Class

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

11! form1 GJ[QJ[RJ


-2
-1
з
о
l-2
о -1
1 о
2 -0.4161468

Ok

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

Задания для самостоятельной подготовки

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

табулирования функций;

425
• запись оператора цикла For в блок-схемах;
• запись оператора цикла For в программах;
• работу оператора цикла For.
Разработать:
• алгоритм решения поставленной задачи в соответствии с вари-
антом;

• интерфейс программы;
• программу решения задачи;

• тестовые варианты (число тестов равно числу ветвей вычисли ­


тельного процесса) для проверки правильности функциониро ­
вания программы.

Работа в лаборатории
Для успешного получения зачета по лабораторной работе необ­
ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект должен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;

• вариант задачи.

3. Заставка к проекту выполняется студентами 1 -й подгруппы


с использованием программного кода, который реализует создание
текста и изображения графическими методами (см. приложение 2,
заставка № 1), студентами 2 -й подгруппъt с использованием прог­
раммного кода, который реализует вывод центрированного текста
(см. приложение 2, заставка № 2).
4. Главную форму разрабатываемого приложения студенты 1 -й
и 2-й подгрупп программируют с использованием обычной формы.
5. В разработанном проекте применить методы проверки кор ­
ректности ввода данных и использование элемента управления

ErrorProvider.
6. Обе подгруппы при окончательной компоновке проекта со ­
здают иконку с собственными инициалами и демонстрируют пре­
подавателю .ехе-файл приложения.
Студент должен уметь ответить на контрольные вопросы
7.
по лабораторной работе, т.е. проявить свои знания по теорети­
ческой части курса.
8. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программирования
Microsoft Visual Studio, набрав и отладив программу своего варианта.

426
9. Студент обязан соблюдать правила по технике безопасности
при работе с вычислительной техникой.

Содержание отчета
1. Название лабораторной работы.
2. Фамилия, имя студента, номер группы, номер варианта.
3. Цель лабораторной работы.
4. Условие задачи.
5. Разработанный алгоритм.
6. Листинг программы.
7. Результат выполнения программы.

Контрольные вопросы и задания


1. Дайте определение циклического алгоритма.
2. Как записывается цикл с оператором For в блок-схемах?
3. Как записывается цикл с оператором For в программах?
4. Как работает цикл с оператором For?
5. Расскажите словесный алгоритм табулирования функции.

Варианты к лабораторной работе « Программирование


алгоритмов регулярных циклических структур »

(порядковый номер студента по журналу соответствует его номеру


варианта)

Таблица 41
Таблица вариантов

Н омер
Задача
вариа~-rта

1 Протабулируйте функцию z при изменении хна отрезке


(- 10; 10] с шагом 0,5.
1+ lx l
x:s;-1
~1+х+х 2 '
z =. 2ln(1 + x 2 )+ 1+cos
4
х , х Е [ - 1;0 ]
2+х
3
(1 +х ) 5, х~О
'

2 Протабулируйте функцию g при изменении хна отрезке


(-20; 20] с шагом 0,3. Найдите произведе~-rие положи ­
тельных значений g.
~

1 +х 2
х<О
g; = . .J 1+ х 4 '
siп 2 х
2х + , х>О
2+х

427
Продолжение табл. 41
Н омер
Задача
вар иа~-rта

3 Протабулируйте функцию g при изме~-rении хна отрезке


(-10; 10] с шагом 0,5. Найдите сумму положительных зиа­
чеиий g.

{
Зsiпх - cos 2 х, х <О
g· -
- з)1 + х 2 ' х >о
4 Протабулируйте функцию z при изме~-rении хна отрезке
(-20; 20] с шагом 0,3.
"
1+ х
х< О
~1+ х 2 '
z = • -х + 2е- 2 х, х Е (О; 1)
1
1 2- хЗ

5 Протабулируйте функцию g при изменении хна отрезке


(- 10; 10] с шагом0,5. Н айдите среднее арифметическое по­
ложительных значений g.

3х 2
х< О
1+ х2 '
g=·Fтf;. х> О
'

6 Протабулируйте функцию у при изменении хна отрезке


(- 20; 20] с шагом 0,3. Н айдите количество отрицательных
значений у.
1 +хе- х .
у= s111 2 х
2+ х 2
7 Протабулируйте функцию g при изменении хна отрезке
(- 30; 30] с шагом 1. Н айдите среднее арифметическое отри-
дательных значений z.
"
3 + siп 2 ( 2х)
- - - -2- -, х <о
g=· 1+ cos х
2)1+ х 2 , х> О

428
Продолжение табл. 41
Н омер
Задача
вариа~-rта

8 Протабулируйте функцию z при изме~-rении хна отрезке


(- 20; 20] с шагом 0,3.

х<О

z =, 2cos 2 х, ХЕ [0;1]
1
'1 + l2sin(Зx)IЗ, х>1

9 Протабулируйте функцию g при изменении хна отрезке


(-20; 30] с шагом 1. Найдите cpeдi-ree арифметическое отри ­
цательных значений g.
,
З+sinx
х< О
g = · 1+ х 2 '
2х 2 cos 2 х, х> О

10 Протабулируйте функцию z при изменении хна отрезке


(-20; 25] с шагом 0,3.

1
lxlЗ' х< О
х
Z=· -2х+ ,
1+х
1з - хl
х> 1
1+ х '

11 Протабулируйте функцию g при изменении х на отрезке


(- 20; 30] с шагом 0,5. Н айдите количество отрицательных
значеиий g.
,

-J1+2x 2 -sin 2 x, х< О


g=· 2 +х
х>О
'-
~2+е-О,1х'

429
Продолжение табл. 41
Н омер
Задача
вар иа~-rта

12 Протабулируйте функцию z при изме~-rении хна отрезке


(- 20; 20] с шагом 0,5.
r

1+х
х< О
1+х 2 '

z=·F6,
2lsin(3x)I, х ~1
'

13 Протабулируйте функцию g при измеаении хна отрезке


(- 20; 30] с шагом 0,5. Н
,
айдите максимальное значение g.
,,/1 + х 2 , х~ О
g· = 1 +х
х> О
1 +~1+е-О,2х ,

14 Протабулируйте функцию z при изменении хна отрезке


(-20; 20] с шагом 0,5.
'
1+х + х 2
х< О
1+х 2 '

z = · ~,
2 I0,5+sin x l, х ~ 1

15 Протабулируйте функцию g при измеаении хна отрезке


(- 20; 30] с шагом 0,6. Н айдите минимальное значение g.
')1 + lx l, х~О
g· = · 1+3х
х>О
2+~1 +х'
16 Протабулируйте функцию z при изменении хна отрезке
(-20; 20] с шагом 0,3.
,
3+х
1+ ' х<О
1+х 2
z=· ~1+(1 - х) 2 , хЕ[0;1]
1+х
х~1
1+cos 2 х'

430
Продолжение табл. 41
Н омер
Задача
вар иа~-rта

17 Протабулируйте функцию z при изме~-rении хна отрезке


(- 10; 10] с шагом 0,5.
, 3х+-../1 + х 2 , х <О
z = , 2cosxe-2x, х Е [0,1]
2sin(3x), х >1

18 Протабулируйте функцию g при измеаении хна отрезке


(- 20; 20] с шагом0,5. Н айдите сумму минимального и мак­
симального значений g.

'fi+f х~О
ь-·
а- 2+ lxl '
1+х
х>О
, 2+cos3 х'
19 Пр отабулируйте функцию z при изменении хна отрезке
(-15; 20] с шагом 0,5.
1+2х
х<О
1+х 2 '
z = · sin 2 x.J1 + х, х Е [О; 1]
sin 2 хе 0 • 2 х, х~1

20 Пр отабулируйте функцию g при изменении хна отрезке


(-20; 30] с шагом 0,4. Найдите произведе~-rие положи ­
тельаых значеаий g.
,

~1+х 2 , х<О
g· . 2 1+ х
Slll х+ , Х >0
' 1+ cos 2 х
21 Пр отабулируйте функцию z при изменении хна отрезке
(- 10; 30] с шагом 0,7.

lx l е-2х х <О
1+х 2 '
z= · -../1 + х 2 , х Е [О; 1]
1+sinx
- - -+ 3 х, х~1
1+х

431
Окончание табл. 41
Н омер
Задача
вар иа~-rта

22 Протабулируйте функцию у при изменеиии х иа отрезке


(- 20; 30] с шагом 0,5. Н айдите сумму положительных и от­
рицательных значений у.
1+х
у=---;:::=====

1+~1xl e-x + lsinxl


23 Протабулируйте функцию у при изменеиии х иа отрезке
(-10; 30] с шагом 0,7. Найдите ср едиее геометр ическое заа ­
чений у.
1+хе -х
у= ------.,.====
2+.../х 2 + sin 2 х
24 Протабулируйте функцию z при изме~-rении хна отрезке
(-20; 20] с шагом 0,5.
'зх+...f1 +х 2 , х<О
z = · 2cosxe-2 x, х Е [О; 1]
2sin(Зx), х> 1

25 Протабулируйте функцию у при изменении хна отрезке


(-10; 30] с шагом 0,5. Найдите сумму положительных зиа­
чений у.
1+ х
у = ------;:::====
1 +.../2 + х+х 2

ЛАБОРАТОРНАЯ РАБОТА № 8.
ТАБУЛИРОВАНИЕ ФУНКЦИИ С ИСПОЛЬЗОВАНИЕМ ЦИКЛОВ
С НЕИЗВЕСТНЫМ КОЛИЧЕСТВОМ ПОВТОРЕНИЙ

Цели работы: овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с по­

строением таблиц; получение дальнейших навыков по отладке


и тестированию программ с использованием операторов цикла

с неизвестным количеством повторений; выработка при решении


поставленных задач таких профессионально значимых качеств, как
самостоятельность, ответственность, точность, творческая инициа ­

тива.

432
Пример выполнения работы

Условие: разработать проект, содержащий несколько форм.


Первая форма является заставкой к приложению. На второй форме
реализовать главное меню Табулирование функции и вложенные
пункты меню: Табулирование функции_Цикл Do ... LoopUntil, Та­
булирование функции_Цикл Do While ... Loop.
На второй форме реализовать решение двух задач.
Задача 1. Вычислить значения у, соответствующие каждому
значению х (xn < х < xk,шаг изменениях равен dx) по формуле
у = esinxcosx. Вычислить сумму положительных значений у, произве­
дение ненулевых значений у, количество отрицательных значений у.
Результаты табулирования функции вывести в текстовое окно,
в окно сообщения, на элемент управления ListBox.
Разработка алгоритма решения задачи представлена на рис. 179.

Н ачало

xп,xk,dx

s= О р =1 х = xn k = О
' ' '
Нет Да

у = Exp(Sin(x))Cos(x)

х,у

Нет

k=k + 1 s = s+y

Нет Да

р = р*у

х = х + dx f - - - - - - - - - -- '

s, р, k

Конец

Рис. 179. Алгоритм решения задачи

433
Листинг программы

Impor ts System . Math


PuЬlic Class Forml
Private SuЬ Buttonl_Click(ByVal sender As System .
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim х, xn, xk, dx , у , s , р As Sing l e
Dim k As Integer
xn - Val(TextBoxl . Text)
xk = Val(TextBox2 . Text)
dx = Va l(TextB oxЗ . Tex t)
s - о

р - 1
k - о

х - xn
ListBoxl .Items . Add( " х " & " у ")
Do Wh ile х <= xk
у= Exp(Sin(x)) * Cos(x)
Li stBox l . Items . Add( " " & х & " " & у)

If у >= О Then
s - s + у
El se
k = k + 1
End I f
If у <> О Then
р = р * у
End I f
х = х + dx
Loop
Textbox4 . Text - Str( s)
Text boxS . Text - St r(p)
T ex t boxб . Tex t - St r( k)

End SuЬ
End Class

Внешний вид формы и результаты выполненной программы


представлены на рис. 180.

434
л
xn=
х у

1 1.253381
-
1.5 0.1918026
xk= l10
2 -1.033117
dx= 10.5
2.5 -1 . 45755
3 -1 .140039
3.5 -0. 6593932 С~мма значений у 16.18083
4 -0.3066662
4.5 -0. 07930965
Произведение у §з559Е·О5j
5 0.108729 1
5.5 0.3499707 Кол·во оrриц. чисел 111
6 0.7261054
6. 5 1.210979
7 1.454255
~
7.5 0.8856069 v
-

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

Задача 2. Вычислить значение у, соответствующее каждому зна-

{
е-х sin x, lxl <а
чению х ( xn ~ х ~ xk, dx), по формуле у=
е- х
2
cosx,
I I , найти
х >а

максимальное и минимальное значение у.

Разработка алгоритма решения задачи представлена на рис. 181.


Листинг программы

Import s Sys tem . Math


PuЬlic Class Forml
Private SuЬ Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs)
Di m х , xn, xk, dx , у , а , ymax , ymi n As Si ngle
xn - Val(TextBoxl . Text)
xk = Val(TextBox2 . Text)
dx = Val(TextBoxЗ . Text)
а = Val(TextBox4 . Text)
х = xn
ymax - 1 . О Е- 21
ym1n - 1 . ОЕ + 21
Do
If Abs(x) <=а Then
у - Ехр(-х) * Sin(x)
Else
у - Ехр(-х * х) * Cos(x)
End If
If у > ymax Then
ymax - у
End If

435
Начало

xn,xk,dx

х = xn

ymax = l · 10-2 1, ymin = 1·1021

Нет Да

у = Exp(-x2)Cos(x) у = Exp(-x)Sin(x)

Нет Да

ymax = у

Нет Да

y1n1n = у

х, у

х = х + dx

Нет Да

l ymax, ym1n
-
( Коиец )

Рис. 181. Алгоритм решения зада чи

436
If < ymin Then
у

ymin = у
End I f
ListBoxl . I tems . Add (" " & х & " " & у)
х = х + dx

Loop Until х > xk


TextBox5 . Text - Str(ymax)
TextBoxб . Text = Str(ymin)

End SuЬ
End Class

В н ешний вид формы и результаты вып олненной программ ы


представлены на рис. 182.

fll Табулнрованне функцнн GJ[g)~

1 О, 1987661 ~
xn= Максимальное значение 1 0.1987661
1,5 0, 007455646 ~ xk=
2 -0, 007 621995 Минимальное значение 1·О.007621995
2,5 - 0, 001546571
з -0, 0001 221748 dx=
3,5 -4, 481055Е-01
а=
4 -7, З5579Е-08
4,5 -3, З 8 3 75 ЗЕ-11
5 З, 9 3 948 5Е-1 2
5,5 5, 164 5 9 Е-14
6 2, 2271 З 7 Е-16
6,5 4,З 72898Е-19 -
7 З, 95262ЗЕ-22
7,5 1 , 290649Е-2 5
8 -2,ЗЗЗ5 4 5Е-2 9 v 1

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

Задания для самостоятельной подготовки

Изучить:
• возмож:ности языка программирования Microsoft Visual B asic для
реализации ц иклических алгоритмов с ис п ол ь зованием оп ера ­

торов цикла Do While ... Loop и Do ... Loop Until;


• запись операторов цикла Do While ... Loop и Do ... Loop Until
в блок-схемах;
• запись операторов цикла Do While ... Loop и Do ... Loop Until
в программах;

• работу операторов цикла Do While ... Loop и Do ... Loop Until.

4 37
Разработать:
• алгоритм решения поставленной задачи в соответствии с вари-
антом;

• интерфейс программы;
• программу решения задачи;

• тестовые варианты (число тестов равно числу ветвей вычисли­


тельного процесса) для проверки правильности функциониро­
вания программы.

Работа в nаборатории

Для успешного получения зачета по лабораторной работе необ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект долж:ен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;
• вариант задачи.
3. Заставка к проекту выполняется студентами 1-й подгруппы
с использованием программного кода, который реализует задание
фонового рисунка (см. приложение, заставка № 3), студентами
2-й подгруппъt с использованием программного кода, который ре­
ализует эффект повернутой надписи (см. приложение 2, заставка
№ 9).
4. Главную форму разрабатываемого приложения студенты 1-й
и 2 -й подгрупп программируют с использованием обычной формы.
5. В разработанном проекте применить методы проверки кор­
ректности ввода данных.

6. Обе подгруппы при окончательной компоновке проекта со­


здают иконку с собственными инициалами и демонстрируют пре­
подавателю .ехе-файл приложения.
7. Студент долж:ен уметь ответить на контрольные вопросы
по лабораторной работе, т.е. проявить свои знания по теорети­
ческой части курса.
8. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

438
9. Студент обязан соблюдать правила по технике безопасности
при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы, номер варианта.
3. Цель лабораторной работы.
4. Условие задачи.
5. Разработанный алгоритм.
6. Листинг программы.
7. Результаты выполнения программы.

Контрольные вопросы и задания

1. Какой алгоритм называется циклическим?


2. Какой вид имеет цикл с оператором Do While ... Loop или
оператором Do .. . Loop Until в блок-схемах?
3. Как записывается цикл с оператором Do While ... Loop или
оператором Do .. . Loop Until в программах?
4. Как работают циклы с оператором Do While ... Loop, Do .. .
Loop Until?

Варианты к лабораторной работе


«Табулирование функции с использованием циклов
с неизвестным количеством повторений.
Использовать цикл Do While ... Loop»
(порядковый номер студента по журналу соответствует
его номеру варианта)

Таблица42
Варианты заданий

Номер
Задача
вариа~-rта

1 Вычислить значения у, соответствующие каждому значению


х (xn < х < xk, шаг изменениях равен dx) по формуле

у= ~з x2+'R[;
~la - x21In(a+x)
. . Вычислить сумму, произведение и ко-
личество ЗI-Iачений у. Ко~-rтролыrый расчет провести при
а = 2,17; Х 11 = -1,5; Xk= 0,5; dx = 0,2

439
Продолжение табл. 42

Н омер
Задача
варианта

2 Вычислить значения z, соответствующие каждому значению


х (xn < х ~ xk, шаг изменениях равен dx) по формуле
~хз +ах
z= ~ . Определить средиее арифметическое вычи-
ln а2 +Гх
сленных z. Контрольный расчет провести при а = 5,27; xn = 1;
xk = 10; dx = 1

3 Вычислить значения t, соответствующие каждому зиачению


х (х11 < х < xk, шаг измеиения х равен dx) по формуле
згl
t= 1a- bvx
I . Определить F = П
t
L . Контрольный расч:ет про-
Ьln а 2 +х t
1
вести при а = 3,5; Ь = 6,8; xn = - 3; xk = 3; dx = 0,5

4 Вычислить значения t, соответствующие каждому зиачению


х (х11 < х < xk, шаг измеиения х равен dx) по формуле
~
t= . Вычислить сумму положительных зна-
а+хlg(а+х)
чений t, произведение отрицательиых t, количество t . Кои ­
трольный расчет провести при а = 1,23; xn = - 0,5; xk = 0,5;
dx = 0,1

5 Вычислить значения z, соответствующие каждому заачению


х (х11 < х < xk, шаг изменениях равен dx) по формуле

(ах)2зг--:t
z= v~
( . Определить F = П z + 2, z. Контрольный
aln(a + Х 2 ) z<a z~a
расчет провести при а = 2,62; х 11 = -3; xk = 3; dx = 0,6

6 Вычислить значения t, соответствующие каждому значению


х (xn
< х < xk, шаг измеиения х равен dx) по формуле
а+& u
t= г . Вычислить сумму значеиии t > а, произве-
v а+ ln(a + х)
дение всех зиачений t, количество отрицательных
t.
Контрольный расчет провести при а = 3,72; xn = 1; xk = 3;
dx = 0,2

440
Продолжение табл. 42

Н омер
Задача
варианта

7 Определить значения t, соответствующие каждому значению


х (xn < х < xk, шаг измеиения х равен dx) по формуле

t = (а +Ь) 2 ~ ln(a +x). Вычислить количество отрица­


тельных зиачений х. Найти мииимальиое зиачение среди
вычисленных значений t. Контрольный расчет провести при
а= 6,13; Ь = 3,42; xn = -2; xk = 3; dx = 0,5
8 Определить значения у, соответствующие каждому значению
х (xn < х < xk, шаг изменениях равен dx) по формуле
a 2 +xv;
у= г зг. Найти максимальиое зиачеиие у и среднее зиа -
-vа + v х
чение среди положительиых элементов х. Контрольиый
расчет провести при а = 2,89; х 11 = - 50; xk = 50; dx = 1О
9 Вычислить значения z, соответствующие каждому зиачению
х (х11 ~ х ~ xk, шаг изменениях равен dx) по формуле
ах
z = af . Опр еделить разницу между минимальным
1 1n 3 (а+х)
и максималь ным значениями z. Контрольный расчет про -
вести при а= 2,94; х 11 = 1,5; xk = 5,5; dx = 0,4
10 Найти значения z, соответствующие каждому значению
х (xn ~ х ~ xk, шаг измеиения х равен dx) по формуле
~(а 2 - 2аЬ+х)
z= . Опр еделить минимальное значение среди
(а + Ь) 2 + ех
зиачений z <О , максимальное среди z > О и количество вы ­
численных z. Контрольный расчет провести при а = 4,32;
Ь = 8,13; х 11 = - 3; xk = 4; dx = 0,7

11 Вычислить значения z, кото ры е соответствуют каждому зна ­

чению х (х = 1, dx = 0,5), по формуле z = lnx~-;з+i


~зх . Считать
z до тех пор, пока подкоре1пrое выражеиие больше или равио
0,02. Определить k - количество вычисленных z
12 Вычислить значения у, соответствующие каждому зиачению
х (х11 < х
< xk, шаг изменениях равен dx) по формуле
lnxtg-x/;
у= г-;; . Вычислить сумму, произведеиие и количество
-ух2
зиачений у. Коитрольиый расчет провести при xn = 1; xk = 10;
dx = 0,5

44 1
Продолжение табл. 42

Н омер
Задача
варианта

13 Вычислить значения z, соответствующие каждому значению


х (xn < х ~ xk, шаг изменениях равен dx) по формуле
~5х 3 +х
z= г--;; . Определить сумму, количество и среднее
tgx-va 2 + sin 2 х
арифметическое вычисленных z. Контрольный расчет про­
вести при xn = 1; xk = 10; dx = 1
14 Вычислить значения t, соответствующие каждому зиачению
х (х11 < х < xk, шаг изменениях равен dx) по формуле

la 3 -ьrxl L, t
t = la + xlх 2
2 . Определить F = П t . Контрольный расчет про-

вести при а = 4,5; Ь = 4,2; xn = 1; xk = 10; dx = 1


15 Вычислить значения t, соответствующие каждому зиачению
х (х11 < х < xk, шаг изменениях равен dx) по формуле
sinx 2 + 3,2 В v
t= . ычислить сумму положительных значении t,
а+хеа+ х
произведение отрицательных t, количество t. Контрольный
расчет провести при а= 5,11; х 11 = -5; xk = 5; dx = 0,5
16 Вычислить значения z, соответствующие каждому значению
х (xn < х < xk, шаг изменениях равен dx) по формуле
z = 5х 2 + v;;, ·~as + 3,8· 106. Определить F = П z + L,z. Кон­
трольиый расчет провести при а = 3,94; xn = -1; xk = 7;
dx = 0,8
17 Вычислить значения t, соотв етствующие каждому значению
х (xn < х < xk, шаг измеиения х равен dx) по формуле
t = .];;, + е<а+х) sin xS. Вычислить сумму значений t при t > а,
произведеиие всех значеиий t, количество отрицательиых t.
Контрольный расчет провести при а = 1,02; х11 = 1; xk = 5;
dx = 0,2
18 О пределить значеиия t, соответствующие каждому значению
х (х11 < х < xk, шаг измеиения х равен dx) по формуле
t=
меньше
(а + Ь + х )2
1.
JE.. Вычислить количество значений
Найти минимальное значе~-rие среди вычислен~-rых
t

значений t . Контрольный расчет провести при


а= 2,43; Ь = 3,15; xn = - 5; xk = 3; dx = 0,5

442
Продолжение табл. 42

Н омер
Задача
варианта

19 Определить значения у, соответствующие каждому значению


х (xn ~ х ~ xk, шаг изменениях равен dx) по формуле
у = 'RJ as + х + sin 2 х ·1·1 o-s. Найти максимальиое зиа чение у
и среднее значение среди пол ожител ьных элеме~-rтов х. Кон ­
трольный расчет провести при а = 2,43; xn = - 50; xk = 50;
dx = 10
20 Вычислить значения z, соответствующие каждому зиачению
< х < xk, шаг изменениях равен dx) по формуле
х (х11
z = ctgx+Й +е 2 х 2 . Определить разницу между мини­
мальиым и максимальиым зиачеииями z. Коитрольиый
расчет провести при а = 5,31; х11 = 1,5; xk = 5,5; dx = 0,4
21 Найти зиачеиия z, соответствующие каждому значению
х (х11 < х < xk, шаг измеиения х равен dx) по формуле
5е5х Г
z = О, 312 + · l · -v а. Определить максимальное значеиие
3 03
среди z> О и количество вычисленных z. Контрольный
расчет провести при а= 3,32; х 11 = -5; xk = 10; dx = 1

22 Вычислить значения z, которые соответствуют каждому зна­

чению х (х = 1, dx = 1), по формуле z = sinx / 1·106 +.Jх 2 +5.


Считать z до тех пор, пока подкоренное выражение больше
или равно 0,05. Определить k - количество вычислен~-rых z,
сумму вычисленных z, минимальное среди вычисленных z
23 Вычислить значения z, которые соответствуют каждому зна ­

чению х (х = 1, dx = 0,1), по формуле z = 5f;+ ~·


~~
Считать z до тех пор, пока подкоренное выражение больше
или равно 0,1 . Определить k - количество вычисленных z,
разность между максимальиым и мииимальиым значеиием z
24 Вычислить значения z, которые соответствуют каждому зна­

чению х (х = 1, dx = 0,5), по формуле z = tgx/; + I 3 I х


\ х +cosx
Считать z до тех пор, пока подкоренное выражение больше
или равно 0,03. Определить k - количество вычисленных z,
произведеиие положительных z

443
Продолжение табл. 42

Н омер
Задача
варианта

25 Вычислить значения z, кото ры е соответствуют каждому зна ­


хз
чению х (х = 1, dx = 0,3), по формуле z = ехх5 +\ .
xs1nx+x 5
считатьz до тех пор, пока подкорен~-rое выражение больше
или равно 0,03. Определить k - количество вычисленаых z,
произведение максимального и минимального значений z

26 Вычислить значения z, которые соответствуют каждому зна­


чению х (х = 0,5, dx = 0,5), по формуле
хЗ + х х
z= +\ . . Считать z до тех по р, пока подко -
х+2 х5 +s1nx 5
ренное выражение больше или равно 0,01 . Определить k -
количество вычисленных z, минимальное зиачеиие среди

зиачений z<О

27 Вычислить значения z, которые соответствуют каждому зна­

чению х (х = 0,5, dx = 0,01), по формуле z = х -х +~


5 2

. 5. х+2 1tX
Slll - -
12
Считать z до тех пор, пока подкоренное вы ражение больше
или равно 0,05. Определить k - количество вычислен~-rых z,
среднее арифметическое вычисленных z

28 Вычислить значения z, которые соответствуют каждому зна­

чению х (х = 1, dx = 0,5), по формуле z = x 5 -x 2 J+. Счи-


V~
татьz до тех пор, пока подкорен~-rое выражение больше или
равно 0,01. Определить k - количество вычисленных z, вы­
числить П z + 2,z

29 Вычислить значения z, кото ры е соответствуют каждому зна ­

чению х ( х = 0,5, dx = 0,05), по формуле z= ln х 2 ~ х; 5 . Счи­


тать z до тех пор, пока подкоренное выражение больше или
равно 0,05. Определить k - количество вычислеи~-rых z, вы­
числить П z + I z
z<O z >O

444
Окончание табл. 42

Н омер
Задача
варианта

30 Вычислить значения z, кото ры е соответствуют каждому зна -

Sx 2
чению х (х = 1, dx = 0,5), по формуле z = соs(Зх)\ .
З+х 3 ·2х
Считать z до тех пор, пока подкоренное вы ражение больше
или равно 0,05. Определить k - количество вычисленаых z,
вычислить сумму положительных значений z, среднее ариф-
v
метическое отрицательаых значеаии

Варианты к лабораторной работе


«Табулирование функции с использованием циклов
с неизвестным количеством повторений.
Использовать цикл Do ... Loop Until»
(порядковый номер студента по журналу соответствует
его номеру варианта)

Таблица43

Варианты заданий

Н омер
Задача
вар ианта

1 Даао: q = 3; dq = -0,2. F вычислять по формуле


1
F = ~1 + 0,5q- --. Считать до тех пор, пока подкоренаое
q+1
выражение меньше О . Опр еделить k- количество вычи-
слеаных F. Вывести аа экран q, F, k

2 Протабулировать функцию
F = a - sin(x)+Зtg(x),xn <x<xk,dx. Вычислить сумму,
произведение и количество значений F

3 Дано : а = 1,2; х = 1; dx = 0,5. Вычислять Z по формуле


а + ~ах 3 +х
Z= . Считать Z до тех пор , пока подкоренное
sinx+З
выражение больше 250. Определить k- количество вычи-
сле~-rных Z. Вывести I-Ia экраи х, Z, k

445
Продолжение табл. 43
Н омер
Задача
вар ианта

4 Протабулировать фуикцию
F =а+ tg 2x+5cosx, Xn ~ х ~ xk, dx. Найти мииимальпое
среди вычисленных значений F, количество вычисленных F

5 Дано : х = 1, dx = - 0,5. Вычислять Z по формуле


Z = q (cos (Зx)+sin (5х)), где q = ех-1 +х . Считать до тех пор,
пока q > 400. Определить k - количество вычисленных Z.
Вывести иа экраи х, q, Z, k

6 Протабулировать фуикцию
F =а + 2ctgx - cos 2 х, xn ~ х ~ xk, dx. Определить разницу
между максимальным и мииимальиым зиачениями F

7 Вычислить квадратный кор еиь из положительного числа А,


используя рекуррентиую формулу х1н 1 = (xk +А/ xk ) / 2 для
k = О , 1, 2 . ".Определить количество итераций (шагов
цикла); вычисления прекратить при l х1н 1 -х1г l < Е
(х 0 =1; А = 1,8; Е = 10-4 )

8 В ычислить корень степени in из числа А, используя рекур­


ренп-rую формулу Х1н 1 =((m-1)Xk + A/ Хfгп- 1 )/т для
k = О, 1, 2, .... Определить количество итераций; вычисления
прекратить при IИk+i l < Е (m = 3, х 0 = 1; А= - 1,2; Е = 10- 4 )

9 В ычислить значение функции синус для некоторого числа


QQ

х Е [О; п/ 4] по формуле у = L, uk, используя


k=1
uk+t = (- (2k(2k + 1)) для k = 1, 2" ... Вычисления пре-
ukx 2 ) /
кратить при lнk+i l < Е, определить количество итераций. На­
чальные значения параметров равных = п/7; u1 = х. Точ­
иость Е ПрИI'IЯТЬ раВ!'IОЙ 10- 4

10 Вычислить действительные ко рии уравиения x-sinx = 0,25,


используя рекуррентную формулу xk = sin(xk_1) + 0,25
(k = 1, 2, ". ); х 0 = 1, 2; Е = 1О-4. Опр еделить количество ите­
раций; вычисления прекратить при lxk+l - xk l < Е

446
Продолжение табл. 43
Н омер
Задача
варианта

11 Вычислить отрицательный кореаь ураваения х 3 - х +О, 5 = О,


используя рекуррентную формулу xk+i = ~xk - 0,5
(k =О, 1, 2, ...); х 0 =1, 3; е = 10-4 . Определить количество ите­
раций, вычисления прекратить при lxk+i - xkl < е

12 00

Вычислить заачеаия функции у= chx = I. Uk, используя


k=1
х2
рекурре~-rтную формулу U1l+l = (2k -
l) k Uk, (k =1, 2, 3, ".).
2
Вычисления прекратить при I Иk+il < е, определить коли­
чество итераций

13 Протабулировать фуакцию
F = a+3cosx+sin(x/2), х 11 ~ х ~ xk, dx. Определить сумму
и произведение вычисленных значений F

14 Вычислить значение Z, соответствующее каждому значению


х (хп = 1, dx = 0,5, а = 20 - задает пользователь), по формуле
cos2 x + l-3,5tgx 2 1

Z = ln х + г . Считать Z до тех пор, пока Z


va +3х 2

не станет > 3. Определить k - количество вычисленных Z.


Вывести на экран х, z, k

15 Вычислить значение у, соответствующее каждому значению


х (х 11 = 1, dx = 0,3, а = 50 - задает пользователь), по формуле
tgx+cosx, lx-0,21~а
у=
{ е-х 2 + х 2
Iх - О 2I> а , найти максимальное и мини-
' '
мальное значения у

16 Вычислить значение у, соответствующее каждому значению


х (х 11 = 1, dx = 0,5, а = 3 - задает пользователь), по формуле
tgx· 2cosx, lxl ~а
у=
{ ctg х 2 +х,
2
I I ,аайти максимальное значеаие у,
х >а

средаее арифметическое положител ьных заачений у, опре­


делить k- количество вычисленных у

447
Продолжение табл. 42
Н омер
Задача
вар ианта

17 Вычислить значение у, соответствующее каждому значению


2x 2tgx 2
х (х 11 < х < xk, dx), по формуле у= {
~а lxl
l ,I . Найти
Зсоsх, х >а
среднее арифметическое положительных значений у и коли­
чество отрицательных значений у

18 Вычислить значение у, соответствующее каждому значению

{
e2x ~,lxl <a
х (xn< х < xk, dx), по формуле у= Г ,
vа(Зх + 5х ),2
lxl>а
найти сумму положительных значений у и количество вы­
числеаных заачеаий у

19 Дано : х =5; dx = 0,5. Вычислять Z по формуле


Z = у+~+ ifY + ifY, где у = ео. 2 х. Считать Z до тех пор, пока
у > 125. Определить k - количество вычисленных Z. Вы­
вести на экран х, у, Z, k

20 Даао: х = 2; dx = -0,1. Z вычислять по формуле


1 +у2
Z= , где у = е 0 • 2 х. Считать Z до тех пор, пока
1n(2x 5 - 0,Зх 2 )
выражение под знаком логарифма меньше О. Найти k- ко­
личество вычислениых Z. Вывести на экран х, Z, k

21 Вычислить значение у, соответствующее каждому значению


, еЗх Ех, l2xl ~а
х (х11 < х < xk, dx), по формуле: у = · -Га+ sinx + 2х 2 , l2xl>а.
3tgx,O~a<3

Найти сумму и количество вычислеаных зиачений у

22 Вычислить значение у, соответствующее каждому значению


,3х 2 +-Га, l2+xl ~а
х (х 11 < х < xk, dx), по формуле у=· 2х 2 --Га, 12-xl >а. Найти
3х + 5х3, О ~ а <5
максимальное значение у и количество вычисленных зна­

чений у

448
Окончание табл. 42
Н омер
Задача
варианта

23 Даао: х= 2; dx = -0,2. Z вычислять по формуле


1
Z= . Считать Z до тех пор, пока выражеtrие под
1n(x 2 - 0, 5х)
знаком логарифма меньше О. Найти k - количество вычи­
сленных Z. Выв ести на экран х, Z, k

24 П ротабулировать функцию F = а+ sin 2 х + ctg х, х ( xn < х < xk,


dx). Определить среднее арифметическое вычисленных зна­
чений F, количество вычисленаых F

25 1
Даао: а= 5; da = -0,5. Z вычислять по формуле Z = q + --,
q +1
где q = а 2 - а. Считать Z до тех пор, пока . Определить
k - количество вычисленаых Z. Вывести на экран а, q, Z, k

26 Протабулировать фуакцию F =а + tgx + sinx, х (xn < х < xk,


dx). Определить сумму и произведение вычисленных зна­
чений F, количество вычисленаых F

27 Вычислить зi-raчei-rиe Z, соответствующее каждому значе~-rию


х (xn = 1, dx = 0,5, а = 70 - задает пользователь), по формуле
а + .J5x3 + ахз
Z= хз + . Считать Z до тех пор, пока z I-Ie ста~-rет
3
меньше 1Е - 2. Определить k - количество вычисленных Z.
Вывести аа экраа х, z, k

28 Протабулировать фуакцию F = a+arctgx +cosx, х (х 11 < х <


< xk, dx). Определить разницу между максимальным и ми ­
нимальным значениями F, количество вычисленных F

29 Дано: х = 5; dx = 1. Вычислять Z по формуле Z = у+~ +'R[Y,


где у = еО,2х . Считать Z до тех пор, пока у ~ 25. Определить
k- количество вычисленаых Z. Вывести на экран х, у, z, k

30 Протабулировать функцию F = a+3cosx+sin(x/2), х (х 11 <


< х < xk, dx) . Определить минимальное значение среди зна­
чений F < О, максимальное среди F > О , количество вычи ­
сленных F

449
ЛАБОРАТОРНАЯ РАБОТА №
9.
ОРГАНИЗАЦИЯ МНОГОДОКУМЕНТНОГО ИНТЕРФЕЙСА

Цели работы: овладение практическими навыками разработки


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

Пример выполнения работы

Условие: разработать проект, содержащий несколько форм.


Первая форма является заставкой к приложению. Родителъская
МDI-форма содер:>кит меню, с помощью которого пользователь
может создавать и упорядочивать дочерние формы. Н еобходимо
создать экз емпляр дочерней формы, содержащий элемент управ ­
ления PictureBox, отображающий картинку.
И так, для создания многодокументн ой формы создается новая
форма Form1 и ее свойство IsMdiContainer устанавливается в зна­
чение True. Затем создается класс дочерней формы, которая будет
добавлена на исходную форму. Для этого надо щелкнуть по опции
Проект/Добавить форму Windows. Для добавления дочерней
формы в родительскую форму мы должны создать новый объект
дочерней формы, указать в его свойстве MdiParent родительскую
форму и вызвать метод Show.
Следующий код позволяет отобразить подчиненную форму
внутри родительской:

PuЬlic Class Forml


Private WithEve nts child f orml As Form2
Pr ivat e Wi t hEvents childform2 As For m2
Private SuЬ Forml_Load(ByVal sender As System.Ob-
ject, ByVal е As System.EventArgs) HandlesMyBase.Load
Chi l dForml = New Fo r m2 ()
Chi l d Forml. MdiPare nt = Ме
Chi l dForml . Show ()
Chi l d Form2 = New Fo rm2 ()
Chi l dForm2 .Mdi Par ent = Ме
Chi l d Form2. Show ()
End SuЬ
End Class

450
Для создания элемента меню, в котором будут перечислены
v v
все по дчинен ны е окна, относящиеся к даннои родительскои

форме, необходимо добавить н а форму Forrn1 новый эле­


мент управления MenuStrip1 . Создадим пункт меню Windows
и установим его свойство MdiWindowListltern в положение
WindowsToolStripMenultern. Данно е свойство указ ывает, что
с п исок по дчинен ны х окон автоматически появляется в виде

пунктов меню под меню Windows (рис. 183).


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

1 File Windows
Nt=:'"" C~1il1jl
-·· 1

EYit'
.. ""
" C~1il1j2

C~1iklN

Windows
- 1
Т~1е '•/ertical

Т~1е Horizoпt.:il

Casc.:ide

1 Fotт112

~ .-,
.:::. f 1_1
·п1·~·
11.:::.

Рис. 183. Созданное меню

Родительские формы MDI имеют метод LayoutMdi (Упорядо­


чить окна MDI), который автоматически размещает подчиненные
диалогов ы е окна каскадом в горизонталь но м или вертикальном

расположении.

В результате при ложе ни е при мет вид, пр едставле нный


на рис. 184.

451
Рис. 184. Рас положе ни е окон в го р изонтал ьн о м в и де

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


следующим образом.

Листинг программы

PuЬlic Class Forml


' Объявление переменных chi l dforml и chi l dform2
Pr ivat e Wi thEvents chi l dforml As Form2
Pr ivat e Wi thEvents chi l dform2 As Form2
Private SuЬ ChildlToolStripMenuitem_Click(ByVal
sender As System.Object , ByVal е As System.EventArgs)
Handles ChildlToolStripMenuitem.Click
ch i ldf orml = New Form2 ()
ch i ldf orml .MdiPare nt = Ме
ch i ldf orml . Show()
End SuЬ

452
Private SuЬ Child2ToolStripMenuitem_Click(ByVal
sender As System .Object, ByVal е As System .EventArgs)
Handles Child2ToolStripMenuitem.Click
chi l dform2 = New Fo r m2 ()
chi l dform2 .Mdi Par ent = Ме
ch i ldf orm2 . Show()
End SuЬ

Private SuЬ ChildNToolStripMenuitem_Click(ByVal


sender As System .Object, ByVal е As System .EventArgs)
Handles Child.NToolStripMenuitem . Click
newch i ldf orm ()
End SuЬ

Private SuЬ newchildform ()


Di m f AsNew Form2
f . MdiParent = Ме
f . Show ()
End SuЬ

Private SuЬ TheVerticalToolStripMenuitem_Click(ByVal


sender As System .Object, ByVal е As System .EventArgs)
Handles TheVerticalToolStripMenuitem . Click
Me . Layou t Mdi(Mdi Layou t . Ti leVer tical)
End SuЬ

Private SuЬ TheHorizontalToolStripMenuitem_


Click(ByVal sender As System . Object , ByVal е As System .
EventArgs) Handles TheHorizontalToolStripMenuitem . Click
Me . Layou t Mdi(Mdi Layou t . Ti leHor i zonta l)
End SuЬ

Private SuЬ CascadeToolStripMenuitem_Click(ByVal


sender As System .Object, ByVal е As System .EventArgs)
Handles CascadeToolStripMenuitem. Click
Me . LayoutMdi (Mdi Layout . Cascade)
End SuЬ

Private SuЬ ExitToolStripMenuitem_Click(ByVal sender


As System . Object, ByVal е As System .EventArgs) Handles
ExitToolStripMenuitem . Click
Applicat i on . Exi t()
End SuЬ
End Class

453
Impor ts System .I O
PuЬlic Class Form2
Private SuЬ Form2_Load(ByVal sender As System.Ob-
ject, ByVal е As System.EventArgs) HandlesMyBase.Load
Pi ctu r eBox l . Image = Image . FromFi le(Direct o r y .
Get Cu r rent Di r ect ory & " \image \3 . j pg")
End SuЬ
End Class

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


- - --- --- ----------------------- -- -- --~-- -- ---- -
fll МDl-прнложе нне GJLQ]rg)
File Windows
- ---- - - - - - - ---~--

lil Fo1·1112 GJ[g][g)

Рис. 185. Внешний вид формы при выводе изображений

Задания для самостоятельной подготовки

Изучить:
• основные свойства элемента управления PictureBox;
• наиболее часто используемые свойства MD 1-форм.
Разработать:
• интерфейс программы;
• программу решения задачи;

• тестовый вариант исходных данных.

454
Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект долж:ен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи.
3. Заставка к проекту выполняется студентами 1-й подгруппы
с использованием программного кода, который реализует появ ­
ление нестандартной формы (см. приложение 2, заставка No 7), сту­
дентами 2-й подгруппы с использованием программного кода, ко ­
торый реализует использование элемента управления ProgressBar
(см. приложение 2, заставка № 4).
4. МDI-формы разрабатываемого прило)кения студенты 1-й
и 2-й подгрупп программируют с использованием обычных форм.
5. Обе подгруппы при окончательной компоновке проекта со ­
здают иконку с собственными инициалами и демонстрируют пре­
подавателю .ехе-файл приложения.
6. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе, т.е. проявить свои знания по теорети ­
ческой части курса.
7. Студент долж:ен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро ­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

8. Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы.
3. Цель лабораторной работы.
4. Условие задачи.
5. Листинг программы.
6. Результат выполнения программы.

455
Контрольные вопросы и задания

1. Какие три типа интерфейса используются для создания


Wiпdоws-приложений при помощи VB?
2. Поясните принцип создания МDI-приложений.
3. Объясните принцип работы разработанного приложения.

ЛАБОРАТОРНАЯ РАБОТА № 10.


ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ИТЕРАТИВНЫХ
ЦИКЛИЧЕСКИХ СТРУКТУР

Цели работы: овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с по­

строением таблиц; получение дальнейших навыков по отладке и те­


стированию программ с использованием итеративных циклов; вы ­

работка при решении поставленных задач таких профессионально


значимых качеств, как самостоятельность, ответственность, точ­

ность, творческая инициатива.

Пример выполнения работы

Условие: разработать проект, содер:>кащий несколько форм.


Первая форма является заставкой к прилож:ению. На второй форме
реализовать решение задачи.

Задача 1. Среди чисел 1, 1+1-, 1+_!_+1-, ... найти первое число,


2 2 3
большее вводимого значения переменной а.
Комментарий. Алгоритм решения данной задачи относится
к алгоритмам вычисления членов бесконечных последовательно­
стей. Очередной член бесконечной последовательности обозначим
как Ь. Его номер, который совпадает со значением знаменателя
дроби, добавляемой к предыдущему члену для получения значения
очередного члена последовательности, обозначим как n . Тогда ите ­
рационная формула вычисления очередного члена последователь­
ности примет вид

1
ьп = ьп-1 +-.
п

Разработка алгоритма решения задачи представлена на рис. 186.


Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System .
Object, ByVal е As System . EventArgs) Handles Buttonl .
Click

456
Начало

Ь = 1

n= 1

Нет Да
Ь<а

11 = 11 +1

Ь = Ь + 1/n
b,n

Конец

Рис. 186. Алгоритм решения задачи

Dim а , Ь As DouЫe
Dim n As I nteger
а - Va l (TextBoxl . Text)
ь = 1
n = 1
Do Wh ile Ь <= а
n - n + 1
Ь = Ь + 1 / n
Loop
Text Box2 . Text - St r(b)
T ex t BoxЗ . Tex t - St r(n)
End SuЬ
End Class

457
На рис. 187 представлен результат вычислений по итераци­
онной формуле.

111 Проект GJ(QJ[RJ


Введите значение а= 5_
.._l ___.

Ок

Первое чиело, большее введенноrо значениR "'

1 5.00206827268017

Количество итераций= l.._8_3_ __,

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

Задача 2. Вычислить с точностью е = 10- 4 корень уравнения ех +


+ х = О, воспользовавшись итерационной формулой x i+l = - exi ,
при i =О, 1, 2, ... ; х0 =О. Закончить итеративный процесс, как только
lxi+1 - x i 1станет меньше е = 1Q-4.
Комментарий. Для решения данной задачи необходимо из оче­
редного вычисленного корня x i +i вычитать предыдущий корень x i .
При каждом повторении цикла перед вычислением очередного
корня х сохраняем в переменной а текущее значение х (оно стано­
вится предыдущим). Цикл заканчивается, когда разность между х
(т.е. x i+t ) и а (т.е. x i ) станет меньшее= 10-4 . В программе обозначим
Е как е1.
Разработка алгоритма решения задачи представлена на рис. 188.
Листинг программы
PuЬlic Class Forml
Private SuЬ Buttonl_Click(ByVal sender As System.Ob-
ject, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim х, а, el , xl As Dou Ы e
х = о
xl - - Math . Exp( x )
el = 0 . 000 1
Do
а = х

х =
- Ma t h . Exp(a)
Lo op Until Math . Ab s (х - а) < el

458
Начало

х= О
е1 = 1е - 4
х 1 = -Ехр ( х)

а = х

х = -Ехр(а)

Нет Да

х, х1

(~~~~К_о_н_е_ц~~---)
Рис. 188. Алгоритм разработанной программы

TextBox2 . Text - Str(x)


Tex tBoxЗ . Text - Str(x l )
End SuЬ
End Class

Результат нахождения корня уравнения с заданной точностью


представлен на рис. 189.

~ Проект GJ[QJ~

Корень уравнения, вычисленный с зааанной точностью =

1·0.567119040057215

Корень уравнения, вычисленный напрямую =


l·1

Ок ~
Рис. 189. Результаты работы программы

459
Задача 3. Задана возрастающая последовательность

х х2 х3
1, , , , ... (х > 10).
3 32 33
Тр ебуется вычислять в се чле ны по следовательности до тех
по р, по ка з начение оче редн ого члена н е пр евы сит н екоторое число

d (3 < d < 1000).


Комментарий. Для вычисления любого члена последователь­
ности можно воспользо ваться формулой

xn
ап = 3п'
где п = О, 1, 2 ... - номер члена последовательности.
Разработка алгоритма решения задачи представлена на рис. 190.

Начало

Нет Да

Нет Да

n=O

xn
a= -
3n

n, а

11 = 11 + 1

Нет Да

Коиец

Рис. 190. Алгоритм решения задачи

460
В приведенном алгоритме имеется проверка правильности вве­
денных исходных данных х и d. Предусмотрена так)ке ~защита»
от зацикливания (проверка условия n < 100, т. е. количество ите­
раций не превысит 100).

Листинг программы

Impor ts System . Math


PuЬlic Class Forml
Private SuЬ Buttonl_Click_l(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim х , d , а As DouЫe
Dim n As I nt eger
Do
х = Val (Text Boxl . Text)

Loop Unt i l х >= 10


Do
d = Val (Text Box2 . Text)
Loop Unti l (d > 3) And (d < 1000)
n - О
Do
а = (х л n) / (3 л n)
Li stBoxl . Items .Add (" " & n & " " & а)
n = n + 1
Loop Unti l (а >= d) And (n < 100)
End SuЬ
End Class

Результаты вычисления членов последовательности представ­


лены на рис. 191.

!;1 Прнмер GJ(Q](8]


о 1 Веедите эначение x>=lO 115 1

1 5 Введите значение d
2 25 140 1

з 125
1- Ok -1

Рис. 191. Результаты программы

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

х2 хЗ xn
ехр(х) = 1+х+ -+-+ ... +-+ ....
2! 3! п!

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


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

xn
- >Е.
п!

Рассматривая приведенную выше формулу, можно заметить, что


соседние члены ряда (обозначим их как Сп и Сп+ 1 ) связаны между
собой соотношением

С =С х
п+1. п п+1'

где п =О, 1, 2, ... , причем С0 = 1.


Используя это соотношение, можно последовательно вычи­
слить все члены ряда. При этом не возникает необходимости
в выполнении в явном виде операций вычисления факториала
и возведения в степень. Рассмотренное свойство степенных рядов
позволяет организовывать чрезвычайно простые и очень эффек­
тивные (в смысле оптимизации скорости вычислений) алгоритмы
вычисления их частичных сумм.

Такие формулы, позволяющие вычислять последующие зна­


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

Разработка алгоритма решения задачи представлена на рис. 192.

Листинг программы

Impo r ts System . Ma th
PuЬlic Class Forml
Private SuЬ Buttonl_Click_l(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim х, s , cn, eps, у As DouЫe
Dim n As Intege r

462
Начало

x,eps

n = 1; s = 1; cn = х

Нет Да

s = s + cn

n=n + 1
S, ll

cn = cn * х / n
Конец

Рис. 192. Алгоритм решения задачи

х =
Va l( Tex tBoxl . Text)
eps - Val(TextBox2 . Text)
s = 1
n = 1
cn = х
Do Wh ile (Abs ( cn) > eps)
s = s + cn
n = n + 1
cn = cn * х / n
Loop
у = Ехр (х)
ListBoxl . Items . Add( " Значение функции ,
вычисленное с заданной точностью : " & s)
ListBoxl . Items . Add (" Значение функции у,
вычисленное через встроенную функцию : " & у)
ListBoxl . Items . Add (" Количество членов ряда :"
& n)
End SuЬ
End Class

463
Результаты вычисления функции ехр( х) с заданной точностью
представлены на рис. 193.

~ Прнме р ~[QJ@
Зиэ.чеюrе фунхlООf, JЪIЧИC:JreJO(Oe с sадаииой точиостыо: 1,64872116815476
Зиэ.чеюrе фунхцни у, n>IЧИC:JreJO(Oe череs J3С'Iроеииую фунх10«0: 1,64872127070013
КоЛН'lеСТl>О 'lЛеИОJ3 ряцэ.:8

Введl-fТе значение х: ~1О_


.5 _ _~
В ведl-fТе точносrь вычислений: 10.000001

Ok

Рис. 193. Полу ч енные результаты

В разработанную программу добавлен оператор у= Ехр (х) для


того, чтобы сравнить полученные результаты. Из ответов, пред­
ставленных на рис. 193, видно, что значение функции s вычислено
более точно, чем значение функции у, полученное ~классическим»
способом через оператор у= Ехр (х).

Задача 5. Вычислить сумму членов знакопеременной убы­


вающей последовательности с заданной точностью i:::

х -1 (х-1) 2 (х-1)3 (x-1)n+1


1! - 2! + 3! - ... +(- 1 )п (п+1)!

Комментарий. Вычисление с заданной точностью i:: означает, что


суммирование членов ряда надо продолжать до тех пор, пока оче­

редной вычисленный член ряда не станет меньше по абсолютной


величине числа i::.
Отметим, что во многих задачах непосредственный подсчет оче ­
редного члена связан с вычислительными трудностями. В этом
случае целесообразно использовать рекуррентную формулу, ко ­
торая позволяет вычислить значение переменной на следующем
шаге, используя ее значение на текущем шаге: a n+i = a n · q. Выра­
жение для q можно получить, разделив член an+i на член а 0 •

Приведем вывод рекуррентной формулы для заданного в задаче


ряда. Формула n-го члена такова:
а -(-1)п (х-1)п+1
п - (п+1)! '

464
тогда формула n + 1-го члена

а -(-1)п+1 (х-1)п+1+1 -(- 1)п+1_


(х_1_)п_+_2
n+i - (п+1+1)! - (п+2)!

Разделив an+i на an, получим выражение для q:


(-1)n+1 (x-1)n+2(n+ 1)! (х-1)
- - -
а (п+2)!(-1)п (х -1) п п+2

Таким образом, рекуррентная формула для данного ряда такова:

(х-1)
ап +1 = - ап .
п+2

Выбор начального значения номера члена ряда (n) для нашего


случая будет n = О, так как, подставив это значение в формулу п-го
члена ряда:

( х -1) п+ 1
а -(-1)п _ __
п- (п+1)! '

мы получим значение первого члена, равного х - 1, или а = х


- 1.
В алгоритме предусмотрено выполнение цикла не более 100 раз,
чтобы избежать возможного зацикливания.

Листинг программы

Impor ts System . Math


PuЬlic Class Forml
Private SuЬ Buttonl_Click_l(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl .
Click
Dim х , el , а , s As Si ngl e
Dim n As I nteger
х = Va l (TextBoxl . Text)

el ~ Val(TextBox2 . Text )
n - О
а = х - 1
s = о
Do
Li stBoxl .Items .Add( " " & n & " " & а)
s = s + а

465
а = -а * (х - 1) / (n + 1)
n = n + 1
Loop Until (Abs (а) < el Or n > 100)
Li stBox l . Items . Add( " Сумма = " & s)
End SuЬ
End Class

Результаты вычислений представлены на рис. 194.


- - - - - - - - - ---------- -

111 Прнмер GJ[QJ~


о -0,5 В ведите значение х: lo.5
1 -0,125
Ввод е1 10.000001
2 -0,02083333
3 -0,002604167
4 -0,0002604167
5 -2,170139Е-05 Ok
6 - 1,550099Е-06
Сумма = -0,6487212

Рис. 194. Результаты работы программы

Рекуррентную формулу для вычисления очередн ого значения


члена последовательности , приведен ную выше, можно вычислить

по-другому , исполь зу я его з нач е ни е на пр ед ыдущ е м шаге:

ап =an-1q.
Для этого случая вывод формулы будет следующий:

= (-1)п (
х 1) п+ 1
а ·
п (п + 1)! '

ап 1 = (-1)п-1 (х - 1)п-1+1 = (-1)п-1 (х- 1)п


- (п - 1+1)! п!

Тогда

(-1)n(x-1)n+1n! х -1
q= (n+1)!(- 1)n- 1 (x- 1)n = п+1
Таким образом, рекуррентная формула в этом случае:

х -1
ап = -ап -1 .
п +1

466
В отличие от предыдущей задачи, увеличивать n оператором
n=n+1 следует до, а не после нахождения очередного члена ряда.

Листинг программы

Impo r ts System . Ma th
PuЬlic Class Forml
Private SuЬ Buttonl_Click_l(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl .
Click
Dim х, el, а, s As Sing le
Dim n As Integer
х = Val(TextBoxl . Tex t)

e l = Val(TextBox2 . Text)
n - О

а = х - 1
s = о
Do Until (Abs (а) < e l Or n > 1 00)
ListBoxl .Items . Add( " " & n & " " & а)
s - s + а
n - n + 1
а - -а * (х 1) / (n + 1)
Loop
ListBoxl . I tems.Add(" Сумма - " & s)
End SuЬ
End Class

Результаты работы программы представлены на рис. 195.

111 Прнмер GJ[QJ~


о -0,5 Введите значение х: lo.5
1 -0,125
Ввод е1 10.000001
2 -0,02083333
з -0,002604167
4 -0,0002604167
5 -2,170139Е-05 Ok
6 - 1,550099Е-06
Cynmm = -0,6487212

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

467
Задача . Вычислить с точностью е = 10- 5 корень уравнения
f (х) = хз - 2х 2 + х - 3 =О, воспользовавшись итерационной фор­
мулой

/(х) .
xi+i = xi - /'(х), z =О, 1, 2, ... , х 0 = 2,2.

Комментарий. Проверим правильность решения подстановкой


найденного корня в уравнение. Вычислим прои з водную
f (х): f '(х) = 3х 2
- 4х +1.
Обозначим: х - текущее приближ:ение к корню; а - преды ­
дущее прибли)кение; f - значение функции f( х) для предыдущего
значения; р - з начение производной F' ( х) для предыдущего з на­
чения; i- номер итерации, совпадающий с номером текущего при­
бли)кения к корню уравнения; у - значение функции f(x) для най­
денного с заданной точностью корня уравнения.
Будем считать, что заданная точность е обеспечена, если модуль
разности между текущим и предыдущим значениями корня меньше

точности е, т.е. для нашего случая lx - а 1< е.


Листинг программы

I mpor t s Sys t em . Math


PuЬlic Class Forml
Priv ate SuЬ Buttonl_Click_l(ByVal sender As System.
Object , ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim х, el, а, f, р, у, i As Sing le
el = 0 . 0000 1
х = 2.2
l = о
Do
а - х

f - а
л
3 2 * а л
2 + а - 3
р - 3 * а
л
2 + 4 * а + 1
х - а f / р

i - i + 1
ListBoxl . I tems.Add(" " & i & " " & х)
Loop Un t i l (АЬs (х - а) < el)
ListBox l . I tems.Add( " И скомый корен ь = " & х)
у = х л 3 - 2 * х л 2 + х - 3
TextBox2 . Text = St r (y)
End SuЬ
End Class

468
Резу ль таты вычисления корня уравнения пр едставлены
на рис. 196.

~ Прнме р LJ~@
l 2, 1!130!12
2 2,18805!1
3 2,1843!13
4 2,181722
5 2,17!1777
6 2,17836
7 2,177327
8 2,176575
!1 2,176028
10 2, 17562!1
ll 2, 17533!1
12 2,175127 Ok
13 2, 174!173
14 2,17486
15 2,17477!1
16 2,17471!1
17 2,174676
18 2,174644
l!I 2,174621
20 2,174604
21 2,1745!12
22 2,174583
Ис:комый :корень= 2,174583

Значение Функции при подстановке


к о рня в ура вне ни е =

1 0.0001558726

Рис. 196. Результаты программы

Задания для самостоятельной подготовки

Изучить:
• возмож:ности языка программирования Microsoft Visual Basic для
реализации циклических алгоритмов с использованием опера ­

торов цикла Do While ... Loop и Do ... Loop Until;


• базовые алгоритмы, использующие итеративные циклические
структуры: алгоритм вычисления суммы (или произведения)
членов бесконечной последовательности, алгоритм проведения
вычислений по итеративным формулам.
Разработать:
• алгоритм решения поставленной задачи в соответствии с вари­
антом;

• интерфейс программы;
• программу решения задачи;

469
• тестовые варианты (число тестов равно числу ветвей вычисли ­
тельного процесса) для проверки правильности функциониро ­
вания программы.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект долж:ен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;
• вариант задачи.
3. Заставка к проекту выполняется студентами 1-й подгруппы
с использованием программного кода, который реализует вывод
векторного изображения (см. приложение 2, заставка № 12), сту­
дентами 2-й подгруппы с использованием программного кода, ко­
торый реализует эффект бегущей строки (см. приложение 2, за­
ставка № 15).
4. Главную форму разрабатываемого прило)кения студенты 1-й
и 2-й подгрупп программируют с использованием обычной формы.
5. В разработанном проекте применить методы проверки кор ­
ректности ввода данных.

6. Обе подгруппы при окончательной компоновке проекта со ­


здают иконку с собственными инициалами и демонстрируют пре ­
подавателю .ехе-файл приложения.
7. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе, т.е. проявить свои знания по теорети ­
ческой части курса.
8. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

Студент обязан соблюдать правила по технике безопасности


9.
при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы, номер варианта.

470
3. Цель лабораторной работы.
4. Условие задачи.
5. Разработанный алгоритм.
6. Листинг программы.
7. Результаты выполнения программы.

Контрольные вопросы и задания

1. Какой цикл называется итеративным?


2. В каком случае целесообразно использовать рекуррентную
формулу?
3. Расскажите алгоритм вывода рекуррентной формулы.
4. Какие формулы называются рекурре1-tm7-tыми соот7-tоше -
1-tиями?
5. Назовите условия окончания итерационного процесса?

Варианты к лабораторной работе « Программирование


алгоритмов итеративных циклических структур»

(порядковый номер студента по журналу соответствует


его номеру варианта)

Таблица44
Таблица вариантов

Номер
Задача
варианта

1 Вычислить с заданной точностью функцию, воспользовав-


шись выводом рекуррентаой формулы
. хЗ х5 х2п-1
SlllX = х--+-- ... + ( - 1)п- 1 + ...
3! 5! (2п-1) !

2 Вычислить х .JP, используя рекурреатную формулу


[
xn+t = -х• (р 2 - 1) + -(р
1 + 1) -а - -1 (р - 1)___!!:_.
хР ] Прекратить вы -
р2 2 xg 2 а
числения при lxn+i - хп l ~ е
3
Вычислить -J2 с зада~-rной точпостыо 106, если П
-(1+ (-1)']
k
2 k=1 2 +1
4 Вычислить с заданной точностью функцию, воспользовав-
шись выводом рекуррентаой формулы
х2 х4 х2п
COSX = х-- + -- ... + (- 1)п + ...
2! 4! (2п)!

471
Продолжение т абл. 44

Н омер
Задача
варианта

5 В ычислить с заданной точностью функцию, воспользовав-


шись выводом рекуррентиой формулы
х3 х5 х2п +1
arctgx = х--+-- ... + (-1)п + ...
3 5 ( 2п + 1)

6 х2 хз . 1 xi
х4
Вычислить сумму ряда q = х - 2+3 - 4+ ...(- 1) - i+ ... 1

7 В ычислить с заданной точностью корень уравнения


x-s1nx
1=0
2
8 В ычислить с заданной точностью корень уравнения
ех + х + 2= о

9 В ычислить с заданной точностью корень уравнения


х 4 - 2х- 1 = О

10 Вычислить с заданной точI-Iостыо функцию, используя рекур -


х2 х4 х6 = х2п
ре~-rтную формулу chx = 1+ - + - + - + ... = L
2! 4! 6! n=O (2п ) !

11 В ычислить с заданной точностью функцию, используя рекур-


х3 х5 х1 = х2п+ 1
рентную формулу shx = 1+ - + - + - + ... = L
3! 5! 7! n=o (2n+1) !
12 Вычислить с заданной точиостыо функцию, воспользовав -
шись выводом рекуррентной формулы

t h х = х- -
1 х3 + -2 х;,-
" --17 х7 + 62 х 9 + ...
3 15 315 2835
13 В ычислить с заданной точностью функцию, воспользовав-
шись выводом рекуррент~-rой формулы
1 1 1 2 1
cthx = - + -х--хз +- - xs- х1 + ...
х 3 45 945 4725
14 Вычислить с заданной точностью корень уравнения
хз +8х + 1 0 = О

15 В ычислить с заданной точностью корень уравнения


х 3 +Зх- 7 = О
16 В ычислить с заданной точностью корень уравнения
хз +5х - 8 =О

472
Окончание табл. 44

Н омер
Задача
варианта

17 Вычислить с заданной точностью корень уравнения


х 3 -8х-3 =О

18 Вычислить сумму п первых членов ряда с заданной точностью


с. Определить количество членов ряда
х2 х4 х6 хВ
q = 1-- + - - - + - - ".
2! 4! 6! 8!
19 Вычислить сумму п первых членов ряда с заданной точностью
х2 х4 хВ
с. Определить количество членов ряда q = 1- - +- -- - ".
2 3 4
20 Вычислить с заданной точI-Iостыо х =~'используя итераци-
х~-а
онную формулу
1
xi+1 = xi
3х-12

21 Вычислить сумму ряда с заданной точностью, используя ре-


= х2п+1
куррентную формулу у = I, (- 1)п
n=O (2п+1)!

22 Вычислить с заданной точI-Iостыо функцию, воспользовав -


шись выводом рекуррентной формулы
х2 хз х4
ln(1+x) = х - - + - - -+ ".
2 3 4
23 Вычислить с заданной точностью функцию, воспользовав-
шись выводом рекуррентаой формулы
(х - 1) 2 (х - 1)3 (х - 1)4
lnx = (х-1)- + - + ".
2 3 4
24 Вычислить с заданной точаостыо функцию, воспользовав -
шись выводом рекурренп-rой формулы
7t 1 1 1 1
arctgx = - - - + - - - - - + - - - ".
2 х 3х 3 Sx 5 7х 7
25 Вычислить с заданной точfrостыо корень уравf!ения
8xcosx - x =О

473
ЛАБОРАТОРНАЯ РАБОТА № 11.
КОМПЛЕКСНОЕ ПРИМЕНЕНИЕ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ

Цели работы: овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с при ­

менением совокупности элементов управления; получение даль ­

нейших навыков по отладке и тестированию программ; выработка


при решении поставленных задач таких профессионально зна­
чимых качеств, как самостоятельность, ответственность, точность,

творческая инициатива.

Пример выполнения работы

Условие: разработать проект, содер:>кащий несколько форм.


Первая форма является заставкой к прилож:ению. На второй форме
создать приложение для вычисления заработной платы преподава­
теля. Заработная плата вычисляется следующим образом:
По табл. 45 определяется тарифная ставка в соответствии
1.
с квалификационным уровнем (заработная плата за 18 часов в не ­
делю) - St.
Таблица45
Тарифные ставки

Квалификаци- Долж~-rости, отнесениые к ква- Должиостной


оклад, руб .
v
онныи уровень лификационным уровням

1 Ассистент 6800
2 Преподаватель 7900
3 Старший пр еподаватель 18 100
4 Доцеит 25 200
5 Профессо р 38 ООО

6 Заведующий кафедрой 40 ООО

7 Декан факультета 45 600

2. На основе тарифной ставки рассчитывается основная зара­


ботная плата за ведение занятий:

Z=St·K / 18,
где К - количество часов в неделю.
3. Рассчитываются надбавки:
• за звание доцента - 40% от заработной платы;

474
• вредность (при работе в компьютерном классе) - 12% от зара­
ботной платы;
• заведование кабинетом - 10% от ставки;
• участие в национальном проекте ~Образование» - 15%
от ставки;

• куратор группы - 20% от ставки;


• звание ~Отличник народного просвещения» - 30% от зара­
ботной платы;
• звание ~заслуженный учитель России» 50% от заработной
платы;

• ученая степень - 50% от заработной платы;


• методическая литература - 100 руб. ежемесячно.
Начисление= основная заработная плата за ведение занятий +
+надбавки;
4. Вычисляются налоги:
Налог в пенсионный фонд - 1% от начисления.
Подоходный налог - 13% от начисления.
Сумма к выдаче = начисление - налоги.
П редусмотреть запрос на выход из программы.
Создать иконку с собственными инициалами и скомпилировать
.ехе -файл.
Внешний вид главного окна приложения представлен на рис. 197.

111 Зарплата преподавателя. Гурнков Сергем Ростн ... GJ[QJ~


Увахаемьй(-ая) Сергей Ростисгавоs1ч ! В~;ед11те. nохаЛ)}kта. свои даннье
Разряд Начисrено
IA----~
~
l 21297.&8
Когичество часов в недело ПодоходН t.й налог

136 l 2168.n
~ Работа в комnыотерно14 кnасс:е Налог а nенс:ионньй д

О За~;едование кабинею14 212.98

О Учасn.1е в на~1ональном проекте

О Куратор ство гр}'Тlnы К выдаче

~ Звание доцента l 1&316.18


Ученая стеnень. звание

О Нет
Вьчисление
О Отгичник народ110 го прос:аящения

О Засnуженнt.й )<'lитель России


В1:1ход
0 Канд1-1дат. доктор наук

Рис. 197. Внешний вид главной формы приложения

475
Листинг программы

PuЬlic Class Forml


Dim f , i , о As Str i ng
Dim r , k, st , z As DouЬle
Dim d , d l , d2, d3 , d4 , d5 , d6, d7 , d8 , d9 , d4d As
Single
Dim PodNal , PensNal As Single ' Подоходный
и п енс ио нный налоги
Dim i tog As DouЬle ' Сумма к выдаче
Dim flag As Boolean

Private SuЬ Forml_Load(ByVal sender As System.Ob-


ject, ByVal е As System . EventArgs) HandlesMyBase . Load
f = InputBox ( " Введи т е ва шу фамилию ",
" Регистрация " )
i = InputBox ( " Введите ваше имя " ,
" Рег и стра ция " )
О = InputBox ( " Введите ваше отчество " ,
" Рег ис тра ция " )
Ме . Text = " Зар плата преподавателя . " + f + "
" + l + " " + о
Labell . Text = " Уважаемый( - ая) " +i+ "
" +о+ " Введи т е , пожалуйста, свои данные "

End SuЬ

Private SuЬ Buttonl_Click(ByVal sender As System .


Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
r = Va l( TextBoxl . Text)
k = Val (TextBox2 . Text )
flag = True
Select Case r ' Анализируется
уровень

Case 1
st - 3880 ' Тарифная ставка

о пределяе т ся по таблице
Case 2
st - 42 68
Case 3
st - 5104
Case 4
st - 5247
Case 5
st - 6003

476
Case 6
s t - 6463
Case 7
st - 6960
Case Else
MsgBox ( " Вы неверно ввели Ваш
урове нь", MsgBoxSt yle . Cri tical , " Ошибка!! !")
flag = False
TextBoxl . Text - ""
TextBox2 . Text - ""
End Select
If flag = True Then
z = st / 18 * k
If CheckBoxl . CheckState = 1 Then
dl = О • 12 * z ' Надбавка
за вредность

End If
If CheckBox2 . CheckState = 1 Then
d2 = 0 . 1 * st 'Н адбавка
за заве д ова ние кабине т ом
End If
If CheckBox3 . CheckState = 1 Then
dЗ = 0 . 15 * st ' Надбавка за участие
в на ц. проекте

End I f
If CheckBox4 . CheckState = 1 Then
d4 = 0 . 2 * st ' Надбавка
за кураторство

End If
If CheckBox5 . CheckState = 1 Then
d4d = 0 . 4 * z 'Над бавка за зва ние
доце нта

End I f
If RadioButton2 . Checked = True Then
dS = 0 . 3 * z ' Надбавка за звание
Отличник народного просвещения
End I f
I f RadioButtonЗ . Checked = True Then
d6 = 0 . 5 * z 'На дбавка за звание
Заслуженный учитель России
End If
I f Rad i oButt on4 . Checked Then
d7 = 0 . 5 * z 'На дбавка за звание
кандида т а, д ок т ора наук

End If

477
d9 = 100 ' Над б авка
за м ет о дичес кую лит е рат уру

d = dl + d2 + dЗ + d 4 + d5 + dб + d7 +
d9 + d4d ' Все на д б авки
z = z + d ' Зар п ла т а с над б авками
TextB o x З . T ext - Str (Format (z, "# . ## " ))
' Форма тн ый вывод с д вумя з н аками посл е за п ятой

PodNal = 0 . 13 * z
'П о до х о дный нал о г
TextBox 4 . Text - Str (Format (PodNal ,
" #. ## "))
PensNal = 0 . 01 * z ' Нал ог
в п е н с ио н ный фо н д
TextBox5 . Text = Str (Format (PensNal ,
" #. ## "))
i tog = z - PodNal - pen s nal 'Ит о г
TextB o x б . T ext = Str (Format (itog , " # . ## " ))
End If
End SuЬ

Private SuЬ Button2_Click(ByVal sender As System.


Object, Ву Val е As System . EventArgs) Handles Button2 .
Click
Appl i cation . Exi t ()
End SuЬ
End Class

Задания для самостоятельной подготовки

Изучить: основные свойства элементов управления, исполь­


зуемых в приложении.

Разработать:
• интерфейс программы;
• программу решения задачи;

• тестовый вариант исходных данных.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.

478
2. Проект должен иметь заставку, в которой должны быть ука­
заны:

• название учебного заведения;


• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи.

3. Заставка к проекту выполняется студентами 1-й подгруппы


с использованием программного кода, который реализует форму
произвольной конфигурации (см. приложение 2, заставка № 14),
студентами 2-й подгруппы с использованием программного кода,
который реализует появление нестандартной формы (см. прило­
жение 2, заставка № 7).
4. Главную форму разрабатываемого приложения студенты 1-й
и 2-й подгрупп программируют с использованием обычной формы.
5. Обе подгруппы при окончательной компоновке проекта со­
здают иконку с собственными инициалами и демонстрируют пре­
подавателю .ехе-файл приложения.
6. Студент долж:ен уметь ответить на контрольные вопросы
по лабораторной работе, т.е. проявить свои знания по теорети ­
ческой части курса.
7. Студент долж:ен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро ­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

8.Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы.
3. Цель лабораторной работы.
4. Условие задачи.
5. Листинг программы.
6. Результаты выполнения программы.

Контрольные вопросы и задания

1. Дайте характеристику каждого элемента управления, приме­


няемого в данном проекте.

2. Расскажите о принципе работы разработанного приложения.

479
ЛАБОРАТОРНАЯ РАБОТА № 12.
КЛАССИЧЕСКИЕ СПОСОБЫ ОБРАБОТКИ ОДНОМЕРНЫХ
МАССИВОВ

Цели работы : овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с про ­

граммированием одномерных массивов; уяснение способов ввода,


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

Пример выполнения работы


Условие : разработать проект, содержащий несколько форм.
Первая форма является заставкой к приложению. На второй форме
находится элемент управления TabControl, на первой вкладке кото ­
рого следует разместить элементы управления, с помощью которых

возмО)КНО осуществить:

• ввод размера одномерного массива;

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


и с помощью генератора случайных чисел;
• выбор одного из четырех классических способов обработки од­
номерного массива, таких как:

- нахождение количества элементов одномерного массива при

заданном условии;

- нахождение суммы элементов одномерного массива при за­

данном условии;

- нахождение произведения элементов одномерного массива

при заданном условии;

- нахо)кдение экстремальных значений элементов одномер ­


ного массива при заданном условии.

Ввод заданного условия организовать с помощью функции


InputBox.
На второй вкладке элемента управления TabControl следует
реализовать алгоритмы включения и удаления элемента соответ ­

ственно в массив и из массива. Организовать с помощью функции


InputBox запрос на ввод количества элементов массива.
На третъей вкладке элемента управления TabControl следует
реализовать алгоритмы упорядочивания одномерных массивов

по возрастанию и убыванию. Организовать с помощью функции


InputBox запрос на ввод количества элементов массива.
В коде программы следует использовать динамический массив.
Организовать запрос на выход из программы. Создать иконку
к проекту с собственными инициалами и скомпилировать .ехе ­
файл.

480
Внешний вид главной формы представлен на рис. 198.

~ Работа с одноме рнымн масснвамн GJ[QJ~

Классические способы обрабаrки Включение и уааление элементов У порядочивание элементов

Размерность массива И сходный массив

Заполнение массива
Результат вычислений

1Классические способы обрабаrки

Вычислить

Рис. 198. Внешний вид главной формы

На рис. 199 представлены раскрытые списки элемента управ­


ления ComboBox.

В ыбе иrе способ заполнен~1я массив - v


За полнение вручную
За полнение ел чайными числами

Классические способы об аботки v


Нахождение количества з леменrов при заданном условии
Нахождение суммы значений з леменrов при заданном условии
Нахождение произведения значений з леменrов при заданном условии
Нахождение максимального элемента

Рис. 199. Элементы ComboBox

На рис. 200 представлен запрос на ввод элементов массива.

Заnопненне масснва ~
В ведите 1 число
ок

Cancel

Рис. 200. Запрос на ввод элемента массива при ручном вводе

481
На рис. 201-203 показаны три вкладки работающей программы,
отображающие выбор способа заполнения одномерного массива
и результаты двух классических способов его обработки.

!11 Работа с одноме рнымн масснвамн GJ(g]


" Классические способы обработки 1 Включение и уа.аление элементов 1 У порядочивание элеме.нтов

Размерность массива И сходный массив

lв 01 02 03 04 05 06 07 08
11 1 2 12 20 13 6
110

1Заполнение случайными числами

Заполнение массива
Результат вычислений

1343200 ! Нахождение произведения значений элементов при заданном уело v:I


[ - - -

Вычислить -1

Рис . 201 . Один из способов обработки одномерных массивов

111 Работа с одномернымн масснвамн ~(QJ(8]

Классические способы обработки 1 Включение и уа.аление элементов Упорядочивание элементов

1Исходный массив

01 02 03 04 05 06 07 08

8 13 12 6 8 8 2
115 Заполнить массив

01 02 03 04 05 06 07 08 09

8 13 12 50 6 8 8 2
115 8 ключить элемент

Удалить элемент

Рис. 202. Вставка элемента со з н а ч е н ием 50 на 5 место

482
!111 Работа с одноме рнымн масснвамн c;J[g]
Классические способы обработки Включение и уа.аление элементов У порядочивание элементов

Исходный массив

01 02 03 04 05 06 07

l._1_3 __4_ _
11_ _17_ _20_ _1_
4 __1_s _ _ _ _ _ _ __,I [ Заполн~.-rrь массив

Упорядоченный массив У порядоч~.-rrь по


воз ра стани ю

01 02 03 04 05 06 07
11 13 14 16 17 20
14 Упорядоч~.-rrь по
убыванию

Рис. 203. Упорядоч иван ие ис ходного массива по возраста н ию

Листинг программы

PuЬlic Class Forml


PuЬlic а() As Integer ' Объявление глобальных
переменных

Dim k As String
Dim i, n, sum , kol As Integer
Private SuЬ Buttonl_Click(ByVal sender As System .
Object, ByVal е As System . EventArgs) Handles Buttonl .
Click
' Процедура заполнения одномерного массива разными
способами

n = Val(TextBox l . Text)
ReDim a(n)
Se l ect Case ComboBoxl . Se le ctedindex
Case О 'Вв од массива вручную
TextBox2 . Text - ""
LabelЗ . Text = ""
For i = 1 То n
k = I nputBox ( " Введите " + Str ( i ) +
" чи сл о ", " Запол не ние масс ива " )
а (i ) = Val (k)

483
LabelЗ . Text &= St ring . Forma t (" {O :d2} ", i )
& " "
TextBox2 . Text &= String . Format( " {O : dl} ",
a(i)) & " "
Next
Case 1 ' Ввод массива с использованием
гене ра то ра случайных чисел
Dim r andomNumber As Random = New Random ()
TextBox2 . Text - ""
LabelЗ . Tex t = ""
For i = 1 То n
a(i) = r andomNumber . Next (21)
Text Box2 . Text &= Str ing .
Forma t (" {О : dl }", а (i )) & " "
Labe l З . Tex t &= Stri ng .
Fо rma t ( " {О : d2 }" , i ) & " "
Next
End Select
End SuЬ

Private SuЬ Button2_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Button2.
Click
' Процедура первых четырех классических способов
обработки одномерных массивов
Di m kol As I nt eger
Select Case ComboBox2 . Se l ectedi ndex
Case О
ko l - о
For l - 1 То n
I f а ( i) >= 10 Then
kol - kol + 1
End If
Next
TextBoxЗ . Text - Str (kol )
Case 1
sum = О
For i = 1 То n
If a(i) >= 10 Then
s um = s um + а ( i )
End If
Next

484
TextBoxЗ . Text = Str( sum)
Case 2
Dim proizv As Intege r
proizv = 1
For i = 1 То n
If a(i) >= 10 Then
pro1zv = pro1zv * а (i )
End If
Next
TextBoxЗ . Text = Str(proizv)
Case 3
Dim max As Integer
max = а ( 1)
For i = 1 То n
I f a(i) > max Then
max = а (i)
End I f
Next
TextBoxЗ . Text - Str( max)
End Se l ect
End SuЬ

Private SuЬ ButtonЗ_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles ButtonЗ.
Click
' Процедура заполнения массива для вставки элемента
kol = InрutВох( " Введите количество элементов
в массиве ", " Ввод " )
ReDim а ( kol + 1 )
Dim randomNumber As Random - New Random ()
TextBox5 . Text - ""
Label7 . Text = ""
For i = 1 То ko l
a(i) = randomNumber . Next(21)
TextBox5 . Text &= String .For ma t(" {O : dl} ",
a(i)) & " "
Labe l 7 . Text &= St r ing . Format( " {O :d2}", i)
& " "
Next
End SuЬ

485
Private SuЬ Button4_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Button4.
Click
' Процедура вс т авки элемента в массив
Di m znach, poz As Integer
Text B oxб . Text = ""
Labe l 8 . Text = ""
znach = I nput Box ( " Введи т е вставляемый элемен т ")
poz = I nputBox ( "Н а ка к ое место в масс ив е вы
хоти т е вс т ави т ь ")
элемент?
Fo r i = kol То poz Step - 1
a( i + 1) = a(i)
a( i ) = znach
Next
For i = 1 Т о а . Ge t UpperBound (О)
T extBoxб . T ext &= St r i ng . Format( " {O : dl }",
a(i)) & " "
Labe l 8 .Text &= Stri ng .Format (" {O: d2} ", i) &
" "
Next
End SuЬ

Private SuЬ ButtonS_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Button5.
Click
' Про ц едура удаления элемен т а из массива
Di m po z As I nt eger
T extBoxб . T ex t = ""
Label8 . Text = ""
poz - Input Box ( " С ка к ой п ози ции удал яем э л емент?
")
For i = poz + 1 Тоa . GetUppe r Bound(O)
a(i - 1) = a( i )
Next
For i = 1 То a . GetUpperBound(O) - 2
' по базо в ому ал гор и тму н адо о тнимат ь еди ницу , но
' из - за оператора ReDim a(kol + 1) приходится отнима т ь 2
TextBoxб . T ext &= St r i ng . Format( " {O : dl }",
a( i )) & " "
Label8 . Text &= St r ing . Fo r mat (" {O :d2} ", i )
& " "
Next
End SuЬ

486
Private SuЬ Buttonб_Click(ByVal sender As System .
Object, ByVal е As System . EventArgs) Handles Buttonб .
Click
'Процедура заполнения массива для упорядо чив ания
ko l = I nрutВох( " Вве дите количес т во э лемен то в
в массиве ", "Вв од " )
ReDim а ( kol)
Dim r andomNumber As Random - New Random ()
TextBox7 . Text = ""
Label l O. Text = ""
For i = 1 То ko l
a(i) = randomNumbe r . Next(21)
TextBox7 . Text &= String . Format( " {O : dl} ",
a(i)) & " "
LabellO . Text &= String. Format (" {O : d2} ",
i ) & " "
Next
End SuЬ

Private SuЬ Button7_Click(ByVal sender As System .


Object, ByVal е As System.EventArgs) Handles Button7.
Click
' Алгоритм у п оря д очи вания по в озрас т анию
Dim mi n , j , bu f e r, i As I nteger
' Обработка массива
For i = 1 То kol - 1
'П оиск минимального э лемен та в ч ас ти массива от a( l )
до а (Size)
m1n - i
For J - + 1 То kol
i
If a(j) < a(min) Then
m1n = J
End If
Next
' Поменяем местами а (min ) и а (i)
bufer = а ( i )
a(i) = a(min)
a(min) = bufer
Nex t
' Выво д массива
For i = 1 То a . GetUppe rBound(O)

487
TextBox8 . Text &= String . Format( " {O : dl} " ,
a(i)) & " "
Labe l 12 . Text &= String . Format( " {O : d2} ",
i) & " "
Next
End SuЬ

Private SuЬ Button8_Click(ByVal sender As System.


Object , ByVal е As System.EventArgs) Handles Button8.
Click
Dim max , i , j As Integer
For i = 1 То kol ' Ор га низуе т ся цикл для
перебора элеме нт ов и сход н ого од н омерно г о массива
max = а (i) ' Максимальным считается
первый элемент массива
For j = i + 1 То kol ' Организуется
внутренний ци кл для перебора э ле ме н тов и схо дн ого
о дн омерно г о массива, н ачи н ая со второго

If a(j) > max Then ' Если очередной


элемент массива больше , чем предыдущий
а (i) - а ( j) 'Происхо ди т обмен
э ле ме н тов массива

a(j) = max
max = а (i )
End If
Next
Next
For i = 1 То a . GetUpperBound(O)
TextBox8 . Text &= String . Format( " {O : dl} ",
a( i)) & " "
Labe l 12 . Text &= String . Format( " {O:d2 }" ,
i ) & " "
Next
End SuЬ
End Class

Задания для самостоятельной подготовки


Изучить :
• операторы для вв ода и выв ода одноме рных массивов;

• работу элемента управления TabControl;


• классические способы обработки одномерных массивов;
• цели использования динамических массивов;

• алгоритмы упорядочивания одномерных массивов.

488
Разработать:
• интерфейс программы;
• программу решения задачи;

• тестовый вариант исходных данных.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект должен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи.
3. Заставка к проекту выполняется:
• студентами 1-й подгруппы с использованием программного кода,
который реализует создание текста и изображения на форме
графическими методами (см. приложение 2, заставка № 1);
• студентами 2 -й подгруппъt с использованием программного
кода, который реализует вывод центрированного текста, закра ­
шенного с помощью градиентной заливки. Форма окаймлена
овалом, покрытым изображ:ениями (см. приложение 2, заставка
№2).
4. Главную форму разрабатываемого приложения студенты 1-й
и 2 -й подгрупп программируют с использованием обычной формы.
5. Студенты обеих подгрупп при окончательной компоновке
проекта создают иконку с собственными инициалами и демон­
стрируют преподавателю .ехе-файл приложения.
6. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе.
7. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

8. Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы, номер варианта.

489
3. Цель лабораторной работы.
4. Условие задачи.
5. Листинг программы.
6. Результаты выполнения программы.

Контрольные вопросы и задания

1. С какой целью применяют одномерные массивы в про­


граммах?
Каким образом объявляются одномерные массивы в про ­
2.
граммах?
3. Каким образом осуществляется доступ к каждому элементу
одномерного массива при его обработке?
4. Каким образом осуществить вывод одномерного массива
на экран?
5. Нарисуйте базовые алгоритмы обработки одномерных мас­
сивов.

6. Поясните, каким образом осуществляется обмен значений


элементов массива.

7. Расскажите, в чем заключается алгоритм упорядочивания


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

9. Расскажите, в чем заключается алгоритм упорядочивания


массива по убыванию элементов.

ЛАБОРАТОРНАЯ РАБОТА № 13.


ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ФОРМИРОВА Н ИЯ
И ОБРАБОТКИ ОДНОМЕРНЫХ МАССИВОВ

Цель работы: овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с про­

граммированием одномерных массивов; выработка при решении по­


ставленных задач таких профессионально значимых качеств, как са­
мостоятельность, ответственность, точность, творческая инициатива.

Пример выполнения работы

Условие: разработать проект, содер:>кащий несколько форм.


Первая форма является заставкой к прилож:ению. На второй форме
реализовать решение задачи своего варианта.

Задача 1. Из одномерного массива целых чисел а( 9 ) сфор ­


мируйте два массива: массив четных чисел Ь и массив нечетных
чисел с. Результат выведите на элемент управления TextBox.

490
Создайте иконку с собственными инициалами и скомпилируйте
.ехе -файл.
Разработка алгоритма решения задачи представлена на рис. 204.
Начало

i = о' 9

a(i)

chet =О

nechet =О

i =О, 9

Нет Да

nechet = nechet +1 cl1et = cl1et + 1

c(nechet) = a(i) b(chet) = a(i)

i = 1, chet

b(i)

i = 1, necl1et

c(i)

Конец

Рис. 204. Алгоритм решения задачи

491
Комментарий. Исходный массив а(9) формируем с помощью
процедуры Randomize и функции Random. Выходные массивы Ь()
и с() объявляем безразмерными, поскольку заранее неизвестно,
какое колич е ство четных и нечетных элементов исходного массива

будет отфильтровано по критерию поиска. Затем, организовав цикл,


с помощью функции mod каждый элемент одномерного массива
проверяется на четность. Если условие истинно, то формируется
массив четны х чисел, если ЛО)КНО, то нечетных. Одновременно, опе ­
ратором ReDim переопределяется количество элементов массива.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Cons t size As In t ege r = 9
Dim che t, neche t , i As Intege r
Dim а As I nteger () - New Integer ( si ze) { }
Dim Ь As Integer () = New Integer () { }
Dim с As Integer () = New Integer () { }
Dim r andomNumber As Random = New Random ()
Tex tB oxl . Tex t - ""
TextBox2 . Text - ""
TextBoxЗ . Text - ""
Labe lЗ . Tex t = ""
For i = О То а. Ge t UpperBound (О)
a(i) = randomNumber . Next(З l)
TextBoxl . Text &= String . Format( " {O : dl} ",
a(i)) & vbTab
L abe l З . Tex t &= St r ing . Format( " {O :dl }", i)
& " "
Next
chet - О ' Счетчик, отвечающий за количество

че т ных чисе л

nechet = О ' Сче т чик , отве ч ающий

за количество не че т ных чисе л

For i = О То a . GetUpperBound (0) ' Организуется

цикл для перебора элементов исходного одномерного

массива

492
If a(i) Mod 2 = О Then ' П роверка

на четность очередного элемен т а массива

chet = chet + 1
ReDim Preserve Ь (chet)
Ь (chet) = а (i ) ' Формирование

массива че т ных чисел в случае истинности проверяемого

условия

Else
nechet = nechet + 1
ReDim Pr eser ve с (nechet)
с (nechet) = а (i) 'Ф ормирование

массива н ече т ных чисе л в случае, если проверяемое

усл овие л ож н о

End I f
Next
For i = 1 chet
То

TextBox2 . Text &= String .For mat(" {O : dl} ",


b(i)) & vbTab
Next
Fo r i = 1 nechet
То

TextBoxЗ . Text &= String . Format( " {O : d l }",

c(i)) & vbTab


Next
End Sub
End Class

Задача 2. В одномерном массиве вещественных чисел а(5) вы­


числите произведение ненулевых элементов. Результат выведите
на элемент управления ListBox.
Комментарий. Чтобы облегчить работу с массивами, для про ­
верки верхней границы массива в дан ном листин ге исп ользуется
встроенная функция UBound (Имя:Массива) , которая позволяет
обработать массив независимо от исходного количества элементов.
Поочередной ввод элементов массива выполняется в цикле. Ре­
зультат, который возвращает функция InputBox, строкового типа,
поэтому массив b(i) указан в разделе описаний как строковый. Для
преобразования значений элементов массива в вещественный тип
служит функция CSng.

493
Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object , е As
EventArgs) Handles Buttonl . Click
Dim a(S), z As Single
Dim b(S) As String
Dim i As I nteger
Dim m As St r i ng = " "
z = 1
For i = О То UBound (а)
b(i) = I nрutВох( " Задайте зна ч е ние
э л еме н та а( " + Str(i) + " ) ", " Ввод э л ементов массива
с клавиа т уры " )
a(i) = CSng(b( i ))
Next
For i = UBound (а)
О То
ListBoxl . Items . Add(m + Format(a(i),
" 00 . 00 " ) + Space(4))
Next
For i = О То UBound (а)
If а (i ) <> О Then
z = z * a(i)
End I f
Next
TextBoxl . Text - Str (z)
End SuЬ
End Class

Задача 3. Удалит е из массива a(n) одинаковые элементы. Ре ­


зультат выведите на элемент управления ListBox.

Комментарий. Алгор итм «сжатия массива» закл ючается в по­


следо в ательном сравнен ии каждо го элемента исходн о го массив а

со всеми остальными . Если a(i) = a(j), то j -й элемент удаляется,


а длина массива уменьшается на единицу.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Dim a(S) As Single
Dim b(S) As String

494
Dim i, n, J , m As Integer
Fo r i = О Т о UBound (а)
b(i) = Inрu tВ ох( " За дайте з наче н ие
элемен т а а( " + Str (i ) + ")", " Ввод элеме нт ов массива
с клавиатуры")
a(i) - CSng(b( i ))
Next
For i - О То UBound (а)
Li s t Boxl . Items . Add (Forma t (а (i ), " 00 . 00 ") +
Space( 4))
Next
i = о
n = UBound (а)
Do Wh i le i < n
J = i + 1
Do
I f a(i) = a(j) Then
For m = j То n 1
а (m) = а (m + 1)
Next
n = n - 1
ReDi m Pr ese r ve а (n)
Else
j = j + 1
En d I f
Loop Wh i le j <= n
i = i + 1
Loop
Fo r i = О То
UBound (а)
ListBox2 . I tems . Add ( Forma t (а ( i) , " 00 . 00 ") +
Space ( 4) )
Next
End Sub
End Class

Задания для самостоятельной подготовки

Изучить:
• операторы для ввода и вывода одномерных массивов;

• классические способы обработки одномерных массивов;


• цели использования динамических массивов;

• алгоритмы упорядочивания одномерных массивов.

495
Разработать:
• интерфейс программы;
• алгоритм решения задачи;

• программу решения задачи;

• тестовый вариант исходных данных.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект долж:ен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;
• вариант задачи .
3. Заставка к проекту выполняется:
• студентами 1-й подгруппы с использованием программного кода,
который реализует эффект проявления и исчезновения формы
(см. прилож:ение 2, заставка № 5);
• студентами 2-й подгруппъt с использованием программного
кода, который реализует вывод повернутой надписи (см. прило­
жение 2, заставка № 8).
4. Главную форму разрабатываемого прило:>кения студенты 1-й
и 2-й подгрупп программируют с использованием обычной формы.
5. Вывод результатов решения задачи студенты 1 -й подгруппы
реализуют с помощью метода MessageBox.Show, а студенты 2-й
подгруппъt с использованием текстовых окон, с обязательным ука­
занием индексов элементов.

Студенты обеих подгрупп при окончательной компоновке


6.
проекта создают иконку с собственными инициалами и демон­
стрируют пре подавателю .ехе - файл приложения .
7. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе.
8. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

Студент обязан соблюдать правила по технике безопасности


9.
при работе с вычислительной техникой.

496
Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы.
3. Цель лабораторной работы.
4. Условие задачи.
5. Разработанный алгоритм.
6. Листинг программы.
7. Результаты выполнения программы.

Контрольные вопросы и задания


1. С какой целью применяют одномерные массивы в про­
граммах?
2. Каким образом объявляются одномерные массивы в про­
граммах?
3. Каким образом осуществляется доступ к каждому элементу
одномерного массива при его обработке?
4. Каким образом осуществить вывод одномерного массива
на экран?
5. Нарисуйте базовые алгоритмы обработки одномерных мас­
сивов.

6. П оясните, каким образом осуществляется обмен значений


элементов массива.

7. Расскажите, в чем заключается алгоритм упорядочивания


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

9. Расскажите, в чем заключается алгоритм упорядочивания


массива по убыванию элементов.

Варианты к лабораторной работе «Программирование


алгоритмов формирования и обработки одномерных массивов»
(порядковый номер студента по журналу соответствует
его номеру варианта)

Таблица46

Варианты заданий

Номер
Задача
варианта

1 В исходI-Iом массиве случайиых чисел найдите количество


положительных элементов. Сформируйте новый массив
из тех элементов исходного массива, значения которых
u
равиы количеству наиде~-rных положительиых элементов

497
Продолжение табл. 46
Н омер
Задача
варианта

2 В исходном массиве случайных чисел найдите произведение


и количество отрицательиых элементов, имеющих иечетиые

иидексы. Сформируйте иовый массив из тех элемеитов ис ­


ходного массива, значения которых равны количеству най­
денаых отрицательных элемеитов

3 Б исходиом массиве слуqайиых чисел найдите сумму эле ­


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

которых меньше ~-rайдениой суммы элеме~-пов, имеющих


четные индексы

4 Б исход~-rом массиве слуqайиых чисел иайдите число ин ­


версий. И нверсией называется пара элементов, в которой
большее число расположено слева от меньшего. Сформи­
руйте иовый массив из тех элемеитов исход~-rого массива,
значения которых больше количества найденного числа
инверсий

5 Б исходаом массиве слуqайиых чисел найдите макси­


мальный положительный элемент. Сформируйте новый
массив из тех элементов исходного массива, значения ко­

торых по модулю меиьше найдеаиого максимального поло ­


жительного элемента

6 В исходном массиве случайных чисел найдите сумму


четиых элементов. Сформируйте ~-rовый массив из тех эле ­
ментов исходного массива, значения которых меньше най­
денной суммы четных элементов

7 В исходаом массиве слуqайиых чисел найдите миаи ­


мальный четный элемент. Сформируйте новый массив
из тех элементов исходного массива, значения которых

меиьше минимального четаого элемента

8 В исходном массиве случайных чисел найдите среднее


арифметическое квадратов положительаых элементов.
Сформируйте ~-rовый массив из тех элеме~-пов исходного
массива, значения которых меньше найденного среднего
арифметического квадратов положителыrых элементов

9 В исход~-rом массиве слуqайиых чисел найдите макси­


мальный из отрицательных элементов. Сформируйте новый
массив из тех элемеитов исходного массива, зиачеиия ко ­

торых по модулю больше иайденного максималыrого из от ­


рицательных элементов

498
Продолжение табл. 46
Н омер
Задача
варианта

10 В исходном массиве случайных чисел найдите разность


между максимальным четным и миаимальиым аечетаым

элементами . Сформируйте новый массив из тех элементов


исходного массива, значения которых меньше найденной
разиости максимального четного и минимального нечетиого

элементов

11 В исходI-Iом массиве случайиых чисел найдите среднее


геометрическое элемеатов массива. Сформируйте иовый
массив из тех элементов исходного массива, значения ко­

торых меньше иайден~-rого сред~-rего геометрического эле ­


меитов

12 В исход~-rом массиве случайиых чисел найдите количество


аечетных элемеитов массива. Сформируйте аовый массив
из тех элементов исходного массива, значения которых

больше найден~-rого количества I-Iечетиых элементов

13 В исходном массиве случайных чисел найдите сумму эле­


ментов массива, кратных трем . Сформируйте новый массив
из тех элементов исходаого массива, значеиия которых

меньше найденной суммы элементов массива, кратных трем

14 В исходаом массиве случайиых чисел найдите аомер макси ­


мального элемеита. Сформируйте ~-rовый массив из тех эле ­
ментов исходного массива, значения которых равны номеру

максимальиого элемеата

15 В исходном массиве случайных чисел найдите количество


элементов, равиых аулю. Сформируйте аовый массив из тех
элементов исходиого массива, значе~-rия которых больше
найденного количества элементов, равных нулю

16 В исход~-rом массиве случайиых чисел найдите количество


элементов, находящихся в диапазоне от 5 до 15. Сформи­
руйте новый массив из тех элементов исходного массива,
значеиия которых меньше иайденного количества эле­
ментов, находящихся в диапазоне от 5 до 15
17 В исходаом массиве случайиых чисел иайдите аомер ми ­
нимального элемента. Сформируйте новый массив из тех
элементов исходного массива, значения которых больше
аомера минимального элемеата

499
Окончание табл. 46
Н омер
Задача
варианта

18 В исходном массиве случайных чисел найдите мини­


мальный отрицательиый элемеит. Сформируйте новый
массив из тех элемеитов исходного массива, зиачеиия ко ­

торых по модулю меньше найденного минимального отри­


цательиого элемеита

19 Б исходиом массиве слуqайиых чисел иайдите сумму ие­


четных элементов. Сформируйте новый массив из тех эле­
меитов исходного массива, зиачения которых меиьше най -
ден~-rой суммы нечет~-rых элементов

20 В исходном массиве случайных чисел найдите разность


между максимальным и ми~-rимальиым элеме~-rтами. Сфор ­
мируйте новый массив из тех элементов исходного массива,
значения которых меньше найденной разности максималь­
~-rого и минималыrого элементов

21 В исходном массиве случайных чисел найдите количество


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

торых больше найденного количества пар совпадающих


по значению элементов

22 Б исход~-rом массиве случайиых чисел иайдите сумму ин ­


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

23 В исходном массиве случайных чисел найдите сумму тех


элементов, которые делятся на три и ие делятся иа пять.

Сформируйте новый массив из тех элементов исходного


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

24 В исходном массиве случайных чисел найдите сумму квад­


ратиых корией четиых элементов. Сформируйте иовый
массив из тех элемеитов исходного массива, зиачеиия ко ­

торых меньше найденной суммы квадратных корней четных


элементов

25 Б исход~-rом массиве случайиых чисел найдите ми~-rи ­


мальный положительный элемент. Сформируйте новый
массив из тех элемеитов исходного массива, зиачеиия ко ­

торых по модулю больше иайденного минимального поло­


жительного элемента

500
ЛАБОРАТОРНАЯ РАБОТА № 14.
КЛАССИЧЕСКИЕ СПОСОБЫ ОБРАБОТКИ ДВУМЕРНЫХ МАССИВОВ

Цели работы: овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с про­

граммированием двумерных массивов; уяснение способов ввода,


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

Пример выполнения работы


Условие : разработать проект, содержащий несколько форм.
Первая форма является заставкой к прилож:ению. На второй форме
находится элемент управления TabControl, на первой вкладке кото ­
рого следует разместить элементы управления, с помощью которых

возмО)КНО осуществить:

• ввод размера двумерного массива;

• выбор способа заполнения двумерного массива: вручную и с по­


мощью генератора случайных чисел;
• выбор одного из четырех классических способов обработки дву­
мерного массива, таких как:

- нахо)кдение количества элементов матрицы при заданном

условии;

- нахождение суммы элементов матрицы при заданном

условии;

- нахождение произведения элементов матрицы при заданном

условии;

- нахождение экстремальных значений элементов матрицы


при заданном условии.

Ввод заданного условия организовать с помощью функции


Input Box.
На второй вкладке элемента управления TabControl следует
реализовать алгоритмы обмена столбцов элементов матрицы и об­
мена строк элементов матрицы размерностью m х n. Организовать
с помощью функции Input Box запрос на ввод количества строк
и столбцов массива.
На третъей вкладке элемента управления TabControl следует
реализовать алгоритмы транспонирования матрицы и нахож:дения

произведения двух матриц.

В коде программы использовать динамический массив. Орга­


низовать запрос на выход из программы. Создать иконку с соб ­
ственными инициалами и скомпилировать .ехе -файл.

501
Внешний вид главной формы представлен на рис. 205.
l;:J Работа с двумерными масснвамн GJ[QJ(8]

Размерносrь 1 Выбер14Те способ э.!lnолнения м!!Трицы HI


Строки Стоnбцы

Результат вычислений

1 1

Заnол'1ИТь матрицу

1Выберите способ обработки матрицы

В ЫЧИCJJ-rrb

Рис. 205. Внешний вид главной формы

На рис. 206 представлены способы заполнения матрицы и обра­


ботки двумерного массива, которые находятся в списке элемента
ComboBox.

В ыбе ите способ заполнения мат ицы

Вручную
С помощью генератора случайных чи сел

В ыбе ите способ об а бот к и мат ицы

Нахождение количества э леменrов при зада нном условии


Нахождение суммы э леменrов при заданном условии
Нахождение произведения э леменrов при заданном условии
Нахождение э кст емальных значений мат ицы

Рис. 206. Элем е нты ComboBox

На рис. 207 показан запрос, организованный с помощью функции


InputBox, на ввод элементов матрицы .

Ввод эначеннй элементов масс ива А() lRJ


Элемент массива а( 1. 1)=
Гак
Cancel

Рис. 207. Запрос на ввод элемента матрицы при ручном вводе

502
На рис.
208-21 О показаны организация во вкладках элемента
управления TabControl вывода исходной матрицы и результаты
нескольких способов обработки двумерного массива.

~ Работа с двумерными массивами r;J[QJ[EJ


Классические способы обработки матриц Обмен стоп6uов и строк матрицы Т рансnонирование и нa•o)l(JleНIAe nроизеедениR матриц

Размерность 1 С nомощыо генератора случ.!lйны• чисел vl


Строки Стоп6ц1>1
Исходная мsтриuа

19 12 13 8 5
16 о 9 14 13
6 12 5 10 16
Реэультsт вычислений
17 10 15 15 17
о 7 19 4

Заполнить матрицу

Нахождение количества э леменrое при заа.анном 9словии v

Вычисшть

Рис. 208. Один из способов обработки матрицы

~ Работа с двумерными массивами GJ[QJ[EJ


~ссические способы обработки матр.Щ Обмен стоп6uов и строк матрицы L!.рансnонирование и нa•o)l(JleНIAe nроизеедениR мат
-'-
ри-'u---11

И сходная мsтриuа Результирующая мsтрица

6 9 15 16 16 9 15 6
18 17 13 7 7 17 13 18

20 10 2 15 15 10 2 20
9 20 2 5 5 20 2 9

Заnоnниrь мsтрицу

~ Обмен столбцов j Обмен строк

Рис. 209. Про изведен обмен 1- го и 4-го столбцов матрицы

503
Кnассические способы обработки матриц JLО:бмен стопбuов и строк матриц;) Т рансn0t1ирование и нахожде'1Ие nроизеедениR матриц

И cxcw.нaR матрица Peз!jJlt;rnpyющaR матрица Нахождение nроизеедения

2 з о з з о 24 23 12 23
2 о 4 4 3 3 16 6 3 14

2 4 о 2 о о 2 24 14 4 16

2 3 2 2 4 3 4 24 19 9 21

Ззnоnнwть матрицу

Произеедение

Рис. 210. Нахождение произведения элементов матрицы

Листинг программы

PuЬlic Class Forml


Dim а As Integer (,)
Dim m, n , i , J , k As Integer
Di m у2 , yl , rl, r2 As Stri ng
Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
'Процедура запол не н ия ма т рицы вруч ную и с ге н ератором
случайных чисел
m = Val(TextBoxl . Text )
n = Val(TextBox2 . Text )
ReDim а (m, n)
Se l ect Case ComboBoxl . Select edindex
Case О
For i = 1 То m
For J 1 То n
rl = Str(i)
r2 = Str(j)
k = I nрu t Вох( " Элемен т
массива а (" + rl + " " + r2 + " ) = ", " Ввод значений
'
э л еме н тов массива А() ")

504
a(i , j) = Val( k)
ТехtВохЗ . Text &= а (i , j) &
Space(5)
Tex t BoxЗ . Text &= Space(5)
Next
T extBoxЗ . T ext &= vbCrLf & vb-
Cr Lf
Next
Case 1
Dim r andomNumber As Random - New
Random ()
Tex t BoxЗ . Tex t = ""
For i = 1 То m
Tex tB oxЗ . Tex t &= vbCrLf & vb-
CrLf
For j = 1 То n
a(i , j) = randomNumbe r.
Next(21)
ТехtВохЗ . Text &= а (i , j) &
vbTab
Next
Next
End Select
End SuЬ

Private SuЬ Button2_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Button2.
Click
'Процедура первых ч етырех классических с п особов
обработки ма тр иц
Di m kol, sum As I nt ege r
Se le ct Case ComboBox2 . Selectedindex
Case О
kol = О
For i - 1 То m
For j = 1 То n
I f а ( i , j ) >= 1 О Then
kol = ko l + 1
End I f
Next
Next
TextBox4 . Text - Str( kol)

505
Case 1
sum = О
For i = 1 То m
For j = 1 То n
If (i, j) >= 1 О Then
а
sum - sum + а ( i , j)
End If
Nex t
Next
TextBox4 . Text = Str (sum)
Case 2
Dim proizv As DouЫe
proizv = 1
For i = 1 То m
For j = 1 То n
I f а ( i , j) >= 1 О Then
pro1zv = pro1zv * а (i, j)
End If
Next
Next
TextBox4 . Text = Str (proizv)
Case 3
Dim max As Int ege r
max - а ( 1 , 1 )
For i = 1 То m
For j = 1 То n
If a(i , j) > max Then
max - а ( i , j)
End I f
Next
Next
TextBox4 . Text - Str (max)
End Select
End SuЬ

Private Sub ButtonЗ_Click(ByVal sender As System.


Object, ByVal е As System . EventArgs) Handles ButtonЗ .
Click
' Процедура заполнения матрицы с гене ра то ром

случайных чисел

506
m = I nputBox ( " Введите количество с т олбцов " )
n = I nputBox ( " Введите количество с т рок " )
ReD i m а (m, n)
Di m randomNumbe r As Random = New Random ()
TextBox5 . Tex t - ""
T extBoxб . Tex t = ""
Fo r i = 1 То m
Tex t Box5 . Tex t &= vbC rL f & vbC rLf
For j = 1 То n
a( i, j) = randomNumbe r. Next(2 1 )
TextBox5 . Text &= а ( i, j) & vbTab
Nex t
Nex t
End SuЬ

Private SuЬ ButtonS_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles ButtonS .
Click
'Процедура обмена с т рок ма т ри цы
Di m n st r 1 , n str 2 , bu f er As Intege r
n str 1 = InрutВох( " Введи т е н омер строки ,
которая подлежит замене " )
n str 2 = InputBox ( " Введи т е н омер строки ,
которую обменяем " )
'Обмен строк
For j = 1 То n
bufer = a(n s t r 2 , j)
a(n_ s tr_2 , j) - a(n_ str _ l, j)
a(n s tr 1, j) = buf e r
Nex t
For i = 1 То m
Tex t Boxб . Tex t &= vbC rL f & vbC rLf
Fo r j = 1 То n
TextBox 6 . Text &= а ( i, j) & vbTab
Next
Next
End SuЬ

Private SuЬ Button4_Click(ByVal sender As System .


Object, ByVal е As System.EventArgs) Handles Button4 .
Click
'Процедура обмена столбцов матрицы

507
Dim n_ s t _ l, n_ st_ 2 , buf e r As Integer
n st 1 = Inрu t Вох( " В в еди т е н омер с т олбца ,
который по длежит замене " )
n st 2 = In рut В ох( " Введите номер стол б ц а ,
к о т орый обме няем")
' Обме н с т олб ц ов
Fo r i = 1 То m
bu f e r = a( i , n st 2)
a(i , n- s t - 2) - a( i, n st 1)
a(i , n- s t - 1) = bu f er
Next
Fo r i = 1 То m
TextBoxб . Tex t &= vbC rL f & vbC rLf
Fo r j = 1 То n
TextBox 6 . Text &= а ( i, j) & vbTab
Next
Next
End SuЬ

Private SuЬ Buttonб_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Buttonб.
Click
'Процедура запол не ния ма т р ицы с генератором слу чайных
чисел

m = I nputBox ("Вве дите количество с т олбцов " )


n = I nputBox ("Вве дите количество с т рок ")
ReDim а (m, n)
Dim randomNumber As Random = New Random ()
TextBox7 . Tex t - ""
TextBox8 . Tex t = ""
For i = 1 То m
TextBox7 . Tex t &= vbC rL f & vbC rLf
Fo r j = 1 То n
a(i, j) = r andomNumber . Nex t (21)
Text Box7 . Tex t &= а ( i, j) & vbTab
Next
Nex t
End SuЬ

Private SuЬ Button7_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Button7.
Click
'Процедура т ра н спо нирова ния матрицы

508
Dim Ь As Intege r ( ,) - New In t ege r (5, 5) {}
For i = 1 То m
For j = 1 То n
b(j, i) = a(i, j)
Next
Next
For i = 1 Т о m
TextBox8 . Text &= vbCrL f & vbCrLf
For j = 1 То n
Text Box8 . Tex t &= Ь ( i, j) & vbTab
Next
Next
End SuЬ

Private SuЬ Button8_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Button8.
Click
'Процедура н ахожде ния произведе ния элеме нт ов ма т р ицы
m = Inpu tBox ( "В ведите количество стол б ц ов " )
n = Inpu tBox ( "В ведите количество стро к")
ReDim а (m, n)
Di m randomNumbe r As Random = New Random ()
TextBox7 . Tex t - ""
TextBox8 . Tex t - ""
TextBox9 . Tex t - ""
Fo r i = 1 Т о m
TextBox7 . Text &= vbCrL f & vbCrLf
For j = 1 То m
a(i, j) = r andomNumber . Nex t (5)
Text Box7 . Tex t &= а ( i, j) & vbTab
Next
Next
Dim Ь As In teger (, ) = New Integer (m, n) { }
For i = 1 То m
TextBox8 . Tex t &= vbC rL f & vbC rLf
Fo r j = 1 То n
b( i, j) = randomNumbe r.Next(5)
TextBox8 . Text &= b( i, j) & vbTab
Next
Next
Di m с As In t ege r (, ) - New I n t ege r (m, n) { }
Fo r i = 1 Т о m

509
For j = 1 То n
c( i, j) = О
For k = 1 То m
c( i , j) = c(i, j) + a (i , k) *
ь (k , j)
Next
Next
Next
' Вывод резуль тирующей матрицы
For i = 1 Т о m
TextBox9 . Text &= vbCrLf & vbCrLf
For j = 1 То n
Text Box9 . Tex t &= с ( i, j) & vbTab
Next
Next
End SuЬ
End Class

Задания для самостоятельной подготовки

Изучить :
• операторы для ввода и вывода двумерных массивов;

• основные свойства матриц;


• работу элемента управления TabControl;
• принципы формирования]аggеd-массивов;
• классические способы обработки двумерных массивов;
• цели использования динамических массивов.

Разработать:
• интерфейс программы;
• программу решения задачи;

• тестовые варианты (число тестов равно числу ветвей вычисли­


тельного процесса) для проверки правильности функциониро­
вания программы.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект должен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;

510
• цель лабораторной работы;
• условие задачи.
3. Заставка к проекту выполняется:
• студентами 1 -й подгруппы с использованием программного кода,
который реализует эффект появления нестандартной формы
(см. прилож:ение 2, заставка № 7);
• студентами 2 -й подгруппы с использованием программного кода,
который реализует эффект появления нестандартной формы
на «колесиках~ (см. приложение 2, заставка № 8).
4. Главную форму разрабатываемого прило:>кения студенты 1-й
и 2 -й подгрупп программируют с использованием обычной формы.
5. Студенты обеих подгрупп при окончательной компоновке
проекта создают иконку с собственными инициалами и демон ­
стрируют преподавателю .ехе -файл приложения.
6. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе.
7. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро ­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

8. Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы, номер варианта.
3. Цель лабораторной работы.
4. Условие задачи.
5. Листинг программы.
6. Результаты выполнения программы.

Контрольные вопросы и задания

1. Что называется циклическим алгоритмом?


2. Как записывается сложный циклический процесс в блок­
схемах?
3. Как записывается сложный циклический процесс цикл
в программах?
4. Как работает сложный циклический процесс?
5. Каким образом осуществляется доступ к каждому элементу
двумерного массива при его обработке?

511
6. Поясните, как выполнить инициализацию двумерного мас­
сива.

7. Поясните, как выполнить объявление]аggеd-массива.


8. Каким образом осуществить вывод двумерного массива
на экран?
9. Нарисуйте базовые алгоритмы обработки двумерных мас­
сивов.

1О. Назовите основные свойства матриц.


11. П оясните, каким образом осуществляется обмен значений
элементов двумерного массива.

ЛАБОРАТОРНАЯ РАБОТА № 15.


ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ФОРМИРОВА Н ИЯ
И ОБРАБОТКИ ДВУМЕРНЫХ МАССИВОВ

Цели работы : овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с про­

граммированием двумерных массивов; получение дальнейших


навыков по отладке и тестированию программ; выработка при ре­
шении поставленных задач таких профессионально значимых ка­
честв, как самостоятельность, ответственность, точность, творче­

ская инициатива.

Пример выполнения работы

Условие : разработать проект, содержащий несколько форм.


Первая форма является заставкой к прилож:ению. На второй форме
реализовать решение задачи своего варианта. Организовать запрос
на выход из программы.

Создать иконку с собственными инициалами и скомпилировать


.ехе-файл.
Задача. В двумерном массиве произвольных чисел требуется
v v v
в каждои строке наити максимальныи элемент и записать его в вы-

ходной массив.
Разработка алгоритма решения задачи представлена на рис. 211.
Комментарий . Для поиска максимального элемента в ка:>кдой
строке матрицы используется стандартный прием нахождения мак­
симального элемента. Оператором x(i) = - 32767 первому элементу
матрицы может быть присвоено какое-то маленькое значение,
в нашем примере - число - 32 767.
Затем каждый элемент в строке матрицы будет сравниваться
с этим числом и если какой-то из них будет больше данного числа,

512
Начало

i =о 4
'

j = О, 4

a(i, j)

i = О, 4

x(i) = -32767

j = О, 4

Нет Да

x(i) = a(i, j)

i = О, 4

x(i)

Конец

Рис. 211. Алгоритм решения задачи

513
то он считается максимальным, и уже с ним будут сравниваться
оставшиеся элементы в текущей строке матрицы. Таким образом,
в каж:дой строке пр оисходят поиск максимального элемента и од­
новременно формирование результирующего массива оператором
x(i) = a(i, j). П оскольку в каж:дой строке матрицы МО)кет быть
только один максимальный элемент ( а строк всего пять), то пара­
метр цикла меняется от О до 4.
Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Dim i , j As I nteger
Di m а As Int ege r (, ) = New I nt ege r (4, 4) { }
Di m х As Int ege r () = New Intege r (4) { }
Di m randomNumbe r As Random = New Random ()
' Ус т ановка значе н ий с в ойств исхо дн ой ма т ри цы
Dat aG r idViewl . RowCount = 5 ' Количест в о с т рок
и с т олб ц о в
Dat aG r idViewl . ColumnCount = 5
Fo r j = О Т о 4
DataGri dVi ew l . Col umns(j) . Wi dt h - 60
' Уста н ав ливаем ширину стол б ц ов
Next
For i = О То а. Ge t UpperBound (О)
For j = О То а . GetUppe rBound ( 1) 'Выв одим
номера с т рок и стол бцов матрицы
DataGridVi ewl . Co l umns( i ) . Name =
i . ToString ()
DataGridVi ewl . Rows(j) .HeaderCell .
Val ue = j . ToString ()
Next
Next
' Ге н ерируем и за п ол н яем з н аче н ия элеме нт о в исход н ой
матрицы

Fo r i - О GetUppe r Bound (О)


То а.
For j = О То а . GetUpperBound ( 1)
a(i, j) = r andomNumber . Next (21)
Da t aGridViewl . I tem(j, i) . Val ue =
Conve r t . ToStri ng (а (i, j))
Next
Next

514
'Ус т ан о вка з начен ий с в о йств о дн омер н о г о ма с си ва

Dat aG r idView2 . RowCoun t = 2


Dat aG r idVi ew2 . ColumnCount = x . GetLe ngth( O)
For i = О То а . GetUpperBound ( О ) ' Ор ганизация
цикла по с т рокам

x(i) - - 32767 ' Формиро вание п ер в о г о

э ле ме н т а массива

For j = О То а. GetUpperBound ( 1 )
' Ор ганизация ци кла по стол б цам

I f а ( i, j) > х ( i) The n ' П р о ве р ка

каждого э леме н та масси в а

x (i ) - a (i , j )
End I f
Next
Next
Fo r i = О То х . GetUppe rBound ( О )
Da t aGri dVi ew2 . Col umns (i ) . Wi dt h = 50
Da t aGri dVi ew2 . Rows (O) . Cel l s (i ) . Val ue -
Convert.ToString(i)
Da t aGri dVi ew2 . Rows (l ) . Cel l s (i ) . Val ue -
Conve r t. ToStri ng( x (i ))
Next
End Sub
End Class

Задача. Сформировать двумерный массив, состоящий из че ­


тырех строк и четырех столбцов по правилу: а (i, j) = 2 (i - 2) 2 -
- (j - 2 ) 2 и определить максимальный элемент среди элементов,
лежащих ниже главной диагонали, а также минимальный элемент
среди элементов выше главной диагонали. Найденные макси­
мальный и минимальный элементы поменять местами.
Комментарий. Формирование значений элементов двумерного
массива а по заданной формуле и их вывод в виде матрицы произ ­
водятся с помощью вложенных циклов. В переменных amin и amax
в цикле фиксируются минимальный и максимальный элементы
матрицы , в переменных 1m1n, Jmtn и
.
1max, Jmax -
. их координаты

(номер строки и номер столбца); сначала это первый элемент ниже


диагонали и первый элемент выше диагонали.

515
Изменяя номера строки i с помощью внешнего цикла, отдельно
просматриваются элементы, расположенны е НИ)Ке (j О То i - 1) =
и выше (j = i+1 То 3) главной диагонали. После просмотра всех
элементов массива а в переменных imax и jmax фиксируются ко­
ординаты максимального элемента , а в п еременных 1m1n и Jmtn -
координаты минималь но го элемента.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(sender As Object, е As
EventArgs) Handles Buttonl.Click
Dim а( З , 3) As Integer
Dim i , j As Int eger
Di m i min , Jmin , i max , jmax , xmi n , xmax , r As
I nt eger
Fo r i = О Т о 3
For J = О То 3
а (i , j) = 2 * (i - 2) л 2 - (j -
2) л 2
Text Box l . Text &= а (i , j ) & Space ( 5 )
Te xt Box l . Text &= Space (S)
Next
TextBoxl . Text &= vbCrL f & vbCrLf

- о
- 1
- 1
- о
- а (О,

Next
For j = + 1 То 3
i
I f a(i , j) < xmin The n
xmi n - a (i , j )
i mi n - i
Jmi n - J

516
End I f
Next
Next
r = a(imax , j max)
a(imax, j max) - a(imin, jmin)
a(imin , jmin) = r
For i = О То 3
Fo r j = О То 3
TextBox2 . Text &= а (i, j) & Space (5)
TextBox2 . Text &= Space(S)
Next
TextBox2 . Text &= vbCrLf & vbCrLf
Next
End Sub
End Class

Результат работы программы представлен на рис. 212. Мини-


v v v
мальныи элемент матрицы, лежащии выше главнои диагонали равен

- 1, а максимальный элемент матрицы, лежащий ниже главной диа­


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

rt;} Двумерные массивы о х

Исходная матриuа Результирующая матрица

4 7 8 7 4 7 8 7

-2 1 2 1 -2 1 2 1

-4 -1 о -1 -4 -1 о 2

-2 1 2 1 -2 1 -1 1

Ok

Рис. 212. Результат работы программы

Задания для самостоятельной подготовки

Изучить :
• операторы для ввода и вывода двумерных массивов;

• основные свойства матриц;


• принципы формирования]аggеd-массивов;

517
• классические способы обработки двумерных массивов;
• цели использования динамических массивов.

Разработать:
• интерфейс программы;
• алгоритм решения задачи;

• программу решения задачи;

• тестовый вариант исходных данных.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ­


ходимо выполнить следующие требования.
Получить допуск к лабораторной работе при предъявлении
1.
преподавателю отчета по текущей лабораторной работе.
2. Проект должен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;
• вариант задачи.
3. Заставка к проекту выполняется:
• студентами 1-й подгруппы с использованием программного кода,
который реализует способ размещения изображ:ения из файла
в объект класса Bitmap (см. приложение 2, заставка № 10);
• студентами 2-й подгруппы с использованием программного кода,
который реализует способ размещения изображ:ения из файла
в объект класса Bitmap с использованием метода RotateFlipType
(см. прилож:ение, заставка № 11 ).
4. Главную форму разрабатываемого прило)кения студенты 1-й
и 2-й подгрупп программируют с использованием обычной формы.
5. Студенты обеих подгрупп при окончательной компоновке
проекта создают иконку с собственными инициалами и демон­
стрируют преподавателю .ехе-файл приложения.
6. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе.
7. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

8. Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

518
Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы.
3. Цель лабораторной работы.
4. Условие задачи.
5. Разработанный алгоритм.
6. Листинг программы.
7. Результаты выполнения программы.

Контрольные вопросы и задания

1. Что называется циклическим алгоритмом?


2. Как записывается слож:ный циклический процесс в блок­
схемах?
3. Как записывается слож:ный циклический процесс цикл
в программах?
4. Как работает слож:ный циклический процесс?
5. Каким образом осуществляется доступ к каждому элементу
двумерного массива при его обработке?
6. П оясните, как выполнить инициализацию двумерного мас­
сива.

7. Поясните, как выполнить объявление]аggеd-массива.


8. Каким образом осуществить вывод двумерного массива
на экран?
9. Нарисуйте базовые алгоритмы обработки двумерных мас­
сивов.

1О. Назовите основные свойства матриц.


11. Поясните, каким образом осуществляется обмен значений
элементов двумерного массива.

Варианты к лабораторной работе «Программирование


алгоритмов формирования и обработки двумерных массивов»
(порядковый номер студента по журналу соответствует
его номеру варианта)

Таблица47

Варианты заданий

Номер
Задача
варианта

1 Сформируйте двумерный массив случайных вещественных


чисел. В создааной матрице найдите сумму элементов,
сумма индексов которых равна четырем

519
Продолжение табл. 47
Н омер
Задача
варианта

2 Сформируйте двуме р~-rый массив случайных веществе~-rных


чисел. В создаиной матрице найдите иаибольший элемент
побоч~-rой диагонали

3 Сформируйте двумерный массив случайных целых чисел.


В созданной матрице найдите наибольший четный элемент

4 Сформируйте двумер~-rый массив случайных целых чисел.


В создаи~-rой матрице иайдите cpeдi-ree арифметическое по -
ложительных элемеитов

5 Сформируйте двумерный массив случайных целых чисел.


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

6 Сформируйте двуме р~-rый массив случайных целых чисел.


В созда~п1ой матрице иайдите сумму максимальиого
и ми~-rималы1ого элементов, лежащих, соответственно,

иа главной и побочной диагоиалях

7 Сформируйте двумерный массив случайных целых чисел.


В созданной матрице найдите сумму элементов на диаго-
нали, параллельной побочной А35 , А44 , А53

8 Сформируйте двуме р~-rый массив случайных целых чисел.


В созда~п1ой матрице иайдите минимальный элемент иа по -
бочной диагонали

9 Сформируйте двумерный массив случайных целых чисел.


В созданной матрице найдите сумму элементов, располо-
женных выше побочной диагонали

10 Сформируйте двуме риый массив случайных целых чисел.


В создаи~-rой матрице иайдите произведеиие нечетных эле -
меитов, расположеииых выше побочной диагоиали и ниже
u
г лав~-rои диаго~-rали

11 Сформируйте двумерный массив случайных целых чисел.


В созданной матрице найдите количество положительных
элементов, расположенных по ее периметру

12 Сформируйте двумер~-rый массив случайных целых чисел.


В созда~п1ой матрице иайдите количество отрицательиых
элементов, расположенных на ее диаго~-rалях, разработав
соответствующую фуикцию

13 Сформируйте двумерный массив случайных целых чисел.


В созданной матрице найдите количество положительных
элементов

520
Окончание табл. 47
Н омер
Задача
варианта

14 Сформируйте двумер~-rый массив случайных целых чисел.


В создаи~-rой матрице иайдите сумму максималыrых эле -
ментов, расположенных на главной и побочной диагоналях

15 Сформируйте двумерный массив случайных целых чисел.


В созда~п1ой матрице иайдите минимальный четный эле -
меит, расположеаный на побочиой диагонали

16 Сформируйте двумерный массив случайных целых чисел.


В созданной матрице найдите сумму элементов, находя-
щихся в диапазоне от 1О до 15
17 Сформируйте двумераый массив случайных целых чисел.
В созданной матрице найдите разность между макси-
мальным и минимальным элементами, лежащими, соответ-

ственно, на главной и побочной диагоналях

18 Сформируйте двумер~-rый массив случайных целых чисел.


В создаи~-rой матрице иайдите cpeдi-ree арифметическое эле -
ментов, лежащих, соответственно, на главной и побочной
диагоналях

19 Сформируйте двумераый массив случайных целых чисел.


В созда~п1ой матрице иайдите максимальаый из отрица-
тельаых элементов

20 Сформируйте двумерный массив случайных целых чисел.


В созданной матрице найдите сумму элементов, кратных
пяти и лежащих, соответстве~-rно, на главиой и побоч~-rой
диагоналях

21 Сформируйте двумерный массив случайных целых чисел.


В созданной матрице найдите сумму индексов максималь-
u
аого элемента главиои диагоиали

22 Сформируйте двумераый массив случайных целых чисел.


В созданной матрице найдите количество элементов,
равных нулю

23 Сформируйте двумер~-rый массив случайных целых чисел.


В создаи~-rой матрице иайдите сумму индексов мииималь -
аого элемента побочиой диагонали
24 Сформируйте двумерный массив случайных целых чисел.
В создаи~-rой матрице иайдите количество нечетиых эле -
меитов

25 Сформируйте двумерный массив случайных целых чисел.


В созданной матрице найдите произведение индексов мини-
мального положительного элемента

521
ЛАБОРАТОРНАЯ РАБОТА № 16.
РАЗРАБОТКА ТЕКСТОВОГО РЕДАКТОРА

Цели работы: овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с со ­

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


RichTextBox, диалоговых окон; получение дальнейших навыков
по отладке и тестированию программ; выработка при решении по ­
ставленных задач таких профессионально значимых качеств, как
самостоятельность, ответственность, точность, творческая иници ­

атива.

Пример выполнения работы

Условие: разработать проект, содер:>кащий несколько форм.


Первая форма является заставкой к прилож:ению. На второй форме
следует реализовать решение следующей задачи: Разр аботать
простой текстовый р едактор .
Информация будет отображаться в объекте Текстовое поле,
который мы поместим на форму. Сначала создадим меню, которое
будет содержать стандартные пункты: Открыть, Сохранить, За­
крыть, Шрифт. Пункты меню представлены на рис. 213.
--- - - - - - - - - - - - -

~. Текстооын редактор ~. Текстовын редактор


Файл 1 Файл Формат
- ~

Шрифт
С•ткр1::п1::.

Сохраннть

Эакрыт1::.
-
1
Рис. 213. П ункты меню текстового редактора

Непосредственно на форме будут располагаться следующие объ­


екты.

1. Элемент управления Текстовое поле (TextBox1) - для со ­


здания или загрузки текстовой информации. Свойство Multiline
( Несколько строк) объекта Текстовое поле долж:но быть устано ­
влено в значение True. Свойство ScrollBars ( Полосы прокрутки)
дол:>кно быть установлено в значение Both.
2. Элемент управления Надпись (Label1 ) - создаем для ото ­
бражения информации о пути к файлу.

522
3. Элементы управления SaveFileDialog, OpenFile Dialog,
FontDialog, MenuStrip.
Листинг программы

PuЬlic Class Forml


Private SuЬ SaveToolStripMenuitem_Click(ByVal sender
As System.Object, ByVal е As System.EventArgs) Handles
SaveToolStripMenuitem.Click
SaveFileDi alogl .Filte r = " Текстовые файлы
(* . txt) 1 * . txt "
SaveFileDialogl . ShowDialog() 'Отображение

диалогового окна Сохранить

Dim File As Stri ng = Save Fi leDia l ogl. FileName


' Имя выбранного файла

Dim Zapis As New System . IO . St reamWri te r(File)


' Открываем выбранный файл для записи
' Запись всего текста из текстового поля в выбранный

файл

Zapis . Wri te (TextBoxl . Text)


Zapis . Cl ose () ' Закрытие текстового файла
End SuЬ

Private SuЬ OpenToolStripMenuitem_Click(ByVal sender


As System.Object, ByVal е As System . EventArgs) Handles
OpenToolStripMenuitem.Click
OpenFileDialogl .Fi l ter = " Текс т овые файлы
(* . tx t) * . t xt "
1

If OpenFileDialogl.ShowDialog() = Windows.
Forms . DialogResult . Cancel Then
Exit Sub
End If
Dim Fi le As String = OpenFileDi alogl .FileName
' Имя выбранного файла
Dim Read As New System . IO .StreamReader(File)
' Открываем выбранный файл для чтения

' Считываем весь текст из выбранного файла в текстовое

пол е

TextBoxl . Text = Read . ReadToEnd


Read . Cl ose ()

523
Label l . Text = OpenFile Dial ogl . Fi leName
' Отображение п ути к файлу

End SuЬ

Private SuЬ CloseToolStripMenuitem_Click(ByVal


sender As System.Object , ByVal е As System.EventArgs)
Handles CloseToolStripMenuitem.Click
Appli cation . Exit ()
End SuЬ

Private SuЬ FontToolStripMenuitem_Click(ByVal sender


As System . Object, ByVal е As System .EventArgs) Handles
FontToolStripMenuitem . Click
FontDi alogl . ShowCo l or = True
FontDial og l .ShowDi alog()
TextBox l . Font = FontDi alogl . Font
TextBoxl .ForeCo l or = FontDi alogl . Color
End SuЬ
End Class

Внешний вид созданного текстового редактора представлен


на рис. 214.
-- - - ------ -

[11 Текстовый редактор GJ[QJL8]


Файл Формат

11ttp://www.п1ossa11epid. 1тa/sb1Jkhu·a/det _
itп.111ln
l1ttp ://1no .1nosreg.1ul1nai11/

12з1

C:\Documents and Settings\Cepreй\Moи док!jменты\3.tхt

Рис. 214. Вн ешний в и д формы разработанно го приложени я

524
На третьей форме приложения следует разработать текстовый
редактор с использованием элемента управления RichTextBox.
Элемент управления RichTextBox имеет расширенные функции
по сравнению с элементом управления TextBox. Элемент управ ­
ленияRichTextBox позволяет сохранять информацию в формате
RTF (Rich Text Format), осуществлять операции форматирования
над текстом, поиск данных. Таким образом, с помощью данного
средства управления пользователь может разработать программу,
по своим возможностям с ходн ую, например, с текстовым редак­

тором WordPad. Прежде чем приступить к разработке редактора,


необходимо добавить на форму элемент управления RichTextBox.
Внешний вид разрабатываемого приложения представлен
на рис. 215.
~ --------------------

~ Текстовый редактор ~[QJ~


Файл Формат

http://www.mossanepid.ru/strukturti/detitu.htm
http:Umo.mosreg.ru/mainA

Рис. 215. Вн ешний вид текстового редактора

Создадим пункты меню, представленные на рис. 216, 21 7.

Открыть

Сохранить

Закрыть

Рис. 216. Внешний вид меню Файл

525
Шрифт

Выравнивание ~ 1 По левоt1у краю

Маркированный список По центру

По правому краю

Файл

Выравнивание

Маркированн ый список Поставить

Снять

Рис. 217. Внешний вид меню Формат

Листинг программы

PuЬlic Class Forml


Private SuЬ SaveToolStripMenuitem_Click(ByVal sender
As System.Object, ByVal е As System.EventArgs) Handles
SaveToolStripMenuitem.Click
SaveFileDialogl . Filter = " Текстовые файлы l * .
tx tlRTF - фaйлы l * . RTF "

If SaveFileDi alogl . ShowDial og() = Wi ndows .


Forms . Dial ogResul t. Cancel Then
Exit Sub
End I f
Dim File As Stri ng = Save Fi leDia l ogl. FileName
' Имя выбран н ого файла
If Fi l e .EndsWi t h (" . RTF " ) Or Fi le . EndsWi th (".
r t f" ) Then
Ri chTextBoxl. Save Fi le(Fi l e)
El seI f File . EndsWi th (". ТХТ " ) Or File . Ends -
Wi th (". txt " ) Then
RichTextBoxl . Save File (Fi le , RichText -
BoxStreamType . PlainText) ' PlainText -
п рос той текст
Else

526
MsgBox ( " Не в озможно сохра ни ть фа йл да нн о г о
форма т а " )
End If
End SuЬ

Private SuЬ OpenToolStripMenuitem_Click(ByVal sender


As System . Object, ByVal е As System .EventArgs) Handles
OpenToolStripMenuitem.Click
OpenFi le Dia l ogl . Fi l t er = " Текс т о вые файл ыl * .
tx tl RT F =фaйлыl * . RT F "
If OpenFi l eDi alog l . ShowDial og() = Wi ndows .
For ms . Di alogResul t . Cancel Then
Exit Sub
End I f
Di m File As String = OpenFi l e Dialogl . FileName
' Имя в ыбран н ого файла
If Fi le . EndsWi th( " . RTF " ) Or Fi l e . EndsWit h
(".rtf" ) Then
Ri chTextBoxl. LoadFi le(File)
El se i f File . EndsWith( " . TXT " ) Or Fil e . End-
sWi t h (" . tx t" ) Then
RichText Boxl . LoadFi l e( Fi le , Ri chTextBox-
StreamType . Plai nText ) ' Plai nText - п ростой текс т
Else
МsgВох( " Не в озмож н о от к рыть файл д ан н о г о
форма т а " )
End I f
End SuЬ

Private SuЬ CloseToolStripMenuitem_Click(ByVal


sender As System.Object , ByVal е As System.EventArgs)
Handles CloseToolStripMenuitem.Click
Appli cation . Exit ()
End SuЬ

Private SuЬ FontToolStripMenuitem_Click(ByVal sender


As System.Object, ByVal е As System.EventArgs) Handles
FontшpифтToolStripMenuitem . Click
Font Di alogl . ShowCo l or = True
FontDial og l . ShowDi alog()
Ri chTextBox l . Select ionFont = FontDi alogl . Font
RichText Boxl . Se le cti onColor = FontDi alogl .
Color
End SuЬ

527
Private SuЬ Forml_Load(ByVal sender As System . Ob-
ject , ByVal е As System . EventArgs) Handles MyBase . Load
RichTextBoxl . Hi deSe l ecti on = False 'Ч тобы
выд елен ие не с нима л ось с фра г ме н та при уходе фокуса
с поля

End SuЬ

Private SuЬ LeftToolStripMenuitem_Click(ByVal sender


As System . Object , ByVal е As System . EventArgs) Handles
LeftToolStripMenuitem.Click
RichTextBoxl . Se le cti onAl ignment = Horizonta-
lAlignment . Left ' Выравнивание по левому краю
End SuЬ

Private SuЬ CentrToolStripMenuitem_Click(ByVal


sender As System . Object , ByVal е As System . EventArgs)
Handles CentrToolStripMenuitem.Click
RichTextBoxl . Se le cti onAl ignment = Horizontal-
Alignment . Center ' Вь~авнивание по центру
End SuЬ

Private SuЬ RightToolStripMenuitem_Click(ByVal


sender As System . Object , ByVal е As System . EventArgs)
Handles RightToolStripMenuitem . Click
RichTextBoxl . Se le cti onAl ignment = Horizontal-
Alignment . Right ' Выравнивание по правому краю
End SuЬ

Private SuЬ PostToolStripMenuitem_Click(ByVal sender


As System . Object , ByVal е As System . EventArgs) Handles-
PostToolStripMenuitem . Click
RichTextBoxl . Se le cti onBul let = True
End SuЬ

Private SuЬ SnToolStripMenuitem_Click(ByVal sender


As System.Object , ByVal е As System.EventArgs) Handles
SnToolStripMenuitem . Click
RichTextBoxl . SelectionBullet = False
End SuЬ
End Class

528
Создание панели инструментов для простого текстового
редактора

Поместим на форму элемент управления ToolStrip (Панель ин­


струментов). Находим свойство Items элемента управления. По­
явится окно, представленное на рис. 218.

ltems Collection Editor [1J[g)


2elect item and add to list below: IoolStripButton ToolStripButtonl

1§1 Button v~ [ в_dd ~1Ф


Members: Right тoleft No
Ш1 ToolStrip l

§) ToolStr1pButton 1
§) Tool5tripButton2
§) ToolStripButtonЗ
§) Tool5tripButton4
§) Т ool5tripButton5
§) ToolStripButtonб

Рис. 218. Окно редактора

Нажимая кнопку Add, мы добавляем очередную кнопку на Па­


нель инструментов, но для того чтобы кнопки имели вид значков,
следует после добавления очередной кнопки выбирать свойство
Image. Далее следует искать на локальном диске файл с расшире ­
нием .ico. При добавлении кнопок следует воспользоваться свой­
ством ToolTipText (Вспльmающая подсказка).
Вн е шний вид раз рабатываемого прило)ке ния представл е н
на рис. 219.
~ Текстовын редактор ~§~

Рис. 219. Внешний вид приложения

529
Листинг программы

PuЬlic Class Forml


Private SuЬ Forml_Load(ByVal sender As System.Ob-
ject, ByVal е As System . EventArgs) Handles MyBase . Load
Ri chTextBox l . Hi deSelection = Fal se ' Ч т обы
выделение не с нима л ось с фра гме н та при уходе фокуса
с пол я

End SuЬ

Private SuЬ ToolStripButtonl_Click(ByVal sender As


System.Object , ByVal е As System.EventArgs) Handles
ToolStripButtonl . Click
OpenFi l eDi alogl .Filter = " Текстовые фа йлы l * .
tx t l RTF-фaйлы l * . RT F"
If OpenFileDial og l . ShowDi alog() = Windows .
Forms . DialogResult . Cancel Then
Exi t Sub
End I f
Dim Fi l e As Str i ng - Open Fi leDia l ogl . Fi l eName ' Имя
в ыбран н о г о файла
If Fi le . EndsWi th( ". RTF " ) Or Fi le . EndsWi th
(" . rtf " ) Then
RichTex t Boxl . LoadFi l e( Fi le)
Elsei f Fi l e . EndsWith( ". TXT " ) Or File . Ends-
Wi t h (" . txt " ) Then
Ri chTextBoxl . LoadFi le(Fi l e , RichTextBox-
StreamType . PlainText) ' PlainText - прос т ой т екст
El se
МsgВ ох( " Невозможно о т крыт ь файл данно г о
формата " )
End I f
End SuЬ

Private SuЬ ToolStripButton2_Click(ByVal sender As


System . Object, Ву Val е As System . EventArgs) Handles
ToolStripButton2 . Click
SaveFi l eDi alogl. Filter = " Текстовые файлы ! *.
tx tl RT F - фaйлы l * . RT F "
If SaveFi l eDi alogl . ShowDial og() = Wi ndows .
Forms . DialogResult . Cancel Then
Exi t Sub
End I f
Di m File As String = SaveFi l e Dialogl . FileName
' Имя в ыбра н но г о файла

530
I f Fi le . EndsWith( ". RT F" ) Or Fi le . EndsWi th
(". rt f" ) Then
RichTex t Boxl . SaveFi l e( Fi le)
Else if Fi le . EndsWi th( ". TXT " ) Or Fi l e . End-
sWi t h (" . tx t " ) Then
RichTex t Boxl . SaveFi l e( Fi le , Ri chTextBox-
StreamType . PlainText) ' PlainText - прос т ой т е к ст
Else
MsgBox ( " Невозмож н о сохрани ть файл данного
форма т а " )
End I f
End SuЬ

Private SuЬ ToolStripButtonЗ_Click(ByVal sender As


System . Object, ByVal е As System . EventArgs) Handles
ToolStripButtonЗ.Click
FontDial og l . ShowColor = True
FontDial og l . ShowDi alog()
RichTextBoxl . Se le cti on Font = FontDial ogl . Font
Ri chTextBox l . Select ionCol or = Font Dial og l .
Color
End SuЬ

Private SuЬ ToolStripButton4_Click(ByVal sender As


System.Object , ByVal е As System.EventArgs) Handles
ToolStripButton4 . Click
Ri chTextBox l . Select ionAli gnment = Hori zontal -
Alignment . Left
End SuЬ

Private SuЬ ToolStripButtonS_Click(ByVal sender As


System . Object , ByVal е As System . EventArgs) Handles
ToolStripButtonS . Click
RichTextBoxl . Se le cti onAlignment = Horizontal-
Alignment . Cente r
End SuЬ

Private SuЬ ToolStripButtonб_Click(ByVal sender As


System . Object , ByVal е As System . EventArgs) Handles
To o lStripButtonб.Click
Ri chTextBox l . Select ionAli gnment = Hori zontal -
Alignment . Right
End SuЬ
End Class

53 1
Задания для самостоятельной подготовки

Изучить:
• порядок действий пользователя при создании меню;
• операторы, необходимые для работы с диалоговыми окнами;
• порядок действий пользователя при создании панели инст­
рументов.

Разработать:
• интерфейс программы;
• программу решения задачи;

• демонстрационную версию программы.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект должен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи.
3. Заставка к проекту выполняется:
• студентами 1-й подгруппы с использованием программного кода,
который реализует вывод векторного изображения на форму
(см. приложение 2, заставка № 12);
• студентами 2-й подгруппы с использованием программного кода,
который реализует метод рисования на форме с помощью мыши
(см. прилож:ение 2, заставка № 13).
4. Главную форму разрабатываемого приложения студенты 1-й
и 2-й подгрупп программируют с использованием обычной формы.
5. Студенты обеих подгрупп при окончательной компоновке
проекта создают иконку с собственными инициалами и демон ­
стрируют пре подавателю .ехе - файл приложения.
6. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе.
7. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

8. Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

532
Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы, номер варианта.
3. Цель лабораторной работы.
4. Условие задачи.
5. Листинг программы.
6. Результаты выполнения программы.

Контрольные вопросы и задания

1. Что представляет собой файл?


2. Приведите классификацию файлов.
3. Напишите синтаксис операторов, используемых для работы
с текстовыми файлами.
4. В чем вы видите разницу между операторами Write,
WriteLine, Print, PrintLine?
5. В чем заключается действие функций Spc(n) и Tab(n)?
6. Напишите синтаксис операторов, используемых для работы
с типизированными файлами.
7. Напишите синтаксис операторов, используемых для работы
с нетипизированными файлами.
8. Назовите основные методы класса File и класса Directory
и поясните их действие.

ЛАБОРАТОРНАЯ РАБОТА № 17.


РАБОТА С ФУНКЦИЯМИ И ПРОЦЕДУРАМИ

Цели работы : овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с при­

менением в программах функций и процедур; выработка при ре­


шении поставленных задач таких профессионально значимых ка­
честв, как самостоятельность, ответственность, точность, творче ­

ская инициатива.

Пример выполнения работы

Условие : разработать проект, содер:>кащий несколько форм.


Первая форма является заставкой к прилож:ению. На второй форме
реализовать решение следующей задачи.
Дана целочисленная матрица а( 4,4). Требуется поменять ме-
v v v
стами в неи строки: нулевую с четвертои, а первую с третьеи; вы-

вести полученную матрицу на экран.

Предусмотреть запрос на выход из программы. Создать иконку


с собственными инициалами и скомпилировать .ехе-файл.

533
Комментарий. Для решения задачи необходимо два)кды выпол­
нить одну и ту же операцию перестановки строк. Поэтому целе­
сообразно организовать процедуру перестановки заданных строк
двумерного массива и вызвать ее 2 раза с соответствующими значе ­
ниями фактических параметров. Параметрами процедуры с именем
Obmen являются двумерный массив Ь, количество столбцов этого
массива n, номера переставляемых строк k и i.
Разработка алгоритма процедуры представлена на рис. 220.

Начало процедуры Ob1ne11

j = О, 11

r = b(k, j)
b(k, j) = b(i, j)
b(i,j) = r

Конец

Рис. 220. Алгоритм разработки процедуры

Разработка алгоритма решения задачи представлена на рис. 221.

Начало

Ввод а, Ь

Obmen (а, 4, О, 4)

Ob1ne11 (а, 4, 1, 3)

Вывод а( 4, 4)

(_ _ _К_о_
н_ец_ _~)

Рис. 221 . Алгоритм событийной процедуры

534
Листинг программы

PuЬlic Class Forml


SuЬ Obmen(ByVal Ь( , ) As Integer , ByVal n As In-

teger , ByVal k As Integer , ByVal i As Integer)


Dim J ' r As I nteger
Fo r J - о Т о n
r - b( k, j)
ь (k, j) - ь (i' j)
ь (i ' j) - r
Next
End Sub

Private Sub Buttonl_Click(sender As Object , е As


EventArgs) Handles Buttonl . Click
Dim i , j As I nteger
Di m а As Int ege r (, ) = New I nt ege r ( 4, 4) { }
Di m randomNumbe r As Random = New Random ()
TextBoxl . Text - ""
TextBox2 . Text = ""
For i = О То 4
TextBoxl . Text &= vbC rL f & vbC rLf
For j = О То 4
a( i, j) = randomNumbe r . Next(З l)
Text Box l . Text &= а ( i, j) & vbTab
Next
Next
Obmen(a , 4, О , 4)
Obmen (а, 4 , 1 , 3)
Fo r i = О Т о 4
TextBox2 . Text &= vbCrL f & vbCrLf
For j = О То 4
Text Box2 . Tex t &= а ( i , j) & vbTab
Next
Next
End Sub
End Class

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

535
•J Двумерн ые массивы о х

Исходкая матрица Результирующая матрица

23 4 о 12 25 25 3 21 24 13

4 6 22 23 23 16 4 1 28 9

17 29 30 25 14 17 29 30 25 14

16 4 1 28 9 4 6 22 23 23

25 3 21 24 13 23 4 о 12 25

Ok

Рис. 222. Нулевую строку обменяем с четвертой ,


первую - с третьей

Задания для самостоятельной подготовки

Изучить:
• модель событийных процедур;
• возможности передачи параметров по ссылке и по значению;

• способы вызова SиЬ-процедур;


• работу Function- процедур;
• возможности передачи массивов в процедуры.

Разработать:
• алгоритм решения поставленной задачи в соответствии с вари-
антом;

• интерфейс программы;
• программу решения задачи;

• тестовые варианты (число тестов равно числу ветвей вычисли­


тельно го проц есса) для проверки правильности функциониро ­
вания программы.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект долж:ен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;

536
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;
• вариант задачи.
3. Заставка к проекту выполняется:
• студентами 1-й подгруппы с использованием элемента управ­
ления ProgressBar (см. приложение 2, заставка № 4);
• студентами 2-й подгруппы с использованием программного кода,
который реализует эффект появления формы произвольной
конфигурации (см. прилож:ение 2, заставка № 14).
4. Главную форму разрабатываемого приложения студенты 1-й
и 2-й подгрупп программируют с использованием обычной формы.
5. Студенты обеих подгрупп при окончательной компоновке
проекта создают иконку с собственными инициалами и демон ­
стрируют преподавателю .ехе-файл приложения.
6. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе.
7. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро ­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

8. Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы, номер варианта.
3. Цель лабораторной работы.
4. Условие задачи.
5. Разработанный алгоритм включает: алгоритм функции или
процедуры в зависимости от варианта, а также общий алгоритм ре ­
шения задачи.

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

Контрольные вопросы и задания

1. В чем заключается принцип процедурного программиро-


вания?
2. Какие типы процедур используют в VB?
3. Какие два объекта передаются обработчикам событий?
4. Напишите синтаксис SиЬ-процедуры. Каков синтаксис
списка параметров?

537
В чем заключается отличие между функцией и процедурой?
5.
Какими способами можно произвести вызов процедуры Sub
6.
из другой процедуры?
7. Какой синтаксис используется для объявления функции?
8. Охарактеризуйте два способа передачи аргументов: передачу
по значению и передачу по ссылке.

Варианты к лабораторной работе


« Работа с функциями и процедурами »
(порядковый номер студента по журналу соответствует
его номеру варианта)

Таблица48

Варианты задани й

Н омер
Задача
варианта

1 В исходаом массиве случайаых чисел найдите количество


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

2 В исходаом массиве случайных чисел аайдите произведеаие


и количество отрицательиых элементов, имеющих иечетиые

индексы, разработав соответствующие функции. Р азрабо­


тайте процедуру, которая формирует новый массив из тех
элементов исходного массива, значения которых равны ко­

личеству найденных отрицательных элементов

3 В исходаом массиве случайиых чисел найдите сумму


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

4 В исходном массиве случайных чисел найдите число ин­


версий, разработав соответствующую функцию. Ииверсией
~-rазывается пара элемеитов, в которой большее число рас­
положено слева от меньшего . Р азработайте процедуру, ко­
торая формирует новый массив из тех элементов исходного
массива, значения которых больше количества найденного
числа инверсий

538
Продолжение табл. 48
Н омер
Задача
варианта

5 В исход~-rом массиве случайиых чисел найдите макси­


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

6 В исходаом массиве случайаых чисел найдите сумму


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

меньше найденной суммы четных элементов

7 В исходном массиве случайных чисел найдите мини­


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

8 В исходном массиве случайных чисел найдите среднее


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

9 В исходI-Iом массиве случайиых чисел найдите макси­


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

1О В исходI-Iом массиве случайиых чисел найдите разиость


между максимальным четным и ми~-rимальиым I-Iечет~-rым

элементами, разработав соответствующую функцию. Разра­


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

I-Iайдеиной разности максимальиого четиого и ми~-rималь ­


ного нечетного элементов

11 В исходаом массиве случайиых чисел иайдите среднее


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

539
Продолжение табл. 48
Н омер
Задача
варианта

12 В исход~-rом массиве случайиых чисел найдите количество


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

13 В исходном массиве случайных чисел найдите сумму


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

14 В исходI-Iом массиве случайиых чисел иайдите i-roмep макси ­


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

равны номеру максимального элемента

15 В исходном массиве случайных чисел найдите количество


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

16 В исходаом массиве случайиых чисел найдите количество


элементов, находящихся в диапазоне от 5 до 15, разработав
соответствующую функцию. Разработайте процедуру, ко­
торая формирует новый массив из тех элементов исходного
массива, значения которых меньше найденного количества
элементов, ааходящихся в диапазоие от 5 до 15
17 В исходном массиве случайных чисел найдите номер мини­
мального элемеита, разработав соответствующую функцию.
Разработайте процедуру, которая формирует новый массив
из тех элементов исходного массива, значения которых

больше номера миаимальиого элемента


18 В исходном массиве случайных чисел найдите мини­
мальный отрицательиый элемеат, разработав соответ­
ствующую функцию. Разработайте процедуру, которая фор­
мирует ~-rовый массив из тех элементов исходиого массива,
значеиия которых по модулю меньше I-Iайдениого миии ­
мального отрицательного элемента

540
Окончание табл. 48
Н омер
Задача
варианта

19 В исход~-rом массиве случайиых чисел найдите сумму ие ­


четиых элементов, разработав соответствующую функцию.
Разработайте процедуру, которая формирует новый массив
из тех элементов исход~-rого массива, значеиия которых

меиьше найдеаной суммы нечетных элемеатов

20 В исходном массиве случайных чисел найдите разность


между максимальным и минимальным элементами, разра­

ботав соответствующую фуакцию. Разработайте процедуру,


которая формирует новый массив из тех элементов исход­
ного массива, значения которых меньше найденной р аз­
аости максимального и минимального элемеатов

21 В исходаом массиве случайиых чисел иайдите количество


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

22 В исходI-Iом массиве случайиых чисел иайдите сумму ин ­


дексов максимального и минимального элементов, разра­

ботав соответствующую функцию. Разработайте процедуру,


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

23 В исходаом массиве случайиых чисел иайдите сумму тех


элементов, которые делятся на три и i-re делятся иа пять,

разработав соответствующую функцию. Разработайте про­


цедуру, которая формирует новый массив из тех элементов
исходиого массива, ЗI-Iаче~-rия которых меньше I-Iайден~-rой
суммы тех элемеитов, которые делятся иа три и не делятся

на пять

24 В исходаом массиве случайиых чисел иайдите сумму


квадрат~-rых кор~-rей четиых элементов, разработав соответ­
ствующую функцию. Разработайте процедуру, которая фор­
мирует новый массив из тех элементов исходного массива,
значеиия которых меньше иайденной суммы квадратных
корией четных элементов

25 В исходном массиве случайных чисел найдите мини­


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

541
ЛАБОРАТОРНАЯ РАБОТА № 18.
РАЗРАБОТКА ГРАФИЧЕСКОГО РЕДАКТОРА

Цели работы: овладение практическими навыками разработки


и программирования вычислительного процесса, связанного с ис ­

пользованием методов, позволяющих создавать графические при ­


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

Краткие теоретические сведения

Не секрет, что пользователь, работающий с той или иной при ­


кладной программой, первоначальное впечатление о ней получает
с помощью пользовательского интерфейса. Язык программиро ­
вания Microsoft Visual Basic предлагает разработчику средства, с по ­
мощью которых МО)КНО создавать привлекательные прило)кения.

Графическое ядро GDI+ (Graphics Device Interface - интерфейс


графических устройств) представляет широкие возможности ра­
боты с графикой, в частности, поддержку градиентной заливки,
трансформацию объектов, работу с разными форматами растровых
и векторных изображений.
Любой программный код проекта в VB использует пр о ­
странства имен. В частности, пространство имен System, в ко­
тором содержатся типы, обеспечивающие выполнение операций
с графическими примитивами, называется System. Drawing.
В данное пространство имен входят так называемые структуры,
которые, как и классы, массивы, коллекции, являются собранием
данных.

П риведем примеры некоторых структур. Например, в структуре


P oint собраны данные о точке, которая служит, в частности, для
указания координат различных геометрических фигур.
Экземпляр структуры P oint создается путем указания коор ­
динат точки:

Dim pt As Point = New Point(l0 0 ,1 00 )


или

pt . X - 100
pt . у - 100
Структура Size определяет размеры - высоту и ширину рису­
емой на плоскости геометрической фигуры:

542
Dim s z As Siz e = New Size (100 , 1 00)
sz . Width = 1 00
sz . Heigh t = 100

Следующий листинг поможет определить координаты любой


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

ординаты х и у указателя мыши.

Листинг программы

PuЬlic Class Forml


Private SuЬ Forml_MouseMove(ByVal sender As Object,
ByVal е As System.Windows.Forms.MouseEventArgs) Han-
dlesMe.MouseMove
TextBoxl . Text - е . Х
TextBox2 . Text - е . У
End SuЬ
End Class

Связанные с библиотекой G D 1+ классы определены в сле­


дующих пространствах имен:

· System.Drawing - предоставляет такие графические классы,


как Pen, Image, Font, Brushes, Region, Bitmap и т.д.;
· System.Drawing.Drawing2D - предоставляет дополни­
тельные классы плоской и векторной графики , такие как
LinearGradientBrush и Matrix;
· System.Drawing.Imaging - предоставляет дополнительные
классы для работы с изображениями;
· System.Drawing. Text - предоставляет классы для работы с тек­
стом.

Класс Graphics предоставляет методы для вывода в устройстве


отобра:>кения. С его помощью на форме или элементе управления
можно расположить линии, фигуры, текст, изображения.
Поэтому, приступая к работе с графикой, в первую очередь необ­
ходимо создать объект Graphics, который используется в качестве
поверхности для рисования и предназначен для создания графиче­
ских изобра)кений.
Доступ к графической поверхности объекта можно реализовать
через обработку события Paint, воспользовавшись параметром е,
свойство Graphics которого представляет собой графическую по-

543
верхность объекта. Событийную процедуру Form1_Paint() МО)КНО
создать нажатием кнопки События панели Свойства.
В табл. 49 представлены основные методы создания графиче­
ских примитивов и примеры их создания.

Таблица49

Основные методы создания графических примитивов

Метод Описание примитива, пример

DravvLine Рисование линии. П араметры х1, у1, х2, у2 опре ­


(Pen,x1,y1,x2,y2) деляют коордиI-Iаты началы-rой и коиечиой точек
линии .

Private Sub Form1_Paint(sender As Object, е As


PaintEventArgs) Handles MyBase.Paint
Di1n g As Grapl1ics
g = Me.CreateGraphics
Dim pn = New Pen(Color.Black, 3)
g. DrawLine(pn, 20, 20, 150, 20)
End SнЬ
Dravv Rectangle Рисование прямоугольника. Параметры х1, у1, х2,
(Pen,x1,y1,x2,y2) у2 определяют координаты, находящиеся на одной
диагонали углов прямоугольиика.

Private Sub Form1_Paint(sender As Object, е As


PaintEventArgs) Handles MyBase.Paint
Dim g As Graphics
g = Me.CreateGraphics
Di1n pn = New Pen(Color.Black, 3)
g.DravvRectangle(pn, 20, 20, 150, 80)
End SнЬ
DrawEllipse Рисование эллипса. П араметры х1, у 1 , х2, у2
(Pen,x1,y1,x2,y2) определяют коордииаты диагоиальных углов об­
ласти , виутри которой вычерчивается эллипс.
Private Sub Form1_ Paint(sender As Object, е As
PaintEventArgs) Handles MyBase.Paint
Dim g As Graphics
g = Me.CreateGraphics
Dim pn = New Pen(Color.Black, 3)
g.DravvEllipse(pn, 20, 20, 150, 50)
End Sub
DravvArc Рисование дуги. П араметры х1, у1, х2, у2 опре ­
(Pen,x1,y1,x2,y2, деляют координаты диагональных углов области,
ugol1, ugol2) внутри которой вычерчивается эллипс . П ар аметр
нgol1 - иачальный угол, нgol2 - длина дуги в гра ­
дусах.

544
Продолжение табл. 49
Метод Описание примитива, пример

Private Sub Form1_ Paint(sender As Object, е As


PaintEventArgs) Handles MyBase.Paint
Di1n g As Graphics
g = Me.CreateGraphics
Di1n pn = New Pen(Color.Black, 3)
g.DravvArc(pn, 20, 20, 360, 190, 180, 180)
End Sub
DrawPie Рисование сектора. П араметры х1, у1, х2, у2 опре­
(Pen,x1,y1,x2,y2, деляют коордииаты диагоиальиых углов области,
ugol1, ugol2) внутри которой вычерчивается эллипс . П ар аметр
нgol1 - иачальный угол, нgol2 - длина дуги
окружности, формирующий сектор, в градусах.
Private Sub Form1_ Paint(sender As Object, е As
PaintEventArgs) Handles MyBase.Paint
Dim g As Graphics
g = Me.CreateGraphics
Di1n pn = New Pen(Color.Black, 3)
g.DravvPie(pn, 20, 20, 360, 190, 180, 20)
End Sub
DravvString (stroka, Вывод строки те кста. Параметр Font определяет
Font, Brush, х, у) шрифт текста, Brush - цвет символов, параметры
х, у - координаты точки, от которой выводится
текст.

Private Sub Form1_ Paint(sender As Object, е As


PaintEventArgs) Handles MyBase.Paint
Di1n g As Graphics
g = Me.CreateGraphics
Di1n br = New SolidBrush(Color.Blue)
g.DravvString( " Лабораториая работа " , New
Font( "Ti1nes New Roman", 24), br, 20, 20)
End SнЬ
Dravvlmage (image, Вывод изображения. Параметр irnage определяет
х, у) выводимое изображение, параметры х, у - коор­
динаты точки, от которой выводится изображение:
Private Sub Form1_ Paint(sender As Object, е As
PaintEventArgs) Handles MyБase.Paint
Di1n g As Graphics
g = Me.CreateGraphics
Di1n my_ Image As Image = Image.
FromFile( " С\ 1.jpg" )
g.Dravvlmage(my_ Image, New Point(10, 10))
End Sub

545
Окончание табл. 49
Метод Описание примитива, пример

FillRectaпgle Рисование закрашенно го прямоугольника.


(Brush,x1,y1,x2,y2) Private Sub Form1_Paint(sender As Object, е As
PaiпtEveпtArgs) Haпdles MyBas e. Paiпt
Di1n g As Graphics
g = Me.CreateGraphics
Di1n br = New SolidBrush(Color.Blue)
g.FillRectaпgle(br, 20, 20, 160, 90)
End SнЬ
FillEllipse Рисование закрашенно го эллипса .
(Brush,x1,y1,x2,y2) Private Sub Form1_ Pai11t(se11der As Object, е As
PaintEventArgs) Handles MyBase. Paint
Di1n g As Graphics
g = Me.CreateGraphics
Dim br = Nevv SolidBrush( Color.Blue)
g.FillEllipse(br, 20, 20, 360, 190)
Епd Sub

FillPie Рисование закрашенного сектора.


(Brush,x1,y1,x2,y2, Private Sub Form1_ Pai11t(se11der As Object, е As
ugol1, ugol2) PaiпtEveпtArgs) Haпdles MyBas e. Paiпt
Dim g As Graphics
g = Me.CreateGraphics
Di1n br = New SolidBrush(Color.Blue)
g.FillPie(br, 20, 20, 360, 190, 180, 40)
Епd Sub

Практическое выполнение текущей лабораторной работы ,


а также программ, размещенных в приложении 2, позволит ознако­
миться с большинством базовых типов пространства имен Systern.
D rawing, а также приобрести навыки улучшения интерфейса
обычных пользовательских программ. Комментарии помогут уяс ­
нить ряд подходов, используемых при визуал изации графических
данных.

Пример выполнения работы

У сло:вие: разработать проект, содер)кащий несколько форм.


Первая форма является заставкой к прилож:ению. На второй форме
разработать программу ~ Графический редактор» , которая обладает
следующими функциями:
• позволяет рисовать мышью как карандашом;

• сохраняет созданное изобра)кение в диалоговом ре)киме;


• открывает созданное изобра)кение в диалоговом режиме;

546
• имеет возмо)кность выбора цвета карандаша;
• имеет панель инструментов, с помощью которой появляется воз ­
МО)кность создавать такие графические примитивы, как линия,
окружность, квадрат и т.д.;

• позволяет пользоваться системой меню;


• имеет возмо)кность увеличивать толщину линии;

• имеет строку состояния.

Внешний вид разработанного графического редактора пред ­


ставлен на рис. 223.

fll Графнческнн редактор L;J(QJ[RJ


F~e Edit Colors

Рис . 223. Внешний вид разработанного графического редактора с загру­


женным изображением

Перед созданием графического редактора на форму следует по ­


местить элементы управления, указанные на рис. 224.

~ MenuStrip1 L statusstripl е Тimerl J!..!! ToolStrip 1 ~ ColorDialog 1 [! OpenFileDialog 1

[! SaveFileDialog 1

Рис.224. Элементыуправления

547
После размещения панели инструментов ToolStrip следует за­
полнить ее кнопками. Для этого находим свойство Items данного
элемента управления. Появится окно ItemsCollectionEditor, в ко ­
тором надо последовательно добавить кнопки (Button) и раздели­
тели (Separator). Подобная ситуация представлена на рис. 225.

ltems Collection Editor [1](8]


aelect item and add to list below: IoolStripButton ToolStripButton l

1@ Button v 1[ f!.dd
~t i 1
мembers: 13 Appearance
@:!!: ТoolStrip 1 BackColor О Control
@ Т oolStr1pButton 1 Background!mage О (none)
1 ToolStripSeparator 1 Background!magelayout Tile

@ Too1Strip8utton2 Checked False


CheckState Unchecked
1 Too1Strip5eparator2
DisplayStyle Image
@ ToolStripButtonЗ
1±1 Font Tahoma; B, 25pt
1 ToolStripSeparatorЗ
ForeColor • ControlText
@ Too1StripButton4
1±1 Image \lDI Syst e m.Dra wing.Bil
1 Too1Strip5eparator4
ImageAlign MiddleCenter
@ ToolStripButtonS
ImageScaling Size ToFit
1 Too1Strip5eparator5 ImageTransparentColor • M a genta
RightToleft No
RightToleft AutoMirrorl m False

ОК J [ Cancel

Рис. 225. Окно ltems Collection Editor

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


Image. В появившемся окне SelectResource через кнопку Import
указываем путь к графическому изобра)кению, которое будет нахо ­
диться на созданной кнопке (рис. 226).
Select Resource [1J[RJ
ResOLl'ce context
@ !,.oc~I resource:
1 l!!JPOrt ·" 11 ~1-
0 eroject resource file :

UI.

IrnJ:юrt .

Рис. 226. Окно Select Resource

548
Для того чтобы созданная панель инструментов находилась
слева, следует воспользоваться свойством Dock панели инстру­
ментов ToolStrip. На эту же панель следует нанести элемент управ­
ления NumericUpDown, который будет отвечать за толщину пера.
Важ:ное отличие программирования кнопок панели инстру ­
ментов от программирования обычных кнопок состоит в том, что
процедура обработки нажатия на кнопки панели одна для всех
кнопок.

Таким образом, следует сделать двойной щелчок мыши по па­


нели инструментов для создания процедуры:

Private SuЬ ToolStripl_ItemClicked(ByVal sender As


System.Object, ByVale As System.Windows.Forms.ToolStrip-
ItemClicked.EventArgs) HandlesToolStripl.ItemClicked

End SuЬ

Объект е, являющийся параметром процедуры Too1Strip1_


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

- 1
File Edit Colors Edit Colors
1
. - Оп:::рыт1::. Очн1:тнт1::.

~- -
Сохранит~:.
'
1
Еi1::.1ход
-
-- ~

Рис. 227. Вложенные пункты меню

В приведеннном ниже листинге представлен код программы.

Листинг программы

Import s Sys t em. Drawing. Drawing2D


PuЬlic Class Forml
' Ко о р д инаты мыши п ри п р едыдущем н ас тупл ени и с о б ыт и я
Mous eMove

549
Dim х, у As Long
Dim xolst As Bitmap
Dim gr , mygraf As Gr aphics
' Ц ве т каранда ша
Di m pn As New Pen(Col or . Blac k, 3)

Private SuЬ Forml_Load(ByVal sender As System . Ob-


ject , ByVal е As System . EventArgs) Handles MyBase . Load
Ti merl . E naЬled = True
xolst = New Bitmap(Me . Widt h , Me . He i ght)
gr = Gr aphics . Fromi mage(xolst)
mygraf = Me . Cr eat eGr aphics
' Ина че линия пол учается не гладкая
pn . St ar t Cap = LineCap . Round
pn . EndCap = LineCap . Round
End SuЬ

Private SuЬ Timerl_Tick(ByVal sender As System.Ob-


ject , ByVal е As System.EventArgs) Handles Timerl.Tick
ToolStripS ta tus 1abe l 2 . Text - System . DateTime .
Today . ToLongDate St r ing
T oo l S tri pSta t usLabelЗ . Tex t - Sys t em . DateTime .
Now . ToLongTimeSt r i ng
End SuЬ

Private SuЬ ColorToolStripMenuitem_Click(ByVal


sender As System . Object , ByVal е As System . EventArgs)
Handles ColorToolStripMenuitem . Click
Color Dialogl . ShowDial og()
pn . Color = Color Dialogl . Color
End SuЬ

Private SuЬ ClearToolStripMenuitem_Click(ByVal


sender As System.Object , ByVal е As System.EventArgs)
Handles ClearToolStripMenuitem.Click
Me . Refresh()
End SuЬ

Private SuЬ ToolStripl_ItemClicked(ByVal sender As


System . Object , ByVal е As System . Windows . Forms . Tool-
StripitemClickedEventArgs) Handles ToolStripl . Item-
Clicked

550
Dim gr As Graphi cs = Me . CreateGraphi cs
I f e . Cli ckeditem I s ToolStripButtonl Then
gr . DrawLine(New Pen( ColorDialogl. Color ,
3)' 300 , 300, 300, 150)
End If
I f e . Clic keditem Is ToolSt ri pButt on2 Then
gr . DrawRectangle(New Pen(Co l or Dialogl .
Col or, 3) , 50 , 100 , 100 , 100)
End If
I f e . Clic keditem Is ToolSt ri pButt on3 Then
gr . DrawEllipse(New Pen( ColorDial ogl. Color ,
3) ' 150 , 150 , 12 0 , 120)
End If
I f e . Clic keditem Is ToolSt ri pButt on4 Then
gr . Dr awEl l ipse(New Pen(Col o r Di alogl . Col o r ,
3) ' 250 , 285 , 250 , 115)
End If
I f e . Clic keditem Is ToolSt ri pButt on5 Then
gr . Dr awAr c(New Pen(Colo rDialogl . Color,
3) ' 450, 285 , 200 , 300 , 180 , 180)
End If
End SuЬ

Forml_MouseMove(ByVal sender AsObject, ByVal


SuЬ

е As System.Windows.Forms.MouseEventArgs) Handles

Me.MouseMove
I f e . Button = Windows . Fo r ms . MouseBut tons . Le ft
Then
' Рисуем отрезок прямой от текущего по л оже ния мыши

до предыдущего

gr . Dr awLine(pn, е . Х, е . У, х, у)

mygra f . DrawLi ne(pn, е . Х, е . У , х, у)

' Запоминаем т екущее положение мыши

х - е .Х

У = е.У

End If
End SuЬ

551
Private SuЬ Forml_MouseDown(ByVal sender AsObject,
ByVal е As System . Windows . Forms . MouseEventArgs) Handles
Me.MouseDown
'В на чаль ный момен т времени , к о гда нажимается кнопка
мыши

'предыдущее и т екущее положения мыши сов п адают


х - е . Х
у = е . У
End SuЬ

Private SuЬ OpenToolStripMenuitem_Click(ByVal sender


As System . Object, ByVal е As System . EventArgs) Handles
OpenToolStripMenuitem . Click
If OpenFi leDial og l .ShowDi alog() = Windows .
For ms . Di alogResul t.Cancel Then
Exi t Sub
End I f
gr . Draw i mage(New Bit map(OpenFi l e Dialogl . Fi le-
Name) , 1 О , 1 О )
mygraf . Dr awi mage(New Bitmap(OpenFil e Di alogl .
Fi l eName) , 10 , 10)
End SuЬ

Private SuЬ SaveToolStripMenuitem_Click (ByVal


sender As System.Object , ByVal е As System.EventArgs)
Handles SaveToolStripMenuitem.Click
SaveFi l eDi alogl .Filter = " Графические файлы l * .
bmp;* . jpg;* . giflBMP-фaйлыl* . bmp lB ce файлы l* . * "
I f SaveFi leDi alogl . ShowDia l og() = Windows .
Forms . DialogResult . Cance l Then
Exi t Sub
End I f
xolst .Save(SaveFi l e Dialogl . FileName, System .
Dr awi ng . Imaging . I mageFormat . Bmp)
End SuЬ

Private SuЬ NumericUpDownl_ValueChanged(ByVal sender


As System.Object, ByVal е As System.EventArgs) Handles
NumericUpDownl.ValueChanged
pn . Width = Numer i cUpDownl . Value
End SuЬ
End Class

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

File Edit Colors

Рис. 228. Использование панели инструментов для отрисовки примитивов

Следует отметить, что в разработанном графическом редакторе


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

Задания для самостоятельной подготовки

Изучить:
• способы создания объекта Graphics;
• геометрические структуры;

• методы работы с объектом Bitmap;


• методы рисования с помощью мыши;

• принцип создания строки состояния;

• принцип создания меню;

• принцип создания панели инструментов.

Разработать:
• интерфейс программы;

553
• программу решения задачи;

• демонстрационную версию программы.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект должен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи.
3. Заставка к проекту выполняется:
• студентами 1-й noдzpynnъt с использованием программного
кода, который реализует эффект создания текста и изобра)кения
на форме графическими методами (см. приложение 2, заставка
№ 1);
• студентами 2-й noдzpynnъt с использованием программного кода,
который реализует эффект появления бегущей строки (см. при­
ложение 2, заставка № 15).
4. Главную форму разрабатываемого прило)кения студенты 1-й
и 2-й подгрупп программируют с использованием обычной формы.
5. Студенты обеих подгрупп при окончательной компоновке
проекта создают иконку с собственными инициалами и демон­
стрируют преподавателю .ехе-файл приложения.
6. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе.
7. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро ­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

8. Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы.
3. Цель лабораторной работы.
4. Условие задачи.

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

Контрольные вопросы и задания

1. Какими двумя способами можно создать объект Graphics?


2. Определите понятие ~структура~.
3. Объясните разницу между растровой и векторной графикой.
4. Какие методы работы с объектом Bitmap вы знаете? Какие
различия существуют между методами?

ЛАБОРАТОРНАЯ РАБОТА № 19.


КЛАССИЧЕСКИЕ СПОСОБЫ ОБРАБОТКИ СТРОК

Цели работы: овладение практическими навыками разработки


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

Пример выполнения работы

Условие: разработать пр оект, содер:>кащий несколько форм.


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

• опр еделе ни е количества символов в строке;

• замену символов в строке;

• удаление символов в строке;

• вставку символа в строку;

• анализ символа на принадлежность к группе;

• подсчет количества фрагментов;


• поиск строки в блоке текста.
Пр едусмотреть запрос на выход из программы.
Создать иконку с собственными инициалами и скомпилировать
.ехе-файл.
Внешний вид главной формы представлен на рис. 229.

555
~~~~~~~~~~~~~~~~~~~~~

~ ОбрабоП<а строк GJ[g]~

!выберите способ обработки


Введите строку символов

Результат обработки

Ок

Рис. 229. Главная форма приложения

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

Определен~·iе кол~·iЧестЕ;а си1"·1Е;о.•10Б


.За1"·1ена си1"·1Е;олоЕ• в строке
!::lд,.:~ление 1:::и1"·1Еюлов Б строке
Bc:т.:iE;t!...:i c1.1t"·1E;oл.:i Е; строку
,6,на.•1и:з сиt·'1ЕаJла на принадле:;t;:ность к группе
Подсчет количестЕ;.:. ·+•р.:.п"·1ентоЕ;
Поиск ст ~оки Б блоке текста
Рис. 230. Элементы ComboBox

111 Обрабоmа строк LJIOJ~

1Определение количества символов

Введите строк!:J символов

1мама папа баб!,Jшка дед!:JШКа

Результат обработки

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

Ок ~

Рис. 231. Результат работы программы «Подсчет количества символов»

556
Листинг программы

PuЬlic Class Forml


Function Kol_Simv(ByVal row As String, ByVal simvol
As Char) As Byte
Dim kol AsByte , i As Byte
Dim tmp As String
ko l - О
For i = 1 То Len( r ow)
tmp = Mi d( r ow, i, 1)
If tmp = simvo l Then
ko l = kol + 1
End I f
Next
Retu r n ko l
End Function

Function Zam(ByVal row As String, ByVal sim As


Char) As String
Dim zamena As Boolean
If Not zamena Then
row - Replace(row, " ", sim)
Else
row = Replace ( row , s im , " " )
End If
zamena = No t zamena
Retu r n r ow
End Function

Function Delete(ByVal row As String, ByVal simvol


As Char) As String
Di m х As Str ing
Di m i As Byt e
х = Len (row)
For i = 1 То х
If Mid(row, i, 1) = simvol Then
row - Mid(row, 1, i - 1) + Mid(row ,
i + 1, х)
l - l - 1
End If
Next
Return row
End Function

557
Function Insert(ByVal row As String, ByVal vstavka
As Char, ByVal simvol As Char) As String
Dim i As Byte
Dim х As Byte
х = Len ( row) + 1
' Без прибав л е ния 1 к параме т ру в фу нк ции Mid,
под программа не буд ет фу нк цион ирова ть п рав ильно .
'П ос к ол ьку функция Len(row) заранее о пре де лит
длину стро ки , то п осле после д не г о с имвола не буд ет
добав ля ться вставляемый символ
For i = 1 То х
If AscW(Mi d(row , i , 1)) = AscW(s i mvol )
Then
row - Mid( r ow, 1, i ) + vs t av ka +
Mid(row , i + 1 , х)
End I f
Next
Retu r n r ow
End Function

Function Analiz(ByVal row As String, ByVal simvol 1


As Object, ByVal simvol_2 As Object) As Byte
Dim i, kol As Byte
Dim х As String
Dim tmp As String
х = Len(row)
For i = 1 То х
tmp = Mi d( r ow , i , 1)
If t mp = s i mvol_ l Or t mp - simvol 2 Then
kol = kol + 1
End I f
Next
Retu r n kol
End Function

Function Vxod(By Val row As String, Ву Val row 1 As


String) As Byte
Dim i, kol As Byt e
Dim х As St r ing
l = 1
Do
х - InStr(i , r ow , row 1)

558
If х > ОThen
i = х + Len ( row 1)
ko l = kol + 1
Else
Exit Do
End I f
Loop
Vxod = kol
End Function

Private SuЬ Buttonl_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim r As St r ing
Dim s As Char
Se le ct Case ComboBoxl . Selectedindex
Case О
r = TextBoxl . Text
s = InputBox ( "В ведите символ " )
TextBox2 . Text = " Количество
найде н ных символ ов в строке = " & Kol Simv ( r , s)
Case 1
r = Text Box l . Text
s = I nputBox ("Введите символ ")
Text Box2 . Text = " Р езул ьтирующая
строка : " & Zam ( r , s )
Case 2
r = Text Box l . Text
s = I nputBox ("Введите символ ")
Text Box2 . Text = " Резул ьт ирующая
с т ро ка: " & Delete(r , s)
Case 3
Dim v As Char
r - TextBoxl . Text
s - InputBox ( "В ведите символ , посл е
к о т орого вы вставите д ру г ой с имв ол " )
v = InputBox ( "В ведите символ ,
к о т орый вы хотите вставить в с т року " )
TextBox2 . Text = " Ре зул ьт ирующая
строка : " & Inse r t (r , v , s)
Case 4
Dim s 1 , s 2 As Char

559
r = TextBoxl . Text
s 1 - In рutВох( "Вв е дите первый
симво л")
s 2 = Input Box ( " В в едит е вт орой
с им в ол " )
Text Box2 . Text - " Все г о сим в ол о в " &
s 1 & " и " &s2& " - " & Anal iz (r, s 1,
s 2)
Case 5
Dim r _l As St r i ng
r = Text Box l . Text
r 1 = Input Box ( " В в еди т е п одс т року ")
TextBox2 . Text = "В се г о вхождений
под строки " & r 1 & " в строку " & Vxod( r, r 1)
Case 6
Dim Row As St ring
On Er r or Go То errNotFound
Row = InрutВох( " Введите п одстроку для
поиска : " , " Выбор от нача ла к концу строки " )
TextBoxl . Se l ectionSta r t =
InS tr( TextBoxl . Text, Row) - 1
Text Boxl . SelectionLength - Len(Row)
Exit Sub
e r rNot Found :
MsgBox (Row & " П одстрока
не н ай дена .", vЫ nformation)
End Select
End SuЬ
End Class

Задания для самостоятельной подготовки

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

обработки строковых данных;


• классические способы обработки строк;
• работу подпрограмм в языке VB.
Разработать:
• интерфейс программы;
• программу решения задач и;

• тестовые варианты (число тестов равно числу ветвей вычисли ­


тельного процесса) для проверки правильности функциониро ­
вания программы.

560
Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ­


ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект должен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи.
3. Заставка к проекту выполняется:
• студентами 1-й подгруппы с использованием программного кода,
который реализует эффект проявления и исчезновения фор мы
(см. приложение 2, заставка № 5);
• студентами 2-й подгруппъt с использованием программного
кода, который реализует вывод повернутой надписи (см. прило­
жение 2, заставка № 9).
4. Главную форму разрабатываемого приложения студенты 1-й
и 2-й подгрупп программируют с использованием обычной формы.
5. Студенты обеих подгрупп при окончательной компоновке
проекта создают иконку с собственными инициалами и демон­
стрируют преподавателю .ехе-файл приложения.
6. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе.
7. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

8. Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы, номер варианта.
3. Цель лабораторной работы.
4. Условие задачи.
5. Листинг программы.
6. Результат выполнения программы.

561
Контрольные вопросы и задания

1. Перечислите наиболее распространенные функции модуля


Strings.
2. Приведите примеры методов структуры Char.
3. Приведите примеры методов класса String.
4. Поясните понятие ~конструктор» .
5. Напишите примеры конструкторов класса String.
6. Приведите примеры базовых алгоритмов строк.

ЛАБОРАТОРНАЯ РАБОТА № 20.


ОБРАБОТКА СТРОКОВЫХ ДАННЫХ

Цели работы : овладение практическими навыками раз работки


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

Пример выполнения работы

Условие : разработать проект, содер:>кащий несколько форм.


Первая форма является заставкой к прилож:ению. На второй форме
следует р еал изовать р е шение задачи своего варианта.

Предусмотреть запрос на выход из программы.


Создать иконку с собственными инициалами и скомпилировать
.ехе-файл.
Задача 1. Проверить, имеется ли в линейной записи заданной
строки баланс открывающих и закрывающих скобок.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(ByVal sender As System .
Object , ByVal е As System . EventArgs) Handles Buttonl .
Click
Di m i , flag As Integer
Dim stroka, dl str oka As String
stroka = InputBox ( " Введите стро ку сим в о л ов " )
flag = О
i = 1
dl s t ro ka = Len( str oka)
Do Whi l e flag >= О And i <= dl s t ro ka

562
If Mi d(s tro ka , l , 1) - " ( " Then
flag = flag + 1
End I f
If Mid(stroka , l, 1) - " ) " Then
flag = flag - 1
End I f
l = l + 1
Loop
I f flag = О Then
МsgВох( " Есть ба л анс открывающих
и закрывающих скобок! ")
El se
MsgBox( " Heт бала н са о т крывающих

и закрывающих скобок! ")


End If
End SuЬ
End Class

Задача 2. Произвести поиск и подсчет цифр в заданном тексте,


представл енном массивом строк.

Комментарий. После ввода количества строк n обрабатыва­


емый текст размещается в массиве а, в котором хранятся строки
текста. Текст вводится с клавиатуры построчно. Два вложен ных
цикла обеспечивают посимвольный анализ текста: внешний цикл -
по строкам, внутренний цикл - по символам одной строки. Анализ
символа выполняется п утем выдел е ния очередного J-ro символа

с помощью функции Mid из массива а() и проверки на принад­


лежность этого символа диапазону символов (цифр) от О до 9.

Листинг программы

PuЬlic Class Forml


Private SuЬ Buttonl_Click(By Val sender As System.
Object, Ву Val е As System.EventArgs) Handles Buttonl.
Click
Di m n, i , j, dl ina, kol As Integer
Di m out put As St r i ng
n = I nputBox ("Введите количест в о с т рок " )
Dim а As St r ing () = New String (n) { }
For i = 1 То n
a(i) = In рutВох( " Введите строку " )

563
output &= a( i ) & vbC r Lf
Next
Message Box . Show (output, "Просмотр ", Message BoxBut-
t ons . OK , Message Boxi con . Informati on)
Fo r i = 1 То n
dl i na = Len (а (i))
For j = 1 То d li na
I f Mid(a( i), j, 1) >= " 0 " And Mid(a( i),
J , 1) <= " 9" Then
kol = ko l + 1

End If
Nex t
Next
MessageBox . Show ( " Количество ци фр в за да н ных

с т роках = " & kol)


End SuЬ
End Class

Задания для самостоятельной подготовки

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

обработки строковых данных;


• классические способы обработки строк;
• работу подпрограмм в языке VB.
Разработать:
• интерфейс программы;
• программу решения задач и;

• тестовый вариант исходных данных.

Работа в лаборатории

Для успешного получения зачета по лабораторной работе необ­


ходимо выполнить следующие требования.
Получить допуск к лабораторной работе при предъявлении
1.
преподавателю отчета по текущей лабораторной работе.
2. Проект долж:ен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;

564
• условие задачи;

• вариант задачи.

3. Заставка к проекту выполняется:


• студентами 1-й подгруппы с использованием программного кода,
который реализует эффект появления нестандартной формы
(см. приложение 2, заставка № 7);
• студентами 2 -й подгруппы с использованием программного кода,
который реализует эффект появления нестандартной формы
(см. прилож:ение 2, заставка № 8).
4. Главную форму разрабатываемого прило:>кения студенты 1-й
и 2-й подгрупп программируют с использованием обычной формы.
5. Студенты обеих подгрупп при окончательной компоновке
проекта создают иконку с собственными инициалами и демон­
стрируют преподавателю .ехе-файл приложения.
6. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе.
7. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро­
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.

8. Студент обязан соблюдать правила по технике безопасности


при работе с вычислительной техникой.

Содержание отчета

1. Название лабораторной работы.


2. Фамилия, имя студента, номер группы.
3. Цель лабораторной работы.
4. Условие задачи.
5. Разработанный алгоритм.
6. Листинг программы.
7. Результаты выполнения программы.

Контрольные вопросы и задания

1. Перечислите наиболее распространенные функции модуля


Strings.
2. Приведите примеры методов структуры Char.
3. Приведите примеры методов класса String.
4. Поясните понятие «конструктор».
5. Напишите примеры конструкторов класса String.
6. Приведите примеры базовых алгоритмов строк.

565
Варианты к лабораторной работе
« Обработка строковых данных»
(порядковый номер студента по журналу соответствует
его номеру варианта)

Таблица 50

Н омер
Задача
вар ианта

1 И з исходной строки сформировать другую строку, каждое


слово которой вывести с прописной буквы. Р езультат запи-
шите в текстовый файл

2 В исходной строке подсчитайте количество слов, в которых


есть буква «м~. Результат запишите в текстовый файл

3 В исходаой строке найдите количество вхождений под -


строки « ПКС ~. Р езультат запишите в текстовый файл

4 И з исходной строки вывести слова, стоящие на четных по-


зициях. Результат запишите в текстовый файл

5 И з исходаой стро ки удалите подстроку «П КС ~. Результат


запишите в текстовый файл

6 Удалите из исходаой строки все пробелы и выведите ре -


зультирующую строку. Результат запишите в текстовый
файл

7 Замените в словах, стоящих в исходной строке на четных


позициях, одиа символ i-ra другой. Символы запрашиваются
у пользователя. Запишите результат в текстовый файл

8 И з исходной строки удалите слова, стоящие на четных по-


зициях. Результат запишите в текстовый файл

9 В исходаой строке найдите самое дли1п1ое слово. Результат


запишите в текстовый файл

10 В исходной строке необходимо удвоить подстроку « П КС~ .


Р езультат запишите в текстовый файл

11 И з исходной строки сформируйте другую строку, содер-


жащую слова, в которых есть подстрока « ПКС ~. Результат
запишите в текстовый файл

12 И з исходаой стро ки сформир уйте другую стро ку, содер -


жащую гласные буквы друго й строки. Результат запишите
в текстовый файл

13 И з исхода ой стро ки сформир уйте другую стро ку, в которой


будут отсутствовать глас~-rые буквы. Результат запишите
в текстовый файл

14 В каждое слово исходной строки вставьте символ, ука-


занаый пользователем. Р езультат запишите в текстовый
файл

566
Окончание табл. 50
Н омер
Задача
вар ианта

15 И з каждого слова исходной строки удалите символ, ука -


занный пользователем . Р езультат запишите в текстовы й
файл

16 В исходаой строке подсчитайте количество слов. Результат


запишите в текстовый файл

17 Из исходной строки удалите заданное пользователем слово.


Р езультат запишите в текстовый файл

18 В исходной строке подсчитайте количество слов, начинаю-


щихся на символ ~s». Результат запишите в текстовый файл

19 Дааа исходная строка, состоящая из слов. После каждого


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

20 И з исходаой строки сформируйте другую строку, содер -


жащую слова, стоящие на нечетных позициях. Р езультат
запишите в текстовый файл

21 В исходаой строке, состоящей из слов, определите коли -


чество скобок. Результат запишите в текстовый файл
22 И з исходаой строки удалите слова, стоящие аа нечетаых
позициях. Результат запишите в текстовый файл

23 В исходной строке слова записаны прописными буквами.


Замените их аа слова, записа1пrые строчными буквами. Ре -
зультат запишите в текстовый файл

24 Удалите из исходной строки пробелы, стоящие в начале


и коаце строки. Результат запишите в текстовый файл

25 Даны дв е строки. О пределите длину каждой, сравните и вы-


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

26 В исходной строке подсчитайте количество слов ~ экзамен » .


Р езультат запишите в текстовый файл
Приложение 2

Создание заставок к проектам

Заставка № 1. Создание текста и изображения на форме


графическими методами

Прежде чем приступить к созданию графики, проверьте подклю­


чение пространства имен System.Drawing к проекту, выполнив сле­
дующую команду: Проект/Добавить ссылку/Сборки/Платформа/
System.Drawing.
Пространство имен System.Drawing дает возможность исполь­
зовать графическое ядро GD I + ( Graphics Device Interface), пред­
ставляющее собой собрание классов, ответственных за создание
двухмер ной графики.
Приступая к работе с графикой в проекте, в первую очередь
будем объявлять объект класса Graphics, который используется
в качестве п оверхности для рисования, а также пр едназначен для

создания графических изображений:


Di m g As Graphi cs
Теперь поговорим о создании этого объекта. Мы знаем, что объ­
екты создаются с помощью слова New. Однако для объектов класса
Graphics воспользуемся другим способом. У формы и элементов
управления есть специальный метод CreateGraphics, посредством
которого каж:дый элемент управления или форма создают соб ­
ственный персональный объект класса Graphics. Его синтаксис
может быть таким:
g = Me.CreateGraphi cs
Чтобы расположить текст на форме или другом элементе управ­
ления, необходимо воспользоваться методом DrawString() класса
Graphics пространства имен System.Drawing, однако прежде чем
приступать к расположению изображения на форме, необходимо
создать объект Image.
Выполнив двойной щелчок на форме, выбираем событие Paint.
Откроется окно проц едуры, в котором следует н ап исать п рог­
раммный код, представленный ниж:е.

Листинг программы

PuЬlic Class Forml


Private Sub Forml_Paint(sender As Object , е As
PaintEventArgs) Handles Me . Paint
Dim g As Graphics
g = Me . CreateGraphics

568
Dim brush As New SolidBr ush(Color . CadetBlue)
'и спо л ьзование метода Fr omFi l e кла сса I mage
Di m newi mage As I mage = I mage . FromFile С ' х : \
kot . gi f " )
Dim pnt As New Point(2 0 , 20) ' и с п ользование
метода Dr awimage класса Gr aphi cs для расположения
изображения на форме

g . Drawi mage(newimage, pnt)


Dim f ont As New Font ( "Times New Roman ", 32 ,
FontSt yl e . Bold)
Di m s As St r ing () = { " Лабораторная работа " ,
"№ 1" }
g . DrawS t r ing(s(O) , f ont , b ru sh , New
PointF( l SO , 40))
g . DrawS t r ing(s( l), f ont , b ru sh , New
Point F (230, 100))
g . Di spose ()
End Sub
End Class

Результаты работы программы представлены на рис. 232.

Лабораторная работа
Программирование графики

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

Заставка № 2. Вывод центрированного текста, закрашенного


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

Листинг программы

I mpor t s Sys t em . Drawing . Drawi ng2D


PuЬlic Class Forml
Private SuЬ Forml_Paint(sender As Object , е As
PaintEventArgs) Handles Me.Paint

569
Di m s tr As St r i ng = " Лабора т ор н ая работа "
Di m f nt As Font = New Font (" Ari al ", 32 , Font -
St yl e . Bold)
Di m w As Int ege r = Me . Cli entSize . Wi dt h
Di m h As Int ege r = Me . Cli entSize . Height
Di m g As Graphi cs = e . Graphi cs
Di m b r As Br ush = New Li nearG r adien t Brush (New
PointF( O, 0 ), Ne w PointF (Me . Width , Me .He i ght), Color .
Red , Color . Ye llow)
Dim SW As Singl e - g .MeasureString (str, f nt ) .
Wi dt h
Dim s h As Singl e - g .MeasureString (str, f nt ) .
Height
g . Clear (Color . White)
g . DrawS t r ing (s t r , fnt, br, (w - sw ) / 2, (h -
s h) / 2)
g . DrawE l lipse (New Pen (New Text u r eBrush (Image .
FromFi l e (" x : \ko t . gif " ), Wr apMode . Ti leFlipXY ), 130 ), О ,
О, w, h )
End SuЬ
End Class

Результаты работы программы представлены на рис. 233.

Лабораторная работа №1

Рис. 233. Вывод центрированного текста, закрашенного с помощью гради­


ентной заливки

570
Заставка № 3. Задание фонового рисунка
В дан ном проекте щелчок мыши н а форме приводит к смене
фоново г о рису нка. Ф о н овый рисун ок задается свойст в ом
Backgroundlmage.

Листинг программы

PuЬlic Class Forml


Di m r i s (l ) As Image
Dim Fil eName () As Stri ng = { "с : \1 . ВМР " , "С : \2 . ВМР " }
Private Sub Forml_Click(ByVal sender As Object ,
ByVal е As System.EventArgs) Handles Me.Click
If Me . Backgr oundi mage I s r is( O) Then
SetBackGr ound (l )
El se
Se t BackGro und( O)
End I f
End Sub

Private Sub Forml_Load(ByVal sender As System.Ob-


ject, ByVal е As System . EventArgs) Handles MyBase . Load
Me . ResizeRed r aw = True
Dim i As I nt eger
For i = О То r i s . Ge t Upper Bound (O)
r is (i ) = I mage . FromFi le (Fi l eName (i ))
Ne xt
SetBackGround (O)
End Sub

Private Sub SetBackGround(ByVal 1 As Integer)


Me . Text = FileName (i )
Me . Backgr oundi mage = ris (i )
End Sub
End Class

Результаты работы программы представлены на рис. 234.

571
Рис. 234. Щел ч ок н а ф орме пр иводит к сме н е ф о но во го ри су н ка

Заставка № 4. Разработка заставки с использованием элемента


управления ProgressBar

Сплэш-форма - это форма, которая отображается в процессе


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

Создадим новую форму(Form1 ) и разместим на ней компоненты


ProgressBar1, Label1 и Timer1 . Выставим свойство EnaЬled ком­
понента Timer1 в True. Свойство Interval отставим по умолчанию
равным 100. Добавим в проект еще одну форму (Form2). Разместим
на первой форме компонент ProgressBar1 . Для имитации некото­
рого процесса, отобра)каемого сплэш-формой, создадим обработчик
события Timer1 Tick компонента Timer1 .
Листинг программы

PuЬlic Class Forml


Private Sub Timerl_Tick(ByVal sender As System . Ob-
ject , ByVal е As System.EventArgs) Handles Timerl.Tick
Wi t h ProgressBarl

572
. Va lue = . Value + 1
Me . Labell . Text = Cint(.Value)
If . Va l ue = . Maximum Then
Ме . Timerl . Stop ()

Form2 . Show ()
Ме . Hide ()
End If
En d Wi t h
End Sub
End Class

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

Лабор<норная рn6ота 112 9 ~

Лабораторная работа № 9
ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РЕГУЛЯРНЫХ ЦИКЛИЧЕСКИХ
СТРУКТУР

Цель роботы : изучение процесса формапизоции при решениии задач на компьюет ере, а
также в изучении средств, примеров, поnучение дальнейших навыков по
о тл адке и тести р овани ю программ.

Условие задачи: Реэре.боте.ть проект содержащий нескоnько форм :


- заставка к приnожению, ProgressBar
-решение задачи (корректност ь ввода, запрос на выход)

Скомпипировать .ехе файn.

У = х5 + 5х 4 - 2 х 3 - 4х 2 + 7х - 3

[- 0.5; 1.5] h = 0.5

111111111111111111111111111111111111111111111111111111111111111

Рис. 235. Шкала элемента управления ProgressBar

Заставка № 5. Проявление и исчезновение формы

Формы имеют свойство Opacity, которое определяет, насколько


прозрачным является элемент управления. Абсолютная прозрач­
ность формы достигается, если значение Opacity равно нулю,
а полная видимость - при значении, равном 100. При выполнении
следующего фрагмента кода форма постепенно исчезает, и затем
на экран выводится вторая форма.

573
В новом проекте создадим новую форму (Form1). Разместим
на ней компонент Timer1 и создадим обработчик событияТimеr1 _
Tick.

Листинг программы

PuЬlic Class Forml


Private Sub Timerl_Tick(ByVal sender As System.Ob-
ject, ByVal е As System.EventArgs) Handles Timerl.Tick
Me . Opaci t y= Me . Opacity - 0 . 01
I f Me . Opacity = О The n
Me . T imer l.EnaЬl e d - Fa l se
Form2. Show ()
End I f
End Sub

Private Sub Buttonl_Click(ByVal sender As System .


Object, ByVal е As System.EventArgs) Handles Buttonl .
Click
Me . Ti merl . E naЬled - True
End Sub
End Class

Сохраним проект. Добавим в проект еще одну форму (Form2).

PuЬlic Class Form2


Private Sub Form2_Deactivate(ByVal sender
As Object, ByVal е As System.EventArgs) Handles
Me.Deactivate
Appli cat ion . Exit ()
End Sub
End Class

Результаты работы программы представлены на рис. 236.

574
Ы N!t 6
" nвСIОратор,наr111 раб;С)Тi)
. ASPASOTl(A ПРОГРАММ С ИС1'10ЛЬ'ЗО,В АНИЕМ ГЯАВНОГО М Н!Q. И СТРОКИ
состояния

l .A'llh pii'itiBТ!l.1 ~Пll,~lll Пр(ШТ...ЧQ"!)\1'.lчk lli!lll\.!Kl'l""1 po::;:pt1dQ>Т.~ '1JIO!'p6ifi 111 i'~1<TM ....1.t.: • 11
с~еи.1.1<. с постр-=-аи греф~11rо ии.'*'~о ГЮЛl.:3 11.то.п я . non;~A!!IQ!.llAi::tl.lio:
rea1>11111E1 по DMllД/l'D м тасr~~роаекю np iк 1У"\

Y(;l'l(lйи~ ~n.~Ю ••к ~pa6Qr~1> niloQ.:,. СО,._..,..,.,;, ..,..ск"1"'"° ~

• 1 Форме - ЗllCT./1111111 to..IПDЛk<!OiCA с "~~Q.1111111/VН "~ toro 11;ОДО11. ~.orcpt.lil


~·''''iет n.11е111ное гю"~~>11111' ~'но~~е.Фо11t1
2 Формt~ f)tlSf'f~c"~r" З/'IЕ'••~е•щ.1 сэ11р~ :fl ~ ~~r:c (11<ос ~.1' '"' 1 11е..,ое нен~о. l'l'U"O
11111~1] ypDlll'IA ФдИЛ .......,, ,,./;
с IТ~ot'FllИH МQ!lll et:Q.I. н IDJI 2-а НС' ·~ ~p:,:uaro }JIDtWЯf~" Ml'lllDT l"IЩl,/'f\::11 сь Q !А ...
FONf, 110;0f)l>111 М-ОТ /
U!\!1 ... u._.".фr 1ttri=:11) t<O r<t! 1'1\!11111~ 3-r ..,," 1 '"'11'"~ :.О'РО li p"~Hlll ~DЬ><l!lt<lift,
liiii'~p.c'4!!1.llir! Подо'<А14;1 f)lllll"l!<ИQ K~:)ilТИЧllQJO ~~~il l< Т'iOA- ~>'.::f'11-1ТШ1"11 "
• t:_
l.joWJ.<1D~ oб\.Q~1'DQ

Рис. 236. Эффект проя вления и исчезновения формы

Заставка № 6. Использование текстового поля для ввода пароля.


Использование элемента управления ErrorProvider
Текстовое поле характеризуется двумя свойствами, позволя­
ющими при менять их при создании полей, предназначаемых для
ввода пароля. PasswordChar - задает символ, отобра)каемый
в поле вместо вводимых символов, и MaxLength - определяет мак­
симальное количество символов, вводимых в поле.

В следующем примере пароль необходимо ввести в течение 15 с.


Для этого свойство Interval элемента управления Tirner1 следует
выставить в положение 15000.

Листинг программы

PuЬlic Class Forml


Private Sub Buttonl_Click(ByVal sender As System .
Object, ByVal е As System.EventArgs) Handles Buttonl .
Click
If Text Box l . Text = " 1" Then
Me . Time r l . St op ()
MsgBox (" До бро пожалова т ь в программу ",
MsgBoxStyle . In f ormati on , " Окно ввода пароля " )
Form2 . Show ()
Me . Hide ()

575
Else
МsgВ ох( " Вв е д е н не п ра в иль ный пароль " , Msg-
BoxSt yle . Cri t i cal , " Ок н о вв од а п арол я " )
End If
End Sub

Private Sub Timerl_Tick(ByVal sender As System . Ob-


ject , ByVal е As System . EventArgs) Handles Timerl . Tick
МsgВох( " Время ис текло ", MsgBoxStyle . Informa-
tion , " Ок но ввод а пароля " )
End
End Sub

Private Sub Forml_Load(ByVal sender As System.Ob-


ject , ByVal е As System.EventArgs) Handles MyBase.Load
Me . Ti me rl . St a rt ()
End Sub
End Class

Добавим на форму элемент управления ErrorProvider. Чтобы


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

Листинг программы

PuЬlic Class Forml


Private Sub TextBoxl_Validating(ByVal sender As
Object , ByVal е As System . Componentмodel . CancelEvent­
Args) Handles TextBoxl . Validating
If TextBoxl . Text = "" Then
ErrorProviderl . SetError (TextBoxl ,
" Пользовательское имя не введено " )
Else
ErrorProviderl . SetError (TextBoxl , " " )
' MessageBox . Show ( " Вы не ввел и имя ! ! ! ! " )
' TextBoxl .Focus()
End I f
End Sub

Private Sub TextBox2_Validating(ByVal sender As


Object , ByVal е As System.Componentмodel.CancelEvent­
Args) Handles TextBox2.Validating

576
If TextBox2 . Text = "" Then
Er r orProvide r l . SetEr ro r (TextBox2, " Пароль
не введен " )
El se
Er ro r Provi der l . Set Er r or ( Tex t Box2 , " " )
' MessageBox . Show ("Вы н е вв ел и парол ь! ! ! ! ")
' Tex t Box2 . Focus()
End I f
End Sub
End Class

Результат работы элемента управления ErrorProvide r пред­


ставлен на рис. 237.
----------------
111 За пол не нне данных ~LQ}LБJ

Введите имя [ sergei


::....----=========:::::::
Пароль

Пароль не введен

Ок

Рис. 237. Вывод сооб ще ни я об о ши б ке

Заставка № 7. Создание нестандартной формы


Для создания нестандартной фор мы воспользуемся специ­
альным классом Graphics пространства имен System.Drawing. Со­
здание объекта класса Graphics рассмотрено выше, только вместо
двух операторов:

Dim g As Gr aphics
g = Me . CreateGr aph i cs
напиш ем один

Dim g As Graphi cs = Me . Cre a te Graphics

Листинг программы

PuЬlic Class Forml


Private Sub Forml_Paint(ByVal sender As Object ,
ByVal е As System.Windows.Forms.PaintEventArgs) Handles
Me.Paint

577
Dim g As Gr aphics = Me . Crea teGr aphics
Dim z As New Drawing2 D. Graph i csPath
z. AddEl l i pse(O , - 300 , Me . Width , 600 )
Me . Region = New Region (z )
End Sub

Private Sub Forml_Resize(ByVal sender As Object,


ByVal е As System.EventArgs) Handles Me.Resize
Ме . I nval idate ()
End Sub
End Class

М етод AddEllipse с параметрами (О , -300, Me.Width, 600)


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

111 Нестандартная форма 1-------- - D х1

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

Заставка № 8. Создание нестандартной формы (форма


с окружностями)

С помощью следующей программы можно запрограммировать


еще один вариант нестандартной формы, добавив с помощью ме ­
тода AddArc окруж:ности. Пользователь может разместить в них
кнопки, например, Enter и Exit.

578
Листинг программы

PuЬlic Class Forml


Private Sub Forml_Paint(ByVal sender As Object,
ByVal е As System.Windows.Forms.PaintEventArgs) Handles
Me.Paint
Di m g As Graphi cs = Me . CreateGraphi cs
Dim z As New Drawing2D . Graph i csPath
'д обавляем в z (экземпляр класса Графическ ий путь) ду гу
z. AddArc(20 , 300 , 12 0 , 120 , О , 400)
'д обавляем со смещением еще од ну дугу
z. AddArc(420 , 300 , 120 , 120, О, 400)
' рисуем элли п с
z. AddEl l i pse(O , - 300 , Me . Width , 600)
Me . Region = New Region(z)
End Sub

Private Sub Forml_Resize(ByVal sender As Object,


ByVal е As System.EventArgs) Handles Me.Resize
Ме . Inva lidate ()
End Sub
End Class

Результат работы программы представлен на рис. 239.

a:J Нестандартная форма

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

579
Заставка № 9. Повернутая надпись

Создадим приложение, выполняющее поворот надписи на угол


45° вокруг своей оси. Класс
GraphicsPath (графический путь) про­
странства имен Drawing2D, который будет использован в прог­
рамме, представляет последовательность соединенных линий
и кривых. Для будущего приложения достаточно на основе над­
писи построить некий контур как экземпляр класса GraphicsPath,
а затем, используя метод Transform, совершить над ним аффинные
преобразования.
Аффинные преобразования - это преобразования плоскости
или пространства, при которых прямые переходят в прямые, пере­

секающиеся - в пересекающиеся, скрещивающиеся - в скрещи­

вающиеся. Класс Matrix позволяет задавать аффинные преобразо ­


вания координат, в частности, поворот вокруг указанной точки.

Листинг программы

Impor t s Sys t em . Drawing.Drawing2D


PuЬlic Class Forml
Private Sub Forml_Paint(sender As Object , е As
PaintEventArgs) Handles Me . Paint
Dim s tr As String = " Л а бор а торн ая ра бо та № 1"
Dim gp As Graph i cs Path = Ne w Graphi c sPath
Dim pt As Point = Ne w Point( Me . Width / 2,
Me . Height / 2 )
Di m f f As FontFamil y = New Font Fami l y ("Ar ial ")
gp . AddSt r ing (st r , ff , Font Style . Bol d , 20 , pt ,
StringForma t . Ge ne ric Default)
Dim Rota t eMa t rix As Mat rix = New Ma t rix
Dim g As Graphi c s = e . Graphi cs
Di m i As Int ege r
g . Draw Pa t h (New Pen (Col or . Blue , 2 ), gp )
Di m angl e As I nt ege r = 45
For i = О То 360 \ angle
Rota teMat rix.Rota t eAt (angle , pt )
gp . Tr an s f orm (Rota t eMat rix)
g . DrawPat h (New Pen (Colo r . Bl ue , 2 ), gp )
Next
End Sub
End Class

Результат работы программы представлен на рис. 240.

580
'l Повернутая надпись о х

Рис. 240. По вернутая н адпись

МетодRotateAt служит для поворота объекта вокруг указанной


точки на угол, определенный условием задачи. Параметр angle
устанавливает величину угла, параметр Point определяет коорди­
наты точки, вокруг которой совершается поворот.

Заставка № 1 О. Работа с объектом Bitmap

В компьютерной графике изображения разделяют на растровые


и векторные. К растровым относят изображения, оформленные как
файлы с расширениями ВМР, JPEG, GIF, TIFF, PNG и др. К век­
торным форматам относятся форматы WMF, EMF и др.
Типичный пример растровой графики - любая фотография;
примером векторной графики может служить рисунок, созданный
в таких программах, как Corel Drat.(J), Adobe Illustrator. Чем больше
увеличиваем фотографию, тем линии становятся более расплыв­
чатыми. В случае векторной графики все линии рисунка (в случае
увеличения) не изменяются, потому что в файлах хранится не соб ­
ственно рисунок, а точное математическое описание рисунка, т.е.

описание координат всех линий и цвета заливки.


В VB имеется объект класса Bitmap, который может работать со
всеми упомянутыми форматами файлов. Объект класса Bitmap на­
ходится в оперативной памяти. В памяти изображ:ение мо:>кет быть
подвергнуто некоторой обработке, а затем выведено на поверхность
формы или элемента управления.

581
В следующем листинге приведен простой способ размещения
изобра)кения из файла в объект класса Bitmap, а оттуда без всяких
преобразований - на элемент управления
PictureBox1. П редва­
рительно у элемента управления PictureBox свойство SizeMode
следует выставить в значение Stretchlmage, для того чтобы изо­
бражение автоматически изменило свои размеры так, чтобы они
равнялись размерам PictureBox.
Также следует создать папку
Image по следующему адресу: ка­
талог Имя текущего проекта \ Bin\ Debug\ Image и скопировать
в нее файл с расширением .jpg.

Листинг программы

Impor t s Sys t em .I O
PuЬlic Class Forml
Dim currentDirectory As St ring = Direct ory . Ge t Cur-
ren t Directory
Private Sub Buttonl_Click(ByVal sender As System.
Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim xol s t As New Bi t map (current Direct ory & " \
Image \П р о б а . j pg ")
Pict ureBoxl . Image = xols t
End Sub
End Class

Результат работы программы представлен на рис. 241.

111 Вывод нзобра+\ення r;JIOJ[gj

Ok

Рис. 241. Вывод изображения на элемен т управления PictureBox

582
Заставка № 11. Поворот изображения и его зеркальное
отображение

Метод RotateFlipType позволяет поворачивать (Rotate) и зер­


кально отра)кать (Flip) изобра:>кение в памяти.

Листинг программы

Impor ts System .I O
PuЬlic Class Forml
Di m currentDirector y As St r i ng - Direc t ory . Ge t Cur-
rentDirectory

Private Sub Buttonl_Click(ByVal sender As System.


Object, ByVal е As System.EventArgs) Handles Buttonl.
Click
Dim xolst As New Bitmap(currentDirectory &
" \Image\Пpoбa . jpg " )
xolst . Ro t ateFlip(Rot ate Fl ipType . Rotat e90 Fl ipX)
Pi ctu r eBox l . Image = xolst
End Sub
End Class

Результат работы программы представлен на рис. 242.

Ok

Рис. 242. Результат применения метода RotateFlipType

583
Заставка № 12. Вывод векторного изображения

Рассматривая объект Bitmap как некую невидимую поверхность,


можно создать объект класса Graphics так же, как мы создаем его
для формы. После того как объект создан, можно польз оваться
всеми его методами, создавая различные изображения, правда, они
будут невидимыми, но потом одним оператором можно вывести ри­
сунок на экран.

Листинг программы

I mport s Sys t em . IO
PuЬlic Class Forml
Dim cu rrent Direct ory As St r ing - Directo r y . GetCur-
rentDirect o r y
Private Sub Buttonl_Click(ByVal sender As System.
Object , ByVal е As System . EventArgs) Handles Buttonl .
Click
' Соз да ем пустую по в ерхност ь
Di m xols t As New Bitmap(Me . Width , Me . He i ght)
' Соз д аем объек т кл асса Gr aphics

Dim gr As Graph i cs = Graphi cs . Fr omimage(xo lst)


' Вы в оди м в е к торное изображе ни е

Di m izob r ag As New Bitmap(cu r rent Di r ect ory &


" \ Image\ l . wmf " )
gr . Draw i mage( i zobrag , 10 , 10)
' Пишем на н е в идимой п о в ерх н ос т и

g r . DrawStr ing( " Э т o - мешок! " , Me . Font,


Br ushes . Chocol a t e , 20 , 30)
' Перенос на форму то г о , ч то н ари со в а н о на п о в ерх н ос т и

' создается объект класса Graphi cs для формы

Di m myGraf As Gr aphics - Me . Cr eat eGr aphi cs


myGraf . Dr awi mage(xolst , О, 0)
End Sub
End Class

Результат работы программы представлен на рис. 243.

584
fll Вывод нзобра+ення ~[QJ~

Зто · мешокl

Ok

Рис. 243. Результат рисования на невидимом объекте

Заставка № 13. Рисование с помощью мыши

С помощью мыши пользователь может рисовать любую геоме­


трическую фигуру на форме. Рассматривая события для формы,
можно найти такие события, относящиеся к мыши, как MouseDown
(Нажали клавишу мыши), MouseUp (Отпустили клавишу мыши),
MouseMove (Сдвинули мышь) и т.д.
Если рассмотреть заголовок процедуры
Sub Forrn1_
MouseMove(ByVal sender As Object, ByVal е As Systern.
Windows.Forrns.MouseEventArgs) Handles Me.MouseMove, то мы
видим два параметра. Один с именем sender, имеющий тип Object.
Он обозначает объект, с которым случилось событие, в нашем
случае
- форма. Другой параметр имеет имя е и относится к классу
MouseEventArgs. Данный параметр содер:>кит информацию о со­
бытии, например, какая кнопка мыши была нажата и какие коор­
динаты в данный момент у мыши.
Следующий листинг программы позволит рисовать на форме
с помощью мыши.

Листинг программы

Imports System . Drawing.Drawi ng2 D


PuЬlic Class Forml

585
' Координаты мыши п ри предыд ущем на с т уплении
события MouseMove
Di m х , у As Long
' Ц вет ка ран даша
Dim pn As New Pen (Colo r . Black , 3)
Dim gr, mygraf As Graphics
Dim xolst As Bitmap
Private Sub Forml_Load(ByVal sender As System . Ob-
ject, ByVal е As System . EventArgs) Handles MyBase . Load
xolst = New Bitmap(Me . Width , Me . Height)
gr = Graphics . Fromimage (xolst)
mygraf = Me . CreateGraphics
' Иначе лин ия получается не ро вная
pn . St ar t Cap = LineCap . Round
pn . EndCap = LineCap . Round
End Sub

Private Sub Forml_MouseDown(ByVal sender As Ob-


ject, ByVal е As System.Windows.Forms.MouseEventArgs)
Handles Me.MouseDown
'В на ч альный момен т в реме ни, к о гда нажимается кнопка
мыши

' предыдущее и текущее положения мыши совпадают


х = е.Х
у = е.У
End Sub

Private Sub Forml_MouseMove(ByVal sender As Ob-


ject, ByVal е As System . Windows . Forms . MouseEventArgs)
Handles Me . MouseMove
If e . Button = Windows .For ms .MouseButtons . Le ft
Then
' Рисуем отрезок прямой от текущег о положения мыши
до предыдущего

gr . DrawLine(pn , е . Х , е . У, х , у)
mygr af . DrawLine(pn , е . Х , е . У, х, у)
' Запоминае м т екущее положение мыши
х - е .Х
У = е.У
End If
End Sub
End Class

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

Рисован ие м ы шью о х

L
Рис. 244. Рисунок, выполненный с помощью мыши

Заставка № 14. Форма произвольной конфигурации


Предварительно с помощью окна свойств следует уст ановить
свойство FormBorderStyle для формы равным None.

Листинг программы

Impor ts System . Dr awi ng . Dr awing2D


PuЬlic Class Forml
Private Sub Forml_Load(sender As Object, е As
EventArgs) Handles MyBase.Load
'Про г раммно создаем кно п ку Закры т ь
Me . Wi dt h = 900
Me . Height = 9000
Di m bt n As Button = New Button
Ьtn . Se t Bounds (300 , 450, 100 , 50)
Ьtn . T extAl i gn = Cont ent Ali gnment . Mi ddl eCent er
Ьtn . Tex t = " Закрыт ь"
Me . Cont r o l s . Add(Ьtn)
AddHandler Ьtn . C l ick , AddressOf Ьtn cl i c k
End Sub

Private Sub Forml_Paint(sender As Object, е As


PaintEventArgs) Handles Me.Paint
Dim ri s As I mage = I mage .FromFile( " x : \ 1. jpg" )
Dim gp As Graph i csPat h = New Gr aphics Path
' Левая фигура
Di m f l As Rectangl e = New Rect angl e(O , О,
400 , 350)

587
' Правая фигура

Dim f2 As Rectangle - New Rectangle(ЗOO, О,


400, 350)
' Ниж н яя фиг ура
Di m fЗ As Rectangl e - New Rect angl e( 150, 280,
400 , 350)
'Изображение в пра в ой фи гуре
Dim f As Rect a ngl e = New Rec t a ngle( 400, 70,
210 , 160)
gp . AddEl l i pse( f l)
gp . AddEl l i pse( f 2)
gp . AddEl l i pse( f З)
e . Gr aphics . Drawimage(ris, f)
Dim r gn As Region = New Region (gp)
Ме . Region = rgn
End Sub

Private Sub btn_click(ByVal s As Object, ByVal е


As System.EventArgs)
Ме . Close ()
End Sub
End Class

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

Рис. 245. Форма произвольной конфигурации

588
Заставка № 15. Вывод бегущей строки
Заданный текст перемещается справа налево до полного исчез­
новения, а затем снова появляется в правой его части.

Листинг программы

PuЬlic Class Forml


Private Sub Forml_Paint(sender As Object , е As
PaintEventArgs) Handles Me . Paint
Stati c х As Intege r = 1020
Di m i As Int ege r
Ti merl . E naЬled = True ' Включ аем таймер
For i = 1 То 2
х = х - 2
e . G raphi cs . D ra wS t r ing( " Лaбopaтopнa я
работа " , New Font( "Ti mes New Roman ", 26, FontS t yle .
Ital i c) , Brushes . Red, х, 50)
I f х = - 350 Then
х = 1020
End I f
Next
End Sub

Private Sub Timerl_Tick(sender As Object , е As


EventArgs) Handles Timerl . Tick
Ме .Ref r esh ()
Set Style(Cont rolStyles . Use r Paint , True)
Set Style(Cont rolStyles . Al l Painti ngi nWmPa i nt ,
True)
Se t Style(Con t rolStyles . Op t imi z ed D ouЬleBu ff er ,
True)
End Sub
End Class

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


tQ Бе<ущо• строк• о х

Лабораторная работа

Рис. 246. В ывод бегущей стро к и

589
Оглавление

Предисловие...........................................................................................................3

Глава 1. Теоретические основы алгоритмизации и программирования ... 7


1.1. Алгоритм. Свойства алгоритма. Способы описания алгоритма .......................................... 7
1.2. Назначение функциональных блоков .............................................................................................. 8
1.3. Основные этапы решения зада ч при р аботе в среде программирования ................. 1О
1.4. Алфавит яз ыка Microsoft Visual Basic. Идентификаторы и общие прав ила
их нап исан ия ..............................................................................................................................................11
1.5. Оператор присваивания ...................................................................................................................... 12
1.6. Описание переменных и констант .................................................................................................. 13
1.7. Область видимости п еременных ...................................................................................................... 15
1.8. Ти пы данных ...............................................................................................................................................16
1.8.1. Целые типы дан ных ................................................................................................................. 16
1.8.2. Вещественные тип ы данных ................................................................................................ 17
1.8.3. Логические ти п ы данных (булевский тип ) ....................................................................18
1.8.4. Символ ьны е типы данных .................................................................................................... 20
1.8.5. Строков ые ти п ы данных ....................................................................................................... 20
1.8.6. Ти п данных Date ........................................................................................................................ 20
1.8.7. Комментарии .............................................................................................................................. 21
1.9. Запись математических функций ..................................................................................................... 21
1.1 О. П риоритеты операций ..........................................................................................................................24
Контрольные вопросы и задания ................................................................................................................. 26

Глава 2. Введение в язык программирования Microsoft Visual Basic ....... 27


2.1. Ин сталля ция среды разработки Microsoft Visual Studio........................................................ 27
2.2. Пр оцесс создания проекта .................................................................................................................. 30
2.3 . Экранные формы ......................................................................................................................................37
2.3.1. Ти пы интерфейсов ...................................................................................................................38
2.3.2. Организация взаимодействия форм ...............................................................................41
2.3.3. Окон чательная настройка приложения ........................................................................42
2.4. Обзор элементов уп равления ........................................................................................................... 42
2.4.1. Кнопка (Button) ..........................................................................................................................43
2.4.2. Метка (Label) ...............................................................................................................................44
2.4.3. Текстовое поле (TextBox) ...................................................................................................... 45
2.4.4. Пер еключател ь (RadioButton) ............................................................................................. 46
2.4.5 . Список (ListBox)..........................................................................................................................47
2.4.6. Прямоугольник группировки (Grou рВох) ".iliiOilHiiliiOilHiiliiOilHiiliiOilHiiliiOilliiiilHiiliiOilHii 5 l
2.4.7. Таймер (Тimer) ............................................................................................................................ 51
2.4.8. Флажок (CheckBox) ................................................................................................................... 51
2.4.9. Комбинированное поле (ComboBox) .............................................................................. 54
2.4.1 О. Полосы прокрутки (HscrollBar и VscrollBar) ..................................................................57
2.4.11 . Список с флажками (CheckedlistBox) ..............................................................................59
2.4.12. Счетчик (NumericUpDown) ................................................................................................... 62
2.4.13. Список (DomainUpDown) ...................................................................................................... 63
2.4.1 4. Ссылка (Lin klabel) .....................................................................................................................64

590
2.4.15. Гра фическое окно (PictureBox) ........................................................................................... 64
2.4.1 6. Элеме нт управл е н ия TabCont rol .......................................................................................65
2.4.1 7. Диагра мма (Chart) .....................................................................................................................66
2.5. Операторы ввода и вывода данных, обработка ош и бок ..................................................... 67
2.5.1. Функ ци и Val и Str ...................................................................................................................... 67
2.5.2. И с пользова н и е фун кций lnputBox и MsgBox ..............................................................69
2.5 .3. Фун кц и и п реобразова н ия ти п ов ......................................................................................74
2.5.4. П роверка п рав ил ьн ости ввода данн ы х ......................................................................... 77
2.5.5. Пр оверка кор ректн ости ввода данны х и инд и катор оши бок ............................ 78
2.5.6. Обр аботка и с кл ючений ......................................................................................................... 80
2.5.7. Огран и ч е н и е на ввод дан н ых в те кстовое п оле .......................................................84
2.5 .8. Разработка главного меню, кон текстного мен ю и строки состоя н ия ............85
Контрольные вопросы и задания ................................................................................................................. 89

Глава 3. Линейный алгоритм ............................................................................ 91


Упражнения ............................................................................................................................................................ 91
При меры ре ш ения задач ................................................................................................................................. 94
Контрольные вопросы и задан ия .................................................................................................................98
Задачи для самостоятельного решения ..................................................................................................99

Глава 4. Разветвляющийся алгоритм ........................................................... 101


4.1. П ростой усл ов н ый оператор ........................................................................................................... 101
4.2. Сокращенн ый услов н ый оп е р атор .............................................................................................. 102
4.3. Составн о й усл овный о п е ратор ...................................................................................................... 103
4.4. Мн огоз н ач н ые ветвлен ия ................................................................................................................. 104
4.5 .Алго ри тмы поиска макс им альн ого и м ин им ал ьн ого элеме нтов .................................. 105
Упражнения ......................................................................................................................................................... 111
При меры решения задач .............................................................................................................................. 115
Контрольные вопросы и задания .............................................................................................................. 118
Задачи для самостоятельного решения ............................................................................................... 118

Глава 5. Оператор выбора Select Case .......................................................... 120


Уп ражнени я......................................................................................................................................................... 122
При меры решен ия зада ч .............................................................................................................................. 124
Контрольные вопросы и задания .............................................................................................................. 125
Задачи для самостоятельного решения ............................................................................................... 125

Глава б. Циклический алгоритм .................................................................... 127


6.1. О п ерато р цикл а For ............................................................................................................................. 127
6.2. Базо в ые ал горитмы, и с п ол ьзуемые п ри прог раммирова н и и цикл иче ск и х
ал горитмов ...............................................................................................................................................
131
Упражнения ......................................................................................................................................................... 134
При меры ре ш ения задач .............................................................................................................................. 138
Контрольные вопросы и задания .............................................................................................................. 157
Задачи для самостоятельного решения ............................................................................................... 158
6.3. О ператор цикла Do ... Loop Until .................................................................................................... 158
Упражнения ......................................................................................................................................................... 162
При меры ре ш ения задач .............................................................................................................................. 167
Контрольные вопросы и задан ия .............................................................................................................. 172
Задачи для самостоятельного решения ............................................................................................... 172

591
6.4. Оператор цикл а Do Wh ile ... Loop .................................................................................................... 172
Упражнени я ......................................................................................................................................................... 177
Примеры решения задач .............................................................................................................................. 181
Контрольные вопросы и задания .............................................................................................................. 190
Задачи для самостоятельного решения ............................................................................................... 190

Глава 7. Работа с одномерными массивами ............................................... 192


Заполнение массива случайными числами .............................................................................. 195
Вывод элементов массива на элемент управления ListBox .............................................. 197
Вывод элементов массива на элемент управления TextBox ............................................ 198
Вывод элементов массива на элемент управления DataGridView ................................ 199
7.1. Базовые алгоритмы обработки одномерных массивов ..................................................... 201
7.2. Упорядочивание одномерных массивов................................................................................... 214
7.2.1. Упорядочивание методом прямого выбора ............................................................ 215
7.2.2. Упорядочивание элементов методом обмена (метод «пузырька») .............. 218
7.2.3. Алгоритм упорядочивания элементов по убыванию .......................................... 221
7.2.4. Метод бинарного п оиска ................................................................................................... 224
7.3. Динамические массивы ..................................................................................................................... 228
Примеры решения задач .............................................................................................................................. 231
Контрольные вопросы и задания .............................................................................................................. 241
Задачи для самостоятельного решения ............................................................................................... 242

Глава 8. Работа с двумерными массивами .................................................. 246


8.1. Основные свойства матриц ............................................................................................................. 252
8.2. Базовые алгоритмы обработ ки двумерных массивов ........................................................ 253
Примеры решения задач .............................................................................................................................. 274
Контрольные вопросы и задания .............................................................................................................. 290
Задачи для самостоятельного решения ............................................................................................... 290

Глава 9. Работа с файлами .............................................................................. 294


9.1. Операторы для работы с файлами п оследовательного доступа ................................... 294
9.2. Операторы для работы с файлами п роизвольного доступа ........................................... 302
9.3. Операторы для работы с файлами двои чного доступ а ..................................................... 306
Примеры решения задач .............................................................................................................................. 308
Контрольные вопросы и задания .............................................................................................................. 314
Задачи для самостоятельного решения ............................................................................................... 315

Глава 1 О. Работа с функциями и процедурами .......................................... 318


10.1. Событийные процедуры .................................................................................................................... 319
10.2. Создание пользовательских п роцедур ...................................................................................... 320
10.3. Создание пользовательских функций ........................................................................................ 322
Примеры решения задач .............................................................................................................................. 326
Контрольные вопросы и задания .............................................................................................................. 343
Задачи для самостоятельного решения ............................................................................................... 343

Глава 11. Работа с символами и строками .................................................. 346


11.1. Функции модуля Strings ..................................................................................................................... 346
11.2. Методы структуры Char ..................................................................................................................... 350
11.3. Методы класса String ........................................................................................................................... 352
11.4. Базовые алгоритмы обработки строк ......................................................................................... 354

592
11.4.1. Определение количества символов ............................................................................. З54
11.4.2. Замена символов в строке ................................................................................................ З55
11.4.3. Удаление символов в строке ........................................................................................... З56
11.4.4. Вставка символа в строку .................................................................................................. З58
11.4.5. Анализ символа на принадлежность к группе ........................................................ З59
11.4.6. Подсчет количества фрагментов ................................................................................... З60
11.4.7. Поиск строки в блоке текста ............................................................................................ З62
Примеры решения задач .............................................................................................................................. З6З
Контрольные вопросы и задания .............................................................................................................. З68
Задачи для самостоятельного решения ............................................................................................... З68

Библиографический список ........................................................................... 370

Приложение 1. Примеры выполнения лабораторных работ .................. 371


Лабораторная работа № 1. Запись арифметических выражений ............................................. З71
Лабораторная работа № 2. Многозначные ветвлен ия в программах.
Использование проверки корректности ввода данных и индикатора ошибок ................ З82
Лабораторная работа № З. Использование элементов управления CheckBox,
RadioButton, ListBox, GroupBox в программах..................................................................................... З9З
Лабораторная работа № 4. Программирование алгоритмов разветвляющихся
структур с использованием поиска максимального и минимального значений .............. З99
Лабораторная работа № 5. Разработка программ с использованием главного
меню и строки состояния ............................................................................................................................. 407
Лабораторная работа № 6. Табулирование функций ...................................................................... 414
Лабораторная работа № 7. Программирование алгоритмов регулярных
циклических структур ..................................................................................................................................... 422
Лабораторная работа № 8. Табулирование функции с использованием циклов
с неизвестным количеством повторений ............................................................................................. 4З2
Лабораторная работа № 9. Организация многодокументного интерфейса ........................ 450
Лабораторная работа № 1О. Программирование алгоритмов итеративных
циклических структур ..................................................................................................................................... 456
Лабораторная работа № 11. Комплексное применение элементов управления .............. 474
Лабораторная работа № 12. Классические способы обработки одномерных
массивов ................................................................................................................................................................ 480
Лабораторная работа № 1З. Программирование алгоритмов формирования
и обработки одномерных массивов ........................................................................................................ 490
Лабораторная работа № 14. Классические способы обработки двумерных
массивов ................................................................................................................................................................ 501
Лабораторная работа № 15. Программирование алгоритмов формирования
и обработки двумерных массивов ........................................................................................................... 512
Лабораторная работа № 16. Разработка текстового редактора ................................................ 522
Лабораторная работа № 17. Работа с функциями и процедурами ........................................... 5ЗЗ
Лабораторная работа № 18. Разработка графического редактора .......................................... 542
Лабораторная работа № 19. Классические способы обработки строк................................... 555
Лабораторная работа № 20. Обработка строковых данных ........................................................ 562

Приложение 2. Создание заставок к проектам .......................................... 568


По вопросам приобретения книг обращайтесь:
Отдел продаж «ИНФРА-М» (оптовая продажа):
127214, Москва, ул. Полярная, д. 3 lB, стр.1
Тел . (495) 280-33-86 (доб. 218, 222)
E-mail: bookware@infra-m.ru

Отдел «Книга-почтой»:
тел. (495) 280-33-86 (доб. 222)

ФЗ Издание не подлежит маркировке


№ 436-ФЗ в соответствии с п. 1 ч. 4 ст. 11

Учебное издание

Гуриков Сергей Ростиславович

ОСНОВЫ АЛГОРИТМИЗАЦИИ
И ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ
MICROSOFT VISUAL BASIC

УЧЕБНОЕ ПОСОБИЕ

Ор игинал-макет подготовлен в НИЦ ИНФРА-М

ООО ~ н аучно-издательский центр ИНФРА-М »


127214, Москва, ул. Полярная, д. 31В, стр. 1
Тел. : ( 495) 280-15-96, 280-33-86. Факс: ( 495) 280-36-29
E-mail: books@infra-m.ru http://www.infra-m.ru
Подписано в печать 28.02.2022.
Формат 60х90/16. Бумага офсетная. Гарнитура Petersburg.
Печать цифровая. Усл. печ. л. 37,13.
ППТ20. Заказ No 00000
тк 680933-1864235-170919

Отпечатано в типографии ООО ~ научно-издательский центр ИНФРА-М»


127214, Москва, ул. Полярная, д. 31В, стр. 1
Тел.: (495) 280-15-96, 280-33-86. Факс: (495) 280-36-29

Вам также может понравиться