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

Костюк - Основы программирования

.pdf
Скачиваний:
134
Добавлен:
30.05.2015
Размер:
1.3 Mб
Скачать

171

Функция

Тип

Тип

Пояснение

 

аргумента

результата

 

 

 

 

 

paramcount

Отсутствует

word

Выдает количество параметров

в вызове программы

 

 

 

 

 

 

 

paramstr

( )

string

Выдает параметр номер n в виде

 

word n

 

строки символов

 

 

 

В табл. А.11 приведены функции, выполняющие проверку состояния файла (ко­ торый должен быть открытым). Все они имеют один аргумент, который должен быть файловой переменной.

 

 

Таблица А.11

 

 

 

Функция

Тип

Пояснение

результата

 

 

eof

boolean

Выдает true, если достигнут конец файла

eoln

boolean

Выдает true, если достигнут конец строчки в файле)*

seekeof

boolean

Ищет конец файла и выдает true, если найден)*

seekeoln

boolean

Ищет конец строчки в файле и выдает true, если

найден)*

ioresult

integer

Выдает 0, если предыдущее действие было успешно

filepos

longint

Выдает текущую позицию в файле)**

filesize

longint

Выдает длину файла)**

Примечание: )* – файл должен иметь тип text;

)** – файл не должен иметь тип text.

В табл. А.12 приведены процедуры открытия и закрытия файлов.

Таблица А.12

Процедура

 

Типы аргументов

Пояснение

assign

1)

файловая переменная (f);

Связывает файловую переменную f

 

2)

строка символов (s)

с файлом, имеющим внешнее имя s

reset

1)

файловая переменная (f);

Открывает файл f для чтения, n

 

2) word (n) – только для не­

длина записи в нетипизированном

 

типизированных файлов

файле

rewrite

1)

файловая переменная (f);

Открывает файл f для записи, n

 

2) word (n) – только для

длина записи в нетипизированном

append

нетипизированных файлов

файле

1)

файловая переменная (f)

Открывает файл f для дозаписи)*

close

1)

файловая переменная (f)

Закрывает файл f

Примечание: )* – файл должен иметь тип text.

В табл. А.13 приведены процедуры ввода и вывода для файлов.

172

Таблица А.13

Процедура

Типы аргументов

Пояснение

read

1) файловая переменная

Чтение данных из файла f (или из

 

(f), отсутствует для

файла стандартного ввода) в пере­

 

файла стандартного вво­

менные, указанные в списке аргу­

 

да;

ментов)***

 

2) переменная любого

 

 

типа; …

 

readln

То же, что и в read, но

Делает то же, что read, дополни­

 

для файла стандартного

тельно пропускает в файле данные

 

ввода все аргументы мо­

до конца текущей строчки)*

 

гут отсутствовать

 

 

Таблица А.13 (продолжение)

 

 

 

Процедура

Типы аргументов

Пояснение

write

1) файловая переменная

Запись данных в файл f (или в

 

(f) , отсутствует для

файл стандартного вывода) значе­

 

файла стандартного выво­

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

 

да;

слового значения может (через «:»)

 

2) значение любого типа,

стоять одно или два числа (первое –

 

может дополняться фор­

общее количество символов, вто­

 

матом вывода;

рое – после десятичной точки) ***

 

 

writeln

То же, что и в write, но

Делает то же, что write, дополни­

 

для файла стандартного

тельно записывает в файл символы

 

вывода все аргументы мо­

конца текущей строчки)*

truncate

гут отсутствовать

Обрезает в файле f данные от теку­

1) файловая переменная

 

(f)

щей позиции до конца файла)**

seek

1) файловая переменная

Установка в файле f текущей пози­

 

(f);

ции, равной n)**

 

2) longint (n)

 

blockread

1) файловая переменная

Чтение из файла f в переменную b

 

(f);

данных длиной n*z байт, где z

 

2) переменная (b);

длина записи, установленная при

 

3) word (n);

открытии файла. Если аргумент r

 

4) word (r), может от­

присутствует, то он равен числу фак­

 

сутствовать.

тически прочитанных записей)** **

blockwrite

Такие же, что и в

Запись в файл f из переменной b

 

blockread

данных длиной n*z байт, где z

 

 

длина записи, установленная при

 

 

открытии файла. Если аргумент r

173

присутствует, то он равен числу фак­ тически записанных записей)** **

Примечание: )* – файл должен иметь тип text;

)** – файл не должен иметь тип text;

)*** – файл должен быть типизированным или иметь тип text; )** ** – файл должен быть нетипизированным.

В табл. А.14 приведены процедуры для работы с файловой системой.

 

 

Таблица А.14

 

 

 

Процедура

Типы аргументов

Пояснение

chdir

