ПРАКТИЧЕСКАЯ РАБОТА №10
Тема: Работа с файлами.
Цель: Научиться составлять и решать задачи с использованием файловых типов.
Ход работы:
1. Используя методические пособия, рассмотрите темы: «Основные функции для работы с файлами», «Текстовые файлы», «Типизированные файлы»
2. Рассмотрите пример выполнения практической работы
3. Составьте алгоритмы решения к предложенным заданиям в виде блок-схемы
4. Составьте программы к предложенным заданиям
Теоретическая справка:
Файл – это упорядоченная последовательность однотипных компонентов, расположенных на внешнем носителе. Файлы предназначены только для хранения информации, а обработка этой информации осуществляется программами.
Использование файлов целесообразно в случае:
- долговременного хранения данных;
- доступа различных программ к одним и тем же данным;
- обработки больших массивов данных, которые невозможно целиком разместить в оперативной памяти компьютера.
Наиболее часто используемыми файловыми типами явлиются:
- текстовые файлы(text);
- типизированные файлы (file of тип).
Стандартные процедуры и функции
Assign(f, FileName)
– связывает файловую переменную f с физическим файлом, полное имя которого задано в строке FileName. Установленная связь будет действовать до конца работы программы, или до тех пор, пока не будет сделано переназначение.
Reset(f)
– открывает для чтения файл, с которым связана файловая переменная f. После успешного выполнения процедуры файл готов к чтению из него первого элемента. Процедура завершается с сообщением об ошибке, если указанный файл не найден.
Rewrite(f)
– открывает для записи файл, с которым связана файловая переменная f. После успешного выполнения этой процедуры файл готов к записи в него первого элемента. Если указанный файл уже существовал, то все данные из него уничтожаются.
Close(f)
– закрывает открытый до этого файл с файловой переменной f. Если по какой-то причине процедура не будет выполнена, файл будет создан на внешнем устройстве, но содержимое последнего буфера в него не будет перенесено.
EOF(f): boolean
– возвращает значение TRUE, когда при чтении достигнут конец файла. Это означает, что уже прочитан последний элемент в файле или файл после открытия оказался пуст.
Rename(f, NewName)
– позволяет переименовать физический файл на диске, связанный с файловой переменной f. Переименование возможно после закрытия файла.
Erase(f)
– уничтожает физический файл на диске, который был связан с файловой переменной f. Файл к моменту вызова процедуры должен быть закрыт.
Работа с текстовыми файлами
Текстовый файл – это совокупность строк, разделенных метками конца строки. Сам файл заканчивается меткой конца файла. Доступ к каждой строке возможен лишь последовательно, начиная с первой. Одновременная запись и чтение – запрещены.
Read(f, список переменных); ReadLn(f, список переменных);
– процедуры читают информацию из файла f в переменные. Отличие ReadLn от Read в том, что в нем после прочтения данных пропускаются все оставшиеся символы в данной строке, включая метку конца строки. Если список переменных отсутствует, то процедура ReadLn(f) пропускает строку при чтении текстового файла.
Write(f, список переменных); WriteLn(f, список переменных);
– процедуры записывают информацию в текстовый файл. WriteLn от Write отличается тем, что после записи всех значений из переменных записывает еще и метку конца строки.
Append(f)
– открывает текстовый файл для добавления информации к его концу. Используется вместо Rewrite.
Работа с типизированными файлами
Типизированный файл – это последовательность компонент любого заданного типа, кроме типа "файл". Доступ к компонентам файла осуществляется по их порядковым номерам. Компоненты нумеруются, начиная с 0. После открытия файла указатель стоит в его начале на нулевом компоненте. После каждого чтения или записи указатель сдвигается к следующему компоненту.
Reset(f)
– открывает файл, с которым связана файловая переменная f, для чтения и записи одновременно.
Write(f, список переменных)
– записывает в файл f всю информацию из списка переменных.
Read(f, список переменных)
– читает из файла f компоненты в указанные переменные. Тип файловых компонент и переменных должны совпадать. Если будет сделана попытка чтения несуществующих компонент, то произойдет ошибочное завершение программы.
Seek(f, n)
– смещает указатель файла f на n -ную позицию. Нумерация в файле начинается с 0.
FileSize(f): longint
– возвращает количество компонент в файле f.
FilePos(f): longint
– возвращает порядковый номер текущего компонента файла f.
Truncate(f)
– отсекает конец файла, начиная с текущей позиции включительно.
Пример выполнения практической работы:
Задание 1: Создать текстовый файл, в который записать 3 строки. Прочитать этот файл, вывести его содержимое на экран. Определить длину каждой строки.
Блок-схема программы
![]() | Код программы var f1: text; st: string; n: integer; begin assign (f1, 'file1.txt'); {связать с файлом file1.txt файловую переменную f1} rewrite (f1); {создать новый файл с именем file1.txt} writeln (f1, 'Очень полезно изучать'); {заполнение файла} writeln (f1, ' всем студентам '); writeln (f1, ' язык Pascal '); close (f1); {закрыть файл для записи} reset (f1); {открыть файл для чтения} while not eof (f1) do {пока не конец файла f1} begin readln (f1, st); {читаем строку из файла f1} write (st); {выводим на экран} n:= length (st); {определяем длину строки} writeln (' Длина =',n); end; close (f1); {закрыть файл для чтения} end. |
Результат выполнения программы: Очень полезно изучать Длина =21 всем студентам Длина =14 язык Pascal Длина =11 |
Задание 2: Создать файл из списка 5 студентов с их оценками (номер, Ф.И.О. и три оценки). Вывести его содержимое на экран, изменить фамилию студента с номером, введенным с клавиатуры, заново прочитать файл.
Блок-схема программы
![]() |
![]() | Код программы Type wed = record {Тип wed включает 3 поля: n, fio, bal} n: byte; fio: string[15]; bal: array [1..3] of byte; {Поле bal – массив из 3 оценок } end; Var spisok: wed; {Запись spicok типа wed} sp: file of wed; {Файл записей типа wed} procedure vvod; { процедура создания файла} var i,j:byte; begin rewrite (sp); {открытие файла для записи} with spisok do for i:=1 to 5 do begin n:=i; {номер студента} writeln (i, ') Введите фамилию - '); readln (fio); writeln (' Введите 3 оценки ', fio); For j:= 1 to 3 do readln (bal [j]); write (sp, spisok); { запись в файл информации о студенте} end; close (sp); { закрытие файла для записи } end; procedure print; { процедура чтения и печати всего файла } var j: byte; begin reset (sp); {открытие файла для чтения} writeln (‘Список студентов: ‘); while not eof (sp) do with spisok do begin read (sp, spisok); {чтение данных из файла} write (n,' ',fio); {вывод записи на экран} for j:= 1 to 3 do write (' ', bal [j]); writeln; end; readln; close (sp); end; procedure work; var num: integer; begin reset (sp); {открытие файла для чтения} writeln ('номер= '); readln (num); seek (sp, num-1); {поиск записи с указанным номером} read (sp,spisok); {чтение и перемещение указателя к след. записи} write ('fio='); writeln (spisok.fio); seek (sp,filepos(sp)-1); {возвращение к изменяемой записи } writeln (‘ Введите новую фамилию’); readln (spisok.fio); write (sp, spisok); {запись в файл измененной записи} close (sp); end; begin {начало основной программы} assign (sp,'Vedom.DAT'); {связать файловую перем-ю sp с файлом} vvod; print; {процедуры создания и чтения файла} work; print; {корректировка и чтение измененного файла} readln; end. |
Результат выполнения программы: 1) Введите фамилию - Ivanov Введите 3 оценки - 5 5 5 2) Введите фамилию - Petrov Введите 3 оценки - 4 5 5 3) Введите фамилию - Sidorov Введите 3 оценки - 4 5 3 4) Введите фамилию - Ilin Введите 3 оценки - 3 4 3 5) Введите фамилию - Vasilev Введите 3 оценки - 4 5 3 Список студентов 1 Ivanov 5 5 5 2 Petrov 4 5 5 3 Sidorov 4 5 3 4 Ilin 3 4 3 5 Vasilev 4 5 3 Номер = 4 fio=Ilin Введите новую фамилию Ilichenko Список студентов 1 Ivanov 5 5 5 2 Petrov 4 5 5 3 Sidorov 4 5 3 4 Ilichenko 3 4 3 5 Vasilev 4 5 3 Слов: 2 |
Задания:
I. Работа с текстовыми файлами
1. Дан текстовый файл. Вывести количество содержащихся в нем символов и строк (маркеры концов строк EOLN и конца файла EOF при подсчете количества символов не учитывать).
2. Дано целое число K и текстовый файл. Вставить пустую строку перед строкой файла с номером K. Если строки с таким номером нет, то оставить файл без изменений.
3. Дана строка S и текстовый файл. Заменить в файле все пустые строки на строку S.
4. Дано целое число K и текстовый файл. Удалить из файла строку с номером K. Если строки с таким номером нет, то оставить файл без изменений.
5. Дан текстовый файл. Удалить из него все пустые строки.
6. Дан текстовый файл. Заменить в нем все подряд идущие пробелы на один пробел.
7. Дан текстовый файл, содержащий более трех строк. Удалить из него последние три строки.
8. Дан текстовый файл. Найти количество абзацев в тексте, если абзацы отделяются друг от друга одной пустой строкой.
9. Дано целое число K и текстовый файл. Создать строковый файл и записать в него все слова длины K из исходного файла. Словом считать набор символов, не содержащий пробелов, знаков препинания и ограниченный пробелами, знаками препинания или началом/концом строки. Если исходный файл не содержит слов длины K, то оставить результирующий файл пустым.
10. Даны два файла целых чисел одинакового размера. Создать текстовый файл, содержащий эти числа, расположенные в два столбца шириной по 30 символов (в первом столбце содержатся числа из первого исходного файла, во втором — из второго файла). В начало и конец каждой строки текстового файла добавить разделитель «|» (код 124). Числа выравниваются по правому краю столбца.
11. Даны вещественные числа A, B и целое число N. Создать текстовый файл, содержащий таблицу значений функции (x)1/2 на промежутке [A, B] с шагом (B − A)/N. Таблица состоит из двух столбцов: с аргументами x (10 позиций, из них 4 под дробную часть) и со значениями (x)1/2 (15 позиций, из них 8 под дробную часть). Столбцы выравниваются по правому краю.
12. Даны вещественные числа A, B и целое число N. Создать текстовый файл, содержащий таблицу значений функций sin(x) и cos(x) на промежутке [A, B] с шагом (B − A)/N. Таблица состоит из трех столбцов: с аргументами x (8 позиций, из них 4 под дробную часть) и со значениями sin(x) и cos(x) (по 12 позиций, из них 8 под дробную часть). Столбцы выравниваются по правому краю.
13. Дан текстовый файл. В каждой его строке первые 30 позиций отводятся под текст, а оставшаяся часть — под вещественное число. Создать два файла: строковый файл, содержащий текстовую часть исходного файла, и файл вещественных чисел, содержащий числа из исходного файла (в том же порядке).
14. Дан текстовый файл. Создать символьный файл, содержащий все знаки препинания, встретившиеся в текстовом файле (в том же порядке).
15. Дан текстовый файл. Подсчитать число появлений в нем каждой строчной (т. е. маленькой) буквы и создать строковый файл, элементы которого имеют вид «<буква>–<число ее появлений>» (например, «а–25»). Буквы, отсутствующие в тексте, в файл не включать. Строки упорядочить по возрастанию кодов букв.
16. Дана строка S, состоящая из 10 цифр, и файл с русским текстом. Зашифровать файл, выполнив циклическую замену каждой русской буквы, стоящей на K-й позиции строки, на букву того же регистра, расположенную в алфавите на SK-м месте после шифруемой буквы (для K = 11 снова используется смещение S1 и т. д.). Букву «ё» в алфавите не учитывать, знаки препинания и пробелы не изменять.
17. Дана строка и файл с русским текстом, зашифрованным по правилу, описанному в задании 16. Данная строка представляет собой первую расшифрованную строку текста. Расшифровать остальные строки и заменить в файле зашифрованный текст на расшифрованный. Если информации для расшифровки недостаточно, то исходный файл не изменять.
II. Работа с типизированными файлами
1. Дано имя файла и целое число N (> 1). Создать файл целых чисел с данным именем и записать в него N первых положительных четных чисел (2, 4, …).
2. Дано имя файла и вещественные числа A и D. Создать файл вещественных чисел с данным именем и записать в него 10 первых членов арифметической прогрессии с начальным членом A и разностью D: A, A + D, A + 2·D, A + 3·D, ….
3. Дано имя файла целых чисел. Найти количество элементов, содержащихся в данном файле. Если файла с таким именем не существует, то вывести −1.
4. Дано целое число K и файл, содержащий неотрицательные целые числа. Вывести K-й элемент файла. Если такой элемент отсутствует, то вывести −1.
5. Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке.
6. Дан файл вещественных чисел. Создать два новых файла, первый из которых содержит элементы исходного файла с нечетными номерами (1, 3, …), а второй — с четными (2, 4, …).
7. Дан файл целых чисел. Создать два новых файла, первый из которых содержит положительные числа из исходного файла (в обратном порядке), а второй — отрицательные (также в обратном порядке). Если положительные или отрицательные числа в исходном файле отсутствуют, то соответствующий результирующий файл оставить пустым.
8. Дан файл вещественных чисел. Найти среднее арифметическое его элементов
9. Дан файл вещественных чисел. Найти сумму его элементов с четными номерами.
10. Дан файл вещественных чисел. Найти его первый локальный минимум (локальным минимумом называется элемент, который меньше своих соседей).
11. Дан файл вещественных чисел. Поменять в нем местами минимальный и максимальный элементы.
12. Дан файл целых чисел с элементами A1, A2, …, AN (N — количество элементов в файле). Заменить исходное расположение его элементов на следующее: A1, AN, A2, AN−1, A3, ….
13. Дан файл вещественных чисел. Заменить в файле каждый элемент, кроме начального и конечного, на его среднее арифметическое с предыдущим и последующим элементом.
14. Дан файл целых чисел, содержащий более 5 элементов. Уменьшить его размер до 5 элементов, удалив из файла необходимое количество конечных элементов.
15. Дан файл целых чисел. Удалить из него все элементы с четными номерами.
16. Дан файл целых чисел. Удвоить его размер, записав в конец файла все его исходные элементы (в том же порядке).
17. Дан файл целых чисел. Продублировать в нем все элементы с нечетными номерами.
18. Дан файл целых чисел. Продублировать в нем все числа, принадлежащие диапазону 5 – 10.
19. Дан файл целых чисел. Заменить в нем каждый элемент с четным номером на два нуля.
20. Дан файл целых чисел. Заменить в нем каждое положительное число на три нуля.