Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Решение задач на ЭВМ. Программирование на языке Pascal. Учебное пособие
.pdf
CloseGraрh
Y
L2
End.
Вычерчивание дуги
Arc(X,Y,Ll,L2,R);
Arc - вычерчивание дуги окружности
X,Y - координаты центра окружности
L1 - начальное значение угла для вычерчивания дуги
L2 - конечное значение угла для вычерчивания дуги
R - радиус окружности.
L1 X
Рис. 23
Пример.
Начертить дугу окружности с центром, координаты кото-
рого (50,100), начальное значение угла 30°, конечное значение
угла 320°'радиус окружности 70.
Uses
Graph ;
Var
GrDriver, grMode: integer;
Begin
GrDriver:= Detect;
InitGraph (GrDriver, grMode, ' ') ;
SetColor (4) ;
Arc(50,100,30,320, 70) ;
Readln;
111

CloseGraph
End
Вычерчивание заштрихованного сектора
Sec t o r ( X , Y ,L 1,L 2,XR, YR) ;
где:
Sector - оператор для вычерчивания заштрихованного
эллипса
X,Y - координаты центра эллипса
L1 - начальный угол эллипса
L2 - конечный угол эллипса
XR,YR - горизонтальный и вертикальный радиусы эллипса
Пример
Начертить заштрихованный сектор с центром (340, 240),
начальный угол 90°, конечный угол 180°, горизонтальный радиус 50, вертикальный радиус эллипса 70.
Uses
Graph;
Var
GrDriver, grMode: integer; Begin
GrDriver:= Detect;
InitGraph (GrDriver, grMode, ' ') ;
SetColor (4) ;
Sector (340,240,90,180,50,70) ;
Readln;
CloseGraph
End.
Процедуры графического модуля
Bar (XI, Yl, X2, Y2: integer) -Рисует полосу заданного размера, ис-
пользуя текущий стиль и цвет ClearDevice - Очищает экран
ClearViewPort - Очищает окно
CloseGraph - Закрывает графический режим
112

DrawPoly (NumPoints: word;var PolyPoints) - Рисует много-
угольник из NumPoints вершин с координатами в PolyPoints те-
кущим цветом и типом линии
InitGraph (var Driver, Mode:nteger; Path : string) -
Инициализирует графический режим.Переменные и должны
содержать тип графического драйвера и его режим работы. Допускается указатель Driver =0 для автоматического определения
этих параметров по результатам тестирования аппаратуры. Параметр Path определяет маршрут поиска файла
графического драйвера
LineRel (DX,DY:integer) - Рисует линию от текущего указателя к точке, заданной
приращением координат
LineTo (X,Y:integer) - Рисует линию от текущего указателя к
точке X,Y
OutText (Textstring:string) - Выводит текстовую строку на
экран
OutTextXY (X,Y:integer; TextString:string) - Выводит
текст в заданное место экрана
PieSlice(X,Y:integer; LI,L2,R:word) - Рисует и штрихует сек-
тор окружности радиусом R с центром в X, Y от начального
угла L1 к конечному углу L2
PutPixel(X,Y:integer; N:word) -Выводит точку с цветом N
и координатами X, Y
SetBkColor (N: word) - Устанавливает цвет фона
SetViewPort(XI,Y1,Х2,Y2:integer;
ClipOn: boolean) - Устанавливает текущее окно для
графического вывода.
Контрольные вопросы для самоконтроля при изучении
1. Каким образом формируется изображение в растровой
компьютерной графике?
2. Что такое Pixel?
3. Какие графические режимы существуют?
113

4. Какие константы модуля Graph существуют?
5. Какие существуют типы узоров для закрашивания замкну-
тых поверхностей?
6. Какие существуют константы стиля линий и толщины ли-
ний?
7. Сколько констант цвета определено?
8. Какие операторы необходимо использовать перед началом
написания программы в графическом режиме?
9. Назначение процедуры Init Graph?
10. Какая процедура выгружает драйвер из памяти и восста-
навливает текстовый режим работы адаптера?
11. Какой оператор графики устанавливает основной цвет, ко-
торым осуществляется рисование?
12. Назначение и формат записи оператора Flood Fill?
13. Какой оператор устанавливает стиль заполнения?
14. Назначение и формат записи операторов Line, Circle, Rec-
tangle, Ellipse, Fill Ellipse, Arc, Sector?
15. Какие процедуры графического модуля Вам известны?
114