1) string (s)

Каталог, записанный в строке s, становится

erase

1) string (s)

текущим

Удаляется файл, имя которого (или путь и

 

 

файл) записано в строке s

getdir

1) byte (d);

Чтение имени каталога, текущего для диска d

 

2) string (s)

(0 – текущий диск, 1 – А:, 2 – В: и т.д.) и его

 

 

запись в строку s

mkdir

1) string (s)

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

rename

1) файловая пере­

Переименование файла f новым именем, за­

 

менная (f);

писанным в строке s

 

2) string (s)

 

rmdir

1) string (s)

Удаляется каталог, записанный в строке s

А.3 Графическая библиотека

Графическая библиотека транслятора Turbo Pascal содержится в модуле graph.tpu, который подключается к программе директивой

uses graph;

Таблица А.15

Номер

Код

Название

Обозначение

цвета

цвета

константы

 

0

0000

черный

black

174

 

1

 

0001

 

синий

 

blue

 

 

 

 

 

2

 

0010

 

зеленый

 

green

 

3

 

0011

 

бирюзовый

 

cyan

 

4

 

0100

 

красный

 

red

 

5

 

0101

 

сиреневый

 

magenta

 

6

 

0110

 

коричневый

 

brown

 

7

 

0111

 

светло-серый

 

lightgray

 

8

 

1000

 

темно-серый

 

darkgray

 

9

 

1001

 

ярко-синий

 

lightblue

 

10

 

1010

 

ярко-зеленый

 

lightgreen

 

11

 

1011

 

голубой

 

lightcyan

 

12

 

1100

 

ярко-красный

 

lightred

 

13

 

1101

 

ярко-сиреневый

 

lightmagenta

 

14

 

1110

 

желтый

 

yellow

 

15

 

1111

 

белый

 

white

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

Процедуры управления графическим выводом.

detectgraph(var d,m:integer) – определяет тип графического экрана (присваивается переменной d) и наивысший графический режим его работы (присва­ ивается переменной m).

initgraph(var d,m:integer; s:string) – включает графический ре­ жим. Переменная d задает тип графического экрана, переменная m – графический

режим его работы, в строке символов s указывается путь на диске к разделу, где расположен графический драйвер (модуль egavga.bgi).

Для включения экрана VGA переменной d следует задать значение константы

vga. Для включения конкретного режима работы экрана переменной m следует за­ дать значение константы vgahi, vgamed или vgalo. В режиме vgahi имеется

одна видеостраница, разрешение экрана – 640×480, в режиме vgamed – 2 видео­ страницы, разрешение экрана – 640×350, а в режиме vgalo – 4 видеостраницы, разрешение экрана – 640×200. Нумерация видеостраниц – с нуля. В табл. А.15 при­ ведены все 16 цветов режима VGA.

closegraph – выключает графический режим.

setactivepage(p:word) – делает активной видеостраницу номер p. На этой странице формируется изображение.

175

setvisualpage(p:word) – делает видимой видеостраницу номер p. Изоб­ ражение, сформированное на этой странице, отображается на мониторе.

Процедуры управления цветом, рисованием линий и закрашиванием обла­ стей.

setbkcolor(c:word) – устанавливает цвет фона номер c. setcolor(c:word) – устанавливает цвет номер c для последующего рисо­

вания.

setlinestyle(l,p,t:word) – устанавливает тип линии l, шаблон p и толщину t для последующего рисования.

Константы для типа линии: solidln = 0 – сплошная линия;

dottedln = 1 – пунктирная линия; centerln = 2 – штрихпунктирная линия; dashedln = 3 – штриховая линия; userbitln = 4 – линия задается шаблоном p.

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

Толщина линии задается константами: normwidth = 1 – тонкая линия;

thickwidth = 3 – толстая линия.

setfillstyle(p,c:word) – устанавливает орнамент номер p и цвет c для

закрашивания фигур. Константы для орнамента p следующие: emptyfill = 0 – заполнение цветом фона; solidfill = 1 – заполнение цветом c;

linefill = 2 – заполнение горизонтальными линиями; ltslashfill = 3 – заполнение наклонными вправо линиями; slashfill = 4 – заполнение наклонными вправо толстыми линиями; bkslashfill = 5 – заполнение наклонными влево толстыми линиями; ltbkslashfill = 6 – заполнение наклонными влево линиями; hatchfill = 7 – заполнение клеткой;

xhatchfill = 8 – заполнение косой клеткой; interleavefill = 9 – заполнение частой сеткой; widedotfill = 10 – заполнение редкими точками; closedotfill = 11 – заполнение частыми точками.

setaspectratio(a,b:word) – задает относительный масштаб по оси Y в пропорции a:b. Влияет на процедуры изображения дуг и окружностей.

