Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Взаимодействие программ с файлами



Существуют 3 вида взаимодействия программ с внешними файлами: 1) чтение, 2) запись и 3) чтение и запись.

Для взаимодействия программы с файлами в модуле System Турбо Паскаля имеются различные процедуры и функции.

Любые файлы, а также логические устройства становятся доступны программе только после выполнения особой программы открытия файла или логического устройства. Суть этой процедуры заключается в связывании ранее объявленной файловой переменной с именем существующего или вновь создаваемого файла, а также в указании направления обмена информацией: чтение из файла или запись в него.

Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре assign:

assign (< ф.п.>, < ′ имя файла или логического устройства′ > );

Здесь < ф.п.> − файловая переменная, т.е. правильный идентификатор, объявленный в разделе описаний как переменная файлового типа, < ′ имя файла или логического устройства′ > − текстовое выражение, содержащее имя файла или логического устройства.

Перед именем можно указывать " путь к файлу": имя диска и/или имя текущего каталога и имена каталогов вышестоящих уровней.

Инициализация файла

Инициализация файла означает указание направления передачи данных для этого файла.

Для чтения файл инициализируют с помощью стандартной процедуры reset, которая открывает существующий файл для чтения или изменения:

reset (< файловая переменная> );

Если с помощью этой процедуры открыт типизированный файл для чтения информации, то к этому файлу можно обратиться с процедурой write для записи информации в файл.

Стандартная процедура

rewrite (< файловая переменная> );

инициирует запись информации в файл или в логическое устройство, указанное как < файловая переменная>.

Процедурой rewrite нельзя инициировать запись информации в ранее существовавший дисковый файл, т.к. при выполнении этой процедуры старый файл уничтожается и никаких сообщений об этом в программу не поступает. Новый файл подготавливается к приёму информации и его указатель принимает значение 0.

Стандартная процедура

append (< файловая переменная> );

инициирует запись информации в ранее существовавший текстовый файл для его расширения. При этом указатель файла устанавливается в его конец.

Процедура append применима только к текстовым файлам. Процедурой append нельзя инициировать запись в типизированный или нетипизированный файл.

Если текстовый файл был открыт с помощью процедуры reset или rewrite, то применение к файлу процедуры append приведёт к закрытию этого файла и немедленного открытия вновь, но уже для добавления в него записей.

Процедуры и функции для работы с файлами

Ниже приведены некоторые процедуры и функции модуля System, которые применимы для работы с файлами.

Процедура close (< файловая переменная> ) закрывает файл, сохраняя установленную ранее процедурой assign связь файловой переменной с именем файла.

Функции процедуры close выполняются автоматически по отношению ко всем открытым файлам при нормальном завершении программы. Так как связь файла с файловой переменной сохраняется, то файл можно повторно открыть без дополнительного использования процедуры assign.

Процедура rename (< ф.п.>, < новое имя> ) переименовывает файл. Перед выполнением процедуры rename необходимо закрыть файл, который был открыт процедурами reset, rewrite или append.

Процедура erase (< файловая переменная> ) уничтожает (стирает) файл, заданный как < файловая переменная>. Перед выполнением процедуры rename необходимо закрыть файл, который был открыт процедурами reset, rewrite или append.

Процедура BlockRead ( var F: file; var buf; count: word [; var result: word ]) считывает в переменную bufcount записей из файла F. Необязательный параметр result содержит истинное количество считанных записей.

Процедура BlockWrite ( var F: file; var buf; count: word [; var result: word ]) передаёт count записей из переменной buf в файл F. Необязательный параметр result содержит истинное количество считанных записей.

 

Порядок выполнения работы

1. Разработайте алгоритм решения задачи в соответствии со своим вариантом.

2. Откройте текстовый редактор TurboPascal.

3. Напишите программу решения задачи по разработанному ранее алгоритму. В программе предусмотреть вывод справочной информации (информация об авторе, наименование и назначение программы), возможность многократных вычислений.

4. Отладьте программу.

5. Сохраните результаты работы программы.

Содержание отчета

Отчет оформляется индивидуально и содержит:

- титульный лист;

- наименование, цель и содержание работы;

- алгоритм и текст программы

- изображения экранов монитора с результатами работы программы;

- выводы по результатам работы.

 

Варианты заданий

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

1. Создать файл Xкомпонентами которого являются элемента массива M. Переписать из файла X в файл Y все компоненты, которые стоят на четных местах. Прочитать файл Y.

2. Дан файл, в котором через пробел записаны натуральные числа. Вывести на экран суммы цифр каждого числа.

3. Дан файл с учебным расписанием. Написать программу, которая определяет количество лекционных, практических и лабораторных занятий. Вывести их количество на экран.