4.11. Файлы
Данные различной формы хранятся в файлах. Это програм-
мы и документы, изображения и звуки. К файлам относятся прикладные и сервисные программы, данные, полученные с помощью
программ.
Файл – это поименованная область памяти на диске или дру-
гом внешнем запоминающем устройстве.
Файлы DOS разделяют на две категории – текстовые и дво-
ичные. Текстовые файлы предназначены для чтения человеком. В
них хранятся тексты программ, командных файлов DOS и др. Файлы, не являющиеся текстовыми, называются двоичными.
Всё, что является файлом в DOS, является физическим файлом и в Паскале. Ввод данных в программу из файла – это один из
способов ввода данных. Существуют различные способы ввода
данных. В языке программирования Паскаль можно использовать:
оператор присваивания;
процедуры чтения Read и ReadLn;
типизированные и сложные константы;
функцию-генератор псевдослучайных чисел Random;
внешние файлы.
Способ ввода данных в программу из внешнего файла необходим, как правило, в больших профессиональных программах, т.к.
программа с размещёнными внутри неё данными не очень удобна
для реального применения. Данные могут меняться часто, а всякое
изменение данных в теле программы приводит к изменению самой
программы. Внешние файлы данных повышают универсальность и
гибкость программ обработки данных. Операция ввода данных
означает заполнение ячеек памяти данными, полученными из файла, а операция вывода – пересылку данных из рабочей памяти
(ОЗУ) в файл. Эти операции осуществляются через область памяти,
называемую буфером.
Текстовые файлы в языке Паскаль – это файлы последовательного доступа. Они состоят из элементов различной длины, к
которым можно обращаться только последовательно – от начала к
концу. Для многих случаев такой порядок выборки данных из файла естественен, но иногда вызывает большие потери времени. Двоичные файлы в языке Паскаль – это файлы прямого или произ-
115

вольного доступа. Они состоят из однотипных элементов, как и
Процедуры и функ-
ции
Назначение
Assign (var f; String)
Связывает файловую переменную f с
именем физического файла, заданным
в строке
Reset (var f
[: File; RecSize: Word])
Открывает существующий файл с логическим именем f для чтения
Rewrite(var f : File;
[;RecSize: Word] )
Создаёт и открывает новый файл с логическим именем f для записи
массивы. Найти любой элемент в таком файле можно по его порядковому номеру. В общем случае система обработки данных с файлами прямого доступа более эффективна, чем система с последовательными файлами, но требует большего времени на разработку.
Паскаль поддерживает три файловых типа:
текстовые файлы (типа Text);
типизированные файлы (типа Text of…);
бестиповые файлы (типа File).
Любая программа, использующая существующий файл для
ввода или создающая новый файл при выводе, неизбежно
содержит шаги:
1). открытие файла (в соответствующем режиме);
2). обработка файла (чтение или запись);
3). закрытие файла.
Имеется ряд общих стандартных процедур для файлов всех
типов, а также дополнительные процедуры и расширения процедур
для работы с каждым из типов файлов.
В таблице ниже приведены общие процедуры для работы с
файлами всех типов, в которых переменная f может иметь любой
файловый тип.
Таблица 4.18
116

Close (var f)
Закрывает открытый канал ввода-вывода
с логическим именем f
Eof (var f): Boolean
Возвращает значение true, если достиг-
нут конец файла f или false, если файл f
пуст
Erase (var f)
Удаляет закрытый физический файл,
связанный с файловой переменной f
Rename (var f;
NewName: String)
Переименовывает закрытый физический
файл, связанный с файловой переменной
f
Текстовые файлы
Текстовый файл рассматривается как последовательность
символов, разбитая на строки. В конце каждой строки имеются два
специальных символа #13 и #10. Они обозначают перевод строки
(CR) и возврат каретки (LF). Конец файла обозначается явно сим-
волом #26 (Ctrl+Z).
Ввод и вывод данных осуществляется с помощью стандартных процедур Read и Write, специальные расширения которых позволяют работать со значениями несимвольного типа. Последовательность символов автоматически преобразуется к значению нового типа переменной, которая используется в файловых операциях. Например, вызов Read (f, n), где n – переменная типа Byte, автоматически преобразует, считанную из файла f, последовательность цифр в число, которое и будет присвоено n. Если в этом случае кроме цифр встретятся и другие символы, то произойдет ошибка выполнения программы.
Для организации текстового файла объявляется файловая переменная типа Text: Var имя: Text. Она служит в дальнейшем
представителем файла в программе. Затем файловая переменная
связывается с физическим файлом процедурой Assign, после чего
открывается файл. Строковое выражение в процедуре Assign
должно содержать полное имя файла, удовлетворяющее всем тре-
117

