Костюк - Основы программирования
.pdf171
Функция |
Тип |
Тип |
Пояснение |
|
|
аргумента |
результата |
|
|
|
|
|
|
|
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.