Пример Дан текстовый файл с именем Spis.dan, содержащий несколько записей заданной структуры (табл. 1), и расположенный в текущем каталоге. Каждая строка файла содержит одну запись. Необходимо ввести записи из файла в массив записей, определив при этом число введенных записей. Упорядочить записи в массиве по убыванию значений поля “Год рождения”, используя для этого алгоритм обменной сортировки. Записать упорядоченный массив в файл с именем Sort.dan.
Таблица Номер п/п Фамилия Имя Отчество Год рождения число строка из 30 символов 1900..ОПИСАНИЕ ПРОГРАММЫ USES CRT; { Подключение стандартного модуля ТР} Type Type_Rec = Record { Описания типа для структуры } Nom : Word; { Поле номер} FIO : String[30]; { Поле ФИО} YEAR : 1900..2000; { Поле год рождения} End;
Var F_input, F_out : Text; { Файловые переменные для связи с входным и выходным файлами} Spisok :Array [1..1000] of Type_Rec; { Описание массива записей} Kol_Zap, i : Word; { Число и счетчик записей} Zap : Type_Rec; { Описание одной записи} Key : Boolean; { Ключ сортировки} Begin Assign (F_input, Spis.dan);
Reset (F_input); { Открытие файла для чтения} i := 0; { Счетчик считанных записей} { Ввод данных из текстового файла в массив } While not Eof (F_input) Do begin inc (i);
With Spisok[i] Do { Оператор присоединения} Readln (F_input, Nom, FIO, YEAR); { Ввод строки: для текстового файла необходимо указывать каждое вводимое поле записи} end; Kol_Zap := i; { Число записей в файле} Repeat { Обменная сортировка массива Spisok по полю “Год рождения”} Key := False;
For i := 1 To Kol_Zap - 1 Do If Spisok[i].YEAR > Spisok[i+1].YEAR then begin Key := True; { Обмен записей} Zap := Spisok[i];
Spisok[i]:= Spisok[i+1];
Spisok[i+1]:= Zap;
end;
Until Key = False; { Конец сортировки} { Вывод результатов в файл} Assign (F_out, Sort.dan);
Rewrite (F_out); { Открытие файла для записи} { Вывод заголовка для списка} Writeln(F_out, Упорядоченный список записей);
Writeln(F_out, Номер Фамилия Имя Отчество Год рождения);
For i := 1 To Kol_Zap Do With Spisok[i] do Writeln (F_out, Nom:6, FIO, Year:6); { Вывод записи: для текстового файла необходимо указывать каждое выводимое поле записи} Close (F_input); Close(F_out); { Закрытие файлов} End.
Порядок выполнения работы 1. Получить вариант задания у преподавателя.
2. Определить состав и структуру входной и выходной информации.
3. Написать и отладить программу, продемонстрировать её работу преподавателю.
4. Оформить и сдать отчет.
Типовое задание Создать текстовый файл, состоящий из записей, имеющих заданную структуру (см. ваш вариант).
Написать программу, решающую следующие задачи:
1) Занесение записей из текстового файла в массив записей с одновременным определение числа записей во входном файле.
2) Вывод на экран полученного массива.
3) Поиск в массиве и вывод на экран записей по заданному полю.
4) Удаление из массива записей в соответствии с заданием.
5) Вывод на экран оставшегося массива.
6) Упорядочение массива по заданному полю.
7) Вывод упорядоченного массива на экран и в новый текстовый файл.
Все выводимые на экран и в файл результаты должны быть снабжены заголовками, поясняющими этот результат и оформлены в виде таблиц.
Варианты заданий Вариант Фамилия имя отчество автора Название книги Год издания строка символов строка символов число Поиск и вывод на экран записей о всех книгах, изданных до 1950 года.
Удаление записей о книгах, изданных с 1960 по 1970 годы.
Упорядочение массива по возрастанию года издания.
Вариант Номер Личный шифр Фамилия Дата рождения п/п студента имя, отчество число месяц год число 6 символов 20 символов Поиск и вывод на экран записей о всех студентах, родившихся в 1982 г.
Удаление записей о студентах, имеющих шифры “ВС001 - ВС200”.
Упорядочение массива по возрастанию значений поля “Личный шифр”.
Вариант Номер Фамилия Табельный Размер п/п имя отчество номер оклада число 20 символов 10 символов вещественное число Поиск и вывод на экран записей о всех работниках, имеющих оклад, превышающий величину 600.0.
Удаление записей о работниках с табельным номером, начинающимся с символа “А”.
Упорядочение массива по возрастанию размера оклада.
Вариант Номер Фамилия, инициалы Шифр Год п/п специальности рождения число 15 символов 6 символов 1950..Поиск и вывод на экран записей о всех студентах, имеющих шифр, начинающийся с символов “ВС”.
Удаление записей о студентах 1980 года рождения.
Упорядочение массива по возрастанию года рождения.
Вариант Номер Фамилия имя отчество Факультет Номер п/п специальности число 20 символов 5 символов целое от 1 до Поиск и вывод на экран записей о всех студентах факультета “ФВТ”.
Удаление записей о студентах с номером специальности меньше 102030.
Упорядочение массива по возрастанию номера специальности.
Вариант Номер Фамилия, инициалы Факультет Шифр п/п группы число строка символов 6 символов 8 символов Поиск и вывод на экран записей о всех студентах факультета “ФАИТ”.
Удаление записей о студентах факультета “ФВТ”.
Упорядочение массива по убыванию шифра специальности.
Вариант Номер Фамилия имя отчество Дата рождения Пол п/п число месяц год “жен”/ “муж” число строка символов 3 символа Поиск и вывод на экран записей о всех студентках.
Удаление записей о студентах мужского пола.
Упорядочение массива по возрастанию года рождения.
Вариант Фамилия и инициалы автора Название книги Год издания строка символов строка символов число Поиск и вывод на экран записей о всех книгах, изданных после 1975 года.
Удаление записей о книгах, название которых, начинаются на букву “А”.
Упорядочение массива по возрастанию года издания.
Вариант Фамилия и инициалы автора Название книги Год издания 15 символов 20 символов число Поиск и вывод на экран записей о всех книгах, изданных до 1985 года.
Удаление записей о книгах, с фамилией автора “Иванов”.
Упорядочение массива по убыванию года издания.
Вариант Номер Фамилия имя отчество Шифр группы Размер п/п стипендии число 20 символов 6 символов целое число Поиск и вывод на экран записей о всех студентах группы 96ВС1.
Удаление записей о студентах, имеющих шифр “97ВС2”.
Упорядочение массива по убыванию размера стипендии.
Вариант код товара наименование товара цена количество число 30 символов число число Поиск и вывод на экран записей о товарах, количество которых равно нулю.
Удаление записей с ценой, превышающей 1000.
Упорядочение массива по возрастанию кодов товаров.
Вариант код предприятия название кол-во месяц оплаты предприятия электроэнергии число 15 символов число число Поиск и вывод на экран записей о всех предприятиях, месяц оплаты которых меньше текущего.
Удаление записей о предприятиях, месяц оплаты которых равен текущему.
Упорядочение массива по убыванию кодов предприятий.
Вариант код пациента номер страхового полиса организация число 8 символов 20 символов Поиск и вывод на экран записей о всех пациентах данной организации.
Удаление записи с данным номером страхового полиса.
Упорядочение массива по возрастанию кодов пациентов.
Вариант Ф.И.О. больного адрес больного номер участка дата выписки 30 символов 20 символов число число-месяц Поиск и вывод на экран записей о всех больных на данном участке.
Удаление записей о больных, выписанных в прошлом месяце.
Упорядочение массива по алфавиту (по полю ФИО).
Вариант код линии метро название кол-во станций протяжённость линии число символы число действ. число Поиск и вывод на экран записей о Кольцевой линии метро.
Удаление записей о линии, имеющей наименьшее количество станций.
Упорядочение массива по убыванию кода линии метро.
Вариант номер дома номер квартиры квартплата Ф.И.О. квартиросъёмщ.
число число действ. число 30 символов Поиск и вывод на экран записей о всех квартирах дома №5.
Удаление записей о кварторосъёмщике с фамилией “Иванов”.
Упорядочение массива по возрастанию номеров домов.
Вариант Ф.И.О. квартиросъёмщ. жилая площадь кол-во жильцов 30 символов действ. число число Поиск и вывод на экран записей о жильцах, жилая площадь которых>100м2.
Удаление записей о квартиросъёмщиках с фамилией “Иванов”.
Упорядочение массива по убыванию количества жильцов.
Вариант табельн. номер Ф.И.О. разряд зарплата число 30 символов число действ. Число Поиск и вывод на экран записей о всех сотрудниках, имеющих 10 разряд.
Удаление записей о сотрудниках, имеющих зарплату меньше 1000.
Упорядочение массива по возрастанию табельных номеров.
Вариант номер цеха табельный номер Ф.И.О. отраб.время число число 30 символов число Поиск и вывод на экран записей о всех сотрудниках 11 цеха.
Удаление записей о сотрудниках, чьё отработанное время равно нулю.
Упорядочение массива по убыванию номера подразделения.
Вариант номер чит.билета Ф.И.О. дата выдачи книги дата возврата число 30 символов число - месяц - год Поиск и вывод на экран записей о всех читателях, которые не возвратили взятые в библиотеке книги на текущую дату.
Удаление записей о читателях фамилии которых начинаются с буквы “И”.
Упорядочение массива по возрастанию номеров читательских билетов.
1.4. Лабораторная работа № Типизированные файлы Цель работы: Ознакомиться со стандартными процедурами работы с типизированными файлами. Приобрести навыки разработки программ с использованием типизированных файлов.
Теоретическая часть Для работы с типизированным файлом необходимо с помощью процедуры ASSIGN связать файловую переменную с физическим именем файла, а затем открыть его для чтения или записи.
Для типизированных и безтиповых файлов обе процедуры открытия RESET и REWRITE устанавливают режим чтение/запись в соответствии с предопределенным значением системной переменной FileMode (по умолчании оно равно 2). В этом случае независимо от используемой процедуры открытия, файл открывается как для чтения, так и для записи. Но необходимо помнить, что если файл не существует, то его нельзя открыть процедурой RESET, а если вы открываете файл для чтения процедурой REWRITE, то его содержимое будет уничтожено. Поэтому имеет смысл открывать файл для записи процедурой RESET только в том случае, если файл уже существует и вам необходимо добавить в него записи.
Если установить системную переменную FileMode в значение = 1, то при использовании процедуры RESET, файл открывается только для записи, а при FileMode = 0 - только для чтения.
Для чтения данных из типизированного файла используется процедура:
READ (<файловая переменная>,<список ввода>);
Здесь список ввода содержит одну или более переменных такого же типа, что и компоненты файла. Если файл исчерпан, обращение к процедуре READ вызовет ошибку ввода-вывода с номером 100: “Disk read error” (“Ошибка чтения с диска”).
Для записи данных в типизированный файл используется процедура:
WRITE (<файловая переменная>,<список вывода>);
Здесь список вывода содержит одно или более выражений такого же типа, что и компоненты файла.
Длина любого компонента типизированного файла строго постоянна, что дает возможность организовать прямой доступ к каждому из них (т.е. доступ к компоненту по его порядковому номеру). Перед первым обращением к процедурам ввода-вывода указатель файла стоит в его начале и указывает на первый компонент файла с номером 0. После каждого чтения или записи указатель сдвигается к следующему компоненту файла.
Для поддержки прямого доступа к компонентам типизированного файла используются две стандартные функции: FILESIZE и FILEPOS, а также процедура SEEK.
Процедура SEEK (<файловая переменная>,<№ компонента>) смещает указатель файла к компоненту с заданным номером.
Здесь № компонента - выражение типа LONGINT.
Функция FILESIZE(<файловая переменная>) - возвращает значение типа LONGINT, которое содержит количество компонентов файла.
Функция FILEPOS(<файловая переменная>) - возвращает значение типа LONGINT, которое содержит порядковый номер компонента файла, который будет обрабатываться последующей операцией ввода-вывода.
Преимущество типизированных файлов: эффективный способ хранения информации и упрощение операций ввода-вывода. Так, например, при вводе структур данных не нужно указывать каждое поле, как это требовалось при работе с текстовыми файлами.
К недостаткам можно отнести невозможность просмотра содержимого типизированного файла и его изменения каким-либо редактором, так как числовые данные записываются в двоичном коде.
Создать типизированный файл можно программным способом.
Пример работы с типизированными файлами Создание типизированного файла Пусть дан текстовый файл, содержащий несколько записей, структура которых представлена в табл. 1(см. лабораторную работу №1) Необходимо сформировать типизированный файл той же структуры.
ОПИСАНИЕ ПРОГРАММЫ Uses crt;
Type tzap=record { Описания типа для структуры } nom : word;
fio : string[30];
godr : 1900..2000;
end;
Var f_out : file of tzap; { Файловая переменная для типизированного файла} zap : tzap;
f_in : text; { Файловая переменная для текстового файла} name_file_input, name_f_out : string[12]; {Имена файлов} Begin writeln(' Введите имя текстового файла');
readln(name_file_input);
assign(f_in,name_file_input);
writeln(' Введите имя типизированного файла');
readln(name_f_out);
assign(f_out,name_f_out);
reset(f_in); { Открытие текстового файла для чтения} rewrite(f_out); { Открытие типизированного файла для записи} while not eof(f_in) do begin with zap do readln(f_in,nom,fio,godr); { Чтение из текстового файла} write(f_out,zap); {Запись в типизированный файл } end; close(f_in); close(f_out); { Закрытие файлов } End.
Порядок выполнения работы 1. Получить вариант задания у преподавателя.
2. Определить состав и структуру входной и выходной информации.
3. Выделить глобальные переменные и описать их.
4. Разработать структуру программы.
5. Каждую функционально-законченную часть оформить в виде отдельной процедуры.
6. Отладить программу и продемонстрировать её работу преподавателю.
7. Оформить и сдать отчет.
Типовое задание Создать два текстовых файла, состоящих из записей, имеющих заданную структуру и содержащих заданное количество записей(см. ваш вариант).
Написать программу, решающую следующие задачи:
1) Ввод данных из текстовых файлов и запись в типизированные файлы.
2) Вывод на экран содержимого типизированных файлов.
3) Ввод каждого из сформированных типизированных файлов в массив записей и их сортировка по заданного полю.
4) Вывод упорядоченных массивов записей в новые типизированные файлы и на экран дисплея.
5) Сортировка слиянием содержимого двух упорядоченных типизированных файлов в новый типизированный файл.
6) Вывод на экран содержимого объединенного и упорядоченного типизированного файла.
Все выводимые на экран результаты должны быть снабжены заголовками, поясняющими этот результат и оформлены в виде таблиц.
При разработке программы использовать обращение к процедурам с параметрами. Процедуры необходимо оформлять так, чтобы их можно было использовать дважды, т.е. для каждого их файлов.
Варианты заданий выбрать из лабораторной работы №1. Число записей в текстовых файлов задает преподаватель.
2. Разработка программ с использованием динамической памяти 2.1. Динамические переменные При выполнении любой программы, каждая используемая в ней переменная получает свой адрес в оперативной памяти (ОП). В Турбо Паскале имеются два способа распределения памяти для переменных:
статический и динамический. При статическом распределении всем объявленным в разделе описаний программы переменным выделяются фиксированные участки памяти. В связи с этим использование заранее не объявленных переменных не допускается. Причем, под все объявленные в главной программе переменные отводиться память размером не превышающим 64Кб. При динамическом распределении памяти имеется возможность создавать новые, не объявленные заранее переменные, и размещать их на свободные участки в динамической области ОП, называемой “кучей”[2]. Это достигается за счет использования указателей.
Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.