- •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.5.Сравнение текстовых и типизированных файлов
Текстовые файлы |
Типизированные файлы |
1. Подготовка файла для записи в конец файла |
|
Append(F) //Открыть файл на дописывание |
Seek(F,FileSize(F)) //Установить файловый указатель на конец файла |
2. Выдача последних k строк (компонентов) |
|
var F:text; name,s:string; i,k,n: integer; begin write('Имя файла:'); readln(name); Assign(F, name); Reset(F); write(’Сколько строк выдать?'); readln(k); n:=0; //Подсчет числа n строк в файле while not Eof(F) do begin readln(F, s); n:=n+1 end; Reset(F); if (n>k) then //Если строк больше, чем запрошено for i:=1 to n-k do //то проброс n-k строк readln(F, s); //из начала файла while not Eof(F) do //Вывод строк на экран begin readln(F, s); writeln(s) end; Close(F) end. |
var F:file of integer; name:string; x,k,n: integer; begin write('Имя файла:'); readln(name); Assign(F, name); Reset(F); write('Сколько чисел выдать?'); readln(k); n:=FileSize(F); //Определение числа компонентов
if (n>k) then //Если чисел больше, чем запрошено Seek (F,n-k); //то установка файлового указателя //на k-е число от конца while not Eof(F) do //Вывод чисел на экран begin read(F,x); write(x, ’ ’) end; Close(F) end. |
3. Замена строки (компонента) с заданным номером |
|
Открываем новый временный файл Ft с именем, полученным добавлением символов ’tmp’ к имени исходного файла. Копируем строки из файла F в файл Ft, считая строки. Если номер строки равен k, вместо строки исходного файла пишем новую строку. Оба файла закрываем, исходный файл удаляем, а временный файл переименовываем в исходный. var F,Ft:text; name,s,snew:string; i,k: integer; begin write(’Имя файла:’); readln(name); Assign(F, name); Reset(F); write(’Какую строку заменить?’); readln(k); //Номер заменяемой строки write(’Новая строка:’); readln(snew); Assign(Ft, ’tmp’+name); Rewrite(Ft); i:=0; //Счетчик строк while not Eof(F) do begin readln(F,s); i:=i+1; if i=k tnen writeln(Ft,snew) else writeln(Ft,s) end; Close(F); Close(Ft); Erase(F); Rename(F,name) End. |
var F:file of integer; name:string; k,xnew: integer; begin write(’Имя файла:’); readln(name); Assign(F, name); Reset(F); write(’Число с каким номером заменить?’); readln(k); //Номер числа write(’Новое число:’); readln(xnew); Seek(F,k); Write(F,xnew); Close(F) End. |