Добавлен: 15.11.2018
Просмотров: 5596
Скачиваний: 36
Read(F, S);
If S.Year >= 1980 Then
Write(FV, S);
End;
{ внешний файл открывается для записи, вспомогательный файл - для чтения, и все содержимое вспомогательного файла переписывается во внешний файл}
Reset(FV);
Rewrite(F);
While Not EOF(FV) Do
Begin
Read(FV, S);
Write(F, S);
End;
{вывод для контроля после удаления записей}
Reset(F);
While Not Eof(F) do
Begin
Read(F,S);
Writeln(S.Fio, S.Year:6);
End;
Сlose(F);
Close(FV);
{удаление вспомогательного файла с диска}
Erase(FV);
End.
Контрольные вопросы
-
Что такое файл данных?
-
Какие виды файловых типов существуют в Турбо Паскале?
-
Как в разделе типов задается файловый тип?
-
Каким образом описываются переменные файловых типов?
-
Как подразделяются файлы по видам доступа к их компонентам?
-
Какие операции определены над файлами?
-
Что необходимо выполнить для открытия файлов?
-
Какие процедуры предназначены для открытия файлов и как они работают?
-
Как распознать конец файла?
-
Как распознать файл на диске?
-
Для чего предназначена процедура Close?
-
По каким правилам выполняется чтение типизированных файлов?
-
Как осуществляется запись в файл?
-
Какие процедуры и функции предназначены для прямого доступа к элементам типизированных файлов?
-
В чем состоят особенности работы с текстовыми файлами?
Задачи I уровня
Эти задачи предназначены для приобретения навыков работы с типизированными файлами с использованием типовых алгоритмов.
Постановка задачи
Подготовить данные об абитуриентах, поступающих в университет. Информацию о каждом абитуриенте оформить в виде записи, содержащей следующие поля:
1. Фамилия, имя, отчество.
2. Год рождения.
3. Год окончания школы.
4. Средний балл в аттестате.
5. Признак - нуждается ли в общежитии.
6. Оценки вступительных экзаменов.
Разработать программу записи подготовленных данных во внешний файл и программу обработки созданного внешнего файла.
Варианты задания
I. Из внешнего файла, содержащего исходные данные, удалить записи об абитуриентах:
1. Получивших хотя бы одну оценку 2.
2. Получивших все оценки 3.
3. Имеющих средний балл больше 4,5 и нуждающихся в общежитии.
4. Имеющих средний балл в аттестате меньше 4.
5. Старше восемнадцати лет.
6. Неполучивших ни одной оценки 5.
7. Имеющих отличный аттестат и получивших все оценки 5.
9. Нуждающихся в общежитии и получивших хотя бы одну оценку 3.
10. Старше семнадцати лет, имеющих отличный аттестат.
Распечатать полученный файл.
II. Используя внешний файл, содержащий исходные данные, добавить N записей и распечатать список абитуриентов:
1. Имеющих в аттестате оценки только 5; N=2.
2. Имеющих в аттестате одну оценку 4, а остальные оценки 5; N=3.
3. Имеющих средний балл больше 4,5; N=4.
4. Имеющих средний бал меньше 4; N=3.
5. Ненуждающихся в общежитии; N =2.
6. Нуждающихся в общежитии; N=3.
7. Сдавших вступительные экзамены только на оценки 5; N=4.
8. Сдавших вступительные экзамены на оценки 4 и 5; N=2.
9. Сдавших экзамены с двумя оценками 4 и остальными оценками 5; N=3.
10. Получивших на вступительных экзаменах одну оценку 3; N=4.
Задачи II уровня
1. Создать файл, содержащий сведения о месячной заработной плате рабочих завода. Каждая запись содержит поля: фамилия рабочего, наименование цеха, размер заработной платы за месяц. Количество записей произвольное. Вычислить общую сумму выплат за месяц по цеху X, а также среднемесячный заработок рабочего этого цеха. Напечатать для бухгалтерии ведомость для начисления заработной платы рабочим этого цеха.
2. Создать файл, содержащий сведения о количестве изделий, собранных сборщиками цеха за неделю. Каждая запись содержит поля: фамилия сборщика, количество изделий, собранных им ежедневно в течение шестидневной недели, т.е. раздельно — в понедельник, вторник и т.д. Количество записей произвольное. Написать программу, выдающую на печать следующую информацию: фамилия сборщика и общее количество деталей, собранное им за неделю; фамилия сборщика, собравшего наибольшее число изделий, и день, когда он достиг наивысшей производительности труда.
3. Создать файл, содержащий сведения о телефонах абонентов. Каждая запись имеет поля: фамилия абонентов, год установки телефона, номер телефона. Количество записей произвольное. Написать программу, выдающую информацию следующего вида: по вводимой фамилии абонента выдается номер телефона; определяется количество установленных телефонов указанного года. Номер года вводится с терминала.
4. Создать файл, содержащий сведения об ассортименте игрушек в магазине. Структура записи: название игрушки, цена, количество, возрастные границы, например 2—5, т.е. от 2 до 5 лет. Количество записей произвольное. Написать программу, в результате выполнения которой выдаются следующие сведения: названия игрушек, которые подходят детям от 1 до 3 лет; стоимость самой дорогой игрушки и ее наименование; название игрушки, которая по стоимости не превышает х руб. и подходит ребенку в возрасте от а до b лет. Значения х, а, b ввести с терминала.
5. Создать файл, содержащий сведения об ассортименте обуви в магазине фирмы. Структура записи: артикул, наименование, количество, стоимость одной пары. Количество записей произвольное. Артикул начинается с буквы Д для дамской обуви, М - для мужской, П - для детской. Написать программу, выдающую следующую информацию: наличие и стоимость обуви артикула X; ассортиментный список дамской обуви с указанием наименования и имеющегося в наличии числа пар каждой модели.
6. Создать два файла, содержащих сведения о десяти нападающих хоккейных команд «Динамо» и «Спартак»: имена нападающих, число заброшенных ими шайб, сделанных голевых передач, заработанное штрафное время. Написать программу, которая по данным, извлеченным из этих файлов, создает новый третий файл, содержащий имя, команду, сумму очков (голы + передачи) для шести лучших игроков обеих команд. Имена и показатели результативности хоккеистов вывести на экран.
7. Создать файл, содержащий сведения о том, какие из пяти предлагаемых дисциплин по выбору желает слушать студент. Структура записи: фамилия студента, индекс группы, 5 дисциплин, средний балл успеваемости. Выбираемая дисциплина отмечается символом 1, иначе — пробел. Количество записей произвольное. Написать программу, которая печатает список студентов, желающих прослушать дисциплину X. Если число желающих превысит 8 человек, то отобрать студентов, имеющих более высокий средний балл успеваемости.
7. Создать файл, содержащий сведения об отправлении поездов дальнего следования с вокзала. Структура записи: номер поезда, станция назначения, время отправления, время в пути, наличие билетов. Количество записей произвольное. Написать программу, которая позволяет получить следующую справочную информацию: время отправления поездов в город Х во временном интервале от А до В часов; наличие билетов на поезд с номером XXX.
8. Создать файл, содержащий сведения о сотрудниках института. Структура записи: фамилия работающего, название отдела, год рождения, стаж работы, должность, оклад. Количество записей произвольное. Написать программу, которая позволяет получить следующую информацию: список сотрудников пенсионного возраста на сегодняшний день с указанием стажа работы; средний стаж работающих в отделе Х.
9. Создать файл, содержащий сведения о сдаче студентами сессии. Структура записи: номер группы, фамилия студента, оценки по пяти экзаменам и пяти зачетам («з» означает зачет, «н» — незачет). Количество записей — 25. Написать программу, выдающую следующую информацию: фамилии неуспевающих студентов с указанием индексов групп и количества задолженностей; средний балл, полученный каждым студентом группы X и всей группой в целом.
10. Создать файл, содержащий сведения о личной коллекции книголюба. Структура записи: шифр книги, автор, название, год издания, местоположение (номер стеллажа, шкафа и т.п.). Количество записей произвольное. Написать программу, выдающую следующую информацию: местонахождение книги автора Х названия Y (значения X, Y ввести с терминала); список книг автора Z, находящихся в коллекции; число книг издания указанного года, имеющееся в библиотеке.
11. Создать файл, содержащий сведения о наличии билетов и рейсах Аэрофлота. Структура записи: номер рейса, пункт назначения, время вылета, время прибытия, количество свободных мест в салоне. Количество записей произвольное. Написать программу, выдающую информацию следующего вида: время отправления самолетов в город X; наличие свободных мест на рейс в город Х с временем отправления Y. Значения X, Y вводятся по запросу с терминала.
12. Протокол лыжных гонок записать в файл D:\UCHEBA\SKI.DAT. Для каждого участника вводятся фамилия, время старта (часы, минуты, секунды), время финиша. Используя сформированный файл, вывести на экран фамилии участников, выполнивших заданный норматив.
13. Сформировать файл D:\UCHEBA\BOOK.DAT из фамилий любимых писателей студентов группы. Студенты вводят по очереди по три фамилии. Используя сформированный файл, напечатать фамилии пяти наиболее популярных писателей.
14. Сформировать файл D:\UCHEBA\CAR.DAT, содержащий информацию о владельцах автомобилей: фамилия, марка, цвет, госномер. Используя сформированный файл, вывести на экран список владельцев автомобилей ВАЗ белого цвета.
15. Сформировать файл D:\UCHEBA\KURS.DAT, содержащий информацию о студентах курса: фамилия, пол, год и месяц рождения. Используя сформированный, файл, вывести на экран фамилии студентов мужского пола, родившихся в период с 1 сентября по 31 декабря.
16.Сформировать файл, содержащий информацию о поездах, отправляющихся с Курского вокзала г. Москвы: номер поезда, станция назначения, время отправления, время в пути. Используя сформированный файл, вывести на экран список поездов до Нижнего - Новгорода, отправляющихся с 12 до 24 часов.
17. Сформировать файл, содержащий информацию о торговых точках вблизи вашего дома: название фирмы, ассортимент товаров (продукты питания, одежда, обувь, электроника, хозтовары, культтовары), адрес. Используя сформированный файл, вывести на экран информацию о магазинах, торгующих одинаковыми товарами.
18. Сформировать файл, содержащий данные о книгах по информатике (фамилия автора, его инициалы, название книги, название издательства, год издания). Используя сформированный файл, вывести на экран дисплея фамилии авторов и названия книг, выпущенных издательством "Мир''.
19. Сформировать файл, содержащий информацию о поездах, отправляющихся с Киевского вокзала г. Москвы (номер поезда, станция назначения, время отправления, время в пути). Используя сформированный файл, вывести на экран дисплея информацию о поездах, следующих в Киев и находящихся в пути менее 12 часов.
Глава 4. МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ.
ПРОЦЕДУРЫ И ФУНКЦИИ
4.1. Понятие подпрограммы
Часто в разных местах программы приходится выполнять по сути дела один и тот же алгоритм, но с различными данными. Для обеспечения большей компактности и повышения наглядности программы такой частичный алгоритм целесообразно выделить из основного текста программы и записать его только один раз, оформив его в виде самостоятельного программного объекта – подпрограммы Таким образом, подпрограммы представляют собой инструмент, с помощью которого любая программа может быть разбита на ряд в известной степени независимых друг от друга частей.
Подпрограмма должна быть описана до того, как она будет использована в программе или другой подпрограмме.
Структура любой подпрограммы аналогична структуре всей программы, т.е. включает заголовок и тело подпрограммы. В отличие от основной программы процедура завершается не точкой, а точкой с запятой. В свою очередь, тело подпрограммы состоит из раздела описаний (меток, констант, типов, переменных, процедур и функций, являющихся локальными по отношению к данной подпрограмме) и раздела операторов. В заголовке подпрограммы за ключевым словом (Function или Procedure) указываются имя подпрограммы, а в круглых скобках – список формальных параметров со своими описаниями. В отличие от процедуры в заголовке функции должен быть определен тип результата, передаваемого функцией.
Обращение к подпрограмме осуществляется с фактическими параметрами, которые должны соответствовать формальным по числу, типу и месту расположения.
4.2. Процедуры и функции
В Турбо Паскале выделяют два вида подпрограмм: процедуры и функции.
Отличие функции от процедуры заключается в том, что результатом исполнения операторов, образующих тело функции, всегда является некоторое единственное значение простого, строкового типа или указателя. Поэтому обращение к функции можно использовать в соответствующих выражениях наряду с переменными и константами. Другое отличие заключается в том, что в теле функции хотя бы один раз имени функции должно быть присвоено значение.
Чтобы нагляднее показать отличие функции от процедуры, запрограммируем выполнение одного и того же действия, а именно вычисление суммы элементов одномерного массива.
Программа с процедурой будет выглядеть следующим образом:
Program P1;
Const M = 100;
Type
Vector = Array [1 .. M] of Integer;
Var
K, SumV : Integer;
А : Vector;
Procedure Inp_Vec(var Mas: Vector; N: Integer);
{Процедура ввода массива со списком формальных параметров.
Входной параметр: N типа Integer – размерность массива, не может превышать 100. Проверка N <= 100 - в основной программе.
Выходной параметр Mas типа Vector – исходный массив. }
Var I: Integer; {локальный параметр - параметр цикла}
Begin
Writeln('Введите ', N, ' целых чисел');
For I := 1 to N do
Read(Mas[I])
End;
Procedure Sum_Vec (var Mas : vector; N : Integer; var Sum : Integer);
{Процедура вычисления суммы элементов массива
входные параметры:
1) Mas типа Vector - массив, элементы которого необходимо суммировать.
2) N типа Integer - размерность массива .
Выходной параметр:
1) Sum типа integer - сумма элементов массива}
Var I : Integer;
Begin
Sum:=0;
For I:= 1 to N do
Sum := Sum+Mas[I]
End;
{Основная программа}
Begin
Repeat
Write('Введите размерность массива');
Readln(K);
Until (K>=1)And(K<=100);
Inp_Vec(A , K);
Sum_Vec (A, K, SumV);
Writeln(‘Сумма элементов массива А = ‘, SumV);
End.
Указание. Если в качестве исходных данных в подпрограмму передается массив, то его следует передавать как параметр-переменная в целях экономии памяти, так как в этом случае при вызове подпрограммы не образуется вспомогательного массива.
Поэтому входной параметр Mas типа Vector описан в процедуре Sum_Vec как параметр-переменная.
Программа с функцией будет выглядеть следующим образом:
Program P2;
Const M = 100;
Type
Vector = Array [1 .. M] of Integer;
Var
K : Integer;
А : Vector;
Procedure InpVec(var Mas: Vector; N: Integer);
{Процедура ввода массива со списком формальных параметров.
Входной параметр: N типа Integer – размерность массива, не может превышать 100. Проверка N <= 100 - в основной программе.
Выходной параметр Mas типа Vector – исходный массив. }
Var I: Integer; {локальный параметр - параметр цикла}
Begin
Writeln('Введите ', N, ' целых чисел');
For I := 1 to N do
Read(Mas[I])
End;
Function Sum_V(var Mas : Vector; N : Integer) : Integer;
{Функция возвращает значение суммы элементов вектора;
возвращаемое значение типа integer;