Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

osnovyiprogrammirovaniyanac

.pdf
Скачиваний:
24
Добавлен:
12.03.2015
Размер:
1.46 Mб
Скачать

Гпава 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, задает цвет

з а л и в к и .

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]