Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кусовая для ИВТ Основы программирования_окончат...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
80.76 Кб
Скачать

Практические рекомендации по выполнению основной части курсовой работы

  1. Теоретическим материал, необходимым для выполнения работы:

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

  • долговременного хранения данных;

  • доступа различных программ к одним и тем же данным;

  • обработки больших массивов данных, которые невозможно целиком разместить в оперативной памяти компьютера.

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

Все файлы должны быть описаны в программе либо в разделе переменных VAR, либо в разделе типов TYPE. Под чтением файла понимают ввод данных из внешнего файла, находящегося на диске, в оперативную память машины. Запись в файл - вывод результатов работы программы из оперативной памяти на диск в файл.

Работа с файлами выполняется следующими процедурами:

Установочные и завершающие операции

  1. Assign (f, FileName) – связывает файловую переменную f с конкретным файлом с именем FileName. Данную процедуру необходимо использовать до начала работы с файлом. FileName – выражение строкового типа вида:

Диск: \ имя каталога \ имя подкаталога \ … \ имя файла

Если имя диска и имя каталога не указывать, то берутся текущий диск и текущий каталог.

Var spisok: wed; {переменная spisok - запись типа wed}

sp: file of wed; {файловая переменная типа wed}

………………………..

assign(sp,'Vedom2.dat'); {Связывает файловую переменную sp с файлом Vedom.dat }

  1. Reset (f) – открывает файл f для чтения, т.е. указатель устанавливается на первый элемент файла. Предполагается, что открываемый файл уже существует, в противном случае возникает ошибка. В программе может быть произвольное количество вызовов процедуры reset.

Примечание: Важно отметить, что ТР позволяет после выполнения вызова reset не только читать из файла с помощью процедуры Read, но и записывать в файл, т.е. изменять элементы, на которые ссылается указатель файла. Такое изменение выполняется с помощью процедуры Write. В результате на место элемента, на который ссылается указатель файла, будет записано новое значение. Так, например, если необходимо заменить 6-ой элемент файла необходимо 5 раз выполнить процедуру Read и затем процедуру Write.

reset (f) – это процедура последовательного доступа к элементам файла! Но такой доступ не всегда удобен. Прямой доступ к элементам типизированного файла дает процедура Seek (описанная ниже), этот метод основан на том, что элементы файла задаются номерами их позиций в файле.

  1. Rewrite (f) открывает файл f для записи (указатель так же, как и в предыдущем случае, устанавливается на первый элемент файла). Допускается, что файл не существует, тогда процедура создает файл с заданным именем. Если же такой файл существует, процедура удаляет из него всю информацию. В обоих случаях в результате вызова данной процедуры файловая переменная указывает на нулевой элемент файла (т.е. файл пуст).

  2. Close (f) – закрывает файл f для, очищает внутренний буфер, образованный при открытии файла. Теперь указатель f можно связать с другим файлом.

Для определения конца файла используется стандартная встроенная функция

EOF (файловая переменная),

которая принимает значение True, если достигнут конец файла, и значение False в противном случае.

Операции ввода-вывода

  1. Read (f, x1, x2, …) – считывает в переменные x1, x2, … по одному элементу из файла f, начиная с той позиции, на которую установлен указатель. Операция чтения осуществляется следующим образом: значение, на которое указывает текущий указатель файла, присваивается переменной x1, указатель перемещается на следующую позицию, то же самое выполняется для переменной x2, и т.д. Данная процедура выполнима только в том случае, если не достигнут конец файла (eof(f)=false). Поэтому при составлении программы практически всегда перед каждым вызовом процедуры чтения очередного элемента файла необходимо предусмотреть проверку того, что элементы файла еще не исчерпаны.

  2. Write (f, x1, x2, …) – записывает в файл f значения переменных, начиная с той позиции, на которую указывает файловая переменная. После записи в файл нового элемента, указатель перемещается на следующую позицию. Данная функция выполнима только в том случае, когда достигнут конец файла (eof(f) = true).

Операции перемещения по файлу

  1. Seek (f, N) – функция, позволяющая явно изменить значение текущего указателя, установив его на элемент файла с заданным номером N (N - целочисленное выражение). Данная процедура не выполняет чтения или записи элементов файла, оно лишь перемещает указатель к элементу с номером N. (Первый элемент файла имеет номер 0). Вызов процедуры с аргументами seek (f, filesize(f)) установит указатель на конец файла.

  2. Filepos (f) – функция, позволяющая определить текущее положение указателя (номер элемента). Она имеет только один аргумент – идентификатор файловой переменной и возвращает значение типа longint. Например, после выполнения предыдущих действий seek (f, 4) и

A:=filepos (f);

переменная А типа longint получит значение 5.

  1. Filesize (f) имеет тип Integer, функция, позволяющая определить размер (кол-во элементов) файла f.

  2. Truncate (файловая переменная); процедура, усекающая файл по текущей позиции указателя файла, т.е. все записи, находящиеся после указателя файла, удаляются.

  3. Eof (f) – функция, возвращающая логическое значение true, если достигнут конец файла.

