Академический Документы
Профессиональный Документы
Культура Документы
ПРОФЕССИОНАЛЬНОЕ
ОБРАЗОВАНИЕ
С.Р. Гуриков
OCHOBbl
АЛГОРИТМИЗА ИИ
И ПРОГРАММИРОВАНИЯ
на языке
Microsoft
-
Visual Basic
СРЕДНЕЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАНИЕ
Серия основана в 2001 году
С.Р. ГУРИКОВ
ОСНОВЫ АЛГОРИТМИЗАЦИИ
И ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ
MICROSOFT VISUAL BASIC
УЧЕБНОЕ ПОСОБИЕ
Москва
ИНФРА-М
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, сделан обзор основных элементов
управления среды программирования, уделено внимание методам ввода
3
в учебном процессе, но только при соответствующей их детальной
переработке.
Вчерашний школьник, а сегодня - студент, не готов с первых
дней обучения осваивать программирование на основе создания
собственных функций и процедур языка программирования, од
нако такой подход часто предлагается с первых страниц иных из
даний.
Слабая мотивация, сложность решаемых задач (часто сразу
из области численных методов), отсутствие навыков в среде прог
раммирования порой формируют стойкое неприятие к основам ал
горитмизации и программирования.
на улучшение их работы.
Преподаватели могут оценить учебное пособие с точки зрения
методики преподавания. Многие листинги программ специально
написаны таким образом, чтобы учащиеся имели возможность
доработать или оптимизировать их код, - это поможет педагогу
создать творческую атмосферу на занятиях. К каждой главе при
ведены примеры решения задач, упражнения, задачи для самосто
5
В пособие умышленно не включались описание среды прог
раммирования, излишние подробности использования тех или
иных функций языка, создание больших приложений, которые
не могут быть рассмотрены в рамках ~классического» занятия.
Следует отметить, что учебное пособие не МО)кет претендовать
на функциональную полноту или на абсолютную оригинальность
приведенных методов, алгоритмов и программ. Автор преследовал
иную цель: не отпугнуть студентов с низким уровнем базовой под
готовки от основ изучения языка программирования, а помочь им
алгоритмизации.
шения задачи.
1) достать ключ;
2) вставить ключ в замочную скважину;
3) повернуть ключ 2 раза против часовой стрелки;
4) вынуть ключ.
Представим, что мы поменяли местами второе и третье действия.
Мы сможем выполнить и этот алгоритм, но дверь не откроется, т.е.
алгоритм станет невыполнимым.
7
рактер и не требует никаких дополнительных сведений о реша
емой задаче;
· результативность - алгоритм долж:ен приводить к решению
8
Таблица 1
Условные обозначения в схемах алгоритмов
Терминатор Процесс
Символ отображает выход Символ отображает фуикцию об
во внешнюю среду и вход работки данных любого вида (вы
из внешней среды (начало полнение определенной операции
или коиец схемы программы, или группы операций, приводящее
внешнее использование к изменению значения, формы или
и источник или пункт назна размещ ения информации, или к опре
че~-rия да~-rных) делеиию, по которому из I-Iескольких
(_ _) гаться)
Данные Решение
Символ отображает данные, Символ отображает решение или
иоситель да~п1ых ие определеи функцию переключательного типа,
имеющую один вход и ряд альтерна
~
!__ /
тивных ВЫХОДОВ, ОДИН И ТОЛЬКО ОДИН
Подготовка Соединитель
Символ отображает модифи Символ отображает выход в часть
кацию команды или группы схемы и вход из другой части этой
команд с целью воздействия схемы и используется для обрыва
иа иекоторую последующую лииии и продолжеиия ее в другом
9
Окончание табл. 1
Предопределенный процесс Линия
Символ отображает Символ отображает поток да~п-1ых или
предопределенный процесс, управления
11 1 1
Комментарий Документ
Символ используют для до Символ отображает даи~-rые, представ
бавления описательных ком ленные на носителе в удобочитаемой
ментариев или пояснительных форме ( машинограмма, документ для
записей в целях объяс~-rе~-rия оптического или магнит~-rого считы
----------·
10
3 этап. Разработка алгоритма. Этап заключается в описании
последовательности действий, в результате которых может быть
получено решение задачи.
2) цифры от О до 9;
3) специальные символы «+», «-», «*», «/ », «=», «;» «:», «[ )»,
«( )», «{ }», «$», «#»;
4) зарезервированные (служебные) слова: For, Then, Else, Of, If
и т.д.
11
• идентификатор МО)кет состоять из букв, цифр и знака подчер
кивания;
summa1 правильно
2delta ошибка
Block 35 правильно
Nomer.doma ошибка
k=5
k=k+1
k=8
после первого присваивания значение переменной k становится
равным 5, после второго - 6, после третьего - 8.
Операторы выполняются в той последовательности, как они за
писаны в программе. Например, фрагмент программы нахождения
среднего арифметического включает в себя операторы:
а=5
ь = 10
12
S=a+b
v=s/2
Возможна запись оператора присваивания в следующем виде:
=оператор
л= оператор
*=оператор
/= оператор
\=оператор
+=оператор
-=о ператор
х+= 1
В данном случае единица прибавляется к значению х и ре
зультат присваивается х. Остальные операторы работают анало
гично.
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-разрядной),
чем, возмож:но, нужно. Кроме того, программе придется тратить
дополнительное время на определение того, к какому типу дан ных
Пар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 сбор.и...
14
переменной. Кроме того, если одной переменной присваивается
значение другой и при этом необходимо преобразование типов
(например, от Integer к Boolean), то такое преобразование должно
быть явным.
2. Параметр Explicit. Если задан параметр Explicit On, то
каждая переменная в проекте должна быть объявлена. Эта уста
новка не будет играть роли при использовании ре.1кима Strict, по
скольку компилятор не сможет определить тип необъявленной пе
ременной. Однако режим Explicit On не следует отключать.
3. Параметр Compare. Данный реж:им определяет, будут срав
ниваться строки как наборы двоичных чисел (Binary) или как мас
сивы символов в текстовом формате (Text ).
Сразу следует отметить, что при выполнении упражнений, ра
зобранных в пособии, ре.1кимы Option Strict и Option Explicit
должны быть обязательно включены. Кроме того, для лучшего
усвоения материала автор оставил в программах предварительное
15
Puhlic а As Integer
Private а As Integer
Размер,
Тип Диапазон значений
байт
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
+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
рицательных значении;
от 4.94065645841246544Е -324
до 1.797693134862311570Е +308 для положи -
тельных чисел
D im а As Single
образом:
18
Dim а As Boolean
Dim с As Integer
а= True
Ь = False
Результат операции сравн ения - это ло гическ ое значен ие, по
этому в VB разрешена зап ись
а= d>5
Логические операции
Or Логическое ИЛ И A OrB
(дизъю икция )
щается False
щается True
19
Используя операцию И, мож:но объединять несколько условий.
Например, некоторое действие выполняется только в том случае,
если 1 <а< 5, тогда это условие мож:но записать так: (1 <а) and
(а < 5), причем значение этого условия истинно только в том
случае, если истинны оба входящих в него простых условия.
Unicode.
В языке VB переменные строкового типа описываются типом
string:
name = "Студент"
1.8.6. Тип данных Date
Тип Date в
VB хранит значения, представляющие даты. В раз
деле описания Dim переменные этого типа описываются сле
дующим образом:
20
Dim а As Date
1.8.7. Комментарии
21
Таблица 5
Математические функции класса Math
Математическая
Описание
функция
22
End SuЬ
End Class
Математическая
Результат Описаиие
функция
аргументу
аргументу
рифма
Math.Exp (2) 7,38905609893065 Е2 - число Е в заданной
степени
23
Окончание табл. 6
М атематическая
Результат Описание
фу акция
Matl1.Rou11d (62.17) 62
Math.Round 62,14 О кругление до двух
u
(62.13605,2) знаков после запятои
Приоритет Операция
3 Смена знака
4 Умиожеаие и делеиие
5 \Деление иацело
24
Окончание табл. 7
Приоритет Опе рация
Операция Описание
Строка 1 + Строка2
25
Контрольные вопросы и задания
1. Что иазывается алгоритмом? Какими свойствами ои об ладает? Пе
речислите основные этапы решения задач при работе в среде прог
раммирования и дайте им характеристику.
2. Что называется интерпретатором, компилятором? Объясните поиятие
~идентификатор~ и расскажите об общих правилах написания иден
тификаторов .
3. В чем заключается действие оператора присваивания? Каковы две
формы записи дробиых чисел?
4. Дайте характеристику каждому типу данных языка V B.
5. Назовите приоритеты операций .
Глава 2
ВВЕДЕНИЕ В ЯЗЫК ПРОГРАММИРОВАНИЯ
MICROSOFT VISUAL BASIC
27
и программирования, которые будут рассматриваться в данном из
дании.
®
Начать работу
8
Разработка приложений
@
Сотрудничество
Зарегистрируйтесь}
28
f? - D
В.. можете 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
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
29
!!.) Н.ч.А-~ЦI Moaosoft V'4l.Olf Stlllk
""... Прна 11..,. Пpot!n о.,..... ~ Срцс" ткn~.,_.... ~"_, О.мо ~
P•1'1p116m.ih.!1ecoe~~.,.""c~~.,..~·
°"f l:t!e )2 Ь1t .N(Т 1\1~ 1$ ll'\Jt8li.d.
......... .os НOIOf26~ •
Последние "1MICl'OIOft.(OO'l'*"l):i.tt~.wt
tinlll)vnotd.,,. ~'8-IМ>oioty(>f
Новый проект V ....... ~Appc.t\ЦtlO~IOЬjC.
... .-..
30
Обозреватель решений
Пространства имен
Ссылка Описаиие
Syste1n Содержит фундаментальные классы, обеспечи-
вающие фу~-rкциональность, иеобходиму10 для
каждого приложения. Например, класс Array,
необходимый для работы с массивами; класс
Exception для обработки исключителыrых
v
ситуации; структуры, представляющие типы
31
Окончание табл. 70
Ссылка Описание
Со.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
...
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>•>< Об~ор
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
,"
м-
•• 1В Avto$<roll~otl
:1 AutoS4:f'Oll~
О; О
О;О
AutoSue r.1и
A11toSireМo6e ~ly
u..w.;.cu,_
. . •. llwo..
33
!:О.) Первый проект - Microsoft Visual Studio
Файл Правка Вид Проект Сборка Отл<V1ка Ко"анда Средства Тестирование Анализ Окно Справка
~ Указатель
@ 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> Меню и панели инструментов
~ Данные
Фай.11 Правка Вид П~кт Сборка Отладка Ко'4аН.U Фор-..~п Средстаа Тестироаакие Анали:J Окно Сnраака
~
6 ~';;'" ~
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 • " lJ • • о.
- D Х
35
Для того чтобы написать программный код, необходимо создать
событие, т.е. реакцию программы на взаимодействие пользователя
с графическим интерфейсом программы. Типичными видами взаи
модействия являются перемещение мыши, щелчок мыши, щелчок
по кнопке и т.д. Информация о событиях передается обработчикам
событий, которые являются методами, вызываемыми в ответ
на возникновение конкретных событий.
Рассмотрим пустой обработчик события щелчка пользователя
на командной кнопке:
End SuЬ
36
Пример сообщения Х
• Привет, мир!
ок
Таблица 11
Свойства формы
Свойство Описание
AutoScroll Появление полосы прокрутки
37
Окончание табл. 11
Свойство Описание
и закрытия формы
Таблица 12
События формы
Событие Описание
MyForm.Hide() Форма скрывается (свойство Vis iЫe устанавли-
вается равным False)
38
МDI-интерфейс предоставляет возможность открывать много
кратно форму одного вида для нескольких разных по содержанию
документов. Примером такого интерфейса мож:ет служ:ить прог
рамма Microsoft Excel. Для такого интерфейса характерно то, что
имеются главное окно, называемое родительским окном, и необ
ходимое количество подчиненных окон, называемых дочерними.
Родительское окно является контейнером для всех дочерних окон.
При его ми ни мизации вместе с ним минимизируются и все до
чер ние окна.
39
• Родительское окно о х
Button1
Таблица 73
Свойства МDl-форм
Свойство Описаиие
Общие свойства дочернего МDI-окна
IsMdiChild О пределяет, является ли форма дочерним MDI-
окном. Если свойство имеет значе~-rие True, то форма
является дочерним МDI-окном
40
2.3.2. Организация взаимодействия форм
41
2.3.3. Окончательная настройка приложения
* Быстрый доступ
• Desktop
,-. Downloads
,;
,;
~
WindowsA
у~
WindowsA WindowsA WindowsA
рр1.ехе рр1.ехе.со pp1.pdb pp1.xml
~ Documents ,; nfig
~ Pictures ,;
42
программу, предназначенную для проверки знаний по какой-либо
теме.
Таблица 14
Общие свойства элементов управления
Свойство Оп исание
43
связанным с кнопкой, является событие Click. Наиболее часто ис
пользуемые свойства элемента управления Кнопка представлены
в табл. 15.
Таблица 15
Свойства элемента Кнопка
Свойство Описание
Таблица 16
Свойства элемента Надпись
Свойство Описание
AutoSize Логическое свойство, которое устанавливает режим ав-
томатического изме~-rения размеров надписи так, чтобы
u
в неи полаостыо помещался текст
44
Окончание табл. 76
Свойство Описание
Таблица 17
Свойства элемента Текстовое поле
Свойство Описа~-rие
BorderStyle Стиль рамки текстового поля. Определяет тип об-
рамлеиия вокруг объекта
Допустимые значения:
- None (i-re выводить полос прокрутки );
- Horizontal (выводить горизонтальную полосу
прокрутки);
- Vertical (выводить вертикальную полосу про-
крутки);
- Both (выводить горизонтальную и вертикальную
полосы прокрутки )
45
Окончание табл. 17
Свойство Описание
Свойство Описание
Caption Надпись, отображаемая рядом с переключателем
CheckAlign, Служат для указааия того, где должаы ааходиться
TextAlign кнопка-переключатель и текст в пределах площади, за-
v
нятои элементом управления
r!iзoog1e1
'···-·······]
r вAIDu
r вINo
.- улноо !
Ok
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 ' увеличиваем счетчик
на единицу
47
одно или несколько значений, которые в последующем использу
ются в тексте программы. Выбор элемента из списка производится
щелчком по элементу. Наиболее часто используемые свойства эле
мента управления Список представлены в табл. 19.
Таблица 79
Свойства элемента Список
Свойство Описание
области
Selectedltem, Свойства задают соответственно текст и индекс
Selectedlndex выделенаого элемента списка
Вопрос 5
-
Сопоставьте скоростны е 171 2 Кбит/с
' -
i
_,
'-····- ····- ····.1····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ····- ""- ····- ····- ····- ····- ···;
хара ктеристики с соответствующими 14,4 Кбит/с
назва ниями беспроводных 474 Кбит/с
технологий
--------> 1
---------> 1
--------->
_J
Ok
48
В процессе работы над вопросом пользователь выбирает один
из элементов списка, пр едставленных в окне ListBox1 , и, нажав
одну из кнопок, переставляет выбранный ответ либо в ListBox2,
либо в ListBoxЗ, либо в ListBox4, при этом элементы списка уда
ляются из ListBox1. Подобная ситуация показана на рис. 18.
Вопрос 5
.- ..
Сопоставьте скоростные
характеристики с соответствующими
названиями беспроводных
технологий
l GSM
1 171,2 Кбит/с
1
--------------:> 1
IGPRS
_ 1 14,4 Кбит/с
-------------:> 1
1
Ok
1
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
50
2.4.6. Прямоугольник группировки (GroupBox}
GroupBoк1
Таблица 20
Значения элемента управления Флажок
Состояаие Заачеаие
Н е определен Indeterrninate
Сброшен Unchecked
Установлен Checked
Свойство Описа~-rие
Appearance Используется для задаиия вида флажков. Имеет два зиа -
чения. П о умолчанию Normal - квадрат с размещаемой
внутри галочкой. При заачеаии Button флажок имеет
u u
вид плоскои или приподнятои кнопки
51
Окончание табл. 21
Свойство Описание
г ti.!<>~~iO.iii!~ioi.~iJ
Г Хранилище
Г Оптимизатор
Ок
1
52
и нажал кнопку ОК, то появится сообщение, представленное
на рис. 20. Подобный прием будет использоваться и при програм
мировании других вопросов .
1 ..... "
Microsoft Excel
•,
Надо ответить на вопрос!
1r·····.".."...ok.. ".""""il
·······································"'
Рис.20.Сообщени е
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
Свойство Описание
DropDownHeight Задание высоты ниспадающей части списJКа
54
Окончание табл. 22
Сво йство Оп исание
~ Вопрос 1 - О Х
1Введ111те о~вет
1Введ111те о~вет
Введ111те о;вет
1 v 1
55
Е1 Вопрос1 - О Х
А. Системой прерываний
Б . Процессами
В . МоАУnями ОС
Г. О 1Ьlми Фа~пами
ВведИте ответ
1 ВвеД)llте ответ
[ Ok
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
Свойство Описание
EnaЬled Логическое свойство, которое опр еделяет, может ли
пользователь изменить значение полосы прокрутки
кр утки. По умоJР:Iанию - 1
Value Возв ращает или устанавливает текущее значение
полосы прокр утки
57
представлен внешний вид программы, в которой используется рас
сматриваемый компонент.
< >
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
·~ t.1ама
О Пап а
Элемент управления CheckedListBox
является сочетанием элементов ListBox, задающего стандартный
список, и CheckBox, имеющего вид флажка и предназначенного
для выбора одного из двух возмо)кных значений. Таким образом,
данный элемент управления представляет собой список элементов,
с левой стороны ка)кдого из которых расположен флажок.
Элемент управле ния CheckedListBox обладает основными
свойствами списков, такими как наличие полос ы п рокрутки, воз
можно сть задания более двух колонок, сортировка элементов
по алфавиту.
Некоторые свойства элемента управления Список с флажками
представлены в табл. 24.
Таблица 24
С войство Описание
CheckOnClick Позволяет определить, будет флажок устанав -
ливаться при выборе элемента списка ил и при
дополн итель ном щелчке на нем . Для одповреме н -
наго выделения элемента и выбора флажка необ-
ходимо задать значение True для этого свойства
59
~ Вопрос 1 - D Х
О Планирование ресурсов
О Отслежиsание состояния ресурсов
О Удовлеmорение заnросов на ресурсы
О Разрешение коНфликтов между процессами
О Повьwение приоритета задачи
[ Ok:J
Рис. 24. Пример работы компонента. Исходное состояние окна с вопросом
Тест Х
1 ок
Рис. 25. Предупреждающее сообщение
60
~cr Х
о
Вы ответиJН1 правL1льно! Переходим к спе_дующеыу
вопросу.
ок 1
Рис.26.Сообщение
~ Вопрос 1 - О Х
1 Ok 1
Рис. 27. Про изо шла очистка элементов списка
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
Таблица 25
Свойство Описание
BorderStyle Служит для задания стиля обрамления элемента
управления
62
Окончание табл. 25
Свойство Описание
Свойство Описание
п риложеаия
63
2.4.14. Ссылка (LinkLabel}
Управляющий элемент LinkLabel отображает ссылки на другие
ресурсы, такие как файлы или веб-страницы. Элемент LinkLabel
появляется в виде подчеркнутого текста (по умолчанию синего
цвета) . Когда указатель мыши попадает на эту ссылку, его форма
меняется на изображение руки; такое поведение аналогично пове
дению гиперссылки на веб - странице. Когда производится щелчок
по упр авляю щему элеме нту LinkLabel, ге нерирует ся событие
LinkClicked. Класс LinkLabel является производным от класса
Label и, следовательно, наследует все функции класса Label.
Наиболее часто используемые свойства элемента управления
LinkLabel представлены в табл. 27.
Табли ца 27
Свойства элемента управления LinkLabel
Свойство Описание
Свойство Описание
64
Окончание табл. 28
Свойство Описание
Свойство Описаиие
65
2.4.17. Диаграмма (Chart}
Элемент управления Chart служит для визуального отобра
жения на форме данных и результатов в виде графиков и диаграмм.
Для того чтобы воспользоваться компонентом, следует осуществить
его выбор на Панели элементов в категории Данные. Воспользо
вавшись одним из основных свойств элемента управления - Series,
и перейдя в Редактор коллекции, пользователь может осуществить
выбор типа диаграммы (гистограмма, график, линейчатая и др.)
с помощью свойства ChartType.
На рис. 28 показан возмож:ный вид диаграммы по результатам
прохождения тестовой программы.
8-+---
6-+---
4-+---
2-+---
0-+---
Ok
аналогичен рассмотренному.
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
67
Пример:
TextBox1.Text = Str(Summa)
Иногда бывает необходимо указать компьютеру, в каком виде
(формате) мы хотим получить результат. Для этого следует ис
пользовать функцию Format. В скобках функции Format распо
лагаются через запятую два аргуме нта. П ервый аргумент - п ере
менная, число, выра:>кение . Второй аргумент - строка в кав ычках,
с помощью которой мы управляем внешним видом числа. Символы
в кавычках называются символами формата.
В озможные аргументы функции Format и их описание приве
дены в табл. 30.
Таблиц а 30
Возможные аргументы функции Format
Символы
Пояс~-rение
и р езультаты
Листинг программы
68
2.5.2. Использование функций lnputBox и MsgBox
Второй способ - ввод данных из окна ввода и вывод данных
с помощью окна сообщения.
Окно ввода - это стандартное диалоговое окно, которое по
является на экране в результате вызова функции InputBox. Зна
чение функции InputBox - строка, которую ввел пользователь.
Поэтому если программе надо получить число, то введенная строка
должна быть преобразована в число с помощью соответствующей
функции преобразования. Стандартное окно для ввода представ
лено на рис. 29.
Ввод 1 числа х
Оrмена
Пример:
пользователь.
69
В общем виде инструкция вывода данных с использованием
функции MsgBox выглядит так:
MsgBox ("Cooбщettue", НомерКнопки, "Заголовок" )
где Сообщеttие - представляет собой текст, который будет ото
бражен на экране; НомерКнопки - указывает тип отображ:аемых
кнопок, тип используемой пиктограммы; Заголовок - это надпись
в строке заголовка Окна вьmода.
Установки для аргуме нт а Номер Кнопки представлены
в табл. 31.
Таблица 31
Установки для аргумента НомерКнопки
Коистанта Описааие
Листинг программы
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
Отмена
О Привет, Сергей
ок
71
ж:атию одной из кнопок на экране отображается сообщение, под
тверж:дающее нажатие.
Листинг программы
Окно с приветом Х
Здра аавуйrте! !!
ок
72
Выход х
_f_да _f _I _н_ет___.
Ввод 1 числа х
01Jt.11eнa \
l з.21
Ввод 2 числа х
[OTh'leнa
l з.Щ
73
Листинг программы
Получаем ответ х
ок
74
режим Параметр Strict/ On. Запустив программу на выпол
нение, увидим ошибку: VB подчеркнул строки, относящиеся ко
вводу данных. Произошла данная ситуация потому, что функция
InputBox возвращает строковое значение, а переменные в разделе
описания описаны как вещественные числа.
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
А ВСЗОS
..., 12 "S1n9lt
Optюn Strkt On ие ра3реwает неJ1tиые nреобраэоuwия "String" к
",
Windo··-• ......
'"N"'f't'
1 Form1.vb 13 Активнь~й
Листинг программы
75
Ь = CSng (v )
с = а + Ь
MsgBox ( " Зна чен ие У - " & Cint (с) , vЫnf orma-
tion , " П олучаем ответ ")
Ме . Cl ose ()
End Sub
End Class
01Мена
lз.ОБВ
Отмена ]
76
Получаем ответ х
О Зн1ачение V = 5
ок
Таблица 32
Функции преобразования типов
Листинг программы
сказку.
78
Заполнение данных D х
Введите пароль
.__~~-о-·-k~~~~I l___п_е_рех.о
---д--на__вто__р_1ю__Ф_о_р_м_у___I
Рис. 40. Форма для ввода пароля
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]
Пароль
;:...._---=========:::::::
1.._________,10
!Пароль не введен 1
Ок
80
чительная (Exception) ситуация. В начале блока стоит простой опе
ратор Try. Блок кода Catch располагается там, где мы определяем,
какие типы ошибок следует искать. Блок Finally всегда исполня
ется и содержит подпрограммы освобо)кдения ресурсов для исклю
чительных ситуаций.
В приведенном ниж:е примере мы окружили весь код, где воз
мож:но возникновение ошибки, блоком Try ... Catch ... Finally. При
веденный блок содерж:ит два оператора Catch. П ервый из них пе
рехватывает конкретную ошибку переполнения, которая возникает
вследствие деления на ноль. Данный оператор позволяет использо
вать свойства объекта Exception путем инициализации переменной
expet. При выполнении этого кода появится сообщение, представ
ленное на рис. 42.
ок
ок
81
Листинг программы
End Try
End Sub
End Class
Листинг программы
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
83
MessageBox . Show(Str(c))
End Try
End Sub
End Class
If Ь = О Then
Exi t Try
Else
MessageBox . Show ("Ошибка не связана
с д елением на О ")
End I f
текстового поля;
Листинг программы
84
Case 45 ' знак ми нус
'если уже есть один знак минус,
новый отбрасывается
If InStr (TextBoxl . Text, " - " ) <> О
Then
key = О
End I f
Case 46 ' д есяти ч ная то ч ка
' о т брасываем ее , если у на с уже ес т ь
десятичная т очка
клавиш
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
85
i;i.-1 ~;:inn 1:;>1-1ие данных
Выход
1 1
[ВВодить здесь 1
Введите пароль 1 1
IEJ MenuStrip1
Свойства Описание
86
Для создания клавиши быстрого набора (горячей клавиши)
необходимо перед символом имени (пункта) меню ввести символ
амперсанда ( &). Например, для создания пункта меню File нужно
ввести &File. Для добавления других клавиш быстрого набора (на
пример, Ctrl + F9) необходимо выставить модификаторы свойства
ShortcutKeys для соответствующего пункта меню.
Пункты меню мож:но объединять в логические группы с по
мощью Разделителя (Separatorbar). Для установки разделителя
достаточно ввести в текст меню символ~-~.
~~~ ~· J~
[ > Location О; 445
Члены: > Margin О; О; О; О
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
ОК Отмена
87
Листинг программы
D Заполнение данных о х
Файл 1 Правка
ВIЬllКОД имя
Введите пароль
11
Ok Перех.од на вторую Форму ~
88
Для создания контекстно-зависимого меню (вызывается правой
кнопкой мыши) используется элемент управления ContextMenuStrip.
Контекстное меню создается для конкретного объекта, например для
формы, для кнопки, для элемента ListBox и т.д.
П редположим, нужно создать контекстное меню для формы
с пунктом Цвет и влож:енные пункты Синий и Красный ( рис. 47) .
•
Красный
Листинг программы
89
5. Каким образом осуществляется взаимодействие двух форм? Пояс
ните на примере соответствующих операторов .
/
Начал о
Р1
Р2
'
'
Конец
УПРАЖНЕНИЯ
91
Вопрос 1. Какими будут значения переменных m и n после вы
полнения фрагмента программь1?
m=25
n=m + 1
m=m - 25
m=20
n = 10
m=m / n
n=m * n
n = n + 30
m =ЗО
n=2
n=m / 2
m=n
m=m + n
m=m
92
Ответ. После выполнения оператора n= т / 2 в ячейку n за
носится число 15. П осле выполнения оператора т = n в ячейке т
будет также находиться число 15. Следовательно, число 30 зано
сится в ячейку т после выполнения оператора т = т + n. Оператор
т = т переприсваивает значение переменной m.
Ответ в упражнении: значение переменной т равно 30.
m= 11
n=m * 2
m=m+n
m=m
WriteLine (m)
93
Вопро с 6. Дано описание пер еменных:
Dim х, у, z As Integer
Dim а, s, d As Boolean
Есть ли из перечисленных ниже операторов недопустимые?
1. х =у+ z
2. у= z
3. а= х > z
4. s = T rue
5. Все операторы записаны верно
Ответ . В первом случае справа от оператора присваивания на
ходятся переменные z и у, описанные как целочисленные, пере
94
Начало
а, Ь, х, t
y,z
Конец
95
• Запись выражений о х
lo.318
Q15ету= Ответz=
140.6792 l 13.11985
х = 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 ,
End Sub
End Class
96
Получаем ответ х
c:.:oc.J
Рис. 51. Полученное з н а чение У
Получаем ответ х
О Зн~ачение Z = 15,40789
ок
С= EoS
L-d '
97
Н ачало
S, L, D
ЕО = 8.85Е- 1 2
С = ( ЕО * S) / (L - D)
Конец
98
3. Назовите основные функции преобразования типов. Поясиите их ~-rа
значение.
cl1 = 245·
'
min = 60ch;
sec= 60 min.
3. Разработайте алгоритм и программу, в которой вычисляется площадь
треугольиика по трем сторонам. Вычисление проводится по формуле
Герона:
по правилу Крамера:
х = С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
РАЗВЕТВЛЯЮЩИЙСЯ АЛГОРИТМ
Нет Да
выражение
10 1
Синтаксис простого условного оператора следующий:
Нет Да
выражение
102
Синтаксис сокращенного условного оператора следующий:
Нет Да
выражение
103
Синтаксис составного условного оператора следующий:
м11
End If
где If, Then, Else, End If - зарезервированные слова, а Р 1, Р 2, Р n' М 1 ,
М 2 , Mn - операторы.
Нет
Нет Да
Нет Да
104
Синтаксис оператора в конструкции многозначных ветвлений
следующий :
End If
105
Начало
а, Ь
Нет Да
max = b inax = а
max
Koi-reц
Нет Да
Нет Да
ffilll = C m1n = а
Нет Да
min = Ь
ffilll = с
106
Второй способ, представленный на рис. 60, более простой и на
глядный. Сравнив два числа ме)кду собой и определив минимальное
из них, каждое последующее число будем сравнивать с тем, которое
уже находится в ячейке min, и осуществлять перезапись ячейки
оператором присваивания.
Нет Да
inin = Ь m1n = а
Нет Да
m1n = с
m111 = а
Нет Да
min = Ь
Нет Да
m1n =с
107
Задача 3. Найдите максимальное из четырех чисел.
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
108
Начало
Да
min = с1
уЗ = 1 min = а1
min = с2
mах = Ы
min = а2
шах= Ь2
min =аз
у2 = min
max = 111ш
у1 = max
Конец
Листинг программы
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
УПРАЖНЕНИЯ
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
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
If j <= k Then
If m > k Then
j=k \ 5
j = 20 Mod 2
Else
j = 10
End If
End If
If j > k Then
j =j + 2
j =j + 3
11 2
Else
j=k-3
j =j + 4
End If
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
113
чения переме нны х во второе логическое выражение, получим, что
If d Тhen
f =х / 2
End If
If х <у Then
f =х
End If
If х >у Then
f = 2.9
End If
11 4
Ответ. П ервая ошибка допущена в операторе х = 0.5. Пе
ременная х описана как ц елочислен н ая п еремен н ая, а с пр ава
If j > k Then
j =k - 3
Else
k=k-3
j =k-3
End If
115
Начало
Нет Да
Конец
11 6
Задача 2. Вычислите значение функции у:
Начало
Нет Да
у= Sin (х)
Нет Да
Конец
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
у - { Х, если Х ~ О,
2Х, если Х > О .
11 8
4. Разработайте алгор итм и прогр амму, которая выводит на экраи тр и
типа ответа : ~ вы имеете удовлетвор ит ельную усп еваемость~, ~ вы
имеете хорошую успеваемо сть ~, ~ вы имеете отличную успе ваемо сть ~
в зависимости от введениого пользователем числа.
d= Ь 2 - 4ас-,
Х1 =
-b+Jd
2а
-ь-Jd
Х2 =
2а
О, если х < О,
у= х, если О ::; х ::; 1,
1, если х > 1.
10. Раз работайт е алгоритм и программу решения следующей задачи .
Пользователь вводит два числ а. Меиьшее из введе~-rных чисел заме
няется числом О, а в случае их равенства - числом 100.
Глава 5
ОПЕРАТОР ВЫБОРА SELECT CASE
Р1 о о о о
Case Метка М 11
Оператор Pn
End Select
120
Следовательно, мож:но говорить о том, что оператор Select Case
передает управление тому оператору Р, с одной из меток которого
совпало значение переключателя ( Ключа выбора).
Язык программирования Microsoft Visual Basic позволяет про
граммисту приме нять опера ции сравнения. В качестве оп ераций
сравнения используются операторы=,<>,<=,>=,<, >. Чтобы при
менять о п ерации срав н ения, нужно включить в запись оператора
Листинг программы
сад "
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
УПРАЖНЕНИЯ
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
122
Следовательно, в ячейке f после выполнения оператора Select
Case находится число 107.
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
j = 3 Е1
Select Case j
Case 3 То 10
р =j + 1
Case 11То1 5
р =j +2
Case 16 То 30
р =j +3
End Select
123
ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ
а Программа приветствий D х
Выберите страну
Англия
Германия
Испания
Италия
Россия
Привет. программист!
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
125
5- тонна) и массе М выводит соответствующее зi-raчei-rиe массы в ки
лограммах.
127
Синтаксис оператора цикла For... Next следующий:
Р }
1
Тело цикла
pn
Next
Начало
s=O
i = 1 '50
s=s+i
Коиец
128
При первом вхождении в цикл параметр цикла примет значение,
равное единице, и выполнится оператор sum=sum+i. Затем пара
метр i будет последовательно увеличиваться на величину шага, ко
торый равен единице, и всякий раз в цикле будет выполняться опе
ратор sum=sum+i. Счетчик, как иногда называют параметр цикла,
остановится на значении, равном 50, и произойдет выход из цикла
с последующим выводом ответа.
For i = N 1 То N 2
For j = М 1 То М2
Р1
тело цикла
pll
Next
Next
129
Рис. 69. Общий вид алгоритма сложного циклического процесса
130
Листинг программы
131
Начальное значение переменной sum, в которой будет накапли
ваться значение суммы, принято обнулять до начала циклического
процесса. В цикле мы осуществляем ввод данных с использованием
функции InputBox, делаем проверку на положительность очеред
ного введенного числа и, в случае истинности логического выра
sum=O
For i = 1 То 5
chislo = lnрutВох("Введите 5 чисел", "Ввод")
If chislo > О Then
sum = sum + chislo
End If
Next
kol = О
For i = 1 То 5
chislo = lnрutВох("Введите 5 чисел", "Ввод")
If chislo > О Then
kol = kol + 1
End If
Next
132
pr = 1
For i = 1 То 5
chislo = lnрutВох("Введите 5 чисел", "Ввод")
If chislo > О Then
pr = pr * chislo
Епd If
Next
rnax =О
For i = 1 То 5
chislo = lпрutВох( " Введите 5 чисел", " Ввод" )
If chislo > О Тhеп
If chislo > rnax Then
rnax = chislo
Епd If
Епd If
Next
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
УПРАЖНЕНИЯ
d=4
r = 15
For i = d + 1 То r - 1
d=4
Next
r= 50
For i = 5 То 1 Step -1
s=1
r =r - s
Next
134
Ответ. При первом вхождении в цикл параметр цикла при мет
значение 5. В заголовке цикла шаг (step) определен как - 1, сле
до вательно, параметр цикла при каждом вы полнении тела ц икла
а= 7
d=5
For i = 1То 3
y=d
у=а+ 2
Next
а= 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
For i = 7 То 2 Step - 1
a=d
у= а + 10
Next
136
Вопрос 7. Определите, какое значение находится в ячейке у
после выполнения цикла с оператором For.
Исходные значения: а = 5; d = 5.
For i = 2 То 5
у= d + 10
Next
у= а+ 10
y=a*d
Dim a As Byte
Dim d As Single
а= 5,1
d = 5.1
For i = 2 То 5
у= d + 10
Next
у= а+ 10
TextBox1.Text = Str (у)
11=2
s = 13
For i = s + 2 То n + 4 Step - 1
137
Ответ. Подставив исходные значени.я переменных в заго
ловок цикла, видим, что параметр цикла 1 в цикл е с пар аметром
pol = О
otr = О
i = 1, 6
chislo
Нет Да
Нет Да
Положительиых
чисел больше
Нет Да
Отрицательных
чисел больше
Нет Да
Количество
одинаково
Конец
138
Комментарий. Ячейки pol и otr выполняют роль счетчиков.
Счетчики в цикле будут увеличиваться на единицу операторами
otr = otr + 1 и pol = pol + 1, поэтому для того чтобы конечный ре
зультат не был искажен, ячейки предварительно обнуляются опе
раторами pol = О и otr = О.
Листинг программы
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
Коаец
140
Комментарий. Для реализации алгоритма поиска минималь -
v •
ного числа мы отводим ячеику rn1n, в которую предварительно
Листинг программы
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
Коиец
142
Комментарий. Алгоритм п оиска максимально го элеме нта
обратен алгоритму поиска минимального числа. Для реализации
алгоритма п оиска максимального числа отводим ячейку max, в ко
торую предварительно заносим любое малое отрицательное зна
чение (например, в данной программе отрицательное число из диа
пазона Short равно - 32 768), оператором max = - 32768. В цикле вве
денн ое пользователем число сравнивается с хранящимся в ячейке
max. Если оно больше, то введенное число заносится в ячейку max
оператором max = chislo. Таким образом, к моменту завершения
цикла в ячейке max будет находиться максимальный элемент.
Листинг программы
max = chislo
End If
End If
Next 'З авершение цикла
MsgBox ( " Ма к сима л ьное из о т рицательных чи сел
равно " & max, MsgBoxS tyle. I nformati on , " Ответ " )
Ме . Close ()
End Sub
End Class
143
Разработка алгоритма решения задачи представлена на рис. 74.
Начало
miп = 32767
kolotr =О
i = 1' 5
chislo
Нет Да
kolotr = kolotr + 1
Нет Да
min = chislo
Нет Да
kolotr
Нет
ffilll отрицател ьных
чисел
Конец
144
Листинг программы
min 327 67
For i = 1 То 5
chi slo = Inрu tВ ох( " Вве ди т е " & i & " число " ,
End I f
If chi slo < mi n Then ' П оиск мин имал ьн о г о
элемен т а
mi n chis l o
End I f
Next ' Завер ш ение ци кла
If kolot r = Then
О
Else
МsgВох( " Количество о т рица т ельных чисел рав но "
& kolo t r & ", а минима льн ое из них рав н о " & mi n , Msg-
BoxSt yle . I nf ormati on , " О т вет " )
End I f
Ме . Close ()
End Sub
End Class
145
Начало
max = -32768
kolpol = О
i = 1, n
chislo
Нет Да
kolpol = kolpol + 1
Нет Да
max = cl1islo
Нет Да
kolotr
Нет
inax положительных
чисел
Ко нец
146
Листинг программы
обрабатываться в цикле
For i = 1 То n
chislo = Inpu tBox ( " Введите " & i &
" число " , " Ввод данных " ) ' Ввод исходных данных
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
147
Начало
kolpol = О
sum = О
i = 1, 5
chislo
Нет Да
kolpol = kolpol + 1
Нет Да
чисел
Конец
148
Комм е нтарий . П оиск ср едн его арифметическог о поло:>ки
тельных значений заключается в нахождении суммы чисел (ячейка
surn), нахождении их количества (ячейка kolpol) и вычислении
среднего арифметического по формуле srarifrn = surn / kol.
Листинг программы
суммы
End I f
Next ' Завершение цикл а
If kolpol = О Then
MsgBox ( " Нет положительных чисел ")
Else
srari fm = sum / kol pol
МsgВох ("Сред нее арифметическое
End I f
Ме . Close ()
End Sub
End Class
149
Задача 7. Вводится последовательность из N целых чисел. Най
дите, сколько в ней чисел, равных числу 100, и количество отрица
тел ьных чисел.
Начало
11
k=O
kolotr = О
i = 1 11
'
chislo
Нет Да
k=k + 1
Нет Да
kolotr = kolotr + 1
kolotr, k
( _ _ _к_он_ец_ _)
150
Листинг программы
End If
If chislo < О Then ' Проверка : Введено
End I f
Next ' Завершение цикл а
MsgBox ( " Количество отрицательных чисел равно "
& kolotr & " . Количество чисел равных 100 равно " & k,
MsgBoxS t y l e . I nformation, " Ответ " )
Ме . Close ()
End suЬ
End Class
151
Начало
chislo1
kol = О
i = 2, 10
chislo
Нет Да
kol = kol + 1
Нет Да
У вас иет
kol
совпадеиий чисел
Коиец
152
Комментарий. В ячейку chislo1 заносим первое число. Все по
следующие введенные числа будем сравнивать в цикле с тем числом,
которое находится в ячейке chislo1. В случае совпадения будем уве
личивать значение ячейки kol, которая выполняет функцию счет
чика, на единиц у .
Листинг программы
End I f
Ne xt ' За в ершение цикл а
If kol = О Then
MsgBox ( " У вас нет совпадений чисел " )
Else
MsgBox ( " С пер в ым число м со в пал о " & ko l
& " чисе л " )
End I f
Ме . Close ()
End Sub
End Class
153
Начало
inax = - 32768
inin = 32767
i = 1, 10
chislo
Нет Да
max = chislo
Нет Да
max = cl1islo
raznost
( _____К_он_ец____)
154
Комментарий. В задаче реализуются алгоритмы поиска мини
мального и максимального элементов, описанные выше. П о окон
чании цикла в ячейке max будет находиться максимальный эле
мент, а в ячейке min - минимальный элемент. Оператором raznost =
.
= max - m1n находится разность чисел.
Листинг программы
max - ch is lo
End If
If chislo < min Then ' реализация
min = ch is lo
End If
Next ' Заверше ние цикла
Ме . Close ()
End Sub
End Class
155
Начало
sumpol = О
sumotr = О
i = 1, 10
chislo
Нет Да
pro1z
Коаец
156
Листинг программы
sumot r = О
sumpo l = О
For i = 1 То 10
chislo = InputBox ( " Введите " & i &
" число " , " Ввод данных " ) ' Ввод исходных данных
Else
sumotr = sumotr + chislo
' Нахождение суммы отрицательных чисел
End I f
Next ' Завершение цикл а
Ме . Close ()
End Sub
End Class
157
5. Какой цикл ~-rазывается ВI-Iешиим, а какой - внутр еиним?
6. Какие базовые алгоритмы обработки последователыrостей вы зиаете?
Приведите соответствующие примеры.
158
Нет Да
Do
рн
Loop Until <Логическое выражение>
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
Ниж:е приведен код событийной процедуры, отвечающей за ре
шение задачи.
sum - sum + k
Loop Until k = 50
Labell . Text = sum
End Sub
End Class
Преобразование из Fв С х
16 1
Листинг программы
End Sub
End Class
УПРАЖНЕНИЯ
Do
а=а +1
y=d+a
Loop Until у< 13
Dirn х As Integer
Dirn n As Integer
163
Dim а As Boolean
rn =1
х=а
n = 1000
Do
х = х + 15
a= n
Loop Until
Do
а=а* 2
y=d+a
Loop U ntil у > 40
164
а з начит, п роисходит выход из цикла. Следовательно, в ячейке у
находится число 52.
Вопрос 6. Сколько раз будет выполнено тело цикла в сле
дующем фрагменте программы?
m =З
n = 22
Do
n=m
m=n + 1
Loop Until m = 8
Do
d=d+ 1
y=d*a
Loop Until у> 41
165
выполнения оператора у = d *а в ячейку у заносится число 36 (6*6).
Проверяется логическое выражение: оно ложно, а значит, вновь на
чинается выполнение операторов цикла. Значение ячейки d увели
чивается на 1и будет равно 7, а в ячейке а находится 6. Следова
тельно, после выполнения оператора у = d * а в ячейке у будет 42.
Логическое выражение оказывается истинным, происходит выход
из цикла.
Do
х =d + i
d=d - 1
i =i + 1
Loop Until i = 5
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
Do
f=f+t
t =f + 1
Loop Until t > 15
167
Начало
kolotr =О
sum =О
chislo
Нет Да
kolotr = kolotr + 1
Нет Да
kolotr, srarifin
Конец
168
накапливается количе ство отрицательных чисел. В ячейке sum
накапливается сумма чисел. Выход из цикла происходит в момент
ввода пол ьзователем нуле в ого з начения, при этом происходит под
End I f
Loop Un til chis l o = О ' Цикл выполняется
до т ех п ор , п ока очере дн ое число , ко т орое вводит
169
Разработка алгоритма решения задачи представлена на рис. 85.
Начало
flag = False
chislo
chislo1
Нет Да
flag = True
chislo = chislo 1
chislo1
Нет
Нет Да
Конец
170
Комментарий. В ячейку chislo заносится первое число из бу
дущей последовательности чисел, в ячейку chislo1 заносится
второй элемент последовательности. В цикле происходит проверка:
не равны ли два соседних элемента? В случае истинности проверяе
мого условия переменная булевского типа flag принимает значение
True. Подобные действия повторяются до тех пор, пока пользова
тел ь не введет число, равное нул ю.
Листинг программы
171
Контрольные вопросы и задания
1. В каких случаях примеияются циклы с иеизвестиым числом повто -
рений?
2. Приведите общий вид в алгоритме оператора цикла
Do".Loop Until.
3. Напишите синтаксис оператора цикла Do".Loop Until.
4. Расскажите о работе оператора цикла Do".Loop Until. Приведите
примеры.
172
Например, в приведенном НИ)Ке листинге цикл Do While ... Loop
обрабатывает данные до тех пор, пока не будет введено сло:во ~ Сту
дент ~.
Листинг программы
Нет Да
173
Синтаксис оператора 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.
Ниже приведен код процедуры, отвечающий за решение задачи:
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
Конец
175
Задача 1. Создадим проект, в котором будет осуществлено ре
шение следующей задачи : сумма денег (ячейка Sum) помещена
в банк под процент (ячейка Proc), но мы хотим знать, через сколько
лет эта сумма удвоится?
Разработка алгоритма решения задачи представлена на рис. 88.
Начало
sum, proc
god =О
udvsum = 2 * sum
Нет Да
god = god + 1
god
Конец
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 &
End Sub
End Class
УПРАЖНЕНИЯ
Do While k <у
у=у + 1
k=k+3
Loop
177
Вопрос 2. Определите, какое значение находится в ячейке s
после выполнения цикла с оператором Do While ... Loop?
Исходные значения: s = 7; i = 1.
Do While i * i = 2
s=s+1 / i
i =i + 1
Loop
Do While а <= 3
а=а+ 1
z=a+1
Loop
Do While а + d < =7
а=а +1
d=d+1
Loop
a=a*d
178
а в ячейке d - знач ение 2 (после выполнения оператора d =
= d + 1). Сумма значений этих двух ячеек, пр оверяемая в логи
ческом выражении, будет равна 5. Условие 5 <= 7 истинно, сле
довательно , цикл выполнится еще раз. Увеличившись на единицу,
значения ячеек а и d примут соответственно значения 4 и 3. Их
сумма будет равна 7, значит, цикл выполнится третий раз. Увели
чившись на единицу, значение ячейки а будет равно 5, а з начение
ячейки d равно 4. Логическое выражение: 5 + 4 <= 7 оказывается
лож:ным, происходит выход из цикла и выполняется о п ератор
Do While х <= 4
х=х + 1
11=11 + х
Loop
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
Do While z <= 4
z=z + 1
z=a+1
a=z
Loop
Ответ. В данн ом при мере в теле цикла выполняю тся три опе
ратора. Мо)кно устан овить следующую закономерность: значе ния
ячеек z и а при выполнении операторов будут равны, так как то зна
чение, которое находится в ячейке z, переходит в ячейку а после вы
полнения оператора а = z. Выход из цикла произойдет тогда, когда
в ячейке z будет находиться число 5, следовательно, и в ячейке а
180
тоже будет храниться число 5, что и является ответом в данном
упражнении.
Do While р < 9
р =р * i
Loop
i =i + 1
р =р * i
181
Н ачало
kolpol =О
min = 32767
Нет Да
chislo
Нет Да
kolpol = kolpol + 1
Нет Да
min = chislo
Нет Да
Нет положи
kolpol, min
тельных чисел
Конец
182
Листинг программы
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
183
Начало
pol =О
otr = О
chislo
Нет Да
Нет Да
chislo
Нет Да
Положительных
Нет Да чисел больше
Количество Отрицательиых
одинаково чисел больше
Конец
184
Листинг программы
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
185
Н ачало
chislo
pol = О
otr = О
chislo
pol, otr
(~_ _К_о_
не_ц_ _~)
Рис. 91 . Алгоритм решения зада ч и
Листинг программы
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
( Н ачало )
chislo
kol =О
sum = О
Нет Да
kol = kol + 1
sum = s нm + chislo
srarifin = sum/ kol
chislo
srarifm
Коиец
187
Листинг программы
ko l = О
sum = О
Do While chislo <> О ' Пока введенное число
не равно О, выполнять тело цикла
kol - kol + 1 ' С ч ет чик уве личивае т ся
на 1
sum = sum + chislo ' Увеличение значения
Листинг программы
188
( Н ачало )
cl1islo
kolotr =О
sum = О
Нет Да
Нет Да
kolotr = kolotr + 1
cl1islo
kolotr, srarifm
Конец
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
190
5. Вводится последователы-rость целых чисел . Опр еделите сумму поло
жительных чисел до первого отрицательного числа. Разработайте ал
го р итм и программу.
a.Length,
где а - имя массива.
Dirn а As Integer()
192
Однако перед тем как использовать, необходимо опр еделить
размер массива и выделить для н его память, используя ключевое
Dim а As Integer ()
а= New Integer () {28, 19, 62}
Dim а, Ь As DouЬle ()
Пример
В одномерном массиве заданн ых целых чисел найдите сумму
элементов массива.
193
Разработка алгоритма решения задачи представлена на рис. 94.
Н ачало
i = 1, 10
a(i)
sum = О
i = 1, 10
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
Сумма элементов х
ок
Листинг программы
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
Сумма элементов х
о1
Индексы массив.а Исходный массив
() 5
1
2 7
3 2
4 7
5 4
б 7
7 1
8 з
9 2
ок
196
Вывод элементов массива на элемент управления ListBox
Листинг программы
Ok
197
Информационное окно с сообщением об ответе пр едставлено
на рис. 98.
Ответ х
ок
Листинг программы
198
Next
MsgBox ( " Сумма элементов - " & sum, MsgBox-
St y l e . In f ormation, " О тв е т" )
End Sub
End Class
а Одномерные массив ы о х
Индексы
о 1 2 з 4 5 6 7 8 9
18 4 18 6 2 о 19 о 5
Ok
199
При выводе сгенерированных элементов массива и их номеров
в табличный компонент мы конвертируем их значения в строковый
тип операторами Convert.ToString(a(i)) и Convert.ToString(i)
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
Исход11ый массив
2 з 4 5 б 7 8 9 10
6 15 7 5 17 15 9 19 19 17
< >
Ok
200
7.1. БАЗОВЫЕ АЛГОРИТМЫ ОБРАБОТКИ ОДНОМЕРНЫХ
МАССИВОВ
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
Вставка значения нового элемента в массив
Листинг программы
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
о Одномерные массивы о х
Индексы
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
203
Удаление значения элемента из массива
ОТ 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
205
Начало
i=о 9
'
a(i)
zпach
n =O
i=о 9
'
Нет Да
b(n) = a(i)
n = n+1
Нет Да
b(i)
Конец
206
Листинг программы
207
El se
For i = О То n - 1
TextBox2 . Te xt &= St ring .
Forma t (" {О : dl } ", Ь ( i) ) & vbTab
Next
End If
End Sub
End Class
Исходный массив
Индексы
о 2 з 4 5 6 7 8 9
-7 -4 4 -5 -З 9 8 6 4
1'"
Резуль-тирующий массив
9 8
1-10
Ok
Листинг программы
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
а Одномерные массивы о х
Исходный массив
Индексы
о 1 2 з 4 5 6 7 8 9
1~
-2 1 6 12 -2 о 2 4 5
Результирующий массив
Ok
209
Обмен значений элементов массива
~~2
12 з 56 4 8 34 23 87 29 20
n
1
Рис. 106. Алгоритм обмена элементов в массиве
n =а (1)
а (1) =а (7)
а (7) = n
210
n =а (nommin)
а (nommin) =а (nommax)
а (nommax) = n
Начало
i = о' 9
a(i)
nom1nax = О
no1nmin = О
1nin = 32767
max = - 32768
i =О, 9
Нет Да
min = a(i)
. .
nomm1n = 1
Нет Да
max = a(i)
nom1nax = i
211
1
n 1 = а( nom1nin) 1
1
a(nommin) = a(nommax) 1
1
a(nommax) ;;:; n1 1
max, m1n
- i = о, 9
~
a(i)
( Кон ец )
Рис. 107. Алгоритм обмена элементов в одномерном массиве (око нчани е)
Листинг программы
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 = О ' С ч итаем , ч т о н омер минималь н ого
э ле ме н та в массиве равен О
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
214
емами данных, сохраняемыми в массивах. Повышение быстродей
ствия, под которым п онимается уменьшение количества просмо
Листинг программы
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)
Конец
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
Исхо.а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
217
7.2.2. Упорядочивание элементов методом обмена
(метод «пузырька»}
Листинг программы
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)
Конец
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
а Одномерные массивы о х
Исходный массив
Индексы
о 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
220
7 .2.3. Алгоритм упорядочивания элементов по убыванию
Листинг программы
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)
Конец
222
For i = О То a . GetUpperBound (0) ' Организуется
цикл для перебора элемен т ов исходного од н омерно г о
масс и ва
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
а Одномерные массивы 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
223
7 .2.4. Метод бинарного поиска
Листинг программы
224
Начало алгоритма следует смотреть в алгоритме «Метод прямого выбора~
niz = 1
veгh = Size
n=O
found = False
n = n+1
Нет Да
found = True
Нет Да
Нет Да
Да
Образец n, sred
не найден
Конец
225
Dim obr As Integer ' Образец для поиска
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
• 11iz
11 iz =б
11 iz =б
=1 verh = 9 sred = 5
=
verh 9 sred = 8
=
verh 7 яеd = 6
б - й эл ем ент совпадает с образцом
3 сравнения
ок
228
Dim ИмяМассива ( ) As Тип данных
PuЬlic а () As Integer
2. С помощью функции InputBox создаем запрос для опреде
ления количества элементов массива:
ReDim a(n)
4. Далее можно использовать это число в качестве верхней гра
ницы массива в цикле с оператором For:
For i = 1 То n
а (i) = InputBox ("Введите элемент массива", "Ввод массива")
Next
5. Для того чтобы не потерять содержимое массива при за
дании его нового размера, в операторе ReDim следует использовать
служебное слово Preserve:
ReDim Preserve ИмяМассива (размер)
229
Листинг программы
230
ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ
Н ачало
i =о 9
'
a(i)
proizv = 1
kol =О
i =о 9
'
Нет Да
Нет Да
proizv = proizv * a( i)
kol = kol + 1
Нет Да
Отрицательиых
чисел нет pro1zv
Конец
231
Листинг программы
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)
вычислите среднее арифметическое значение квадратов положи
тел ьных элементов.
Начало
i = о' 9
a(i)
sum = О
kol = О
i =О, 9
Нет Да
kol = kol + 1
Нет Да
Положительных чисел
в массиве ает
Нет Да
sum/ kol
Коаец
233
Листинг программы
s um = s um + а (i ) * а (i ) ' т огда
находится сумма ква дратов з на че ния элеме нта массива
End I f
Next
If kol = О Then ' Если сче тч ик не изменил
с в ое г о из н ачаль но г о зна ч ения, т о гд а выв оди т ся ответ
234
Задача 3. В одномерном массиве произвольных чисел поме
няйте местами наибольший и наименьший элементы, предполО)КИВ,
что таких элементов по одному.
Начало
i=о 9
'
a(i)
i11d1ni11 = О
indmax =О
miп = а(О)
max = а(О)
i =О, 9
Нет Да
min = a(i)
indmin = i
Нет Да
1nax = a(i)
indmax = i
235
a(indmin) = max
a(indmax) = min
i=о 9
'
a(i)
Кон ец
indmin = О
indmax = О
min = а (О)
max = а(О)
a(indmin) = max
и
a(indmax) = min
236
мы меняем местами найденные наибольший и наименьший эле
менты массива и выводим результирующий массив на экран.
Листинг программы
237
If а (i) > max The n ' Провер ка: если
о чер е д ной э ле ме н т массива боль ше , ч ем то т, который
храни т ся в ячейке max
max = a(i) ' тогда он считается
максимальным элементом
a(indmax) = m1n
For i = О То а . Ge t UpperBound (О)
TextBox2 . Text &= String .For mat(" {O : dl} ",
a( i )) & vbTab
Next
End Sub
End Class
i =О, 9
a(i)
i=о 9
'
Ь(9 - i) = a(i)
i =О, 9
b(i)
Конец
238
Комментарий. П о сравнению с предыдущими программами
дан ная задача реализована, по сути, в одном операторе, а именно
Листинг программы
Ь(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
~ ~ ~
Начало
i =О, 9
a(i)
inv = О
i =О, 9
Нет Да
iпv = iпv + 1
lllV
Koi-reц
240
Листинг программы
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
241
6. Каким образом объявляются од~-rомерные массивы в программах?
7. Каким образом осуществляется доступ к каждому элемеиту одаомер -
ного массива при его обработке?
8. Каким образом осуществить вывод одномериого массива на экран?
9. Приведите базовые алгоритмы обработки одиомерных массивов.
10. Поясиите, каким образом осуществляется обмеа значений элемеитов
массива.
242
деиие четных и иечетиых чисел. Ч исло элементов массива вводится
с клавиатуры.
левые.
243
шины, диаметры которых отличаются не более чем на К см, а вес -
не более чем на S грамм.
18. Из одномерного массива произвольных чисел А(9) сформируйте два
массива, содержащих номера положительных и отрицательиых эле
ментов .
244
28. Разработайте программу, которая выводит иа экраи два одномериых
массива А(9), содержащих массивы ростов игроков двух команд
(в сантиметрах) и определяет, имеются ли в данных командах игроки
одииакового роста.
246
Альтернативный способ записи в одну строку:
Dim а As I nteger () ()
а = New I nteger (1) () {} ' соз д ае м две с т роки
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
Jаggеd-м.а•:смвы l'X]
·-
Формирование Jagged-мaccивa
1 2
3
4 5 6
r:································1
: Г1К ;~
;,
'1
- . . . .
·-·
-
••
- . . . . ;
248
Н ачало
i = О, 4
j = О, 4
a(i,j)
sum =О
i = О, 4
j =О , 4
SUlll
Коиец
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
ИсходНая матрица
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
Двумерные массивы х
ок
250
В следую щем л истинге рассматривае тся ре шени е пр едыдущей
задачи, с той разницей, что ответ выводится в информационное
окно, а не в элемент управления DataGridView.
Листинг программы
Next
Next
output &= vbCrLf & " Сумма элементов матри цы - "
& sum
MessageBox . Show (output , " Двумер ные массивы ",
MessageBoxButt ons . OK , MessageBoxi con . Inf ormation)
Application .Exit()
End Sub
End Class
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
ок
252
Окончание табл. 34
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
Обмен столбцов элементов матрицы
Листинг программы
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)
Конец
256
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
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
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
Листинг программы
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
259
n st 2 = Inp ut Box ( " Введи т е н оме р с т р оки ,
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
Двумерны е м асси вы о х
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
260
Листинг программы
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
Двумерные массивы о х
о 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
262
Замена значений элементов матрицы
Листинг программы
DataGridViewl . ColumnCount = 5
For j = О То 4
DataGridViewl . Columns (j). Width - 60
' Устанавливаем ширину столбцов
Next
For i = О То а.GetUpperBound (О)
For j = О То a . GetUpperBound(l) ' Выводим
номера строк и столбцов матрицы
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 ) ' Выводим
номера с т рок и стол бцов матрицы
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
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.
Двумерные массивы о х
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
Транспонирование матрицы
Листинг программы
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
' Уста н о вка з на чен ий с в о й с тв результ ирующей
ма трицы
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
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
Листинг программы
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 ) 'В ыводим
номе ра строк и столбцов матрицы
DataGridView2 . ColumnCount = 5
For j = О То 4
DataGridView2 . Columns (j) . Width - 60
' Устанавливаем ширину столбцов
Next
For i = О То а.GetUpperBound (О)
For j = О То a . Get UpperBound( l ) 'В ыводим
номе ра строк и столбцов матрицы
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
Формирование строк матрицы
аоо *Ьоо=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
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
270
Формирование матрицы в соответствии с определенн 1ыми
правилами
a(i,j) = 2(i + 2) 2 - (j + 2) 2.
Найдите максимальный элемент, лежащий ниже главной диаго-
u u u
нали , и минимальныи элемент, лежащии выше главнои диагонали.
Листинг программы
271
' Уста н о вк а з на чен ий с в о й с тв результ ирующей
ма т р ицы
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
2 з 4 2 з 4
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
273
ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ
Н ачало
i =о 4
'
j =О, 4
a(i,j )
max = а( О , О)
index =О
i = О, 4
Нет Да
inax = a(i, i)
iпdex = i
max, index
Ко нец
274
Комментарий. Элементы главной диагонали рассматриваемой
матрицы име ют следующие инде ксы: а(О,О), а(1,1) , а(2,2), а(З,3) ,
а( 4,4) . Поэтому для поиска максимального элемента применим
следующий алгоритм реш ения з адачи: максимальным считается
первый элемент главной диагонали, а именно а(О,О). В программе
за это действие отвечает оператор max = а(О, О). Индекс этого эле
мента равен нулю. В программе осуществляется сравнение очеред
ного элемента главной диагонали с тем элементом, который хра
нится в ячейке max, и если сравниваемый элемент больше, то он
заносится в ячейку max оператором max = a(i, i) .
Листинг программы
DataGridViewl . ColumnCount = 5
For j = О То 4
DataGri dVi ew l . Columns (j) . Width = 60
' Уста н ав ливаем ширину стол бцов
Next
For i = О То а. GetUppe rBound ( О )
For j = О То а . Get UpperBound ( 1) ' Выводим
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
Листинг программы
276
Начало
i = О, 4
j = О, 4
a(i, j)
i =о 4
'
j = О, 4
i =о 4
'
j = О, 4
b(i, j )
Конец
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
' Ус т ановка зна ч е н ий с в ойств результирующей
ма трицы
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
Листинг программы
279
Начало
i =о 4
'
j = О, 4
a(i,j)
kol = О
pol =О
sum =О
i = О, 4
i =о 4
'
Да
kol = kol + 1
Да
pol = pol + 1
Нет Да
П оложительных
Cint (sum / pol)
элементов нет
Коиец
280
' Установка зна ч ений свойс т в исходной матрицы
DataGridViewl.RowCount = 5 ' Количество строк
и столбцов
End I f
If a(i , j) > О Then ' Поиск
положительных элеме нтов матрицы
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
Листинг программы
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)
Конец
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) 'Выв одим
н омера строк и с т олб ц ов ма т ри цы
масси в а
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
ходн ой массив.
Алгоритм решения задачи представлен на рис. 139.
Комментарий. Для поиска минимального элемента в каждой
строке матри цы исп ользуется стандартный прием нахожде ния ми
нимального элемента. Оператором x(i) = 32767 первому элементу
матрицы присваивается какое-то большое значение (в нашем при
мере - число 32 767). Затем каждый элемент в строке l\1атрицы
будет сравниваться с этим числом, и если какой-то из них будет
мень ш е дан но го числа, то о н считается минималь ным и у)ке с ним
Листинг программы
285
Начало
i =о 4
'
j =О, 4
a(i,j)
i = О, 4
x(i) = 32767
j = О, 4
Нет Да
x(i) = a(i, j )
i =о 4
'
x(i)
Конец
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) ' Выводим
номера с т рок и стол бцов матрицы
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
Листинг программы
288
Н ачало
i =о 4
'
j =О , 4
a(i, j)
Sllffi = 0
i =О, 3
j=З-i
sum
Коаец
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
290
матрице ~-rайдите средиее арифметическое элемеитов, сумма ИI-Iдексов
которых равна 4.
3. Разработайте программу, заполияющую матрицу А( 4,4) случайными
целыми числами, находящимися в иатервале от 1 до 40. В создааной
матрице требуется найти наибольший элемент побочной диагонали.
4. Разработайте программу, заполияющую матрицу А( 4,4) случайными
целыми числами, находящимися в интервале от 1 до 80. В созданной
матрице найдите четные элементы и выведите их как одномерный
массив.
291
исходной матрицы замените нолями, а каждый элемент побочI-rой ди
агонали замените его номером .
периметру и на диагоналях.
292
25. Разработайте программу, заполияющую матрицу А( 4,4) случайными
целыми числами, находящимися в интервале от - 20 до 20. Н айдите
в строках самые правые наименьшие элементы и определите их ме
294
Share - ограничения при коллективном использовании файлов:
Shared (разделяемый), LockRead (заблокировано для чтения) ,
LockWrite (заблокировано для записи);
RecordLeпgth - число, меньшее или равное 32 767 байт.
Пример:
Пример:
Листинг программы
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 ( " Ввод данных ", " Введите
мар ку автомобиля " )
296
Синтаксис операторов записи в текстовый файл следующий:
Листинг программы
автомобиля")
god = InputBox ( " Ввод данных " , " Введите год
выпуска " )
машины " )
End Class
297
Результаты работы программы представлены на рис. 142.
- - - - - - - - - - - - - - - - - - -
Т ойота"
'' 11 ' "1985" "белый" "
' ' '
"тойота" "1985" "белый"
' 11
То йота
,
'
"198 5 белый"
11
,
11
,
11
1
-
..--.
Рис. 142. Результаты работы программы с исполь зованием операторов Write
и Writeline
Листинг программы
Loop
Fi leClose (l)
End SuЬ
298
Операция чтения из файла возможна и с помощью функции
Linelnput. Эта функция используется для одновременного чтения
всего текстового файла и размещения его в текстовом поле формы.
При этом необходимо выяснить размер файла в символах, для чего
применяется функция LOF (Length Of File) - длина файла.
Для текстового поля, в которое помещается содержимое файла,
следует установить значение свойства MultiLine ( многострочный
вывод) равным True, а значение свойства ScrollBars (полоса про
крутки) равным V ertical.
Листинг программы
Листинг программы
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 (" Ввод данных " , " Введите
цвет машины ")
Листинг программы
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Ь
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. ОПЕРАТОРЫ ДЛЯ РАБОТЫ С ФАЙЛАМИ
ПРОИЗВОЛЬНОГО ДОСТУПА
• название салона;
• марка автомобиля;
• год выпуска автомобиля.
Требуется создать:
• файл с пронумерованными записями этой информации обо всех
автомобилях;
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
303
-------------------------------
_lз_ _ _ _I_lд_
ед_
овс_к_~l l_Еж_и_
к _ _ _l _lто_йот
_а_ _ _l 1~2о_
о6_ _~
Создание Чтение Исправление Чтение всех
записей записи записи записей
tvlocквa
Авrоваз
Волга
2006
Петерб':jрг
Крокус
Жигули
2006
Дедовск
Е жик
Т ойота
2006
Листинг программы
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Ь
305
' Записываем в файл
Fi leOpen(l , " c : \Ba za.txt " , OpenMode.Random)
Fi l ePut( l, auto, number)
Fi leClose( l )
End SuЬ
306
целое положительное число, обозначающее порядковый номер за
писи в файле.
Чтение информации из файла двоичного доступа осуще
ствляется оператором Get. Синтаксис оператора:
Листинг программы
файл ")
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
8,B,. •.-,···1·'
..:i..··r·.J·iГ~ . ·-·Б· С1.11 Г.:.
JlH Г,В,.;:,,1
308
вания среды Visual Studio, рекомендуется использовать именно их,
а не специфичные только для Visual Basic функции.
Чтобы использовать классы StreamReader и StreamWriter,
в начале программного кода следует импортир овать пр остранство
Di m s t r eam As St r eamReader
s t ream = New St reamReade r (fil eName)
309
или директории определяют их существование. Метод Exists()
является методом класса Directory. Если пользователь указал
существующий каталог, то вызывается метод Getlnformation
для доступа к информации о каталоге. Затем вызывается метод
GetDirectories класса Directory для получения String-мaccивa,
содержаще го имена подкаталогов в указан н ом катало ге, которые
Листинг программы
Imports System .I O
PuЬlic Class Forml
' Получить информацию о файле или каталоге
к а талог
If Fi le .Exists(fileName) Then
' п олучи т ь дату создания , изменения файла
TextBox2 . Text =
Get i nfo r mation(fil eName)
' Отобраз и ть на экра не содержимое файла
Tr y
' Счи т ывается содержимое файла
недос т у пе н
для каталогов
Di m i As I nt ege r
' По лучить да ту созда ния, и зме не ния
ка та л ога
TextBox2 . Text -
Ge t inf ormation(fileName)
' П олуч ить с п исок каталогов указанного
ка та л ога
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
312
а Работа с файлами и директо ... о х
c:\Wlndows~
1
Директория содер,жит:
с :\ 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
313
color = InputBox (" Ввод данных " , " Введите
ц ве т машины")
zapis . WriteLine(marka)
zapis . WriteLine(god)
zapis . WriteLine( col or)
Next
zapis . Close ()
End SuЬ
End Class
314
4. В чем вы видите разницу между операторами Write, WriteLine, Print,
PrintLine?
5. В чем заключается действие функций Spc(n) и Tab(n)?
6. Напишите синтаксис операторов, используемых для работы с фай
лами произвольиого доступа .
315
два пробела. Результат запишите в текстовый файл и выведите
на экран .
316
числите количество нулевых элементов файла. Результат запишите
в текстовый файл .
20. Сформируйте файл последовательного доступа. Из компонентов ис
ходного файла целых чисел создайте массив, записав в него только
ненулевые значения, находящиеся после максимального элемента .
318
В Visual Basic используется несколько типов подпрограмм:
· событийные процедуры представляют собой процедуры Sub,
которые выполняются в ответ на событие, вызванное действием
пользователя или определенными условиями в программе;
319
10.2. СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ПРОЦЕДУР
End Sub
320
Если в процедуру не передается ни одного аргумента, то требу
ется наличие пустых круглых скобок.
Отметим, что между параметрами, описанными в заголовке
процедур ы , и аргументами, которые указы ваются при ее вызове,
ющего аргумента;
менных.
Листинг программы
sum - х + у
End Sub
321
М sg Вох ( " Сумма кв а др ат о в чи с ел -" &rez , MsgBox -
Style . Exc l amat ion , "О твет ")
Appli ca t ion . Exit ()
End Sub
End Class
322
Sum kvad r - х + у
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
Исходное выражение:
х-у ху 2
z= + .
~х+у sin x 2 ·cos 2 y
Разработаем блок-схемы алгоритма решения данной задачи.
На рис. 146 представлен алгоритм пользовательской функции ре
шаемой задачи.
Fun z= х -у +--х_у_--
2
Коиец Fнnc_z(x, у) )
324
На рис. 147 представлен алгоритм пользовательской процедуры
решаемой задач и.
Выходи ой параметр z
1
х-у ху 2
z= +
)х+у sinx 2cos 2y
Н ачало
Ввод а, Ь
Proc_ Z(a, Ь, z)
Вывод rez, z
Кон ец
325
Imports System . Math ' Объявляем би блиотеку
математических подпрограмм
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
326
Задача 1. Разработайте функцию, которая возвращает котангенс
числа.
327
а результат нахож:дения максимального из четырех значений будет
находиться в ячейке max. В таких случаях в теле функции дол)кен
присутствовать до п олнительный оператор, который присваивает
результат выполнения функции имени функции. В текущей задаче
это оператор Return max. Ни)ке приведен код пользо вательской
функции и ее вызов, отвечающий за решение задачи.
End I f
If d > max Then
max = d
End I f
Return max
End Function
328
Задача 3. Выполните табулирование функции у= sin(x) и най
дите ее максимальное значение, если из вестны начальное значение
329
Dim i , n As I nt eger , у , х As DouЫe
n = Cint ( (Ь - а) / h + 1) ' количес т во
пов т орений ци кл а
х = а
330
зова функции ввода данн ых оператором х = InрutВох("Введите
число, последний элемент последовательности - О ", "Ввод
данных").
Код программы представлен в следующем листи нге .
331
поставленную задачу. Создайте событийную процедуру, из которой
осуществите выз ов ранее созданных подпрограмм.
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
333
For s - о То k
If s - Thenl
х - m(i , s)
m (i , s) - max
m (imax , jmax) - х
End I f
Next
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
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
< >
Выполнение
< >
336
в цикле While для выявления количества пробелов. Таким образом,
если пробелов в исходной строке несколько, то метод .Replace()
заменяет их на один оператором s = s.Replace(Space(2), Space(1) ).
Во второй подпрограмме SubProc() метод .Split() используется
для разбиения массива символов на отдельные слова, поэтому в ка
честве параметра указывается единица, т .е. один пробел (Dim mas()
As String = s.Split(CChar(Space(1)))).
Метод .Substring() извлекает подстроку из очередного слова
строки, поскольку находится в цикле. Соответственно, операторы
If k = 3 Then
n=n + 1
End If
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
338
новится равной трем и проверка на нечетность (n Mod 3) оказыва
ется истинной, то в массиве а происходит замена слов:
339
' Функция ввода исходных данных в текстовое окно
End I f
End Sub
End I f
End I f
Next
rezs = Join(a)
End Sub
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
341
•} Сохранение х
Упорядочить •
v Пan1G1 (6)
> Jt Быстрый доСl)'Тl
• Oownloads
• Movies
Имя файла: 22
=-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-=
ок
Работа со строками о х
Исходна. строка
Вывод
Отредакmрованнu строка О"Iредакmрованной
cтpoIGt
папа мама максик 1<р0т мама
Сохранение в файл
редактированного текста
342
]1 22 - Блокнот о х
< >
343
5. Од~-rомерный массив А содержит N чисел. Найдите произведение ЗI-Iа
чений элементов массива. Назначение функции: вычисление произве
дения элементов массива.
мером.
344
17. Разработайте программу, которая заполияет од~-rомерный массив А(9)
случайными целыми числами от 1 до 99. Определите, сколько в мас
сиве имеется простых чисел . ( Число, которое делится только на еди
ницу или само на себя, иазывается простым.) Процесс определеаия
того, является ли число простым, оформите в виде процедуры.
18. Разработайте программу, в которой осуществляется подсчет, сколько
раз встречается в заданной целочисленной матрице А( 4, 4) макси
мальиое по величине число. Оформите в виде процедур: 1) вызов
процедуры ввода-вывода матрицы; 2) вызов процедуры поиска мак
симального элемента; 3) вызов процедуры подсчета числа вхождений
максимального элемента.
Таблица 36
Функции модуля Strings
346
Продолжение табл. 36
Н азвание функции Описание функции
347
Продолжение табл. 36
Н азвание функции Описание функции
символа строки;
параметра Row 1;
Start - позиция в строке, с которой ищется под
строка, указанная в качестве значения параметра
348
Продолжение табл. 36
Н азвание функции Описание функции
349
Окончание табл. 36
Н азвание функции Описание функции
эту подстроку
Листинг программы
350
MessageBox . Show (Char. IsDigit ( simvol), " Символ " ,
End Class
351
11.3. МЕТОДЫ КЛАССА STRING
Строка является объектом класса String пространства имен
System. Любая переменная строкового типа является экземпляром
класса String. Чтобы воспользоваться его свойством или методом,
следует после имени переменной добавить точку и за ней - на
звание свойства или метода.
Строка представляет собой последовательность символов, про
нумерованных начиная с нуля. Тогда можно обращаться к каждому
символу по его номеру (индексу).
Методы класса предоставляют возможности, например, для
определения доступа к объектам Char в строке (Chars), получения
индекса подстроки или знака Unicode (IndexOf, LastlndexOf), со
здания новых строк из частей исходной строки (Substring), моди
фикации всей строки или ее части (Remove, Insert, Replace ), срав
нения (StartsWith, EndsWith). Использование некоторых методов
класса String показывается на примере следующего листинга.
Листинг программы
352
simvol = " Информатика ". ТоСhаrАrrау
Information )
'Проверка , д ейс т ви т ель н о " И н форматика " на чинается
MessageBox . Show( " И н фopмaтикa ". EndsW i th( " Инф " ) ,
Information )
' Мето ды , в ид о и зменяющие с т року
Information )
' Вставить в строку перед симво л ом н омер 1 другую с т року
Mes sageBox . Show ( " Информа ти ка " . I nsert (1, " Моя " ) ,
" Строка " , MessageBoxButtons . OKCancel , MessageBoxicon .
Inf or mation)
' Заменить в строке одну часть ( " Инфор " ) на другую
( " Мате " ) резул ьта т: Матема т ика
353
11.4. БАЗОВЫЕ АЛГОРИТМЫ ОБРАБОТКИ СТРОК
Листинг программы
354
If tmp = s imvol Then
kol = kol + 1
End I f
Next
Return kol
End Function
Листинг программы
355
Retu r n r ow
End Function
-----------------
111 Работа со строкамн GJLQJ~
Введите строку символов
Ок ~
356
что при следующем проходе останутся два символа ~мм», которые
и будут результатом.
Листинг программы
[ Ок ] )
357
11.4.4. Вставка символа в строку
Листинг программы
358
Результат выполнения программы представлен на рис. 156.
-
lпаламамапаламама
Результирующая С'Iрока:
пZапZамамапZапZамама
Листинг программы
359
Next
Re t urn ko l
End Function
Всего символов а и д =9
([ Ot::. Jl
Рис. 157. Результат выполнения функции Analiz. В исходной строке осуще
ствляется подсчет символов «а» и «Д»
360
Листинг программы
([ Ot::. ] )
361
11.4.7. Поиск строки в блоке текста
Листинг программы
Label2
[[ Ок Jl
Рис. 159. Результат выполнения программы.
В исходной строке осуществляется пои ск подстроки « папа»
362
ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ
Листинг программы
363
причем средний символ не учитывается, так как операция dlina_
st \ 2 - целочисленное деление.
Листинг программы
364
менной stroka_izm. В противном случае происходит ~сцепление»
левой части исходного слова до поз иции вхо:>кдения буквы М,
исключая саму букву М (т.е. до poz - 1), буквы А, и затем остав
шейся части слова, начиная с поз иции poz и до конца слова, - т.е.
вставка буквы А перед буквой М.
Листинг программы
365
ответа все слова, в которых есть буква « М» (англ.). Если таких слов
нет - вывести сообщение.
Комментарий. После ввода строки символов следует дополнить
ее пробелом для того, чтобы можно было выделить последнее слово,
если за ним нет пробела. В цикле с оператором Do While будем
перебирать каждый символ строки от первого до последнего. Если
i-й символ - пробел, то переходим к следующему символу, иначе
запоминаем позицию начала слова в переменной n_ slovo (первый
символ, отличный от пробела).
Далее с помощью функции InStr находим позицию первого про
бела, начиная поиск от i-го символа, - это будет позиция конца
слова kon_slovo (точнее, первого пробела после текущего слова).
Найдя dl _ slovo - длину текущего слова как разность kon_ slovo
и n_ slovo, выделяем само текущее слово tek_ slovo и ищем в нем
букву « М».
Если буква « М» присутствует (в текущем слове flag > О) , то
следует присвоить значение 1 переменной flag и вывести это слово
на экран. После этого перемещаемся к первому пробелу после те
кущего слова, т.е. к позиции kon_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
Листинг программы
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
368
5. Дана строка. Выведите подстроку, расположе1пrую между первой
и последней точками исходной строки. Е сли в строке менее двух
точек, то выведите всю исходную строку.
370
Приложение 7
ЛАБОРАТОРНАЯ РАБОТА № 1.
ЗАПИСЬ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ
Цели работы: овладение практическими навыками использования
стандартных функций в языке программирования Microsoft Visual
Basic при записи арифметических выра)кений - получение практи
ческих навыков отладки программ; выработка при решении постав
ленных задач таких профессионально значимых качеств, как самосто
ятельность, ответственность, точность, творческая инициатива.
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
372
- -- -- - -- - - - - -- - - - - - - - - - -- -- -- - -
111 заnнсь выра:+:еннн GJ[QJ@
140.6792 l 15.40789
Выход
(1 * 2) )
373
l = у
374
~-
Значение i = 41
~-
rг··········а~(·············~
) 11 1 7 : -: : 11 1 : - : -: : 11 1 1 1 : :- : : : - : 1 1 : - : :- : 1 (
Изучить:
• запись чисел с фиксированной и плавающей точкой;
• правила записи арифметических выражений;
• запись стандартных функций;
• организацию ввода-вывода данных.
Разработать:
u
• алгоритм решения поставленнои задачи в соответствии с вари-
антом;
• интерфейс программы;
• пр ограмму решения задачи;
375
Работа в лаборатории
Содержание отчета
6. Разработанный алгоритм.
7. Листинг программы.
8. Результаты выполнения программы.
376
3. Какие способы описания алгоритмов вы знаете?
4. Перечислите этапы решения задач при работе в среде прог
раммирования.
Таблица 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 (Ьх / а)
12 у= а 2 х + Ь х cos(a +b)x а = 03
'
Ь = 09
,
х+1
х = 0,6113
1' J -
= х 2 + ь Ь 2 sin 3 ( х + а)/ х
378
Продолжение табл 37
Н омер И сходные
Расчетные формулы
вар ианта даиные
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 = 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х
2+ х -
1+х 2у2
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
2а
34 х = 0,388
x(.Jx + a)
Z = е-СХ а = 9,456
ьl)
3
ь= 2,111
x - ()lx
с= 1,11
р
= ~ + е2хх+ -а + 3,66 ·1О-5 ь = - 1,6
3х6
381
ЛАБОРАТОРНАЯ РАБОТА № 2.
МНОГОЗНАЧНЫЕ ВЕТВЛЕНИЯ В ПРОГРАММАХ.
ИСПОЛЬЗОВАНИЕ ПРОВЕРКИ КОРРЕКТНОСТИ ВВОДА ДАННЫХ
И ИНДИКАТОРА ОШИБОК
ская инициатива.
текстового окна;
382
Начало
Нет Да
у= Sin ( х)
Нет Да
Конец
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, а т а кже
символы возврата и перевода строки
то чка
383
KeyAscii - О
End If
Case Else
'з апрещаем обработку нажатия других клавиш
KeyAscii = О
End Select
'если мы хотим проигнорировать нажатие клавиши ,
указываем программе,
Else
ErrorProviderl . SetError (TextBoxl , "")
End If
End SuЬ
End Class
384
~ Проект LJ(g]L8]
В ведите значение :·:
Значение у=
[Qэоэ2974
-----------
~ Проект LJ(QJL8]
В ведите значение х
Изучить:
• возможности яз ыка программирования для реали зации много
значных ветвлений;
385
• запись конструкции многозначных ветвлений в блок-схемах;
• запись многозначных ветвлений в программах;
• работу условного оператора If при проверке нескольких условий;
• методы проверки корректности ввода данных.
Разработать:
• алгоритм решения поставленной задачи в соответствии с вари-
антом;
• интерфейс программы;
• программу решения задачи;
Работа в лаборатории
ErrorProvider.
6. Обе подгруппы при окончательной компоновке проекта со
здают иконку с собственными инициалами и демонстрируют пре
подавателю .ехе-файл приложения.
386
7. Студент долж:ен уметь ответить на контрольные вопросы
по лабораторной работе, т.е. проявить свои знания по теорети
ческой части курса.
8. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.
Содержание отчета
6. Разработанный алгоритм.
7. Листинг программы.
8. Результаты выполнения программы.
387
11 . П оясните работу оператора Select Case. Напишите прог
раммный синтаксис оператора.
12. С какой целью используется в программах элемент управ
ления ErrorProvider?
Таблица 38
Таблица вариантов
у = 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 х = а
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
х<О
27 х 2 +~ctgx +9,222·105
1
W =· х> 7
х 2 +4х + 5
~ +lnx - cos 2 x x=S
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
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
392
ЛАБОРАТОРНАЯ РАБОТА № 3.
ИСПОЛЬЗОВАНИЕ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ СНЕСКВОХ,
RADIOBUTTON, LISTBOX, GROUPBOX В ПРОГРАММАХ
Ок 0 Ok
~ OkCancel
О AbortR etrylgnore
В ыбор
О YesNoCancel
О YesNo
Нажали С анс еl О RetryCancel
393
Внешний вид третьей формы представлен на рис. 169, 170.
-------------------
IAdding
Ручной выбор ~
Это ваш выбор окна
__н_ет_ _) (
1············~~·············~( Отмена
Листинг программы
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 )
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Ь
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
396
but tont ype - MessageBoxButt ons . OK
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Ь
Изучить:
• работу условного оператора, оператора выбора Select Case;
• работу элемента управления ListBox;
• назначение элементов управления CheckBox, RadioButton,
ListBox, GroupBox и их основные свойства;
• организацию вывода данных с помощью функции MsgBox.
Разработать:
• интерфейс программы;
• программу решения задачи;
Работа в лаборатории
398
4. Главную форму разрабатываемого прило:>кения студенты
1 -й подгруппы программируют с использованием обычной формы,
студенты 2-й подzруппъt программируют с использованием нестан
дартной формы (см. приложение 2, заставка № 8).
5. Третья форма (форма-переводчик) имеет уменьшенные раз
меры (прямоугольник).
6. В разработанном проекте предусмотреть при вводе чисел ре
акцию программы на ввод нечисловых данных.
Содержание отчета
ЛАБОРАТОРНАЯ РАБОТА NO 4.
ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РАЗВЕТВЛЯЮЩИХСЯ
СТРУКТУР С ИСПОЛЬЗОВАНИЕМ ПОИСКА МАКСИМАЛЬНОГО
И МИНИМАЛЬНОГО ЗНАЧЕНИЙ
399
дения минимального и максимального значений в программах; по
лучение дальнейших навыков по отладке и тестированию программ;
выработка при решении поставленных задач таких профессио
нально з начимых качеств, как самостоятельность, ответственность,
Листинг программы
х - 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 при проверке нескольких условий.
Разработать:
• алгоритм решения поставленной задачи в соответствии с вари -
антом;
• интерфейс программы;
• программу решения задач и;
Работа в лаборатории
401
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;
• вариант задачи.
3. Заставка к проекту выполняется студентами 1-й подгруппы
с использованием программного кода, который реализует ис
пользование элемента управления ProgressBar (см. прилож:ение
2, заставка № 4), студентами 2-й подгруппъt - с использованием
программного кода, который реализует появление нестандартной
формы (см. приложение 2, заставка № 7).
4. На главной форме разрабатываемого приложения студенты
1-й подгруппы программируют задачу с использованием операторов
ввода и вывода данных на форму, студенты 2-й подгруппъt програм
мируют задачу с использованием операторов InputBox и MsgBox.
5. В разработанном проекте применить методы проверки кор
ректности ввода данных (студенты 1-й подгруппъt). Предусмотреть
запрос на выход из программы.
Содержание отчета
6. Разработанный алгоритм.
7. Листинг программы.
8. Результаты выполнения программы.
402
Контрольные вопросы и задания
Таблица 39
Таблица вариантов
Номер
Функция Условие
вариаата
1 х3 + lg(xy)cd ху>З
2cd _ x ху <0
2 ху > о
1-еху+ аЬ
ху = О
Z= · b-min{ax,y}
Z= ·
min{:.JY} х< О иу> О
2 х+у
в противном случае
403
Продолжение табл. 39
Н омер
Функция Условие
вариа~-rта
5
min{ х х a, Fa+x,sinx } О <х~ 1
ах + Ь х~ О
ь: У, 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 }, -Гх, ~у+с} у;;;;:: о
11 ,х"1ь 2 + с 2 х> 1
z =· min{JЬ, х 2 , х+с} х ~ о
12 max{x, у} х>1
р= min{x, Ь} -1~ х ~ о
404
Продолжение табл. 39
Н омер
Функция Условие
вариа~-rта
,
13
~lxl + lyj +lzl lzlxy < 3
r= min{~,.J[Yf,~} lzlx+y > 4
max{x, уЗ}+а 3 ~ lzlx+y ~ 4
,
15 asinx +bcosx х< 2
. { SIПX
m1n х ,max{ax ,xз},xln2x } в противиом случае
,
16
(1- .Jх 2 +а)· max{x, у} ху < о
,
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
405
Продолжение табл. 39
Н омер
Функция Условие
вариа~-rта
,
21 min{x, у} ху < 2
max{x, у, Ь}
z= ху >5
min{x, у, Ь}
Ь+ ysinx в противном случае
'
23 'Ja+xJ а>х
L= · еа +х а = х
sina х а<х
24 ау 2 cosx ху > 2
Z= · max{x, у}
ху ,,;; 2
min{a, х, у}
'
R}
,
. {х
25
m1n - , х<уиу> О
z= а а
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.
РАЗРАБОТКА ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ГЛАВНОГО
МЕНЮ И СТРОКИ СОСТОЯНИЯ
407
!il Созданне меню r;J[Q)[8]
File 1 Format 1
МТУСИ
Листинг программы
408
Clear Color() ' сброс гало ч е к пу нк то в меню
ц ве та
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Ь
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
-ь+Jd, -ь-Jd,
Xt = 2а
' Х2 = 2а
Х1
-Ь +z. v'[df ,
= - Х2
-Ь . v'[df .
= --l
2а 2а 2а 2а
У обоих комплексных корней действительные части одина
ковые, а мнимые отличаются знаком. Поэтому мож:но в переменной
u -Ь u
х
1 хранить деиствительную часть числа - ,в переменнои х
2 - мо -
2а
Листинг программы
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 ( " Действительные корни урав не ния ",
Изучить:
• работу условного оператора;
• принципы разработки главного меню;
• работу элемента управления StatusStrip (Строка состояния) .
Разработать:
• интерфейс программы;
• алгоритм нахо)кдения действительных и комплексных корней
квадратного уравнения;
412
Работа в лаборатории
Содержание отчета
413
3. Цель лабораторной работы.
4. Условие задачи.
5. Разработанный алгоритм.
6. Листинг программы.
7. Результаты выполнения программы.
ЛАБОРАТОРНАЯ РАБОТА № 6.
ТАБУЛИРОВАНИЕ ФУНКЦИЙ
п= [ xk~xo ]+l
Разработка алгоритма решения задачи представлена на рис. 172.
414
Начало
/ а, Ь, h
/
х =а
11 = Rou11d ((Ь - а) / h) + 1
-
~
i = 1 11
'
у= Si11 (х)
х, у
x =x+h
/' "\
1 Коиец 1
\_
Листинг программы
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
Просмотр ~
х= у=
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
[. . . . . . . . .""]
"ок"
416
Листинг программы
n - Ci nt ( (Ь - а) / h) + 1
For i = 1 Т о n
у = Sin (х)
TextBox4 . Text &= х & vbTab & у & vbCrLf
х = х + h
Next
End SuЬ
End Class
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
4 17
Листинг программы
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
х у
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
418
Задания для самостоятельной подготовки
Изучить:
• возможности языка программирования для реализации задачи
табулирования функций;
• запись оператора цикла For в блок-схемах;
• запись оператора цикла For в программах;
• работу оператора цикла For.
Разработать:
• алгоритм решения поставленной задачи в соответствии с вари -
антом;
• интерфейс программы;
• программу решения задачи;
Работа в лаборатории
ErrorP rovider.
6. Обе подгруппы при окончательной компоновке проекта со
здают иконку с собственными инициалами и демонстрируют пре
подавателю .ехе-файл приложения.
4 19
7. Студент долж:ен уметь ответить на контрольные вопросы
по лабораторной работе, т.е. проявить свои знания по теорети
ческой части курса.
8. Студент долж:ен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.
Содержание отчета
Таблица40
Таблица вариантов
Н омер Параметры
Шаг
вари - Функция начальное конечное
h
анта значение значение
420
Окончание табл. 40
Н омер П ар аметры
Шаг
в ари- Фун кция иачально е коиечиое
h
анта значение значение
421
ЛАБОРАТОРНАЯ РАБОТА № 7.
ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РЕГУЛЯРНЫХ
ЦИКЛИЧЕСКИХ СТРУКТУР
х2 -1 при х< О,
For l - 1 То n
If х <= о Then
у - х * х - 1
El s eif х > 1 .5 Then
422
Начало
х = а
i = 1' n
Нет Да
у = х2 - 1
Нет Да
х,у
x =x +h
Коаец
423
Задача. Вычислить пр оиз ведение отрицательных значений
функции у= f(x) при изменении х на отрезке [- 2, 2], с шагом h = 1:
х2- 1 при х < О,
у = sin (х -1) при О < х < 1,5,
cosx при х > 1,5.
Начало
а, Ь, 11
n = ((Ь - а) / h) + 1
pr = 1
i= 1 n
'
х = а+ (i - 1) *h
Нет Да
Нет Да
у = х2 - 1
Х, у
Нет Да
pr = pr *у
х, у
(~_ _К_о_не_ц_~)
Рис.177. Алгоритм решения задачи
424
Листинг программы
Ok
Изучить :
• в озможн ости я зыка прогр аммиров ания дл я р еализации задачи
табулирования функций;
425
• запись оператора цикла For в блок-схемах;
• запись оператора цикла For в программах;
• работу оператора цикла For.
Разработать:
• алгоритм решения поставленной задачи в соответствии с вари-
антом;
• интерфейс программы;
• программу решения задачи;
Работа в лаборатории
Для успешного получения зачета по лабораторной работе необ
ходимо выполнить следующие требования.
1. Получить допуск к лабораторной работе при предъявлении
преподавателю отчета по текущей лабораторной работе.
2. Проект должен иметь заставку, в которой указываются:
• название учебного заведения;
• название кафедры;
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;
• вариант задачи.
ErrorProvider.
6. Обе подгруппы при окончательной компоновке проекта со
здают иконку с собственными инициалами и демонстрируют пре
подавателю .ехе-файл приложения.
Студент должен уметь ответить на контрольные вопросы
7.
по лабораторной работе, т.е. проявить свои знания по теорети
ческой части курса.
8. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программирования
Microsoft Visual Studio, набрав и отладив программу своего варианта.
426
9. Студент обязан соблюдать правила по технике безопасности
при работе с вычислительной техникой.
Содержание отчета
1. Название лабораторной работы.
2. Фамилия, имя студента, номер группы, номер варианта.
3. Цель лабораторной работы.
4. Условие задачи.
5. Разработанный алгоритм.
6. Листинг программы.
7. Результат выполнения программы.
Таблица 41
Таблица вариантов
Н омер
Задача
вариа~-rта
1 +х 2
х<О
g; = . .J 1+ х 4 '
siп 2 х
2х + , х>О
2+х
427
Продолжение табл. 41
Н омер
Задача
вар иа~-rта
{
Зsiпх - cos 2 х, х <О
g· -
- з)1 + х 2 ' х >о
4 Протабулируйте функцию z при изме~-rении хна отрезке
(-20; 20] с шагом 0,3.
"
1+ х
х< О
~1+ х 2 '
z = • -х + 2е- 2 х, х Е (О; 1)
1
1 2- хЗ
3х 2
х< О
1+ х2 '
g=·Fтf;. х> О
'
428
Продолжение табл. 41
Н омер
Задача
вариа~-rта
х<О
z =, 2cos 2 х, ХЕ [0;1]
1
'1 + l2sin(Зx)IЗ, х>1
1
lxlЗ' х< О
х
Z=· -2х+ ,
1+х
1з - хl
х> 1
1+ х '
429
Продолжение табл. 41
Н омер
Задача
вар иа~-rта
1+х
х< О
1+х 2 '
z=·F6,
2lsin(3x)I, х ~1
'
z = · ~,
2 I0,5+sin x l, х ~ 1
430
Продолжение табл. 41
Н омер
Задача
вар иа~-rта
'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
~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та
ЛАБОРАТОРНАЯ РАБОТА № 8.
ТАБУЛИРОВАНИЕ ФУНКЦИИ С ИСПОЛЬЗОВАНИЕМ ЦИКЛОВ
С НЕИЗВЕСТНЫМ КОЛИЧЕСТВОМ ПОВТОРЕНИЙ
тива.
432
Пример выполнения работы
Н ачало
xп,xk,dx
s= О р =1 х = xn k = О
' ' '
Нет Да
у = Exp(Sin(x))Cos(x)
х,у
Нет
k=k + 1 s = s+y
Нет Да
р = р*у
х = х + dx f - - - - - - - - - -- '
s, р, k
Конец
433
Листинг программы
р - 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
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
-
{
е-х sin x, lxl <а
чению х ( xn ~ х ~ xk, dx), по формуле у=
е- х
2
cosx,
I I , найти
х >а
435
Начало
xn,xk,dx
х = xn
Нет Да
у = Exp(-x2)Cos(x) у = Exp(-x)Sin(x)
Нет Да
ymax = у
Нет Да
y1n1n = у
х, у
х = х + dx
Нет Да
l ymax, ym1n
-
( Коиец )
436
If < ymin Then
у
ymin = у
End I f
ListBoxl . I tems . Add (" " & х & " " & у)
х = х + dx
End SuЬ
End Class
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
Изучить:
• возмож:ности языка программирования Microsoft Visual B asic для
реализации ц иклических алгоритмов с ис п ол ь зованием оп ера
4 37
Разработать:
• алгоритм решения поставленной задачи в соответствии с вари-
антом;
• интерфейс программы;
• программу решения задачи;
Работа в nаборатории
438
9. Студент обязан соблюдать правила по технике безопасности
при работе с вычислительной техникой.
Содержание отчета
Таблица42
Варианты заданий
Номер
Задача
вариа~-rта
у= ~з x2+'R[;
~la - x21In(a+x)
. . Вычислить сумму, произведение и ко-
личество ЗI-Iачений у. Ко~-rтролыrый расчет провести при
а = 2,17; Х 11 = -1,5; Xk= 0,5; dx = 0,2
439
Продолжение табл. 42
Н омер
Задача
варианта
(ах)2зг--:t
z= v~
( . Определить F = П z + 2, z. Контрольный
aln(a + Х 2 ) z<a z~a
расчет провести при а = 2,62; х 11 = -3; xk = 3; dx = 0,6
440
Продолжение табл. 42
Н омер
Задача
варианта
44 1
Продолжение табл. 42
Н омер
Задача
варианта
la 3 -ьrxl L, t
t = la + xlх 2
2 . Определить F = П t . Контрольный расчет про-
442
Продолжение табл. 42
Н омер
Задача
варианта
443
Продолжение табл. 42
Н омер
Задача
варианта
зиачений z<О
. 5. х+2 1tX
Slll - -
12
Считать z до тех пор, пока подкоренное вы ражение больше
или равно 0,05. Определить k - количество вычислен~-rых z,
среднее арифметическое вычисленных z
444
Окончание табл. 42
Н омер
Задача
варианта
Sx 2
чению х (х = 1, dx = 0,5), по формуле z = соs(Зх)\ .
З+х 3 ·2х
Считать z до тех пор, пока подкоренное вы ражение больше
или равно 0,05. Определить k - количество вычисленаых z,
вычислить сумму положительных значений z, среднее ариф-
v
метическое отрицательаых значеаии
Таблица43
Варианты заданий
Н омер
Задача
вар ианта
2 Протабулировать функцию
F = a - sin(x)+Зtg(x),xn <x<xk,dx. Вычислить сумму,
произведение и количество значений F
445
Продолжение табл. 43
Н омер
Задача
вар ианта
4 Протабулировать фуикцию
F =а+ tg 2x+5cosx, Xn ~ х ~ xk, dx. Найти мииимальпое
среди вычисленных значений F, количество вычисленных F
6 Протабулировать фуикцию
F =а + 2ctgx - cos 2 х, xn ~ х ~ xk, dx. Определить разницу
между максимальным и мииимальиым зиачениями F
446
Продолжение табл. 43
Н омер
Задача
варианта
12 00
13 Протабулировать фуакцию
F = a+3cosx+sin(x/2), х 11 ~ х ~ xk, dx. Определить сумму
и произведение вычисленных значений F
447
Продолжение табл. 42
Н омер
Задача
вар ианта
{
e2x ~,lxl <a
х (xn< х < xk, dx), по формуле у= Г ,
vа(Зх + 5х ),2
lxl>а
найти сумму положительных значений у и количество вы
числеаных заачеаий у
чений у
448
Окончание табл. 42
Н омер
Задача
варианта
25 1
Даао: а= 5; da = -0,5. Z вычислять по формуле Z = q + --,
q +1
где q = а 2 - а. Считать Z до тех пор, пока . Определить
k - количество вычисленаых Z. Вывести на экран а, q, Z, k
449
ЛАБОРАТОРНАЯ РАБОТА №
9.
ОРГАНИЗАЦИЯ МНОГОДОКУМЕНТНОГО ИНТЕРФЕЙСА
450
Для создания элемента меню, в котором будут перечислены
v v
все по дчинен ны е окна, относящиеся к даннои родительскои
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.:::.
расположении.
451
Рис. 184. Рас положе ни е окон в го р изонтал ьн о м в и де
Листинг программы
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Ь
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
Изучить:
• основные свойства элемента управления PictureBox;
• наиболее часто используемые свойства MD 1-форм.
Разработать:
• интерфейс программы;
• программу решения задачи;
454
Работа в лаборатории
Содержание отчета
455
Контрольные вопросы и задания
1
ьп = ьп-1 +-.
п
456
Начало
Ь = 1
n= 1
Нет Да
Ь<а
11 = 11 +1
Ь = Ь + 1/n
b,n
Конец
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 представлен результат вычислений по итераци
онной формуле.
Ок
1 5.00206827268017
х =
- Ma t h . Exp(a)
Lo op Until Math . Ab s (х - а) < el
458
Начало
х= О
е1 = 1е - 4
х 1 = -Ехр ( х)
а = х
х = -Ехр(а)
Нет Да
х, х1
(~~~~К_о_н_е_ц~~---)
Рис. 188. Алгоритм разработанной программы
~ Проект GJ[QJ~
1·0.567119040057215
Ок ~
Рис. 189. Результаты работы программы
459
Задача 3. Задана возрастающая последовательность
х х2 х3
1, , , , ... (х > 10).
3 32 33
Тр ебуется вычислять в се чле ны по следовательности до тех
по р, по ка з начение оче редн ого члена н е пр евы сит н екоторое число
xn
ап = 3п'
где п = О, 1, 2 ... - номер члена последовательности.
Разработка алгоритма решения задачи представлена на рис. 190.
Начало
Нет Да
Нет Да
n=O
xn
a= -
3n
n, а
11 = 11 + 1
Нет Да
Коиец
460
В приведенном алгоритме имеется проверка правильности вве
денных исходных данных х и d. Предусмотрена так)ке ~защита»
от зацикливания (проверка условия n < 100, т. е. количество ите
раций не превысит 100).
Листинг программы
1 5 Введите значение d
2 25 140 1
з 125
1- Ok -1
461
Задача 4. Разработать программу, вычисляющую прибли)кенное
значение функции Ехр( х) с заданной точностью Е. Функция
Ехр(х) может быть представлена бесконечным рядом
х2 хЗ xn
ехр(х) = 1+х+ -+-+ ... +-+ ....
2! 3! п!
xn
- >Е.
п!
С =С х
п+1. п п+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 х, 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
Конец
х =
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
Ok
464
тогда формула n + 1-го члена
(х-1)
ап +1 = - ап .
п+2
( х -1) п+ 1
а -(-1)п _ __
п- (п+1)! '
Листинг программы
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
ап =an-1q.
Для этого случая вывод формулы будет следующий:
= (-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
467
Задача . Вычислить с точностью е = 10- 5 корень уравнения
f (х) = хз - 2х 2 + х - 3 =О, воспользовавшись итерационной фор
мулой
/(х) .
xi+i = xi - /'(х), z =О, 1, 2, ... , х 0 = 2,2.
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
Изучить:
• возмож:ности языка программирования Microsoft Visual Basic для
реализации циклических алгоритмов с использованием опера
• интерфейс программы;
• программу решения задачи;
469
• тестовые варианты (число тестов равно числу ветвей вычисли
тельного процесса) для проверки правильности функциониро
вания программы.
Работа в лаборатории
Содержание отчета
470
3. Цель лабораторной работы.
4. Условие задачи.
5. Разработанный алгоритм.
6. Листинг программы.
7. Результаты выполнения программы.
Таблица44
Таблица вариантов
Номер
Задача
варианта
471
Продолжение т абл. 44
Н омер
Задача
варианта
6 х2 хз . 1 xi
х4
Вычислить сумму ряда q = х - 2+3 - 4+ ...(- 1) - i+ ... 1
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 = О
472
Окончание табл. 44
Н омер
Задача
варианта
473
ЛАБОРАТОРНАЯ РАБОТА № 11.
КОМПЛЕКСНОЕ ПРИМЕНЕНИЕ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ
творческая инициатива.
1 Ассистент 6800
2 Преподаватель 7900
3 Старший пр еподаватель 18 100
4 Доцеит 25 200
5 Профессо р 38 ООО
Z=St·K / 18,
где К - количество часов в неделю.
3. Рассчитываются надбавки:
• за звание доцента - 40% от заработной платы;
474
• вредность (при работе в компьютерном классе) - 12% от зара
ботной платы;
• заведование кабинетом - 10% от ставки;
• участие в национальном проекте ~Образование» - 15%
от ставки;
136 l 2168.n
~ Работа в комnыотерно14 кnасс:е Налог а nенс:ионньй д
О Нет
Вьчисление
О Отгичник народ110 го прос:аящения
475
Листинг программы
End SuЬ
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Ь
Разработать:
• интерфейс программы;
• программу решения задачи;
Работа в лаборатории
478
2. Проект должен иметь заставку, в которой должны быть ука
заны:
Содержание отчета
479
ЛАБОРАТОРНАЯ РАБОТА № 12.
КЛАССИЧЕСКИЕ СПОСОБЫ ОБРАБОТКИ ОДНОМЕРНЫХ
МАССИВОВ
возмО)КНО осуществить:
заданном условии;
данном условии;
480
Внешний вид главной формы представлен на рис. 198.
Заполнение массива
Результат вычислений
Вычислить
Заnопненне масснва ~
В ведите 1 число
ок
Cancel
481
На рис. 201-203 показаны три вкладки работающей программы,
отображающие выбор способа заполнения одномерного массива
и результаты двух классических способов его обработки.
lв 01 02 03 04 05 06 07 08
11 1 2 12 20 13 6
110
Заполнение массива
Результат вычислений
Вычислить -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 ключить элемент
Удалить элемент
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ь массив
01 02 03 04 05 06 07
11 13 14 16 17 20
14 Упорядоч~.-rrь по
убыванию
Листинг программы
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Ь
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Ь
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Ь
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Ь
487
TextBox8 . Text &= String . Format( " {O : dl} " ,
a(i)) & " "
Labe l 12 . Text &= String . Format( " {O : d2} ",
i) & " "
Next
End SuЬ
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
488
Разработать:
• интерфейс программы;
• программу решения задачи;
Работа в лаборатории
Содержание отчета
489
3. Цель лабораторной работы.
4. Условие задачи.
5. Листинг программы.
6. Результаты выполнения программы.
490
Создайте иконку с собственными инициалами и скомпилируйте
.ехе -файл.
Разработка алгоритма решения задачи представлена на рис. 204.
Начало
i = о' 9
a(i)
chet =О
nechet =О
i =О, 9
Нет Да
i = 1, chet
b(i)
i = 1, necl1et
c(i)
Конец
491
Комментарий. Исходный массив а(9) формируем с помощью
процедуры Randomize и функции Random. Выходные массивы Ь()
и с() объявляем безразмерными, поскольку заранее неизвестно,
какое колич е ство четных и нечетных элементов исходного массива
Листинг программы
че т ных чисе л
массива
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
То
493
Листинг программы
Листинг программы
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
Разработать:
• интерфейс программы;
• алгоритм решения задачи;
Работа в лаборатории
496
Содержание отчета
Таблица46
Варианты заданий
Номер
Задача
варианта
497
Продолжение табл. 46
Н омер
Задача
варианта
498
Продолжение табл. 46
Н омер
Задача
варианта
элементов
максимальиого элемеата
499
Окончание табл. 46
Н омер
Задача
варианта
500
ЛАБОРАТОРНАЯ РАБОТА № 14.
КЛАССИЧЕСКИЕ СПОСОБЫ ОБРАБОТКИ ДВУМЕРНЫХ МАССИВОВ
возмО)КНО осуществить:
условии;
условии;
условии;
501
Внешний вид главной формы представлен на рис. 205.
l;:J Работа с двумерными масснвамн GJ[QJ(8]
Результат вычислений
1 1
Заnол'1ИТь матрицу
В ЫЧИCJJ-rrb
Вручную
С помощью генератора случайных чи сел
502
На рис.
208-21 О показаны организация во вкладках элемента
управления TabControl вывода исходной матрицы и результаты
нескольких способов обработки двумерного массива.
19 12 13 8 5
16 о 9 14 13
6 12 5 10 16
Реэультsт вычислений
17 10 15 15 17
о 7 19 4
Заполнить матрицу
Вычисшть
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трицу
503
Кnассические способы обработки матриц JLО:бмен стопбuов и строк матриц;) Т рансn0t1ирование и нахожде'1Ие nроизеедениR матриц
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ть матрицу
Произеедение
Листинг программы
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Ь
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Ь
случайных чисел
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Ь
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Ь
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Ь
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
Изучить :
• операторы для ввода и вывода двумерных массивов;
Разработать:
• интерфейс программы;
• программу решения задачи;
Работа в лаборатории
510
• цель лабораторной работы;
• условие задачи.
3. Заставка к проекту выполняется:
• студентами 1 -й подгруппы с использованием программного кода,
который реализует эффект появления нестандартной формы
(см. прилож:ение 2, заставка № 7);
• студентами 2 -й подгруппы с использованием программного кода,
который реализует эффект появления нестандартной формы
на «колесиках~ (см. приложение 2, заставка № 8).
4. Главную форму разрабатываемого прило:>кения студенты 1-й
и 2 -й подгрупп программируют с использованием обычной формы.
5. Студенты обеих подгрупп при окончательной компоновке
проекта создают иконку с собственными инициалами и демон
стрируют преподавателю .ехе -файл приложения.
6. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе.
7. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.
Содержание отчета
511
6. Поясните, как выполнить инициализацию двумерного мас
сива.
ская инициатива.
ходной массив.
Разработка алгоритма решения задачи представлена на рис. 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)
Конец
513
то он считается максимальным, и уже с ним будут сравниваться
оставшиеся элементы в текущей строке матрицы. Таким образом,
в каж:дой строке пр оисходят поиск максимального элемента и од
новременно формирование результирующего массива оператором
x(i) = a(i, j). П оскольку в каж:дой строке матрицы МО)кет быть
только один максимальный элемент ( а строк всего пять), то пара
метр цикла меняется от О до 4.
Листинг программы
514
'Ус т ан о вка з начен ий с в о йств о дн омер н о г о ма с си ва
э ле ме н т а массива
For j = О То а. GetUpperBound ( 1 )
' Ор ганизация ци кла по стол б цам
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
515
Изменяя номера строки i с помощью внешнего цикла, отдельно
просматриваются элементы, расположенны е НИ)Ке (j О То i - 1) =
и выше (j = i+1 То 3) главной диагонали. После просмотра всех
элементов массива а в переменных imax и jmax фиксируются ко
ординаты максимального элемента , а в п еременных 1m1n и Jmtn -
координаты минималь но го элемента.
Листинг программы
- о
- 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
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
Изучить :
• операторы для ввода и вывода двумерных массивов;
517
• классические способы обработки двумерных массивов;
• цели использования динамических массивов.
Разработать:
• интерфейс программы;
• алгоритм решения задачи;
Работа в лаборатории
518
Содержание отчета
Таблица47
Варианты заданий
Номер
Задача
варианта
519
Продолжение табл. 47
Н омер
Задача
варианта
520
Окончание табл. 47
Н омер
Задача
варианта
521
ЛАБОРАТОРНАЯ РАБОТА № 16.
РАЗРАБОТКА ТЕКСТОВОГО РЕДАКТОРА
атива.
Шрифт
С•ткр1::п1::.
Сохраннть
Эакрыт1::.
-
1
Рис. 213. П ункты меню текстового редактора
522
3. Элементы управления SaveFileDialog, OpenFile Dialog,
FontDialog, MenuStrip.
Листинг программы
файл
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)
' Открываем выбранный файл для чтения
пол е
523
Label l . Text = OpenFile Dial ogl . Fi leName
' Отображение п ути к файлу
End SuЬ
11ttp://www.п1ossa11epid. 1тa/sb1Jkhu·a/det _
itп.111ln
l1ttp ://1no .1nosreg.1ul1nai11/
12з1
524
На третьей форме приложения следует разработать текстовый
редактор с использованием элемента управления RichTextBox.
Элемент управления RichTextBox имеет расширенные функции
по сравнению с элементом управления TextBox. Элемент управ
ленияRichTextBox позволяет сохранять информацию в формате
RTF (Rich Text Format), осуществлять операции форматирования
над текстом, поиск данных. Таким образом, с помощью данного
средства управления пользователь может разработать программу,
по своим возможностям с ходн ую, например, с текстовым редак
http://www.mossanepid.ru/strukturti/detitu.htm
http:Umo.mosreg.ru/mainA
Открыть
Сохранить
Закрыть
525
Шрифт
По правому краю
Файл
Выравнивание
Снять
Листинг программы
526
MsgBox ( " Не в озможно сохра ни ть фа йл да нн о г о
форма т а " )
End If
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Ь
528
Создание панели инструментов для простого текстового
редактора
§) ToolStr1pButton 1
§) Tool5tripButton2
§) ToolStripButtonЗ
§) Tool5tripButton4
§) Т ool5tripButton5
§) ToolStripButtonб
529
Листинг программы
End SuЬ
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Ь
53 1
Задания для самостоятельной подготовки
Изучить:
• порядок действий пользователя при создании меню;
• операторы, необходимые для работы с диалоговыми окнами;
• порядок действий пользователя при создании панели инст
рументов.
Разработать:
• интерфейс программы;
• программу решения задачи;
Работа в лаборатории
532
Содержание отчета
ская инициатива.
533
Комментарий. Для решения задачи необходимо два)кды выпол
нить одну и ту же операцию перестановки строк. Поэтому целе
сообразно организовать процедуру перестановки заданных строк
двумерного массива и вызвать ее 2 раза с соответствующими значе
ниями фактических параметров. Параметрами процедуры с именем
Obmen являются двумерный массив Ь, количество столбцов этого
массива n, номера переставляемых строк k и i.
Разработка алгоритма процедуры представлена на рис. 220.
j = О, 11
r = b(k, j)
b(k, j) = b(i, j)
b(i,j) = r
Конец
Начало
Ввод а, Ь
Obmen (а, 4, О, 4)
Ob1ne11 (а, 4, 1, 3)
Вывод а( 4, 4)
(_ _ _К_о_
н_ец_ _~)
534
Листинг программы
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
Изучить:
• модель событийных процедур;
• возможности передачи параметров по ссылке и по значению;
Разработать:
• алгоритм решения поставленной задачи в соответствии с вари-
антом;
• интерфейс программы;
• программу решения задачи;
Работа в лаборатории
536
• название лабораторной работы;
• цель лабораторной работы;
• условие задачи;
• вариант задачи.
3. Заставка к проекту выполняется:
• студентами 1-й подгруппы с использованием элемента управ
ления ProgressBar (см. приложение 2, заставка № 4);
• студентами 2-й подгруппы с использованием программного кода,
который реализует эффект появления формы произвольной
конфигурации (см. прилож:ение 2, заставка № 14).
4. Главную форму разрабатываемого приложения студенты 1-й
и 2-й подгрупп программируют с использованием обычной формы.
5. Студенты обеих подгрупп при окончательной компоновке
проекта создают иконку с собственными инициалами и демон
стрируют преподавателю .ехе-файл приложения.
6. Студент должен уметь ответить на контрольные вопросы
по лабораторной работе.
7. Студент должен продемонстрировать свои навыки и умения
при работе на персональном компьютере в среде программиро
вания Microsoft Visual Studio, набрав и отладив программу своего
варианта.
Содержание отчета
6. Листинг программы.
7. Результаты выполнения программы.
537
В чем заключается отличие между функцией и процедурой?
5.
Какими способами можно произвести вызов процедуры Sub
6.
из другой процедуры?
7. Какой синтаксис используется для объявления функции?
8. Охарактеризуйте два способа передачи аргументов: передачу
по значению и передачу по ссылке.
Таблица48
Варианты задани й
Н омер
Задача
варианта
538
Продолжение табл. 48
Н омер
Задача
варианта
539
Продолжение табл. 48
Н омер
Задача
варианта
540
Окончание табл. 48
Н омер
Задача
варианта
на пять
541
ЛАБОРАТОРНАЯ РАБОТА № 18.
РАЗРАБОТКА ГРАФИЧЕСКОГО РЕДАКТОРА
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
Листинг программы
543
верхность объекта. Событийную процедуру Form1_Paint() МО)КНО
создать нажатием кнопки События панели Свойства.
В табл. 49 представлены основные методы создания графиче
ских примитивов и примеры их создания.
Таблица49
544
Продолжение табл. 49
Метод Описание примитива, пример
545
Окончание табл. 49
Метод Описание примитива, пример
546
• имеет возмо)кность выбора цвета карандаша;
• имеет панель инструментов, с помощью которой появляется воз
МО)кность создавать такие графические примитивы, как линия,
окружность, квадрат и т.д.;
[! SaveFileDialog 1
Рис.224. Элементыуправления
547
После размещения панели инструментов ToolStrip следует за
полнить ее кнопками. Для этого находим свойство Items данного
элемента управления. Появится окно ItemsCollectionEditor, в ко
тором надо последовательно добавить кнопки (Button) и раздели
тели (Separator). Подобная ситуация представлена на рис. 225.
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
ОК J [ Cancel
UI.
IrnJ:юrt .
548
Для того чтобы созданная панель инструментов находилась
слева, следует воспользоваться свойством Dock панели инстру
ментов ToolStrip. На эту же панель следует нанести элемент управ
ления NumericUpDown, который будет отвечать за толщину пера.
Важ:ное отличие программирования кнопок панели инстру
ментов от программирования обычных кнопок состоит в том, что
процедура обработки нажатия на кнопки панели одна для всех
кнопок.
End SuЬ
- 1
File Edit Colors Edit Colors
1
. - Оп:::рыт1::. Очн1:тнт1::.
~- -
Сохранит~:.
'
1
Еi1::.1ход
-
-- ~
Листинг программы
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)
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Ь
е 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, е . Х, е . У, х, у)
х - е .Х
У = е.У
End If
End SuЬ
551
Private SuЬ Forml_MouseDown(ByVal sender AsObject,
ByVal е As System . Windows . Forms . MouseEventArgs) Handles
Me.MouseDown
'В на чаль ный момен т времени , к о гда нажимается кнопка
мыши
552
На рис. 228 представлен внешний вид разработанного редактора
с нарисованными графическими примитивами.
Изучить:
• способы создания объекта Graphics;
• геометрические структуры;
Разработать:
• интерфейс программы;
553
• программу решения задачи;
Работа в лаборатории
Содержание отчета
554
5. Листинг программы.
6. Результаты выполнения программы.
555
~~~~~~~~~~~~~~~~~~~~~
Результат обработки
Ок
Результат обработки
Ок ~
556
Листинг программы
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
558
If х > ОThen
i = х + Len ( row 1)
ko l = kol + 1
Else
Exit Do
End I f
Loop
Vxod = kol
End Function
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
Изучить:
• возможности языка программирования для реализации задачи
560
Работа в лаборатории
Содержание отчета
561
Контрольные вопросы и задания
Листинг программы
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т бала н са о т крывающих
Листинг программы
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 ( " Количество ци фр в за да н ных
Изучить:
• возможности языка программирования для реализации задачи
Работа в лаборатории
564
• условие задачи;
• вариант задачи.
Содержание отчета
565
Варианты к лабораторной работе
« Обработка строковых данных»
(порядковый номер студента по журналу соответствует
его номеру варианта)
Таблица 50
Н омер
Задача
вар ианта
566
Окончание табл. 50
Н омер
Задача
вар ианта
Листинг программы
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 для расположения
изображения на форме
Лабораторная работа
Программирование графики
Листинг программы
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
Лабораторная работа №1
570
Заставка № 3. Задание фонового рисунка
В дан ном проекте щелчок мыши н а форме приводит к смене
фоново г о рису нка. Ф о н овый рисун ок задается свойст в ом
Backgroundlmage.
Листинг программы
571
Рис. 234. Щел ч ок н а ф орме пр иводит к сме н е ф о но во го ри су н ка
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
Лабораторная работа № 9
ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РЕГУЛЯРНЫХ ЦИКЛИЧЕСКИХ
СТРУКТУР
Цель роботы : изучение процесса формапизоции при решениии задач на компьюет ере, а
также в изучении средств, примеров, поnучение дальнейших навыков по
о тл адке и тести р овани ю программ.
У = х5 + 5х 4 - 2 х 3 - 4х 2 + 7х - 3
111111111111111111111111111111111111111111111111111111111111111
573
В новом проекте создадим новую форму (Form1). Разместим
на ней компонент Timer1 и создадим обработчик событияТimеr1 _
Tick.
Листинг программы
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У"\
Листинг программы
575
Else
МsgВ ох( " Вв е д е н не п ра в иль ный пароль " , Msg-
BoxSt yle . Cri t i cal , " Ок н о вв од а п арол я " )
End If
End Sub
Листинг программы
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
Пароль не введен
Ок
Dim g As Gr aphics
g = Me . CreateGr aph i cs
напиш ем один
Листинг программы
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
578
Листинг программы
579
Заставка № 9. Повернутая надпись
Листинг программы
580
'l Повернутая надпись о х
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
Ok
582
Заставка № 11. Поворот изображения и его зеркальное
отображение
Листинг программы
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
Ok
583
Заставка № 12. Вывод векторного изображения
Листинг программы
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
584
fll Вывод нзобра+ення ~[QJ~
Зто · мешокl
Ok
Листинг программы
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
gr . DrawLine(pn , е . Х , е . У, х , у)
mygr af . DrawLine(pn , е . Х , е . У, х, у)
' Запоминае м т екущее положение мыши
х - е .Х
У = е.У
End If
End Sub
End Class
586
Результат выполненной программы показан на рис. 244.
Рисован ие м ы шью о х
L
Рис. 244. Рисунок, выполненный с помощью мыши
Листинг программы
587
' Правая фигура
588
Заставка № 15. Вывод бегущей строки
Заданный текст перемещается справа налево до полного исчез
новения, а затем снова появляется в правой его части.
Листинг программы
Лабораторная работа
589
Оглавление
Предисловие...........................................................................................................3
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
591
6.4. Оператор цикл а Do Wh ile ... Loop .................................................................................................... 172
Упражнени я ......................................................................................................................................................... 177
Примеры решения задач .............................................................................................................................. 181
Контрольные вопросы и задания .............................................................................................................. 190
Задачи для самостоятельного решения ............................................................................................... 190
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
Учебное издание
ОСНОВЫ АЛГОРИТМИЗАЦИИ
И ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ
MICROSOFT VISUAL BASIC
УЧЕБНОЕ ПОСОБИЕ