- •Принципы модульного программирования
- •1. Процедуры
- •1.1.Пример программы с процедурой
- •1.2. Расположение процедур в программе
- •2. Функции
- •2.1. Пример программы с функцией
- •3. Внешние процедуры и функции
- •3.1. Модули пользователей
- •Сложные типы данных, применяемые в Паскале
- •1. Множества
- •1.1. Примеры программ с использованием множеств
- •2. Записи
- •2.1.Пример программы обработки записей
- •Файлы и наборы данных
- •1.Текстовые файлы
- •1.1. Создание текстового файла
- •1.2. Работа с существующим текстовым файлом
- •2. Последовательные файлы
- •2.1.Примеры программ с файлами, содержащими данные простого типа
- •2.2.Работа с файлами, содержащими данные сложного типа
- •2.2.1. Создание последовательного файла
- •2.2.2. Работа с файлом filan
- •3. Файлы с произвольным (прямым) доступом
- •3.1. Создание файла с прямым доступом
- •3.2. Работа с файлом: поиск и коррекция записей
- •3.3. Упорядочение записей в файле
- •3.4. Удаление записей из файла
- •3.5. Вставка записей в файл
- •Динамическое распределение памяти. Указатели и списки
- •1. Использование указателей. Списки
- •2. Очереди
- •2.1. Очередь типа Lifo
- •2.2. Очередь Fifo
- •Стандартные модули Турбо Паскаля
- •Модуль Crt
- •Модуль dos
- •Модуль Graph
- •1. Инициирование графического режима
- •2. Вывод текста (надписей) в графическом режиме
- •3. Вывод точек на экран
- •4. Построение графических изображений
- •5. Запоминание и вывод изображений
- •Библиографический список
- •Содержание
- •Процедуры 3
- •2. Функции 12
3.1. Создание файла с прямым доступом
Вначале выполняется предварительное заполнение файла начальной информацией (нулями, пустыми строками). А затем в него записывается основная информация по номерам записей: по порядку или в разнобой, как это требуется в задаче.
Пример.
Составить программу, формирующую телефонный справочник для одной АТС по четырёхзначным номерам. Структура записей файла следующая:
N телефона Фамилия Адрес (улица, номер дома и квартиры)
Справочник имеет номера от 0000 до 9999. Тогда алгоритм будет иметь вид.
1. Открыть файл для записи
2. Сформировать "пустую запись"
3. Для номера (k) от 0 до 9999
переписать "пустую" запись в файл справочника
4. Повторять
ввести номер,
установить указатель файла на номер
ввести Фамилию и адрес,
переписать в файл
Пока не конец ввода
5. Закончить.
Уточняем алгоритм.
1. Открыть файл для записи
2. Сформировать "пустую запись"
2.1. Номер (N) = 0
Фам = ``
Адрес =``
3. Для номера (k) от 0 до 9999
3.1. Установить указатель на k
3.2. Переписать запись в файл.
4. Повторять
4.1. ввести номер,
4.2. установить указатель файла на номер
4.3. ввести Фамилию и адрес,
4.4. переписать запись в файл
Пока не конец ввода
5. Закончить.
Программа для этого алгоритма будет иметь следующий вид.
Program spav;
Const
n=9999;
type
tel=record {запись справочника}
nom:integer;
fam:string[15];
Adr:string[15]
end;
Var
ftel:file of tel; {Телефонный справочник}
Rtl:tel; {Одна запись файла}
k:integer;
S:char;
Begin
{Начальное заполнение НД, n.1}
Assing(ftel,`tsprav`);
Rewrite (ftel);
{n.2.1}
{ "Пустая" запись}
With Rtl do
begin
nom:=0;
fam:=’’;
Adr:=’’;
end;
{заполнение НД, n.3}
For k:=0 to n do
Begin
Seek(ftel,k);
Write(ftel,Rtl);
end;
{Заполнение НД информацией, n.4}
Repeat
{п. 4.1}
Writeln (`Введите номер`);
Read (k);
{п.4.2}
Seek(ftel,k);
if not Eof(ftel) then
begin
nom := k;
With Rtl do
Begin
{п.4.3}
Writeln(`Фамилия`);
Read (fam);
Writeln (`Адрес`);
Read(Adr);
end;
{п.4.4}
Write(ftel,Rtl);
end
else
Writeln(‘Неправильный номер’);
Writeln(`Продолжаем?-Да/Нет`);
Readln(S);
until S=`H` ;
{п.5}
Writeln (`конец`);
end.
3.2. Работа с файлом: поиск и коррекция записей
Пример2.
Поиск номера телефона и его владельца по справочнику, сформированному в п. 3.1.
При работе программы должен вводиться номер телефона и, если таковой в справочнике есть, то на экран должны выдаваться фамилия и адрес его владельца. Если набран неправильный номер, которого в справочнике нет, то необходимо вывести сообщение об этом. Программа будет иметь вид:
Program Psktel;
Type
tel=record
nom:integer;
fam,Adz:string[15];
end;
Var
ftel:file of tel;
Rtel:tel;
num:integer;
S:char;
Begin
{ Открытие файла для чтения}
Assign (ftel,`tsprav`);
Reset (ftel);
{ Поиск фамилии и адреса абонента по номеру}
Repeat
Write(`Введите номер телефона`);
Read(num);
Seek(ftel,num);
If not eof (ftel) then
Begin
Read (ftel,Rtel);
With Rtel do
Writeln(‘Фамилия:’,fam, ‘Адрес:’, Adr,’Номер тел.:’,nom);
End
else
writeln(‘неправильный номер’);
Writeln (‘Продолжаем?–Да/Нет’);
Readln (S);
Until S=’H’;
end.
Пример 3.
Коррекция телефонного справочника ("tsprav"), например, - изменение адреса.
Обычно при коррекции сначала просматривают содержимое записи, а потом, если необходимо, изменяют его. Поскольку после выполнения пары операторов:
Seek (файл,номер);
Read (файл,поле);
(или Seek (файл,номер); Write(файл,поле); ) номер записи автоматически изменяется на 1, перед каждой операцией записи (чтения) необходимо задать номер (выполнить Seek).
При работе программы должен вводиться номер телефона и, если таковой в справочнике есть, то на экран должны выдаваться фамилия и адрес его владельца. После этого задается вопрос о необходимости коррекции адреса и, в случае утвердительного ответа, вводится новый адрес. Если набран неправильный номер, которого в справочнике нет, то необходимо вывести сообщение об этом. Программа будет иметь вид:
Program updtel;
Type
tel=record
nom:integer;
fam,Adz:string[15];
end;
Var
ftel:file of tel;
Rtel:tel;
k,num:integer;
S:char;
Begin
{ Открытие файла для чтения}
Assign(ftel,`tsprav`);
Reset(ftel);
{ Поиск по номеру фамилии и адреса абонента }
Repeat
Write(`Введите номер телефона`);
Read(k);
Seek(ftel,k);
If not eof (ftel) then
Begin
Read(ftel,Rtel);
With Rtel do
Write (`Фамилия:`,fam,`Адрес:`,Adr);
Writeln(`Будем менять адрес?-Да/Нет`);
Readln(S);
If S=`Д`then
Begin
Writeln(`Введите адрес`);
Read (Rtel.Adr);
Seek (ftel,k);
Write(ftel,Rtel);
end;
End
else
writeln (`неправильный номер`);
Writeln (`Продолжаем?-Да/Нет`);
Readln(S);
Until S=`H`;
end.