Специальные операции

  1. Erase (f) – удаляет файл, связанный с файловой переменной f.

  2. Rename (f, NewName) – присваивает файлу, связанному с файловой переменной f, новое имя NewName.

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

Readln (a);

Seek (f, filesize (f));

Write (f, a);

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

Для того, чтобы в режиме произвольного доступа считать, а затем изменить значение записи, следует выполнить два вызова процедуры Seek: Один вызов перед операцией Read, а другой - перед операцией Write (т.к. Read после чтения записи переместит указатель к следующей записи).

Для того чтобы обратиться к полю записи, необходимо указать имя переменной и через точку – имя поля:

<имя переменной> . <имя поля>

Обращение к полям имеет громоздкий вид, поэтому удобнее воспользоваться специально предназначенным для этого оператором:

With <имя переменной> Do <оператор>;

Внутри оператора With с полями записи можно работать, как с обычными переменными (т.е. без указания составного имени). Обработка отдельных полей определенных типов осуществляется так же, как и переменных данного типа.

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

Стандартный порядок работы с файлами:

Связывание файловой переменной с файлом

Открытие файла

Обработка файла

Закрытие файла

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

Повторная обработка файла

Повторное закрытие файла и т.д.

ПРИМЕР: Создать файл из списка 10 студентов с их оценками (номер, Ф.И.О. и три оценки). Вывести его содержимое на экран, изменить фамилию студента с номером, введенным с клавиатуры, заново прочитать файл. Примечание: номер – может быть эквивалентен «номеру зачетки студента».

Program file;

Type

wed = record {Тип wed включает 3 поля: n, fio, bal}

n : byte ; {n – номер студента в списке}

fio : string[15] ; { fio – Фамилия студента}

bal : array [1..3] of byte; {Поле bal – массив из 3 оценок }

end;

Var spisok : wed ; {Запись spisok типа wed}

sp : file of wed; {Файловая переменная типа wed}

procedure vvod; { ПРОЦЕДУРА СОЗДАНИЯ ФАЙЛА}

var i, j: byte;

begin

{ оператор assign находится в основной программе }

rewrite ( sp); {открытие файла для записи}

with spisok do

For i:=1 to 10 do

begin

n:=i; {описана в основной программе как byte }

writeln (' Введите фамилию - ', i ); readln(fio);

writeln (' Введите 3 оценки ', fio ); For j:= 1 to 3 do readln( bal [j] );

write (sp , spisok); { запись в файл информации о студенте}

end;

close (sp); { закрытие файла для записи, sp - файл записей типа wed }

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) ; { закрытие файла для записи, sp - файл записей типа wed }

end; { КОНЕЦ ПРОЦЕДУРЫ ЧТЕНИЯ И ПЕЧАТИ ВСЕГО ФАЙЛА }

procedure work; {КОРРЕКТИРОВКА И ЧТЕНИЕ ИЗМЕНЕННОГО ФАЙЛА}

var num: integer;

begin

reset ( sp); {открытие файла для чтения}

writeln ('номер= ');

readln (num); {Задает номер по списку (ключ), изменяемой записи}

seek (sp, num-1); {поиск записи с указанным номером (нумерация записей с 0

поэтому num-1)}

read (sp,spisok); {чтение записи в переменную spisok и перемещение указателя к след. записи}

write ('fio=');

writeln (spisok.fio);

seek (sp,filepos(sp)-1); {возвращение к изменяемой записи }

writeln (‘ Введите новую фамилию’);

readln;

readln(spisok.fio);

write (sp, spisok); {запись в файл измененной записи}

close (sp);

end; {КОНЕЦ ПРОЦЕДУРЫ КОРРЕКТИРОВКА И ЧТЕНИЕ ИЗМЕНЕННОГО ФАЙЛА}

BEGIN {НАЧАЛО ОСНОВНОЙ ПРОГРАММЫ}

assign (sp,'Vedom1.DAT'); {связать файловую переменную sp с файлом Vedom1.dat}

vvod; print; {процедуры создания и чтения файла}

work; print; {корректировка и чтение измененного файла}

readln

END.

Задание добавьте в ОСНОВНУЮ ПРОГРАММУ процедуры:

  1. В процедуру «создания нового файла» исправьте на поэлементный ввод данных в файл, т.е. вводится не жестко – 10 элементов (записей) в файл, а столько сколько захочет пользователь, для этого надо добавить проверку на продолжение ввода новых данных, например:

write('Продолжить ввод данных? Y/N ');

…………………………………………….

writeln('Ввод новых данных закончен. Файл закрывается. ');

  1. добавления новой записи в конец файла,

  2. удаление записи из файла по заданному критерию, например по номеру в списке.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]