4. Дана текстовая строка, состоящая из заглавных латинских букв. Требуется найти подстроку из трёх букв, которая встречается в данной строке чаще всего. Например, в строке DEFDEFABCABCZABCDEFDEF чаще всего (4 раза) встречается подстрока DEF. Входной файл содержит текстовую строку. Выходной файл должен содержать единственное число — количество вхождений самой часто встречающейся подстроки из трёх букв. Длина исходной строки от 3 до 1000000 символов.

5. Посчитать сколько содержится в файле символов, строк и слов. Разделителями слов считать пробелы и перенос строки.

6. Прочитать данные из текстового файла и записать их в нетипизированный файл.

7. Найти в строке все заданные последовательности символов и заменить их другой последовательностью.

8. Преобразовать текст в морзянку (текст из одного файла, морзянка – в другой файл)

9. Вывод и сохранение в текстовый файл всех слов текстовой строки номера, которых являются нечетными.

10. Определение является ли слово перевёртышем, например «казак». Статистические данные работы программы (количество введенных слов, абсолютное и относительное значение слов перевёртышей) сохранить в текстовый файл.

11. Нахождение максимального и минимального элемента матрицы. Исходная матрица читается из файла, результаты вычислений сохраняются в этот же файл.

12. Подсчитать статистику в файле и записать результат в другой файл. (статистика – сколько каждого символа присутствует в файле, например АБВАБ –> 2 А, 2 Б, 1 В)

13. Нахождение максимального и минимального элемента произвольной строки матрицы. Исходная матрица читается из файла, результаты вычислений сохраняются в этот же файл.

14. Дан файл, содержащий n чисел (a0, a1, a2, …, an). Сформировать файл, в котором будут находиться эти же числа, а между ними будет вставлено m чисел, по линейной зависимости. Например, если в исходном файле числа 1 4 13 и надо вставить 2 числа, то должен получиться файл, содержащий 1 2 3 4 7 10 13.

15. Нахождение максимального и минимального элемента произвольного столбца матрицы. Исходная матрица читается из файла, результаты вычислений сохраняются в этот же файл.

16. Вывести на экран текстовый файл, отцентровав его содержимое. Если строка не влезает – разбить её на несколько (как это делает Word)

17. Вывести на экран текстовый файл, заменив все выражения< li> на порядковый номер. Например если исходный файл содержит “< li> привет < li> мир < li> ”, то в результате должно получиться“1 привет 2 мир 3”

18. Нахождение максимального и минимального элемента матрицы находящегося на главной диагонали матрица. Размерность матрицы 6х6. Матрица задается пользователем, результаты вычислений, в том числе и исходная матрица сохраняются в файл.

19. Вывести на экран текстовый файл, выравнивая по левой и правой границе (аля выравнивание по ширине Word). Если строка не влезает – разбить её на несколько (как это делает Word). Каждый абзац имеет отступ первой строки nпробелов.

20. Сформировать htmlфайл по текстовому, добавив в начало теги < html> < body>, в конец тег < /body> и каждое предложение обрамить в теги< p> и < /p> соответственно. Различные разукрашивания(случайные цвета, например)средствами htmlприветствуются.

21. Поэлементное умножение двух произвольных срок матрицы с записью результатов умножения в строку указанную пользователем. Матрица задается пользователем, результаты вычислений, в том числе и исходная матрица сохраняются в файл.

22. Поэлементное умножение двух произвольных столбцов матрицы с записью результатов умножения в столбец указанный пользователем. Матрица задается пользователем, результаты вычислений, в том числе и исходная матрица сохраняются в файл.

23. Сформировать htmlфайл по текстовому, добавив в начало теги < html> < body> < table>, в конец тег < /table> < /body> и каждое предложение обрамить в теги< tr> < td> и < td> < /tr> соответственно. Различные разукрашивания(случайные цвета, например), средствами htmlприветствуются.

24. Вычисление суммы, произведения и среднего арифметического всех элементов матрицы. Исходная матрица читается из файла, результаты вычислений сохраняются в этот же файл.

25. Сформировать pasфайл по текствовому файлу, который командамиwriteln выводит на экран содержимое этого текстового файла.

26. Найти и поменять местами максимальный и минимальный элементы матрицы. Исходная матрица читается из файла, результаты вычислений сохраняются в этот же файл.

27. Найти и поменять местами максимальный и минимальный элементы произвольной строки матрицы. Исходная матрица читается из файла, результаты вычислений сохраняются в этот же файл.

28. Найти и поменять местами максимальный и минимальный элементы произвольного столбца матрицы. Исходная матрица читается из файла, результаты вычислений сохраняются в этот же файл.