бованиям операционной системы. Таким образом, конкретному
файлу на внешнем устройстве ставится в соответствие логическая
файловая переменная, к которой впоследствии обращаются все
другие файловые процедуры. Например, простейший вывод в текстовый файл out.dat на диске d можно осуществить следующим
образом:
Var f: Text;
Begin
Assign (f, `d:\ out.dat`); {связь с физическим файлом}
Rewrite (f); {создание и открытие файла для записи}
Writeln (f, ` Вывод в файл `); {запись строки в файл}
Close (f) {закрытие файла }
End.
Кроме дисплея и дисков текст можно выводить в коммуникационный порт, на принтер, на пустое устройство. Эти устройства сложны и разнообразны, поэтому DOS моделирует их с помощью текстовых файлов, а программист работает с логическими моделями
устройств. Допускаются следующие имена: CON – консоль (ввод
из CON – чтение с клавиатуры, вывод в CON- это вывод на экран);
LPT1, LPT2, LPT3 – параллельные порты (через эти имена файлов
происходит вывод на принтеры или другие устройства с интерфейсом типа Centronix); PRN – принтер, синоним имени LPT1 (имя
обращения к принтеру, включенному в порт LPT1); COM1, COM2
– последовательные порты; AUX - синоним имени COM1; NUL –
пустое устройство (игнорирует запись и генерирует сигнал «конец
файла» при чтении).
В системной библиотеке Паскаля определены две текст-файловые
переменные: Input и Output. Они связаны с устройством CON автоматически и являются стандартными файлами ввода и вывода.
Файловая переменная Input связана с клавиатурой, файловая переменная Output – с экраном дисплея. Эти файлы считаются заранее
открытыми, а соответствующие имена можно использовать в операциях ввода- вывода. Например, Writeln (Output, ` Вывод на экран`
) это то же, что и в привычной сокращенной форме: Writeln ( ` Вывод на экран` ). Аналогично при выполнении оператора Read (Input,
n) система переходит в состояние ожидания ввода значения переменной n с клавиатуры.
Стандартные файлы ввода-вывода могут быть переназначе-
ны, т.е. связаны с другими физическими устройствами, например, с
118

помощью процедуры Assign. В примерах ниже показан вывод на
принтер с использованием имени стандартного файла вывода Out-
put и вывод на экран с использованием файловой переменной f ти-
па Text.
1) Begin { LPT1}
Assign (Output, ` PRN` );
Rewrite (Output);
Writeln (Output, ` *принтер* `);
Close (Output)
End.
2) Var f: Text;
Begin
Assign (f, ` `);
Rewrite (f);
Writeln (f, ` *экран* `);
Close (f)
End.
Кроме общих для всех типов файлов процедур и функций,
определены еще несколько, работающих только с текстовыми файлами. Существуют также процедуры и функции, которые в сложных программах можно использовать для обработки ошибок вводавывода (проверки наличия файла данных, проверки формата данных, выбора режима обработки файла, создания каталога и др.).
Типизированные файлы
Типизированный (компонентный) файл рассматривается как
последовательность записей (компонент) одного типа. Задание
файловой переменной для него имеет вид: Var имя: File of базовый
тип.
В отличие от файлов типа Text типизированный файл имеет
строгую внутреннюю структуру. При записи в него записывается
машинное представление компоненты, будь то число, символ,
строка, запись, массив или другая структура данных (кроме файлов). Файл заполняется последовательностью от начала. Его структура линейна: запись следует за записью (в случае типизированных
119

файлов запись в файле – это компонента, а в случае бестиповых –
Процедуры и функции
Назначение
FileSize (var f) : LongInt
Возвращает реальное число записей в открытом файле f
FilePos (var f) : LongInt
Возвращает номер записи, на
которую установлен текущий
указатель в файле f
Seek (var f; n) : LongInt
Назначает текущую позицию в
файле f
Truncate (var f)
Удаляет все записи в файле f от
позиции текущего указателя до
конца файла
блок) и компоненты ничем не отделяются друг от друга. Число
компонент файла может изменяться, т.е. заранее не фиксируется
как число элементов массива. Добавляются записи лишь в конец, а
замещаются – любые существующие в файле записи. Такого понятия как конец строки в типизированном файле не существует, поэтому ввод и вывод данных осуществляется только процедурами
Read и Write. Для типизированного файла процедуры Reset и Re-
write устанавливают режим чтение и запись, т.е. допускается чере-
дование этих операций независимо от выбора процедуры открытия.
Так как компоненты одного типа, а значит и одного размера,
то становится возможным произвольный или прямой доступ к ним
по номерам компонент. Прямой доступ означает возможность позиционировать внутри файла текущий указатель на заданную запись. Понятие текущий указатель связывается с каждым файлом.
Это неявно описанная переменная, которая указывает на условную
границу между элементами файла. Нумеруются позиции текущего
указателя целыми числами, начиная с нуля. Реальный номер записи
всегда на единицу больше номера позиции. После каждого акта
чтения или записи указатель смещается на следующую позицию.
Следовательно, в операции будет участвовать тот элемент, на который переместится указатель.
В таблице 4.19 приведены функции и процедуры, реализу-
ющие прямой доступ в типизированных файлах.
Таблица 4.19
120
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
