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

Решение задач на ЭВМ. Программирование на языке Pascal. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]