- •1. Подпрограммы
- •1.1. Описание подпрограмм
- •1.2. Обращение к подпрограммам
- •1.3. Виды параметров подпрограмм
- •1.3.1. Параметры-значения и параметры-переменные
- •1.3.2. Параметры процедурного типа
- •1.3.3. Параметры-константы
- •1.3.4. Нетипизированные параметры подпрограмм
- •1.3.5. Массивы и строки открытого типа
- •1.4. Рекурсивные подпрограммы
- •2. Файлы данных
- •2.1. Текстовые файлы
- •2.2. Типизированные файлы
- •2.3. Нетипизированные файлы
- •2.4. Обработка ошибок, возникающих в действиях с файлами
- •3. Указатели - ссылочные типы данных
- •4. Модули
- •5. Локальные и глобальные сети эвм
- •6. Базы данных
- •6.1. Модели организации данных
- •6.2. Нормализация данных
- •6.3. Типы связей между объектами
- •7. Основы компьютерной безопасности
- •7.1. Компьютерные вирусы
- •7.2. Защита информации в Интернете
- •Контрольные работы
- •Тема 1. Параметры-значения и параметры-переменные
- •Пример выполнения задания
- •Решение. Составляем алгоритм (изображен ниже), а затем программу.
- •Варианты задания
- •Тема 2. Процедурный тип Пример выполнения задания
- •Варианты задания
- •Тема 3. Рекурсия Пример выполнения задания
- •Варианты задания
- •Тема 4. Текстовые и типизированные файлы Пример выполнения задания
- •Варианты задания
- •Тема 5. Указатели Пример выполнения задания
- •Варианты задания
- •Тема 6. Модули Пример выполнения задания
- •Варианты задания
- •Библиографический список
- •Оглавление
- •1.1. Описание подпрограмм ……………………………………………… 1
2. Файлы данных
Под файлом понимают последовательность однотипных компонент, которая размещается в поименованной области внешнего носителя (жесткого диска, компакт-диска, магнитной ленты и т.п.). Файл может быть элементом структуры, например массива, но он не должен входить в состав другого файла. Число компонент файла при его объявлении не фиксируется и может быть равным нулю (пустой файл). Turbo Pascal позволяет работать с тремя видами файлов: текстовыми, типизированными и нетипизированными. Несмотря на определенные различия в действиях с ними, они используют ряд общих операций, о которых будет сказано далее.
Представителем файла в программе является переменная файлового типа (файловая переменная – ФП). С помощью одной ФП можно работать с разными однотипными файлами. Для этого необходимо связать с ней имя конкретного файла на диске, представленное в соответствии с правилами MS DOS (но не более 79 символов для полного имени), следующей процедурой:
Assign(<ФП>, <Полное имя файла>).
Процедура Rewrite(<ФП>) открывает файл для записи, создавая новый пустой файл или удаляя содержимое существующего файла.
Процедура Reset(<ФП>) открывает существующий текстовый файл для чтения, а другие виды файлов – для чтения или записи (перезаписи). В результате выполнения процедуры маркер файла будет установлен на его первом элементе.
Процедура Close(<ФП>) закрывает файл и освобождает связанный с ним буфер. При ее выполнении в файл, открытый для записи, заносится признак конца файла. Последний может быть обнаружен с помощью логической функции EOF(<ФП>) (End Of File – конец файла). После выполнения процедуры можно связать файловую переменную с другим файлом
Закрытый файл можно удалять процедурой Erase(<ФП>) и переименовывать процедурой Rename(<ФП>, <Новое имя>).
2.1. Текстовые файлы
Текстовый файл представляет собой совокупность символов, разделенных на строки разной длины, в том числе и пустые. В конце каждой строки стоит признак конца строки, который можно выявить с помощью логической функции EOLn(<ФП>) (End Of Line – конец строки). Признак входит в состав строки своими двумя байтами #13 (CR) и #10 (LF). Файловая переменная описывается служебным словом text (тип текстовый файл). Такие файлы являются файлами последовательного доступа. Это означает, что работа со строками файла может вестись либо в режиме их последовательного чтения, либо их последовательной записи. В первом случае файл должен быть открыт процедурой Reset, во втором – процедурой Rewrite. Имеется возможность открытия файла процедурой Append(<ФП>) для того, чтобы дописать текст в его конец. Запись данных в текстовый файл производят процедурами Write(<ФП>, <Список вывода>) и Writeln(<ФП>, <Список вывода>). Первая из них оставляет текущий указатель в записываемой строке и следующая процедура записи будет выводить данные в эту же строку. Вторая процедура после завершения записи элементов списка в строку переведет текущий указатель в начало новой строки. В списке вывода допустимо записывать через запятую выражения целого, вещественного, логического, символьного типа, типов string и PChar, в том числе с указанием формата записи в файл. При записи чисел происходит автоматическое преобразование числового формата данных в символьный. Процедура Writeln(<ФП>) переводит текущий указатель в начало следующей строки. (Заметим, что на реальном физическом носителе содержимого текстового файла мы не найдем привычных нам строк текста, они присутствуют только в логическом файле, который представлен файловой переменной.) Чтение данных из текстового файла выполняют процедурами Read(<ФП>, <Список переменных>) и Readln(<ФП>, <Список переменных>). Вторая процедура, в отличие от первой, после присвоения переменным значений из строки файла производит переход в начало следующей строки. Переменные могут быть целого, вещественного, символьного типа, типов string и PChar. Процедура Readln(<ФП>) позволяет перейти к следующей строке файла. Обмен данными с файлами происходит опосредованно – через выделяемый при открытии файла буфер обмена (участок оперативной памяти). Физический обмен происходит лишь при заполнении буфера. По умолчанию размер буфера равен 128 байтам. С целью организации эффективного обмена можно изменять размер буфера процедурой SetTextBuf(<ФП>, <Буфер> [,<Размер>]). Третий параметр процедуры является необязательным. Процедура Flush(<ФП>) принудительно записывает данные из буфера в файл независимо от степени заполнения буфера. И последнее: в языке определены две стандартные ФП – Input и Output. Они связаны автоматически с клавиатурой и экраном соответственно, не требуют производить открытие и закрытие файла, и их имена не указывают в процедурах ввода/вывода.
Покажем на примере реализацию действий с текстовыми файлами. Пусть требуется произвести физическое форматирование хранимого в файле текста, например после каждых 45 строк должны идти 5 пустых строк. Ниже представлены структурограмма алгоритма и соответствующая программа.
Ввод имен
файлов и значения n
Связывание ФП с именами файлов
Открытие f1 для чтения и f2 для записи
Пока не конец f1
i := 1
Чтение s из f1
Запись s в f2
i := i + 1
До i > n или конца f1
Конец f1 ?
НЕТ
i := 1 (1) 5
Запись в f2 пустой строки
Закрытие f1 и f2
Удаление f1
Переименование f2
program Text_Files;
const n = 45;
s1 = 'ishodn'; s2 = 'rez'; {Исходный и результирующий файлы}
var
f1, f2 : text; {Описание файловых перменных}
i : byte;
s : string;
begin
assign(f1,s1); assign(f2, s2); {Связываем файловые переменные с файлами}
reset(f1); {Пусть исходный файл уже создан в текстовом редакторе}
rewrite(f2); {Открываем результирующий файл для записи}
while not eof(f1) do begin
i := 1; {Начинаем считать строки от 1 до 45}
repeat
readln(f1, s); {Читаем строку из файла f1}
writeln(f2, s); {Пишем строку в f2}
i := 1 + 1 {Переходим к следующей строке}
until (i > n) or eof(f1);
if not eof(f1) then {Если не кончился f1, вставляем в f2 пустые строки}
for i := 1 to 5 do writeln(f2)
end; {while}
close(f1); close(f2);
erase(f1); {Удаляем исходный файл}
rename(f2, s1) {Переименовываем результирующий файл}
end.