29. Замена слов в тексте файла (*.txt). Номера меняемых местами слов определяет пользователь в процессе работы программы. Результаты работы программы записать в текстовый файл.

30. Замена первого и последнего слов в предложениях местами. Исходный текст читается из файла, результаты дописываются в этот же файл.

 

6 Контрольные вопросы

1. Поясните, что такое файл.

2. Поясните, что такое файловая переменная.

3. С какими типами файлов позволяет работать среда TurboPascal.

4. Укажите процедуру выполняющую связь файловой переменной с файлом.

5. Укажите процедуру инициализации файла для записи.

6. Укажите процедуру инициализации файла для чтения.

7. Укажите процедуру инициализации файла для изменений (расширения).

8. Укажите назначение процедуры close.

9. Укажите назначение процедуры rename.

10. Укажите назначение процедуры erase.

11. Укажите назначение процедуры blockread.

12. Укажите назначение процедуры blockwrite.

Рекомендуемая литература

1. Степанов А.Н. Информатика. Базовый курс. Учебник для ВУЗов. - Издательство " Питер", 2007. – 768с.

2. Острейковский, В.А. Информатика: учебник для вузов / В.А.Острейковский.— 3-е изд., стер. — М.: Высш.шк., 2005.— 511с.: ил. — Библиогр.в конце кн. — ISBN 5-06-003533-6 /в пер./: 128.74.


ЛАБОРАТОРНАЯ РАБОТА 17

Графический режим в Turbo Pascal: вывод простых элементов и фигур (4 часа)

Цель работы

Получение практических навыков написания и отладки программ в среде TurboPascal для работы с простыми графическими объектами.

2 Краткая теоретическая справка

Модуль Graph

Модуль Graph представляет собой библиотеку констант, типов, переменных и графических подпрограмм (процедур и функций) универсального назначения, рассчитанную на работу с наиболее распространёнными графическими адаптерами персональных ЭВМ, совместимых с IBM.

Модуль Graph Турбо Паскаля содержит константы задания драйверов, режимов работы, цвета, типов и толщин линий, управления шрифтом, значений ошибок и др., а также свыше семидесяти процедур, предназначенных для работы с графическим экраном.

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

Графические процедуры и функции Турбо Паскаля находятся в стандартном модуле Graph, расположенном в файле Graph.tpu. Модуль Graph должен явно подключаться к программе с помощью оператора использования uses. Настройка этих процедур и функций на работу с конкретным адаптером осуществляется за счёт подключения нужного графического драйвера.

Переключение дисплея в графический режим работы (инициализация графического режима) осуществляется процедурой InitGraph, которая имеет возможность автоматически распознавать графический адаптер, установленный на ПК, которая загружает и инициализирует соответствующий графический драйвер, переводит адаптер в графический режим и возвращает управление вызывающей программе.

Процедура InitGraph имеетзаголовок:

InitGraph ( var Driver, Mode: integer; Path: string );

Здесь Driver – типадаптера, Mode – режимработыадаптера, Path – путькфайлудрайвера.

Пустая строка Path означает, что графический драйвер находится в том же каталоге, что и программа.

Завершение работы в графическом режиме производится с помощью процедуры CloseGraph, которая выгружает драйвер из памяти и восстанавливает предыдущий видеорежим.

С помощью процедур RestoreCrtMode и SetGraphMode (Mode: integer ) можно переключаться между текстовым и графическим режимами, не закрывая графический режим. При этом процедура SetGraphMode позволяет устанавливать новый графический режим (Mode) и очищает экран.

Вывод точек

После перехода в графический режим перед началом вывода нового рисунка или графической зависимости следует очистить экран от предыдущего изображения. Эту операцию выполняет процедура ClearDevice. Она очищает графический экран, перемещает указатель в верхний левый угол экрана и затем заливает всю видимую область экрана цветом фона.

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

Рассмотрим основные процедуры вывода базовых графических элементов на примере программы вывода на экран дисплея вспыхивающих и гаснущих точек.

Program Dots;

Uses Crt, Graph;

const N = 500;

var

d, m, k, x, y: integer;

px, py: array [1..N] of integer;

begin

{Инициализация графического режима}

d: = detect; m: = VGAMed;

InitGraph (d, m, ' ');

{Создание и запоминание координат точек в массивах px и py}

for k: = 1 to N do

Begin

px [k]: = Random (GetMaxX);

py [k]: = Random (GetMaxY)

end;

{Вывод точек в цикле с постусловием}

Repeat

for k: = 1 to N do

Begin

x: = px [k]; y: = py [k];

