Работа с типизированными файлами




ПРАКТИЧЕСКАЯ РАБОТА №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. Дан файл целых чисел. Заменить в нем каждое положительное число на три нуля.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: