- •64 Жегуло а.И. Компьютерные науки 2-й семестр 2011-2012 гг. Компьютерные науки Лекции для студентов 1 курса мехмата, 2011-2012 уч. Г.
- •2 Семестр
- •16.Модули
- •16.1.Модуль и модульное программирование
- •16.2.Структура модуля
- •Interface //Раздел интерфейса
- •Implementation //Раздел реализации
- •Initialization //Раздел инициализации
- •Пример модуля и его использования
- •Interface //Раздел интерфейса
- •Implementation //Раздел реализации
- •Заголовок модуля
- •Раздел интерфейса interface
- •Раздел реализации implementation
- •Раздел инициализации initialization
- •16.4.Использование объявленных в модуле объектов
- •17.Файлы
- •17.1.Файлы. Классификация файлов
- •17.2.Организация работы с файлами
- •17.3.Подпрограммы для работы с файлами любых типов Связывание файловой переменной с файлом
- •Запись в файл
- •17.5.Обработка ошибок ввода-вывода
- •17.6.Текстовые файлы
- •17.6.1.Структура текстового файла
- •17.6.2.Особенности открытия текстовых файлов
- •17.6.3.Особенности чтения и записи для текстовых файлов
- •17.6.7.Поэлементная обработка текстовых файлов, состоящих из строковых значений и чисел
- •17.7.Типизированные файлы
- •17.7.1.Описание и структура типизированного файла
- •17.7.5.Сравнение текстовых и типизированных файлов
- •17.7.6.Пример работы с типизированными файлами из записей
- •18.Процедурные типы
- •18.1.Назначение процедурных типов
- •18.2.Описание процедурных типов и процедурных переменных
- •18.3.Присваивание процедурным переменным. Вызов подпрограмм через процедурные переменные
- •18.4.Процедурные переменные в качестве параметров
- •19.Рекурсия
- •19.1.Что такое рекурсия
- •19.2.Рекурсивные подпрограммы
- •19.3.Прямая и косвенная рекурсия
- •19.4.Предварительное (опережающее) описание подпрограммы
- •19.5.Опасности рекурсии
- •19.5.1.Бесконечная рекурсия
- •19.5.2.Глубокая рекурсия
- •19.5.3.Итерация и рекурсия, необоснованное применение рекурсии
- •19.6.Когда использовать рекурсию
- •19.7.Формы рекурсивных подпрограмм
- •19.8.Примеры рекурсивных программ
- •19.8.1.Вывод цифр целого числа в прямом порядке
- •19.8.2.Поиск максимального элемента массива
- •19.9.Задача о Ханойских башнях
- •20.Указатели
- •20.1.Указательные типы
- •Описание типизированного указателя
- •20.2.Операции с указателями
- •20.3.Примеры присваивания для указателей
- •20.4.Статические и динамические переменные
- •Создание новой динамической переменной базового типа и установка на нее указателя
- •Уничтожение динамической переменной, на которую ссылается указатель
- •Проблема потерянных ссылок
- •21.Динамические структуры данных
- •21.1.Данные статической структуры и данные динамической структуры
- •21.2.Односвязные линейные списки
- •21.2.1.Структура односвязного линейного списка
- •Вставка элемента после заданного элемента
- •21.3.Стеки
- •21.3.1.Реализация стека через односвязный линейный список
- •21.3.2.Применение стеков
- •21.3.3.Реализация стека на основе массива
- •21.4.Деревья
- •21.4.1.Основные определения
- •Алгоритм построения идеально сбалансированного дерева
- •21.4.3.Способы обхода дерева
- •Деревья поиска
- •Построение дерева поиска
17.7.6.Пример работы с типизированными файлами из записей
Создать файл из записей, где первое поле – фамилия, второе поле – год окончания мехмата. Исходные данные ввести с клавиатуры, признаком окончания ввода служит строка '---' при вводе фамилии.
Найти выпускника, ранее всех закончившего мехмат.
Переписать в новый файл такого же типа записи о выпускниках заданного года. Выдать оба файла на экран.
program File_Rec;
type stud=record
FIO:string[15];
year:word
end;
Fstud= file of stud;
var F1,F2: Fstud; //Файлы из записей
name1, name2: string[10];
Y: word; //Заданный год окончания
const tabs= #9#9; //Табуляция для вывода на экран
procedure Creat_F(var F:Fstud);
var s: stud;
begin
repeat
write(’FIO или ---:’); readln(s.FIO);
if s.FIO = ’---’ then break;
write(’year:’);
readln(s.year);
write(F, s)
until false;
end;
procedure Print_F(var F:Fstud);
var s: stud;
begin
while not Eof(F) do
begin
read(F, s);
writeln(s.FIO, tabs, s.year)
end
end;
procedure Min_Year(var F:Fstud);
var s, min: stud; //Запись min для выпускника с минимальным годом выпуска
begin
min.FIO:=''; //Начальные значения
min.year:=Maxint; //перед циклом поиска
while not Eof(F) do
begin
read(F, s); //Чтение записи
if (s.year < min.year) //Если год из записи меньше минимального года,
then min:=s //то запоминание нового минимального
end;
writeln(min.FIO, tabs, min.year) //Вывод записи с минимальным годом
end;
procedure F_F(var F1,F2:Fstud; Y:word);
var s: stud;
begin
while not Eof(F1) do
begin
read(F1, s); //Чтение записи
if (s.year=Y) //Если год из записи файла совпадает с заданным годом
then write(F2, s) //то копирование записи в файл F2
end
end;
begin
//______ Файл выпускников ______
write('Имя файла1:'); readln(name1);
Assign(F1, name1);
Rewrite(F1);
writeln(' Ввод данных для файла выпускников:');
Creat_F(F1);
Reset(F1);
writeln(' Файл выпускников:');
Print_F(F1);
writeln(' Выпускник, ранее других окончивший мехмат');
Reset(F1);
Min_Year(F1);
//______ Файл выпускников заданного года ______
write('Имя файла2:'); readln(name2);
Assign(F2, name2);
Rewrite(F2);
write('Год выпуска:'); readln(Y);
Reset(F1);
F_F(F1,F2,Y);
writeln(' Файл выпускников ', Y, ' года:');
Reset(F2);
Print_F(F2);
Close(F1);
Close(F2);
end.
18.Процедурные типы
18.1.Назначение процедурных типов
Процедурные типы позволяют трактовать процедуры и функции как значения, которые можно присваивать переменным процедурного типа и передавать в качестве параметров другим процедурам и функциям.
Процедурные переменные используются для вызова подпрограмм, которые присвоены этим переменным.
Процедурные переменные содержат ссылку на код процедуры или функции.
18.2.Описание процедурных типов и процедурных переменных
Существует две разновидности процедурных типов: тип-процедура и тип-функция.
Описание процедурных типов аналогично заголовку процедуры и функции, за исключением того, что отсутствует идентификатор процедуры и функции.
Например:
Type
TStrProc=procedure(n:integer; var S:string);{Описание типа-процедуры с целочисленным параметром
и параметром строкой}
TPr=procedure; {Описание типа-процедуры без параметров}
TFunc=function(a, b:integer):integer; {Описание типа-функции с двумя целочисленными параметрами
и целочисленным результатом}
var ps: TstrProc; {Описание процедурных переменных}
p: Tpr;
f1,f2: TFunc;