Процедуры рисования и закрашивания.

176

putpixel(x,y:integer; c:word) – закрашивает пиксель с координатами x,y цветом c.

line(x1,y1,x2,y2:integer) – проводит линию текущего цвета между точками с координатами x1,y1 и x2,y2.

rectangle(x1,y1,x2,y2:integer) – проводит линию текущего цвета по контуру прямоугольника. Точки с координатами x1,y1 левый верхний угол, x2,y2 – правый нижний угол прямоугольника.

drawpoly(n:word; var P) – проводит замкнутую ломаную линию текуще­ го цвета из n звеньев. Координаты точек задаются (n+1)–й парой целых чисел, по­ мещенных в массиве P, причем координаты первой и последней точек должны сов­

падать.

circle(x,y:integer; r:word) – проводит окружность текущего цвета с

центром в координатах x,y радиусом r (в пикселях). Использует относительный масштаб, задаваемый процедурой setaspectratio.

arc(x,y:integer; b,e,r:word) – проводит дугу окружности текущего цвета с центром в координатах x,y радиусом r (в пикселях). Аргумент b задает

начальный, а e – конечный угол дуги в градусах относительно оси OX. Учитывает­ ся относительный масштаб, задаваемый процедурой setaspectratio.

cleardevice – очищает графический экран и закрашивает его цветом фона. bar(x1,y1,x2,y2:integer) – закрашивает прямоугольник текущим орна­

ментом и цветом заполнения. Точки с координатами x1,y1 – левый верхний угол, x2,y2 – правый нижний угол прямоугольника.

fillpoly(n:word; var P) – многоугольник из n звеньев закрашивает те­

кущим орнаментом и цветом заполнения. Координаты точек границы многоугольни­ ка задаются (n+1)–й парой целых чисел, помещенных в массиве P, причем коорди­

наты первой и последней точек должны совпадать.

pieslice(x,y:integer; b,e,r:word) – сектор круга с центром в коор­ динатах x,y радиусом r (в пикселях) закрашивает текущим орнаментом и цветом заполнения. Аргумент b задает начальный, а e – конечный угол сектора в граду­

сах относительно оси OX. Учитывается относительный масштаб, задаваемый проце­ дурой setaspectratio.

floodfill(x,y:integer; c:word) – область, ограниченную непрерыв­ ной линией с цветом c, закрашивает текущим орнаментом и цветом заполнения. Координаты x,y задают произвольную точку внутри области.

Процедуры рисования текста.

177

settextstyle(f,d,s word) – устанавливает тип шрифта номер p (значе­ ние от 0 до 4), направление текста d (0 – горизонтальное, 1 – вертикальное), размер шрифта s (значение от 1 и более).

outtextxy(x,y: integer; s:string) – выводит на экран текст s, на­ чиная с координат x,y.

Процедуры обмена данных с видеопамятью. getimage(x1,y1,x2,y2:integer; var M) – прямоугольный участок

экрана, заданный левым верхним углом x1,y1 и правым нижним углом x2,y2

переписывает в массив M. Размер памяти для изображения подсчитывается функцией imagesize.

putimage(x1,y1,x2,y2:integer; var M) – ранее запомненный в масси­ ве M прямоугольный участок экрана снова отображается на экране. x1,y1 – левый верхний угол, x2,y2 – правый нижний угол изображения.

Графические функции.

graphresult:integer – выдает код ошибки при выполнении предшествую­ щей графической процедуре. Если значение равно константе grok, то ошибки нет.

getmaxx:integer – выдает максимальную координату X в установленном

графическом режиме.

getmaxy:integer – выдает максимальную координату Y в установленном

графическом режиме.

textheight(s:string):word – выдает высоту строки s в пикселях. textwidth(s:string):word – выдает длину строки s в пикселях.

getpixel(x,y:integer):word – выдает цвет пикселя с координатами x,y.

imagesize(x1,y1,x2,y2:integer):word – вычисляет размер массива в байтах, требуемый для запоминания в нем прямоугольного участка экрана. x1,y1 – левый верхний угол, x2,y2 – правый нижний угол участка экрана.

Приложение Б Краткие сведения о языке Си

Б.1 Синтаксис языка Си, стандартные типы данных и операции

В приложении приведено краткое описание языка Си, точнее, варианта языка, ре­ ализованного в системе Turbo C® фирмы Borland. Приведено описание не всего язы­ ка Си, а такого его подмножества, которого достаточно для записи рассматриваемых в книге алгоритмов. В настоящее время более широко используется язык С++, кото­ рый, будучи наследником Си, в отличие от него является объектно-ориентирован­ ным. Однако первоначальное знакомство все-таки лучше начинать с Си, как более простого и доступного в изучении языка.