PutPixel (x, y, white); {Высвечивание очередной точки белым цветом}

end;

if not KeyPressed then

for k: = N downto 1 do

Begin

x: = px [k]; y: = py [k];

PutPixel (x, y, black); {Гашение очередной точки – цвет чёрный}

end;

until KeyPressed;

while KeyPressed do k: = ord (ReadKey);

CloseGraph

end.

Здесь Random (R: word ) – функциямодуля System, формирующаяпсевдослучайноечисло. При обращении к функции в виде Random она формирует и возвращает в программу псевдослучайное вещественное число в диапазоне от 0 до 1. При обращении к функции в виде Random (R) она формирует и возвращает в программу псевдослучайное целое число в диапазоне от 0 до R-1. При каждом запуске программы эта функция будет генерировать одну и ту же последовательность случайных чисел, так как исходное число, с которого начинается генерация, остаётся постоянным.

Функция GetMaxX: integer модуля Graph возвращает максимальную горизонтальную координату графического экрана;

Функция GetMaxY: integer модуля Graph возвращает максимальную вертикальную координату графического экрана;

Процедура PutPixel (X, Y: integer; color: word ) модуля Graph выводит точку цветом color с координатами X и Y.

Функция KeyPressed: boolean модуля Crt принимает значение true, если на клавиатуре была нажата какая-либо клавиша, и значение false в противном случае. Функция KeyPressed не задерживает выполнение программы;

Функция ReadKey: char модуля Crt считывает символ с клавиатуры без вывода его на экран и приостанавливает исполнение программы до нажатия на любую клавишу, кроме клавиш Shift, Ctrl, Alt, CapsLock, NumLock и ScrollLock.

Функция ord (Х): longint модуля System определяет порядковый номер, соответствующий значению переменной Х.

Вывод отрезков прямых линий

Перед выводом изображения необходимо задать цвет линии, её толщину и тип. Эту задачу решают, используя процедуру SetLineStyle модуля Graph, формат обращения к которой имеет вид:

SetLineStyle (Type, Pattern, Thickness);

Здесь Type, Pattern и Thickness – переменныетипа word.

Переменная Type может принимать пять значений, определяемых константами модуля Graph:

const

SolidLn = 0; (* Сплошная линия *)

DotteLn = 1; (* Точечная линия *)

CenterLn = 2; (* Штрихпунктирная линия *)

DasheLn = 3; (* Пунктирная линия *)

UserBitLn = 4; (* Узор линии определяет программист *)

Переменную Pattern (образец) используют, если задан тип UserBitLn, определяемый программистом. Параметр Pattern задаёт отрезок линии длиной в 16 пикселей, который периодически повторяется на протяжении всей линии. Каждый бит, приравненный к единице, соответствует светящемуся пикселу в этом отрезке линии.

Параметр Thickness может принимать одно из двух значений:

NormWidth =1; – толщина линии равна одному пикселю,

ThickWidth = 3; – толщина линии равна трём пикселям.

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

Процедура SetBkColor (color: word ) модуля Graph устанавливает цвет фона, который по умолчанию чёрный. Переменная color может принимать 16 значений, определяемых константами цвета, входящими в модуль Graph:

 

Значение SetBkColor Цвет Значение SetBkColor Цвет
Black = 0; Черный DarkGray = 8; Тёмно-серый
Blue = 1; Синий LightBlue = 9; Ярко-синий
Green = 2; Зеленый LightGreen = 10; Ярко-зелёный
Cyan = 3; Голубой LightCyan = 11; Ярко-голубой
Red = 4; Красный LightRed = 12; Розовый
Magenta = 5; Фиолетовый LightMagenta = 13; Малиновый
Brown = 6; Коричневый Yellow = 14; Желтый
LightGray = 7; Светло-серый White = 15; Белый

 

Процедура SetColor (color: word ) модуля Graph устанавливает цвет, которым будет осуществляться рисование линий, точек и т.д.

Процедура Line (x1, y1, x2, y2: integer ) модуля Graph рисует линию от точки с графическими координатами x1, y1 до точки с графическими координатами x2, y2. Линия вычерчивается текущим стилем и текущим цветом. Положение указателя после вывода линии остаётся неопределённым, т.е. не обязательно сохраняется в конечной точке x2, y2 линии.

Процедура LineRel (dx, dy: integer ) модуля Graph рисует линию от текущего местоположения указателя к точке, заданной приращением графических координат dx и dy.

Процедура LineTo (x, y: integer ) модуля Graph рисует линию от местоположения текущего указателя к точке с графическими координатами x, y.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-06-04; Просмотров: 989; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.059 с.)
Главная | Случайная страница | Обратная связь