WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 || 3 | 4 |

Пример Дан текстовый файл с именем 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]. Это достигается за счет использования указателей.

Pages:     | 1 || 3 | 4 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.