Синтаксис (конструкции языка) представлен частично в виде набора расширен­ ных порождающих правил Бэкуса, частично – в виде словесных описаний. Кроме того, приведены пояснения к порождающим правилам, объясняющие их смысл (се­ мантику). Каждое из порождающих правил определяет некоторое понятие языка Си. В правиле записывается, из каких понятий или символов языка Си строится опре­ деляемое понятие.

Расширенные порождающие правила записываются в следующем виде:

1)каждое правило записывается с новой строки текста;

2)правило начинается с определяемого понятия, после него пишутся симво­ лы ::= (два двоеточия и равно, их надо читать «это есть»), далее идет собственно определение понятия;

3)определение понятия состоит из последовательности понятий (слов, взятых в угловые скобки < и >), слов Си (например, while, if и др.), символов Си (напри­

мер, +, /, * и др.), символов | (большая вертикальная черта, надо читать как «или»),

символов { } (большие фигурные скобки), символов [ ] (большие квадратные скобки);

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

5)если часть определения взята в скобки { }, то она рассматривается, как единое

целое;

6)если часть определения взята в скобки [ ], то в конкретном варианте определя­ емого понятия она может отсутствовать.

179

Замечание. Слова и символы Си в правилах записываются шрифтом, который отличается от шрифта других слов и символов в правилах.

В любом месте текста программы на языке Си, где можно использовать пробелы, можно вставлять комментарии. Комментарий записывается как последовательность символов, взятая в парные символы /* и */. Символы в комментарии могут быть любыми, кроме пары символов */. Комментарии служат для пояснений, на выпол­ нение программы они не влияют.

Синтаксические порождающие правила.

<программа> ::= {<описание типа> | <описание функции> | <описание объектов>} [<программа>].

<имя> ::= <имя> {<буква> | _ | <цифра>} | {<буква> | _ }

<описание типа> ::= {typedef <тип> <имя типа> ; | struct <имя структуры> {<поля структуры>};}

<поля структуры> ::= <описание объектов> [<поля структуры>]

<описание функции> ::= <тип> <имя функции> ({<список аргументов>[,...]| void}) {<блок> | ; }

<список аргументов> ::= [<список аргументов>,] <тип> <объект>

<описание объектов> ::= <тип> <список объектов> ; | <указатель на функцию>

<список объектов> ::= [<список объектов>,] <объект> [ = <значение>]

<объект> ::= { * } <объект> { [{<значение>|<пусто>}] }| <имя> |(<объект>)

<указатель на функцию> ::= <тип> (* <объект>)

({<список типов аргументов>[,...]| void})[ = <значение>];

<список типов аргументов> ::= [<список типов аргументов>,] <тип>

<блок> ::= {<список операторов>}

<список операторов> ::= <оператор> [<список операторов>]

180

<оператор> ::= <описание объектов> | <блок> | <выражение>; | if (<выражение>)<оператор> [ else <оператор>] |

switch (<выражение>)<блок> | while (<выражение>)<оператор> | for (<выражение>;<выражение>;<выражение>)<оператор> |

do <блок> while (<выражение>);| return [<выражение>] ;| break;

Пояснения к порождающим правилам.

Понятие <программа> является главным среди всех понятий языка. Программа на языке Си, как текстовый файл, является последовательностью описаний типа, опи­ саний объектов и описаний функций. При этом исполняемая программа (или испол­ няемый модуль) генерируется при трансляции одной или нескольких программ на языке Си. Одно из описаний в этих программах должно задавать функцию с именем main, именно эта функция запускается при выполнении исполняемого модуля.

Понятие <буква> – это одна из букв латинского алфавита (от A до Z), причем

строчные и заглавные буквы различаются. Понятие < цифра > – это одна из деся­ тичных цифр (от 0 до 9). Имя записывается в виде последовательности букв, символа

подчеркивания и цифр, оно не может начинаться с цифры. Такие понятия, как <имя типа>, <имя структуры>, <имя функции> – являются именами. Именами также яв­ ляются переменные и константы, задаваемые в <описании объектов>.

Понятие <тип> записывается как <имя>, если это имя типа, или как struct <имя структуры>, или как последовательность стандартных описателей.

Имеются следующие стандартные описатели:

1) const, означает, что описываемый объект является константой, при отсут­

ствии этого описателя объект считается переменной;

2) описатель класса памяти auto, extern, register, static, по умолча­ нию считается auto;

3) описатели базовых типов char, int, long, unsigned, float, double,

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

Описатели auto и register означают, что память для объекта выделяется

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

означает, что память для объекта выделяется статически, в момент начала выполне­

ния программы, и сохраняется до конца исполнения. Описатель

extern означает,

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