- •Программирование на языке Паскаль в среде Turbo Pascal версии 6 и 7
- •Глава 7. Составные типы данных 29
- •Глава 8. Подпрограммы и функции 46
- •Глава 9. Файлы 50
- •Глава 10. Динамические переменные (списки) 58
- •Тип и функциональные возможности языка
- •Структура программы на Паскале
- •Алфавит языка
- •Правила написания имен
- •Структура блока описаний
- •Глава 2. Простые типы данных в языке Паскаль Понятие и классификация типов данных
- •Целочисленные типы
- •Вещественные типы
- •Логический тип
- •Символьный тип
- •Интервальный тип пользователя
- •Перечисляемый тип пользователя
- •Глава 3. Встроенные функции Понятие и классификация типов функций
- •Математические функции
- •Функции преобразования типов
- •Глава 4. Выражения Понятие и классификация типов выражений
- •Арифметические операции
- •Логические операции
- •Отношения
- •Битовые операции
- •Глава 5. Выполняемые операторы языка (для программ линейной структуры) Понятие и классификация
- •Классификация инструкций Паскаля
- •Оператор присваивания
- •Простейшие операторы ввода с клавиатуры
- •Простейшие операторы вывода на экран дисплея
- •Глава 6. Выполняемые управляющие операторы языка Простые управляющие операторы
- •Оператор безусловного перехода.
- •Оператор продолжения цикла.
- •Операторы ветвлений
- •Оператор условного перехода.
- •Неполный условный оператор.
- •Полный условный оператор.
- •Операторы циклов
- •Оператор арифметического цикла
- •Операторы итеративных циклов
- •Организация цикла с помощью условного перехода
- •Оператор итеративного цикла с предусловием
- •Оператор итеративного цикла с постусловием
- •Глава 7. Составные типы данных Классификация составных типов
- •Массивы Основные определения
- •Вывод массива
- •Примеры программ работы с массивами
- •Сортировки массива
- •Алгоритмы основных методов сортировок
- •Строки Строковые переменные
- •Стандартные (встроенные) процедуры работы со строками
- •Стандартные (встроенные) функции работы со строками
- •Структуры
- •Глава 8. Подпрограммы и функции Понятие подпрограмм в языке Паскаль.
- •Процедуры.
- •Описание и вызов функций
- •Параметры процедур и функций
- •Глава 9. Файлы Классификация внешних данных
- •Стандартные процедуры работы с файлами
- •Процедуры
- •Функции
- •Особенности работы с текстовыми файлами
- •Пример работы с текстовыми файлами.
- •Двоичные файлы (в машинных кодах) Типизированные файлы
- •Процедуры при работе с типизированными файлами
- •Функции при работе с типизированными файлами
- •Пример работы с типизированными файлами.
- •Файлы без типов
- •Процедуры, используемые при работе с нетипизированными файлами
- •Функции, используемые при работе с нетипизированными файлами.
- •Глава 10. Динамические переменные (списки) Понятие динамических переменных
- •Списочные данные
- •Односвязные списки
- •Двусвязные списки
- •Нульсвязные списки
- •Глава 11.Стандартный модуль работы с текстовым экраном Crt
- •2) Координаты экрана
- •3) Управление графическим режимом
- •4) Управление экраном и окном
- •5) Управление цветом
- •6) Вывод точек
- •7) Вывод линий
- •8) Вывод и закраска контуров
- •9) Окружности, эллипсы, дуги
- •10) Вывод текста
- •11) Последовательность работ при использовании графического режима
- •11) Пример программы приложения
Пример работы с текстовыми файлами.
Составить программу чтения вещественных чисел из текстового файла FLOAT.DAT, и запись тех из них, которые не превышают по модулю 9999, в новый текстовый файл INTEGER.DAT в табличной форме, по 10 чисел (округленных до ближайшего целого), в каждой записи. Файл с данными находится в текущем каталоге. По завершении работы файл FLOAT.DAT переименовать в REAL.DAT.
PROGRAM Example;
CONST
MAX=9999.0;
K : integer = 0; { счетчик выведенных чисел }
VAR
X :real;
Fin,Fout : text;
BEGIN
{$I- } {Отключение завершения программы по ошибке операций с файлом }
Assign(Fin,'FLOAT.DAT');
Reset(Fin); { открытие входного файла }
{$I+ } { Включение стандартного контроля ошибок операций с файлом }
if IOResult=0 then {если файл найден и открыт успешно }
begin
Assign(Fout,'INTEGER.DAT');
Rewrite(Fout); { открытие выходного файла }
while not Eof(Fin) do { пока не достигнут конец входного файла }
begin
Read(Fin,X);
if Abs(X)<MAX then
begin
Write(Fout,Round(X):5);
K:=K+1;
if K mod 10 = 0 then Writeln(Fout); { переход на новую запись
после каждого десятого выведенного числа }
end;
end;
Close(Fout); { закрытие обоих файлов }
Close(Fin);
Rename(Fin,'REAL.DAT'); { переименование входного файла }
end
else { еcли входной файл не найден }
Writeln(' Не удалось окрыть файл FLOAT.DAT');
END.
Двоичные файлы (в машинных кодах) Типизированные файлы
Типизированный файл состоит из записей одного типа, причем для описания записей файла может использоваться любой тип, кроме файла и типа-объекта. В отличие от текстовых, с типизированными файлами можно работать как с последовательными, так и с файлами прямого доступа. При вводе и выводе не производится преобразований из внутримашинного представления данных в символьный вид и обратно. Это ускоряет работу с файлами. Если в записи файла присутствуют строки, их размер должен быть рассчитан на длину максимальной встречающейся строки, причем в записях неиспользуемые байты строки все равно присутствуют. За счет этого, размер типизированного файла будет больше текстового файла с той же информацией.
Ниже приводятся процедуры и функции, используемые при работе с типизированными файлами, дополнительно к общим, приведенным ранее.
Процедуры при работе с типизированными файлами
Read(F,<список ввода>) - чтение данных из файла с занесением информации в переменные списка ввода. Все переменные должны быть одного типа, совпадающего с типом файла.
Seek(F,Num) - поиск записи с номером Num.
Truncate(F) - удаление части файла от текущей записи до конца.
Write(F,<список вывода>) - вывод данных в файл. Все элементы списка должны иметь тип, совпадающий с типом файла.
Функции при работе с типизированными файлами
FilePos(F) - возвращает целочисленный номер текущей записи файла. Нумерация начинается с нуля.
FileSize(F) - возвращает целочисленный текущий размер файла, но не в байтах, а в записях.
Пример работы с типизированными файлами.
Написать программу чтения из типизированного файла STUDENTS.BSF учетной информации о студентах (содержащей фамилию, номер курса, название группы и средний балл за последнюю сессию), создающую новый файл BAD_STUD.BSF со списком студентов - кандидатов на отчисление с первого курса (у которых средний балл ниже или равен 3.3), и исключающую из исходного списка документы о студентах, со средним баллом ниже 2.7.
В конце исходного файла дописать документы стандартной формы с фамилией "Вакансия" и нулевыми значениями остальных полей в количестве, равном числу исключенных студентов.
PROGRAM Example;
TYPE
Document = record {запись основного списка}
Name : string[20];
Kurs : 0..6;
Groop: string[4];
Ball : real;
End;
Kandidat = record {запись списка кандидатов на отчисление}
Name : string[20];
Groop: string[4];
End;
CONST
EMPTY : Document = {запись пустого документа - вакансии}
( Name : 'Вакансия';
Kurs : 1;
Groop: '0000';
Ball : 0.0
);
BAD_BALL = 3.3; {верхний предел балла кандидата на отчисление}
VERY_BAD_BALL = 2.7; {верхний предел балла отчисленного студента}
VAR
Student : Document; {переменная для чтения из входного файла} BadStudent : Kandidat; {переменная для записи в выходной список }
i,j,k : integer;
Fin : file of Document; {исходный файл документов студентов}
Fout : file of Kandidat; {создаваемый файл списка кандидатов }
BEGIN
Assign (Fin,'STUDENT.DAT');
Reset (Fin); {открытие исходного файла документов }
Assign (Fout,'BAD_STUD.DAT');
Rewrite(Fout); {открытие нового файла для списка }
i:=0; { i - старый номер студента в исходном файле }
j:=0; { j - новый номер студента в исходном файле после исключений }
while not SeekEof(Fin) do { пока не достигли конца файла }
begin
Seek(Fin,i); { выбираем очередной номер из исходного файла }
Read(Fin,Student); { и считываем его в рабочую структуру }
if Student.Ball > VERY_BAD_BALL then {если балл выше критерия
на отчисление }
begin
Seek(Fin,j); { ищем, куда этот документ надо записать в }
Write(Fin,Student); { исходный файл и записываем }
j:=j+1; { подсчет оставленных студентов
if Student.Ball < BAD_BALL then { если балл оставленного студента ниже критерия предупреждения }
begin
BadStudent.Name := Student.Name; { формируем элемент } BadStudent.Groop := Student.Groop; { списка кандидатов }
Write(Fout, BadStudent); { и выводим очередную запись в файл }
end;
end;
i:=i+1; { подсчет просмотренных документов студентов }
end;
Close(Fout); { закрыли файл со списком кандидатов }
if i>j then { если кого-то исключили }
for k:=j+1 to i do { начиная со следующего документа за последним }
begin { оставленным студентом и до конца файла }
Seek(Fin,k) { подводим указатель на нужное место в файле }
Write(Fin, EMPTY); { и записываем туда пустой документ - вакансию } end;
Close(Fin); { закрытие исправленного исходного файла документов }
END.