osnovyiprogrammirovaniyanac
.pdfГпава 2
Алгоритмы
|
. . . в ы й ти в 7.30. |
Д о й т и |
до |
остановк и трамвая - на это |
уйдет 2 |
м и н у т ы , |
дальше |
т |
|||||||||||||||
трамвае |
под |
н о м е р о м |
26 |
надо |
проехать |
до |
остановки «Станция |
метро |
Ш а б о л о в с к а я » |
- |
|||||||||||||
15минут, |
и, |
н а к о н е ц , |
45 минут |
на метро до станци и «Динамо». |
Эта |
последовательность |
|||||||||||||||||
к о м а н д |
н а п р а в л е н а |
на |
д о с т и ж е н и е |
одной |
общей |
цели |
- |
|
добраться |
до места |
работь |
||||||||||||
вовремя . Говоря иначе, это алгоритм, цель которого - быть в |
пункте н а з н а ч е н и я |
к 9 |
часам. |
||||||||||||||||||||
|
Алгоритм |
- это |
последовательность |
событий (команд, |
д е й с т в и й ) , |
ведущих |
к |
какой- |
|||||||||||||||
либо |
цели. |
М о ж н о |
сказать, |
что это |
строго |
определенна я |
процедура, |
гарантирующая |
|||||||||||||||
получение |
результата |
за к о н е ч н о е |
число |
шагов, |
содержащая |
в |
себе |
д е й с т в и я , в |
результате |
||||||||||||||
каждого |
из |
которых |
мы |
становимс я |
еще ближе |
к р е ш е н и ю |
|
главной |
задачи. |
Указанная |
|||||||||||||
ц е п о ч к а |
д е й с т в и й н а з ы в а е т с я |
алгоритмическим |
процессом, |
а |
к а ж д о е о т д е л ь н о е |
действи е |
|||||||||||||||||
- ег о шагом . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
Р а с с м о т р и м п о р я д о к д е й с т в и й , |
к о т о р ы е нужно |
в ы п о л н и т ь , |
чтобы |
посчитать |
объем |
|||||||||||||||||
параллелепипеда . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Шаг |
1. |
Узнать з н а ч е н и я |
сторон |
о с н о в а н и я |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
(а,Ь) и в ы с о т ы ( п ) . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Шаг |
2. |
В ы ч и с л и т ь |
площадь о с н о в а н и я |
по |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
формуле |
S = а * Ь . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
Шаг |
3. |
В ы ч и с л и т ь |
объем |
по |
формуле |
|
|
|
|
|
|
|
|
|
|
|
|
||||||
V = S * h . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Л ю б о й |
алгоритм долже н |
быть: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
1. |
Определенным |
и |
однозначным. |
|
Эт о з н а ч и т , |
что |
а л г о р и т м |
не |
д о л ж е н |
|||||||||||
|
содержать |
в |
себе |
элементов, |
к о т о р ы е |
могут |
запутать |
того, |
кто |
будет |
||||||||||
|
в ы п о л н я т ь |
эту |
последовательность |
к о м а н д . |
(Если |
|
для |
о б о з н а ч е н и я площади |
||||||||||||
|
была |
выбрана |
заглавная буква S, то так площадь |
д о л ж н а |
обозначаться |
до |
||||||||||||||
|
последнего |
шага) . |
К |
тексту |
|
к о м п ь ю т е р н о й |
п р о г р а м м ы , |
о п и с ы в а ю щ е й |
||||||||||||
|
алгоритм, |
п р е д ъ я в л я ю т с я еще |
более жесткие |
т р е б о в а н и я : |
в |
п р о г р а м м е |
не |
|||||||||||||
|
д о л ж н о б ы т ь н и |
о д н о г о л и ш н е г о |
с и м в о л а . |
Необходимо |
понимать значение |
|||||||||||||||
|
каждо й буквы, каждо й поставленно й запятой, чтоб ы программа |
|
||||||||||||||||||
|
выполнялась без ошибок . |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
2. |
Результативным |
и |
выполнимым. С о с т а в л я я |
п о с л е д о в а т е л ь н о с т ь д е й с т в и й , |
||||||||||||||||
|
нужно всегда п о м н и т ь |
о к о н е ч н о й |
цели и |
не |
делать |
л и ш н и х |
о п е р а ц и й . |
Не |
||||||||||||
|
стоит |
пытаться |
узнать |
цвет сторон |
параллелепипеда, |
если |
нужно |
посчитать |
||||||||||||
|
его объем . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* |
|
3. |
Массовым |
или |
универсальным. |
Эт о з н а ч и т , |
что |
н е з а в и с и м о |
от |
р а з м е р о в |
||||||||||||
|
параллелепипеда, |
в ы п о л н и в |
каждый шаг |
алгоритма, |
мы |
т о ч н о |
узнаем |
его |
||||||||||||
|
объем. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
З а п и с ы в а т ь алгоритмы |
м о ж н о по - разному: |
|
|
|
|
|
|
|
|
|
|
|||||||||
• |
в в и д е |
блок-схем; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
• |
в виде п р о г р а м м ; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
• |
в |
виде |
текстовых |
о п и с а н и й |
( н а п р и м е р , |
рецепты |
п р и г о т о в л е н и я |
п и щ и , |
||||||||||||
|
лекарств |
и др . ) . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Блок-схема |
алгоритма |
- |
это |
г р а ф и ч е с к о е |
о п и с а н и е |
а л г о р и т м а |
к а к |
|||||
п о с л е д о в а т е л ь н о с т и д е й с т в и й . |
|
|
|
|
|
|
|
|
||||
Р а с с м о т р и м |
э л е м е н т ы , |
из к о т о р ы х состоит |
блок-схема, на |
следующем п р и м е р е . |
|
|||||||
Пример 2.1. |
Составьте |
и з а п и ш и т е |
алгоритм н а х о ж д е н и я |
п л о щ а д и п р я м о у г о л ь н и к а . |
||||||||
П л о щ а д ь п р я м о у г о л ь н и к а находится по формуле: S = а • |
Ь. Д л я ее в ы ч и с л е н и я нам нужно |
|||||||||||
ввести |
з н а ч е н и я |
сторон |
п р я м о у г о л ь н и к а |
- а |
и |
Ь. Далее |
надо |
подсчитать п л о щ а д ь |
Б и в |
|||
к о н ц е |
вывести результат |
на |
э к р а н . |
Алгоритм |
в |
виде б л о к - с х е м |
з а п и с ы в а е т с я с л е д у ю щ и м |
о б р а з о м :
Блок - схем а |
состоит из |
следующих |
э л е м е н т о в : |
|
|
|
|
|
|
|
|||||||
Д л я |
того |
чтобы |
человеку, |
к о т о р ы й будет |
разбираться |
в |
вашем |
алгоритме, было |
|||||||||
п о н я т н о , |
откуда |
он |
н а ч и н а е т с я , |
в |
г р а ф и ч е с к о м способе |
записи |
алгоритма существует |
||||||||||
с п е ц и а л ь н ы й |
элемент |
блок - схемы, |
к о т о р ы й с и м в о л и з и р у е т |
|
начало алгоритма . Это овал, |
||||||||||||
внутри которого |
н а п и с а н о " Н а ч а л о " . |
Элемент " н а ч а л о " имеет |
один |
выход (т.е. в ы х о д я щ у ю |
|||||||||||||
стрелку), |
и |
ни |
одного входа (т.е. |
в х о д я щ е й |
стрелки), |
это |
говорит |
о |
том, что |
он |
|||||||
возглавляет блок |
схему, |
т.е. |
перед н и м |
ничего |
нет, а после |
него |
следует |
алгоритм . |
Этот |
||||||||
блок используется в |
каждом |
алгоритме . |
|
|
|
|
|
|
|
|
|
Н а ч а л о алгоритма.
Л ю б о й |
алгоритм требует |
входные д а н н ы е , с п о м о щ ь ю |
к о т о р ы х и п р о и з в о д я т с я |
расчеты . Д л я |
ввода з н а ч е н и й |
с клавиатуры предусмотре н элемент б л о к - с х е м ы в виде |
|
параллелограмма |
с п е р е ч и с л е н и е м |
в в о д и м ы х п е р е м е н н ы х внутри |
него . |
Б л о к ввода и н ф о р м а ц и и .
В прямоугольнике |
о б ы ч н о |
з а п и с ы в а ю т а р и ф м е т и ч е с к и е |
в ы р а ж е н и я , формулы |
к а к и е - л и б о д е й с т в и я , |
которые |
нужно в ы п о л н и т ь для получения |
требуемого результата. |
Б л о к обработки и н ф о р м а ц и и . Внутри блока з а п и с ы в а ю т с я формулы, знаки о п е р а ц и й и ф у н к ц и й .
Ц е л ь ю любого |
алгоритма |
является |
получение |
к а к о г о - л и б о результата. И этот |
|
результат н е о б х о д и м о |
вывести на |
э к р а н . |
Д л я вывода |
з н а ч е н и й п е р е м е н н ы х |
используете; |
следующая блок-схема. |
Внутри нее з а п и с ы в а ю т с я в ы в о д и м ы е з н а ч е н и я . |
» |
Блок вывода и н ф о р м а ц и и .
В к о н ц е алгоритма о б ы ч н о ставится элемент б л о к - с х е м ы " К о н е ц " . К нему подходит л и ш ь одна стрелочка и не выходит ни одной .
К о н е ц алгоритма.
Это |
|
п р и м е р |
линейного |
алгоритма. |
Л и н е й н ы м |
называется |
алгоритм, |
|
в |
котором |
|||||||||||||||||
отдельные |
операторы |
в ы п о л н я ю т с я |
в |
естественном |
п о р я д к е |
н е з а в и с и м о |
|
от |
значений |
||||||||||||||||||
исходных |
|
д а н н ы х |
и |
|
промежуточны х |
результатов. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
В |
л ю б о м |
алгоритме |
очень |
важно |
п р а в и л ь н о |
определить |
последовательность |
||||||||||||||||||||
в ы п о л н е н и я |
о п е р а ц и й . |
Р а с с м о т р и м |
«алгоритм |
|
утреннего |
пробуждения», |
к о т о р ы й |
||||||||||||||||||||
в ы п о л н я е т м о л о д о й |
человек, |
вставая |
утром |
и |
собираясь |
в |
ш к о л у : (1) |
встать |
с |
постели, |
(2) |
||||||||||||||||
п р и н я т ь |
душ, |
(3) одеться, (4) позавтракать, (5) выйти |
из |
дома. |
В ы п о л н е н и е |
этого |
плана |
||||||||||||||||||||
позволи т |
ему х о р о ш о |
подготовиться |
к учебному д н ю . |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
Давайте |
п р е д п о л о ж и м , |
что |
те |
же |
шаги |
в ы п о л н я ю т с я |
|
в н е с к о л ь к о |
иной |
||||||||||||||||||
п о с л е д о в а т е л ь н о с т и : |
(1) |
встать |
с постели, |
(2) |
одеться, |
(3) |
п р и н я т ь |
душ, |
(4) |
позавтракать, |
|||||||||||||||||
( 5 ) в ы й т и |
из дома . |
В |
этом |
случае |
наш |
молодой |
человек |
отправится |
в |
школу |
слегка |
||||||||||||||||
м о к р ы м . |
|
Т о л ь к о |
п р а в и л ь н а я |
последовательность |
действий |
позволит |
получить |
в е р н ы й |
|||||||||||||||||||
результат. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Давайте |
теперь |
р а с с м о т р и м |
п р и м е р |
алгоритма |
|
с |
ветвлениями. |
Алгоритм |
с |
||||||||||||||||||
в е т в л е н и я м и |
предусматривает |
в ы п о л н е н и е |
одного |
из |
заранее |
заготовленных |
операторов «в |
||||||||||||||||||||
з а в и с и м о с т и |
от результата п р о в е р к и |
некоторого условия . |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
Пример |
2.2. З а п и ш и т е |
в виде |
|
б л о к - с х е м ы |
алгоритм |
п р о г р а м м ы , |
которая |
||||||||||||||||||||
з а п р а ш и в а е т два |
числа и |
определяет, |
к а к о е из этих |
чисел больше . |
|
Результат |
необходимо |
вывести на экран .
Алгоритм начинается с |
блока |
" Н а ч а л о " . |
|
Далее, |
спускаясь |
в н и з |
по |
стрелочке, |
мы |
||||||||||||||||||||
встречаем |
блок ввода |
з н а ч е н и й |
А и В. Здесь предполагается, что |
мы |
задаем |
з н а ч е н и я |
|
А |
и |
||||||||||||||||||||
В с клавиатуры . После |
их |
ввода |
идет блок условия . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
Б л о к условного |
оператора |
изображается |
с |
п о м о щ ь ю |
ромбика . |
О с о б е н н о с т ь ю |
этого |
||||||||||||||||||||||
элемента |
является |
то, |
что |
к нему подходит одна стрелочка, |
а |
выходят |
две. |
|
При |
||||||||||||||||||||
д о с т и ж е н и и |
блока ветвления |
алгоритм дальше |
может |
пойти |
по |
|
одной |
из двух веток |
в |
||||||||||||||||||||
з а в и с и м о с т и |
от того, |
верно ли |
з а п и с а н н о е |
условие |
внутри р о м б и к а |
на д а н н ы й |
м о м е н т |
или |
|||||||||||||||||||||
нет. Если верно, то двигаемся |
по |
стрелочке |
с |
н а д п и с ь ю "Да", |
если |
нет, |
то |
по |
стрелочке |
с |
|||||||||||||||||||
н а д п и с ь ю |
" Н е т " . |
Алгоритмы, |
|
с о д е р ж а щ и е |
блоки |
условия, |
н а з ы в а ю т с я |
|
алгоритмами |
с |
|||||||||||||||||||
в е т в л е н и я м и . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
Б л о к условия . |
Внутри |
блока |
з а п и с ы в а ю т с я |
условия |
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
н а п р а в л е н и я д е й с т в и я |
алгоритма. |
|
|
|
|
|
|
|
|
||||||||||
Если А > В |
(условие |
в е р н о ) , |
то |
мы идем по веточке "Да" налево |
и |
в |
п е р е м е н н у ю |
|
Мах |
||||||||||||||||||||
з а п и с ы в а е м |
з н а ч е н и е |
А |
(т.к. |
|
А |
- |
н а и б о л ь ш е е ) , |
иначе |
идем |
по |
веточке |
" Н е т " , |
|
и |
в |
||||||||||||||
п е р е м е н н у ю |
Мах |
будет |
з а п и с а н о |
В. |
Далее |
|
идет |
о б щ и й |
блок |
вывода |
м а к с и м а л ь н о г о |
nncjfa |
|||||||||||||||||
на э к р а н . И в к о н ц е алгоритма ставится блок " К о н е ц " . К а к видите, |
ничего |
сложного нет. |
|
||||||||||||||||||||||||||
А л г о р и т м ы п р и м е н я ю т с я |
не |
только |
в п р о г р а м м и р о в а н и и , |
и |
если |
приглядеться, |
то |
||||||||||||||||||||||
м н о г и е я в л е н и я нашей |
ж и з н и |
могут |
быть |
о п и с а н ы |
алгоритмами . |
Более того, |
составление |
||||||||||||||||||||||
п р а в и л ь н о г о |
алгоритма, |
у ч и т ы в а ю щ е г о |
р а з л и ч н ы е |
условия, |
может |
|
п о м о ч ь |
п р и н я т ь |
|||||||||||||||||||||
наилучшее |
р е ш е н и е |
в с л о ж и в ш е й с я |
ситуации . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
Пример 2.3. Вы |
о т п р а в и л и с ь |
с |
группой туристов в поход. Часть |
маршрута |
проходит |
||||||||||||||||||||||||
через горы . |
На этот |
участок пути |
отведено |
3 |
часа. |
По |
о к о н ч а н и и |
этого |
отрезка вас |
|
ждет |
п е р е п р а в а через |
реку, |
а за ней |
лагерь. П а р о м |
на переправе ходит только |
один раз в день, \ |
|||
если группа не |
успеет |
п р о й т и |
эту часть пути, |
то придется заночевать на |
берегу реки, чегс |
|||
н и к т о из |
ч л е н о в группы |
не |
желает. |
|
|
|||
Во |
время |
пути один |
из |
н о в и ч к о в упал и |
серьёзно п о р а н и л с я . К а к поступить? |
Б л о к - с х е м а |
позволяет наглядно представить |
все |
в о з м о ж н ы е |
в а р и а н т ы |
развития |
||||||||||||
с о б ы т и й и выбрать о п т и м а л ь н о е р е ш е н и е задачи. В |
н а ш е м п р и м е р е |
в п о л н е |
очевидно, |
что |
|||||||||||||
к о м ф о р т н о м у |
ночлегу |
п р о т и в о п о с т а в л е н а |
ж и з н ь |
друга, |
и |
ни один |
з д р а в о м ы с л я щ и й |
||||||||||
человек не оставит его умирать . |
|
|
|
|
|
|
|
|
|
|
|
|
|||||
Между тем |
задачи, |
к о т о р ы е ставит реальность, |
ч а щ е |
всего |
н а м н о г о |
тяжелее, |
чем |
||||||||||
п р и в е д е н н ы е |
п р и м е р ы , |
и |
для |
того |
чтобы |
хо ро шо |
ориентироваться |
в |
сложных, быстро |
||||||||
м е н я ю щ и х с я |
ж и з н е н н ы х |
ситуациях, |
необходимо уметь |
п р а в и л ь н о |
|
составлять |
алгоритмы |
||||||||||
д е й с т в и й . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пример |
2.4. |
Составьте |
блок-схему |
алгоритма, |
в ы ч и с л я ю щ е г о |
к о р н и л и н е й н о г о |
у р а в н е н и я . Л и н е й н о е уравнение имеет вид ах + b = О
Задачи к главе |
2 . А л г о р и т м ы |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
Задача 2.1. |
|
Составьте |
блок-схему |
и, |
|
|
используя |
ф у н к ц и ю |
|
printf(), |
н а п и ш и т е |
|||||||||||||||||
программу, |
|
которая |
выводит |
в |
виде |
текстового |
о п и с а н и я |
алгоритм, |
в ы ч и с л я ю щ и й |
||||||||||||||||||||
стоимость |
п о е з д к и |
на дачу |
и |
обратно, |
если |
|
известно |
|
р а с с т о я н и е |
|
до |
д а ч и ( Ь ) , |
расход |
||||||||||||||||
б е н з и н а на |
100 км |
п у т и ( К ) |
и |
цена одного литра б е н з и н |
(р). |
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
Задача |
2.2. |
В |
первом |
сосуде |
находится |
вода, |
во |
втором |
- |
спирт. |
Составьте |
блок- |
||||||||||||||||
схему |
и, |
используя |
ф у н к ц и ю |
p r i n t f , н а п и ш и т е |
программу, |
|
которая |
выводит |
в виде |
||||||||||||||||||||
текстового |
о п и с а н и я |
алгоритм, |
цель |
которого |
- |
|
п о м е н я т ь |
местами с о д е р ж и м о е |
сосудов. |
|
|||||||||||||||||||
|
Задача |
2.3. |
Заданы |
три |
с т о р о н ы треугольника |
а, |
|
b, |
с. Составьте блок-схему |
и, |
|||||||||||||||||||
используя |
ф у н к ц и ю |
printf, |
н а п и ш и т е |
программу, |
которая |
выводит |
в |
виде |
текстового |
||||||||||||||||||||
о п и с а н и я алгоритм, |
о п р е д е л я ю щ и й , |
является ли |
этот треугольник р а в н о б е д р е н н ы м . |
|
|
||||||||||||||||||||||||
|
Задача |
2.4. |
Д а н о |
число |
а. |
|
Составьте |
|
блок-схему |
|
и, |
используя |
ф у н к ц и ю |
p r i n t f , |
|||||||||||||||
н а п и ш и т е |
программу, |
которая |
|
выводит |
в |
|
виде |
текстового |
о п и с а н и я |
алгоритм, |
|||||||||||||||||||
о п р е д е л я ю щ и й , является |
ли |
это |
число ч е т н ы м . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
Задача |
2.5. |
|
Д а н а последовательность |
|
|
из |
4 |
чисел . |
Составьте блок-схему и, |
|||||||||||||||||||
используя |
ф у н к ц и ю |
printf, |
н а п и ш и т е |
программу, |
которая |
выводит |
в |
виде |
текстового |
||||||||||||||||||||
о п и с а н и я алгоритм, |
н а х о д я щ и й |
н а и м е н ь ш е е из |
них. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
Задача |
2.6. |
|
Составьте |
блок-схему |
и, |
|
используя |
ф у н к ц и ю |
p r i n t f , н а п и ш и т е |
|||||||||||||||||||
программу, |
которая |
выводит |
в |
виде |
текстового |
|
о п и с а н и я |
|
алгоритм, |
в ы ч и с л я ю щ и й |
к о р н и |
||||||||||||||||||
квадратного |
у р а в н е н и я . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
Задача |
2.7. И м е ю т с я |
два |
сосуда |
объемом |
3 |
и |
5 |
литров . |
Составьте |
блок-схему |
и, |
|||||||||||||||||
используя |
ф у н к ц и ю |
p r i n t f , н а п и ш и т е |
программу, |
которая |
выводит |
в |
виде |
текстового |
|||||||||||||||||||||
о п и с а н и я алгоритм, |
цель |
которого |
- |
з а п о л н и т ь |
б о л ь ш и й из них 4 |
л и т р а м и |
воды, используя |
||||||||||||||||||||||
только |
эти |
два сосуда. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Гпава3
Графика
Л ю б а я к о м п ь ю т е р н а я |
п р о г р а м м а - |
это |
последовательность к о м а н д , |
которые |
долже н |
||||||||
в ы п о л н и т ь |
к о м п ь ю т е р , |
иначе говоря |
- |
алгоритм. |
И только п р а в и л ь н ы й |
алгоритм |
|||||||
позволи т |
получить |
т о ч н ы й |
результат |
в любых |
условиях. |
И м е н н о |
поэтом у |
х о р о ш и й |
|||||
п р о г р а м м и с т - это |
человек, |
с п о с о б н ы й |
быстро и |
п р а в и л ь н о |
р е ш и т ь даже самую |
сложную |
|||||||
задачу. П р о г р а м м и с т - |
это специалист, |
у м е ю щ и й |
составлять |
алгоритмы, |
а |
совсем |
не тот, |
||||||
кто знает наизусть все операторы я з ы к а п р о г р а м м и р о в а н и я . |
|
|
|
|
|
||||||||
Составляя программу, |
следует п о м н и т ь |
о том, что |
каждая строчка, |
каждый |
её |
символ |
|||||||
имею т свое место и |
играют |
важную роль. |
|
|
|
|
|
|
|
|
Графика
Д л я |
|
о р г а н и з а ц и и |
|
г р а ф и к и |
|
ф и р м а |
|
B O R L A N D |
выпустила |
ряд |
д о в о л ь н о |
||||||||||||||||||||
у н и в е р с а л ь н ы х |
г р а ф и ч е с к и х |
драйверов |
|
- |
|
программ, |
о б е с п е ч и в а ю щ и х |
в з а и м о д е й с т в и е |
|||||||||||||||||||||||
п р о г р а м м н о й |
и а п п а р а т н о й |
частей |
компьютера . |
Г р а ф и ч е с к и е |
драйвера |
находятся |
в |
||||||||||||||||||||||||
каталоге |
|
B G I |
и имею т |
|
такое |
же |
р а с ш и р е н и е , |
а и м е н н о |
|
*.bgi |
(BGI |
- Borland |
Graphics |
||||||||||||||||||
Interface). |
И м я |
файла |
о б ы ч н о |
отображает, |
для работы |
с к а к и м |
и м е н н о г р а ф и ч е с к и м |
||||||||||||||||||||||||
р е ж и м о м |
он |
п р е д н а з н а ч е н . |
В |
н а ш е м случае |
это |
файл |
egavga.bgi. |
Далее мы увидим, как его |
|||||||||||||||||||||||
п о д к л ю ч и т ь |
в п р о г р а м м е . |
Т а к ж е н е о б х о д и м о |
в |
м е н ю Options -> Linker |
-> Libraries... |
||||||||||||||||||||||||||
п о с т а в и т ь к р е с т и к в с т р о ч к е |
Graphics |
library. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
Видеорежимом |
называется |
|
набо р |
|
параметров, |
п о д д е р ж и в а е м ы й |
|
аппаратурой |
|||||||||||||||||||||||
в и д е о к а р т ы |
(видеоадаптера) . В |
отличие |
от |
текстового режима |
в в и д е о р е ж и м е |
в о з м о ж е н |
|||||||||||||||||||||||||
вывод не только текстовой, но |
и г р а ф и ч е с к о й |
и н ф о р м а ц и и . И з о б р а ж е н и е формируется |
из |
||||||||||||||||||||||||||||
точек, |
так |
н а з ы в а е м ы х |
пикселей |
(pixel). |
С а м ы м |
и з в е с т н ы м |
атрибутом |
в и д е о р е ж и м а |
|||||||||||||||||||||||
я в л я е т с я |
разрешение |
экрана. |
Н а п р и м е р , |
640x480. |
Это |
о з н а ч а е т , |
что |
на |
э к р а н е в ы в о д и т с я |
||||||||||||||||||||||
640 п и к с е л е й |
|
по |
горизонтали |
и |
480 |
|
пикселей |
по |
вертикали . |
Встречаются |
и |
другие |
|||||||||||||||||||
р а з р е ш е н и я : |
320x200, 640x480, |
800x600, |
1024x768 и т. д. |
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
Начало |
|
системы |
к о о р д и н а т |
(т.е. |
точка |
с |
к о о р д и н а т а м и |
(0,0)) |
находится |
в |
левом |
||||||||||||||||||||
верхнем углу экрана . Ось X н а п р а в л е н а вправо, |
как и в |
евклидовой системе координат, |
» а |
||||||||||||||||||||||||||||
вот ось |
Y, в |
отличие от |
п р и в ы ч н о й |
системы |
координат, |
|
- в н и з . |
П о э т о м у |
все |
рисуемые |
|||||||||||||||||||||
объекты |
будут иметь |
п о л о ж и т е л ь н ы е |
к о о р д и н а т ы |
как по X, так и |
по |
Y. |
|
|
|
|
|
|
|||||||||||||||||||
Важно |
отметить, |
что |
т.к. |
|
н у м е р а ц и я |
п и к с е л е й начинается |
с нуля, то самая правая |
||||||||||||||||||||||||
н и ж н я я точка, |
видимая |
на э к р а н е , |
будет иметь |
к о о р д и н а т ы |
|
(639, |
479). |
|
|
|
|
|
|
||||||||||||||||||
|
(0,0) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
639 |
|
X |
|
|
|
|
В и д е о р е ж и м ы т а к ж е р а з л и ч а ю т с я по глубине пикселей |
(pixel d e p t h ) . |
Э т о т |
п а р а м е т р |
||||||||||||||||||||||
определяет |
к о л и ч е с т в о |
р а з л и ч н ы х |
з н а ч е н и й , |
п р и н и м а е м ы х |
о т д е л ь н ы м |
п и к с е л е м , |
и , |
||||||||||||||||||
следовательно, к о л и ч е с т в о о т о б р а ж а е м ы х |
цветов . |
Н а п р и м е р , |
в |
в и д е о р е ж и м е |
с |
глубиной |
|||||||||||||||||||
п и к с е л е й |
8 |
бит |
каждый п и к с е л ь |
может иметь |
один из 256 |
|
р а з л и ч н ы х |
цветов |
(2 |
=256) . |
В |
||||||||||||||
р е ж и м а х |
с |
16 - битной |
глубиной |
п и к с е л е й |
п о д д е р ж и в а е т с я |
о т о б р а ж е н и е |
до |
65536 |
цветов . |
||||||||||||||||
Глубина п и к с е л е й о б ы ч н о |
равна |
4, |
8, |
16, |
24 |
и л и |
32 битам . Мы с вами будем работать в |
||||||||||||||||||
одном из |
самых |
п р о с т ы х |
г р а ф и ч е с к и х |
р е ж и м о в |
- |
640x480 |
с |
глубиной |
цвета |
4 |
бита, т.е. в |
||||||||||||||
н а ш е м р а с п о р я ж е н и и |
будет |
16 |
цветов . |
Т а к о й |
р е ж и м |
называется |
V G A . |
Г р а ф и ч е с к и е |
|||||||||||||||||
р е ж и м ы |
с |
б о л ь ш и м |
р а з р е ш е н и е м |
|
и б о л ь ш и м |
к о л и ч е с т в о м |
цветов |
н а з ы в а ю т |
SVGA |
||||||||||||||||
(SuperVGA) |
р е ж и м а м и . |
Е щ е кое - где |
м о ж н о встретить |
старые |
г р а ф и ч е с к и е р е ж и м ы , |
т а к и е , |
|||||||||||||||||||
к а к E G A , |
C G A , |
в к о т о р ы х и с п о л ь з о в а л о с ь |
от |
2 |
до |
16 |
цветов, |
а р а з р е ш е н и е |
не |
п р е в ы ш а л о |
|||||||||||||||
320x200. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Н и ж е |
п р и в е д е н н а б о р |
строк, |
к о т о р ы е |
д о л ж н ы |
присутствовать в |
л ю б о й |
п р о г р а м м е , |
||||||||||||||||||
н а з н а ч е н и е м к о т о р о й я в л я е т с я работа |
с г р а ф и к о й . |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
/* |
Шаблон |
программы |
для |
работы |
с |
графикой |
*/ |
|
|
|
|
|
|
|
|
|
|
|
# i n c l u d e < c o n i o . h >
# i n c l u d e < g r a p h i c s . h > / v o i d m a i n ( )
{//начало программы
int g d , gm;
gd = DETECT;
initgraph(&gd, &gm, "z:\\bgi");
// Здесь идет последовательность графических функций. g e t c h ( ) ;
c l o s e g r a p h ( ) ;
}//конец программы
Д л я |
работы |
с |
г р а ф и к о й |
н е о б х о д и м о |
п о д к л ю ч и т ь |
библиотеку |
graphics.h |
- в |
ней |
|||
находится |
о п и с а н и е г р а ф и ч е с к и х |
ф у н к ц и й . |
За н е й |
п о д к л ю ч а е т с я б и б л и о т е к а |
conio.h. В |
|||||||
н е й о п и с а н а ф у н к ц и я , |
к о т о р у ю |
|
мы будем использовать |
для о с т а н о в к и |
в ы п о л н е н и я |
кода |
||||||
п р о г р а м м ы |
вплоть |
до |
н а ж а т и я |
л |
ю б о й к л а в и ш и на |
клавиатуре - getch(); |
. И с п о л ь з у я |
эту |
||||
ф у н к ц и ю , |
мы получим |
в о з м о ж н |
о с т ь увидеть |
результат в ы п о л н е н и я п р о г р а м м ы |
до того, |
к а к он будет скрыт о к н о м редактора кода.
int |
gd, gm; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
gd |
= D E T E C T ; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
Далее нам понадобятся две переменные целого типа (подробно |
о типах данных мы |
|
|
||||||||||||||||
п о г о в о р и м |
в с л е д у ю щ е й главе). |
Это |
gd |
|
и gm |
( с о к р а щ е н и е от |
graphics detect |
и |
graphics |
||||||||||
m o d e ) . П е р в а я |
определяет |
д р а й в е р г р а ф и ч е с к о г о р е ж и м а |
( C G A , |
E G A , |
V G A |
и |
т.д.). |
Е с л и |
|||||||||||
п е р е м е н н о й |
п р и с в о и т ь з н а ч е н и е |
DETECT |
(как |
сделано в |
н а ш е м |
случае), то |
о п р е д е л е н и е |
||||||||||||
(детектирование) |
н а и б о л е е |
п о д х о д я щ е г о |
драйвера |
и |
в и д е о р е ж и м а |
п р о и с х о д и т |
|||||||||||||
а в т о м а т и ч е с к и . |
Во |
вторую |
п е р е м е н н у ю |
з а н о с и т с я |
н о м е р |
г р а ф и ч е с к о г о |
р е ж и м а . |
В н а ш е м |
|||||||||||
случае этой |
п е р е м е н н о й мы н и ч е г о не п р и с в а и в а е м , |
но она нам |
все равно нужна. |
|
|
||||||||||||||
i n i t g r a p h ( & g d , &gm, |
" z : \ \ b g i " ) ; |
|
|
|
|
|
|
|
|
|
|
|
|||||||
Ф у н к ц и я |
initgraph() |
переводит |
экран |
в г р а ф и ч е с к и й |
|
р е ж и м . |
Она |
имеет |
три |
||||||||||
аргумента. |
П е р в ы е |
два - это адреса |
п е р е м е н н ы х gd и gm. В |
качестве |
третьего |
аргумента |
|||||||||||||
передается |
строчка, |
с о д е р ж а щ а я |
путь к |
файлу |
egavga.bgi. |
|
|
|
|
|
|
|
|
||||||
Далее |
п и ш у т с я г р а ф и ч е с к и е |
ф у н к ц и и , |
ф о р м и р у ю щ и е |
и з о б р а ж е н и е |
н а |
э к р а н е . |
Например, линии, прямоугольники, окружности и т.д.
c l o s e g r a p h ( ) ;
З а к р ы т и е г р а ф и ч е с к о г о |
р е ж и м а осуществляется |
с п о м о щ ь ю |
ф у н к ц и и closegraph(). |
||||||||
П о с л е |
о к о н ч а н и я |
работы |
в г р а ф и ч е с к о м р е ж и м е н е о б х о д и м о к о р р е к т н о з а в е р ш и т ь работу |
||||||||
с н и м |
и в ы й т и в |
т е к с т о в ы й |
р е ж и м . Если |
мы этого |
не сделаем, |
система |
а в т о м а т и ч е с к и |
||||
сделает |
это за нас, но это |
будет |
а в а р и й н а я |
ситуация? |
и следующее |
о т к р ы т и е |
г р а ф и ч е с к о г о |
||||
р е ж и м а |
может |
п р о й т и неудачно . |
Н и к а к и х входных п а р а м е т р о в эта |
ф у н к ц и я |
не требует. |
||||||
В |
в ы б р а н н о м г р а ф и ч е с к о м р е ж и м е д о с т у п н ы 16 |
цветов . В |
ф у н к ц и я х , |
п р и н и м а ю щ и х |
|||||||
в качестве параметра цвет, |
нужно указать |
н а з в а н и е |
цвета или |
его н о м е р |
(от 0 до 15), |
||||||
п р и в е д е н н ы й |
в |
таблице |
цветов. |
|
|
|
|
|
|
Таблица |
цветов |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
0 |
|
|
|
BLACK |
|
|
|
черный |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
1 |
|
|
|
BLUE |
|
|
|
|
синий |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
GREEN |
|
|
|
зеленый |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
3 |
|
|
|
CYAN |
|
|
|
голубой |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
4 |
|
|
|
RED |
|
|
|
|
красный |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
M A G E N T A |
|
|
фиолетовый |
|
|
|
|
|
|
|
|
||||
|
|
|
|
6 |
|
|
|
B R O W N |
|
|
коричневый |
|
|
|
|
|
|
|
|
||||
|
|
|
|
7 |
|
|
|
LIGHGRAY |
|
|
светло-серый |
|
|
|
|
|
|
|
|
||||
|
|
|
|
8 |
|
|
|
DARKGRAY |
|
|
темно-серый |
|
|
|
|
|
|
|
|
||||
|
|
|
|
9 |
|
|
|
LIGHTBLUE |
|
|
светло-синий |
|
|
|
|
|
|
|
|
||||
|
|
|
|
10 |
|
|
|
LIGHTGREEN |
|
|
светло-зеленый |
|
|
|
|
|
|
|
|
||||
|
|
|
|
11 |
|
|
|
LIGHTCYAN |
|
|
светло-голубой |
|
|
|
|
|
|
|
|
||||
|
|
|
|
12 |
|
|
LIGHTRED |
|
|
светло-красный |
|
|
|
|
|
|
|
|
|||||
|
|
|
|
13 |
|
|
LIGHTMAGENT A |
|
светло-фиолетовый |
|
|
|
|
|
|
|
|||||||
|
|
|
|
14 |
|
|
YELLO W |
|
|
желтый |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
15 |
|
|
|
WHITE |
|
|
|
белый |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
Сред и ф у н к ц и й , |
ф о р м и р у ю щ и х и з о б р а ж е н и е , |
стоит отметить: |
|
|
|
|
|
|
|||||||||||||||
setcolor(color) - |
устанавливает т е к у щ и й цвет. |
И м е н н о |
этим |
цветом |
рисуются |
все |
|||||||||||||||||
ф и г у р ы . П е р е м е н н а я |
color может |
п р и н и м а т ь |
з н а ч е н и е от |
0 до |
15. |
|
|
|
|
|
|
|
|||||||||||
putpixel(x, у, |
color) |
- |
рисует |
точку |
с к о о р д и н а т а м и |
(х,у) |
цветом |
color. |
|
|
|
|
|||||||||||
line(xl, yl, х2, у2) |
- |
рисует |
л и н и ю т е к у щ и м |
цветом от |
т о ч к и |
(xl,yl) |
до |
т о ч к и |
(х2, |
||||||||||||||
У2). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rectangle(xl, |
yl, |
х2, |
у2) |
- |
рисует |
п р я м о у г о л ь н и к |
со |
с т о р о н а м и , п а р а л л е л ь н ы м и |
|||||||||||||||
краям |
э к р а н а , на о с н о в а н и и |
п о л о ж е н и я левого верхнего (xl,yl) |
и |
правого |
н и ж н е г о |
||||||||||||||||||
(х2,у2) |
углов. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
circle(x, у, г) - рисует окружность радиусом г с |
ц е н т р о м |
в точке |
(х,у). |
|
|
|
|
||||||||||||||||
агс(х, у, start, end, г) - рисует дугу |
о к р у ж н о с т и |
радиусом |
г с |
ц е н т р о м в |
точке |
(х,у) от |
|||||||||||||||||
угл а start до |
угла |
end. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
setbkcolor(color) |
- |
|
устанавливает |
цвет |
ф о н а . |
П е р е м е н н а я |
color |
может |
п р и н и м а т ь |
||||||||||||||
з н а ч е н и е от |
0 до |
15. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
setfillstyle(p, |
color) |
- |
устанавливает |
тип |
з а л и в к и . П а р а м е т р |
р задает узор |
заливки и |
||||||||||||||||
может п р и н и м а т ь |
з н а ч е н и я от |
0 до 12. |
Второй параметр |
- color, задает цвет |
з а л и в к и . |
|