Практическая работа_ Реализация алгоритма линейной струкруры на. Практическая работа Реализация алгоритма линейной структуры
Скачать 195.04 Kb.
|
Тема: Обработка файловЦель: получить навыки работы с текстовыми файлами, типизированными и файлами без типа. Задание для подготовки к работе Изучить способы работы с файлами, типы файлов, процедуры и функции работы с файловыми переменными. Разработать алгоритм для решения задач соответствующего варианта. Подобрать тестовые данные. Содержание отчета Описание используемых структур данных. Условие задачи. Описание алгоритма. Набор тестовых данных с обоснованием их выбора. Текст программы. Описание и анализ ошибок, выявленных при отладке программы. Краткие теоретические сведения В Турбо Паскале различают собственно файл (область памяти на внешнем носителе) и переменную файлового типа в некоторой Turbo Pascal-программе. Считается, что файловая переменная является представителем некоторого дискового файла в программе. Тип файловой переменной задается одним из трех способов: <имя типа> = FILE OF <тип компонент>; <имя типа> = TEXT; <имя типа> = FILE; Например: type Matr=file of array[1..12] of real; Matr - имя типа, который описывает файл, компонентами которого являются одномерные массивы. В зависимости от способа объявления можно выделить ТРИ ВИДА ФАЙЛОВ: типизированные файлы (FILE OF) текстовые файлы (TEXT) нетипизированные файлы (FILE) Для того, чтобы реализовать доступ к файлу на внешнем носителе, необходимо связать его с файловой переменной. Для этого необходимо сопоставить переменную с именем файла. Производят "связывание" процедурой ASSIGN. Например: Assign(F,'c:\books\book4\test3.pas'); Инициировать файл означает указать для этого файла направление передачи данных. В Турбо Паскале можно открыть файл для чтения и для записи информации. Для чтения файл инициируется с помощью стандартной процедуры RESET: Reset(<ф.п.>); Здесь <ф.п.> - файловая переменная, связанная ранее процедурой ASSIGN с уже существующим файлом или логическим устройством. При выполнении этой процедуры дисковый файл подготавливается к чтению информации. В результате специальная переменная - указатель, связанная с этим фалом будет указывать на начало файла, т.е. на компонент с порядковым номером 0. Если делается попытка инициировать чтение из несуществующего файла, возникает ошибка периода исполнения. Для записи файл инициируется стандартной процедурой REWRITE: Rewrite(<ф.п.>); Процедура REWRITE подготавливает новый файл к записи информации, если же этой процедурой инициируется уже существующий файл, то все его содержимое стирается. Процедуры и функции для работы с файлами. Процедура CLOSE. Закрывает файл, однако связь файловой переменной с именем файла, установленная ранее процедурой ASSIGN, сохраняется. Форма обращения: Close(<ф.п.>); Функции процедуры CLOSE выполняются автоматически по отношению ко всем открытым файлам при нормальном завершении программы. Функция EOF(<ф.п.>):Boolean Логическая функция тестирующая конец файла. Возвращает TRUE , если файловый указатель стоит в конце файла. При записи это означает, что очередной компонент файла будет добавлен в конец файла, при чтении - что файл исчерпан. Функция IORESULT: WORD. Возвращает условный признак последней операции ввода-вывода. Если операция завершилась успешно, функция возвращает 0. Функция становится доступной только при отключенном автоконтроле ошибок ввода-вывода. Директива компилятора {$I-} отключает , а директива {$I+} включает автоконтроль. Если автоконтроль отключен, а операция ввода-вывода привела к возникновению ошибки, устанавливается флаг ошибки и все последующие обращения к вводу-выводу блокируются, пока не будет вызвана функция IORESULT. Пример: использования функции IOResult. Var F: file of integer; Begin Assign( f,' myfile.dat'); {текст программы} {SI-} {отключем контроль ошибок ввода-вывода} reset(f); {SI+} {включаем контроль ошибок ввода-вывода} if IOResult<>0 then written('файл не существует') else {текст программы}.....................................................{файл существует} end. Если не сделать отключение автоматического контроля ошибок ввода-вывода с помощью директивы компилятора {SI-}, то отсутствие файла приведет к аварийному завершению программы. Процедура READ. Обеспечивает чтение очередных компонентов типизированного файла, связанного с файловой переменной. Формат обращения: Read(<ф.п.>,<список ввода>); Здесь <список ввода> - содержит одну или более переменных того же (базового) типа, что и компоненты файла. Если файл исчерпан, обращение к Read вызовет ошибку ввода-вывода. Процедура WRITE. Используется для записи данных в типизированный файл. Формат обращения: Write(<ф.п.>,<список вывода>); Здесь <список вывода> содержит одно или несколько выражений того же типа, что и компоненты файла. Процедура SEEK. Смещает указатель файла к требуемому компоненту. Формат обращения: Seek(<ф.п.>, Здесь Процедуру нельзя применять к текстовым файлам. Функция FILESIZE. Возвращает значение типа LONGINT, которое содержит количество компонентов в файле. Формат обращения: FileSize(<ф.п.>); Функцию нельзя применять к текстовым файлам. Пример: Прочитаем файл целых числе и выведем их на экран Var f: file of integer; n:integer; Begin Assign(f,?a int.dat?); {связь с внешним файлом} Reset(f); {открытие на чтение} While Not eof(f) do {пока не конец файла} Begin Read(f,n); {считываем очередное число} Write(n,' ' );{выводим его на экран} End; Close(f); {закрываем файл} End. Пример: Создать файл вещественных чисел. Type Tem=file of real, Var. f:tem X:real Ch:char; Begin Assign(f,'a:\Danl1.Dat'); Rewrite(f); Repeat Write('Введите число '); Readln(x); Write(f,x); Write(' Будете ли еще вводить число ( да / нет?'); Readln(ch); Until upcase(ch)<>'Y'; Close(f); End. Кроме всех процедур и функций для типизированных файлов для текстовых файлов при меняются еще следующие: 1.Процедуры а) Readln(F,<список ввода>) - чтение из текущей строки файла и переход на следующую строку б) Writeln(F,<список вывода>)- запись информации в текущую строку файла и переход на новую строку в) Арреnd(F)- открытие файла для добавления информации в конец файла 2.Функции а) Еоln(F)- возвращает true если указатель находится на символе конец строки файла и false в противном случае. Варианты заданий 1/11/21/31. а) Заполнить файл последовательного доступа F целыми числами. Получить в файле G те компоненты файла F, которые являются четными. b) Дан файл, содержащий текст из строчных русских букв. Получить в другом файле тот же текст, записанный заглавными буквами. 2/12/22/32. a) Записать в файл F последовательного доступа N действительных чисел. Вычислить произведение компонентов файла и вывести результат в файл G. b) Дан файл содержащий произвольный текст. Выяснить чего в нем больше: русских букв или цифр. 3/13/23/33. a) Заполнить файл последовательного доступа F целыми числами. Получить в файле G все компоненты файла F, которые делятся на m и не делятся на n. b) Дан файл, содержащий текст на русском языке. Выяснить входит ли данное слово в указанный текст, и если да, то сколько раз? 4/14/24/34. a) Записать в файл последовательного доступа N целых чисел. Посчитать количество пар противоположных чисел среди компонентов этого файла. b) Дан файл, содержащий текст на русском языке. В предложениях некоторые из слов записаны подряд несколько раз (предложение заканчивается точкой). Получить в новом файле отредактированный текст, в котором удалены повторные вхождения слов в предложении. 5/15/35. a) Заполнить файл последовательного доступа F целыми числами. Из файла F получить файл G, исключив повторное вхождение чисел. b) Дан текст, содержащий текст, набранный заглавными русскими буквами. Указать в процентах, сколько раз встречается та или иная буква. 6/16/36. a) Записать в файл последовательного доступа N произвольных натуральных чисел. Переписать в другой файл последовательного доступа те элементы, которые кратны K. b) Дан файл, содержащий текст на русском языке. Определить сколько раз встречается в нем заданное слово. 7/17/37. a) Заполнить файл последовательного доступа N действительными числами. Найти сумму максимального и минимального элементов этого файла. b) Дан файл, содержащий текст на русском языке и некоторая буква. Посчитать сколько слов начинается на эту букву. 8/18/38. a) Записать в файл последовательного доступа N произвольных натуральных чисел: a1, a2, … an. Сформировать новый файл последовательного доступа, элементами которого являются числа a1, a1*a2, a1*a2*a3, … , a1*a2*…*an. Дан файл, содержащий текст. Сколько цифр в тексте? 9/19/39. a) Записать в файл F последовательного доступа N натуральных чисел. Получить в другом файле последовательного доступа все компоненты файла F, кроме тех, которые кратны K. b) Дан файл, содержащий текст. Посчитать сколько слов в этом тексте. 10/20/40. a) Заполнить файл F натуральными числами. Из файла F получит файл G, исключив повторное вхождение чисел. b) Дан файл, содержащий текст, заключающий в себе русские и английские слова. Посчитать сколько русских и сколько латинских букв в тексте. Контрольные вопросы С какими типами файлов можно работать в Паскале? Расскажите все, что знаете о текстовых файлах, типизированных файлах, нетипизированных файлах. Объясните особенности применения каждого типа файлов. К файлам какого типа применяются процедуры ReadLn и WriteLn? Пусть FF – это внешний файл, состоящий из вещественных чисел. Напишите программу, которая считывает значения из файла и находит в FF четвертое по величине значение. Литература Turbo Pascal. Программирование на языке высокого уровня: Учебник для вузов. 2-е изд./ С.А. Немнюгин. – СПб.: Питер, 2003. – 544 с. Епанешников А.М., Епанешников В.А. Программироваие в среде Turbo Pascal 7.0 – 3-е изд., стер. – М.: «ДИАЛОГ-МИФИ», 2001. – 288 с. Семакин И.Г., Шестаков А.П. Основы программирования: Учебник. – М.: Мастерство, 2002. – 432. |