Файл: Методичка к лабораторным и практическим.doc

ВУЗ: Не указан

Категория: Методичка

Дисциплина: Программирование

Добавлен: 15.11.2018

Просмотров: 5600

Скачиваний: 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.


Контрольные вопросы


  1. Что такое файл данных?

  2. Какие виды файловых типов существуют в Турбо Паскале?

  3. Как в разделе типов задается файловый тип?

  4. Каким образом описываются переменные файловых типов?

  5. Как подразделяются файлы по видам доступа к их компонентам?

  6. Какие операции определены над файлами?

  7. Что необходимо выполнить для открытия файлов?

  8. Какие процедуры предназначены для открытия файлов и как они работают?

  9. Как распознать конец файла?

  10. Как распознать файл на диске?

  11. Для чего предназначена процедура Close?

  12. По каким правилам выполняется чтение типизированных файлов?

  13. Как осуществляется запись в файл?

  14. Какие процедуры и функции предназначены для прямого доступа к элементам типизированных файлов?

  15. В чем состоят особенности работы с текстовыми файлами?


Задачи 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;