Поиск заданного элемента файла 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Поиск заданного элемента файла



Пусть необходимо найти в конкретном файле определенный элемент. Для этого надо выполнить следующие действия:

1) открыть файл для чтения (Reset);

2) читать файл, пока не будет найден нужный элемент (Read);

3) закрыть файл.

Пример 3.5. Во внешнем файле с именем Sessia.Dat хранится информация о результатах экзаменационной сессии студентов. Каждый элемент этого файла представляет собой запись, состоящую из полей: ФИО, номер группы и четыре оценки. Написать программу, которая по введенным с клавиатуры ФИО и номеру группы представляет на экране монитора сведения о результатах сдачи экзаменов данным студентом.

Решение.

Возможный вариант программы:

Program Prim35;

Type

Zap = Record

Fio, NumGr: String;

Oc: Array [1..4] of Byte;

End;

Var

Sessia: File of Zap;

S: Zap;

F, N: String;

Begin

Assign(Sessia, 'Sessia.Dat');

Reset(Sessia);

Write(' Введите ФИО студента ');

Readln(F);

Write('Введите номер группы ');

Readln(N);

Repeat

Read(Sessia, S);

Until (S.Fio = F)And(S.NumGr = N) Or Eof(Sessia);

IF (S.Fio = F) And (S.NumGr = N) Then

Writeln('ФИО ',S.Fio,' Группа',S.NumGr:5,' Оценки: ', S.Oc[1]:4,S.Oc[2]:4,S.Oc[3]:4,S.Oc[4])

Else Writeln('Запись не найдена');

Close(Sessia);

End.

Корректировка элементов файла

Для проведения корректировки необходимо выполнить сле­дующие действия:

1) открыть корректируемый файл (Reset);

2) определить корректируемый элемент;

3) подвести указатель файла к корректируемому элементу (с по­мощью Seek);

4) считать корректируемый элемент (Read);

5) откорректировать элемент файла;

6) повторить процедуру подвода указателя файла (Seek);

7) записать откорректированный элемент (Write);

8) закрыть файл (Close).

Пример 3.6. Пусть уже соз­дан файл F, содержащий числа 1, 2, 3, 4, 5. Необходимо вместо последних трех элементов файла F записать числа 30, 40, 50.

Решение.

Программа

program Prim36;

Var

F: File of Integer;

X, I: Integer;

Begin

Assign(F, 'F');

Reset(F);

For I:= 3 to 5 do

begin

Seek(F, I-1);

Read(F, X);

X:= 10*I;

Seek(F, I-1);

Write(F,X)

end;

Reset(F);

While not Eof(F) do

Begin

Read(F, X);

Writeln(X)

end;

Close(F);

end.

Удаление элемента из файла

 

Для этого используется вспомогательный файл, в который сначала переписываются из внешнего файла все оставляемые записи, затем внешний файл открывается для записи, вспомогательный файл - для чтения и все содержимое вспомогательного файла переписывается во внешний файл.

Пример 3.7. Из внешнего файла с именем D:\APPDOS\ FP1.DAT, созданным в примере 3.1, удалить все записи о студентах, родившихся до 1980 года.

Решение.

Программа

Program Prim37;

Type

Stud = Record

Fio: String;

Year: Integer;

End;

Var

F, FV: File of Stud; {F - внешний файл, FV - вспомогательный файл}

S: Stud;

Begin

Assign(F, 'D:\APPDOS\FP1.DAT');

Assign(FV, 'D:\APPDOS\FP3.DAT');

{запись в вспомогательный файл отобранных записей}

Reset(F);

Rewrite(FV);

While Not EOF(F) Do

Begin

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. МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ.

ПРОЦЕДУРЫ И ФУНКЦИИ

 

 

Понятие подпрограммы

Часто в разных местах программы приходится выполнять по сути дела один и тот же алгоритм, но с различными данными. Для обеспечения большей компактности и повышения наглядности программы такой частичный алгоритм целесообразно выделить из основного текста программы и записать его только один раз, оформив его в виде самостоятельного программного объекта – подпрограммы Таким образом, подпрограммы представляют собой инструмент, с помощью которого любая программа может быть разбита на ряд в известной степени независимых друг от друга частей.

Подпрограмма должна быть описана до того, как она будет использована в программе или другой подпрограмме.

Структура любой подпрограммы аналогична структуре всей программы, т.е. включает заголовок и тело подпрограммы. В отличие от основной программы процедура завершается не точкой, а точкой с запятой. В свою очередь, тело подпрограммы состоит из раздела описаний (меток, констант, типов, переменных, процедур и функций, являющихся локальными по отношению к данной подпрограмме) и раздела операторов. В заголовке подпрограммы за ключевым словом (Function или Procedure) указываются имя подпрограммы, а в круглых скобках – список формальных параметров со своими описаниями. В отличие от процедуры в заголовке функции должен быть определен тип результата, передаваемого функцией.

Обращение к подпрограмме осуществляется с фактическими параметрами, которые должны соответствовать формальным по числу, типу и месту расположения.

 

Процедуры и функции

В Турбо Паскале выделяют два вида подпрограмм: процедуры и функции.

Отличие функции от процедуры заключается в том, что результатом исполнения операторов, образующих тело функции, всегда является некоторое единственное значение простого, строкового типа или указателя. Поэтому обращение к функции можно использовать в соответствующих выражениях наряду с переменными и константами. Другое отличие заключается в том, что в теле функции хотя бы один раз имени функции должно быть присвоено значение.

Чтобы нагляднее показать отличие функции от процедуры, запрограммируем выполнение одного и того же действия, а именно вычисление суммы элементов одномер­ного массива.

Программа с процедурой будет выглядеть следующим образом:

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;

входные параметры:

1) Mas типа Vector - вектор, элементы которого необходимо суммировать.

2) N типа Integer - размерность вектора, не может превышать 100}

Var

I, S: Integer;

Begin

S:=0;

For I:=l to N do S:=S+Mas[I];

Sum_V:=S;

End;

{Основная программа}

Begin

Repeat

Write('Введите размерность массива');

Readln(K);

Until (K>=1)And(K<=100);

InpVec(A, K);

Writeln(‘Сумма элементов массива А = ‘, Sum_V(A, K));

End.

Приведем теперь простые примеры использования подпрограмм-процедур и подпрограмм-функций.

Примеры решения задач с использованием процедур и функций

 

Пример 4.1. Составить программу для определения зна­чений n!, m!, (n - m)!, используя функцию при вычислении факториала.

Решение.

Программа имеет вид:

Program Prim41;

Var

N, M, NF, MF, NMF: Integer;

Function FACT(K: Integer): LongInt;

Var PF, I: Integer;

Begin

PF:= 1;

For I:=1 TO К Do

PF:= PF*I;

FACT:= PF

End;

Begin

Write(‘Введите N и M’);

Readln(N, M);

NF:= FACT(N);

MF:= FACT(M);

NMF:= FACT(N-M);

Writeln('HF= ',NF,' HF= ', MF,' NHF= ',NMF)

End.

В операторах присваивания программы записаны три обращения к функции FACT (N), FACT (M), FACT (N—M).

Пример 4.2. Составить программу для вычисления значения функции y=ax2+bx+d, где

; ; ,

используя функцию SUM.

Решение.

Программа имеет вид:

Program Prim42;

Const N = 100;

Type

INDEX = 1..N;

VECT = Array[INDEX] Of Real;

Var

I, NТ: Integer;

T,Q: VECT;

X,Y: Real;

Function SUM (MAS: VECT; K: Integer; MM: INDEX): Real;

Var J: Integer; S: Real;

Begin

S:= 0;

For J:= 1 To MM DO

S:= S+MAS[J];

SUM:= S

End;

Begin

Write(‘Введите Nt ’);

Readln(NT);

For I:=1 To N DO Read(T[I]);

For I:=1 TO 20 DO Read(Q[I]);

Y:=SUM(T, 1, NT)*X*X + SUM(T, NT+1, N)*X + SUM(Q, 1, 20);

Write(‘Y: = ', Y)

End.

Указание. Несмотря на то что обрабатываемые массивы имеют разную длину, они описываются в программе как массивы одного и того же типа (VECTOR), так как при обращении к процедуре типы соответствующих формальных и фактических параметров должны совпадать.

 

Пример 4.3. Составить программу вычисления функции

,

где s 1 и k 1 — сумма и количество положительных элементов массива A(A1, A2,..., A70); s 2 и k 2 сумма и количество положительных элементов массива B(B1, В2,..., В40 ). Для вычисления суммы и количества положительных элементов массива использовать процедуру SUMKOL, в которой вычисляются s — сумма положительных элементов массива MAS и k — количество этих элементов.

Решение.

Программа имеет вид:

Program Prim43;

Const Rasm=100;

Type

INDMAX = 1..Rasm;

Vector = Array[INDMAX] Of Real;

Var

NA, NB, I, K1, K2: Integer;

Z, S1, S2, X: Real;

A, B: Vector;

Procedure InpVec(var Mas: Vector; N: INDMAX);

Var I: Integer;

Begin

Writeln('Введите ', N, ' чисел');

For I:= 1 to N do

Read(Mas[I])

End;

Procedure SUMKOL(Var MAS: Vector; MM: INDMAX; Var S: Real; Var K: Integer);

{Процедура, в которой подсчитывается количество К и сумма S положительных элементов массива Mas.

Входные параметры:

1) Mas – одномерный массив;

2) ММ – размер массива (количество элементов массива).

Выходные параметры:

1) S – сумма положительных элементов массива Mas;

2) К – количество положительных элементов массива Mas.}

Var J: Integer;

Begin

S:= 0;

K:= 0;

For J:= 1 To MM Do

If MAS[J] > 0 Then

Begin

S:= S + MAS[J];

K:= K + 1;

End;

End;

Function St(Y: Real; N: Integer): Real;

{Функция, вычисляющая через умножение возведение вещественного числа Y в целую степень N, т.е. YN}

Var I: Integer;

P, AY: Real;

Begin

AY:= ABS(Y);

P:= 1;

For I:= 1 To N Do P:= P*AY;

If Z >=0 Then St:= P

Else St:= 1/P;

End;

Begin

Write(‘Введите размер массива А ‘);

Readln(NA);

InpVec(A, NA);

Write(‘Введите размер массива B ‘);

Readln(NB);

InpVec(B, NB);

SUMKOL(A, NA, S1, K1);

SUMKOL(B, NB, S2, K2);

Write(‘Введите Х: ‘);

Readln(X);

Z:= St(X, K1)*St(X, K2) / (S1 + S2);

Writeln(‘Z= ', Z);

End.

 

Пример 4.4. Написать программу, которая в первой вводимой с клавиатуры строке подсчитывает количество точек, а во второй – количество букв “я”.

Решение.

Возможный вариант программы:

Program Prim44;

Var

St1, St2: String;

Function KOL(S: String; Sim: Char): Integer;

Var I, K: Integer;

Begin

K:= 0;

For I:= 1 To Length(S) Do

If S[I] = Sim Then K:= K + 1;

KOL:= K

End;

Begin

Writeln('Введите первую строку');

Readln(St1);

Writeln('Введите вторую строку');

Readln(St2);

Writeln('Количество точек = ',KOL(St1, '.'));

Writeln('Количество букв я = ',KOL(St2, 'я'))

End.

 

Пример 4.5. Вычислить значения многочлена

F (x) = 1.5 х 7 - 2 x 6 – 7 x 5 + 3.4 x 4 + 8 x 3 – 0.5 x 2 + 5.4 x - 4

при x, изменяющемся от 0 до 1 с шагом 0.1, пользуясь схемой Горнера

F (x) ==(... ((а 0 x + a 1) х + а 2) х + a 3) х)+...+ a n.

Значения аргумента х и функции F(x) занести в массивы Х в Y соответственно и вывести на экран. Вычисление F(x) офор­мить в виде функции.

Решение.

Программа

Program Prim45;

Type

Vector = Array[0..7] Of Real;

Const

{Типизированная константа-массив}

A: Vector = (1.5, -2, -7, 3.4, 8, -0.5, 5.4, -4);

Var

X, Y: Array[1..11] Of Real;

I: Integer;

Function Gorner(B: Vector; Z: Real; N: Integer):Real;

{Параметры функции:

В - массив коэфициентов полинома;

Z - аргумент;

N - степень полинома}

Var

J: Integer;

S: Real;

Begin

S:= B[0];

For J:= 1 To N Do

S:= S*Z + B[J];

Gorner:= S;

End;

Begin

Writeln('X F(X)');

Writeln('_____________');

For I:= 1 To 11 Do

Begin

{Заполнение и вывод массивов X и Y}

X[I]:= 0.1*(I-1);

Y[I]:= Gorner(A, X[I], 7);

Writeln(X[I]:4:2, Y[I]:9:4);

End;

End.

 

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

 

1. В каких случаях целесообразно применять процедуры и функции?

2. Какова структура описания процедур и функций?

3. Какой вид имеют заголовки процедуры и функции?

4. В чем состоит отличие описания функции от описания процедуры?

5. Можно ли для упорядочения по возрастанию массива вместо процедуры использовать функцию?

6. Какие параметры называются формальными и какие – фактическими?

7. Какие способы передачи параметров реализованы в Турбо Паскале?

8. Как происходит в программе обращение к процедуре?

9. Как происходит в программе обращение к функции?

10.Как и куда осуществляется выход из подпрограммы?

 

Задачи I уровня

 

В следующих задачах необходимо со­ставить программу, содержащую функцию.

1. Вычислить сумму значений функций

Y = F (a, b) + F (a 2, b 2) + F (a 2 – 1, b) + F (ab, b) + F (a 2 + b 2, b 2 –1),

где

 

u 2 + t 2, если u > 0; t > 0;

u + t, если u ≤ 0, t ≤ 0;

F (u, t) = ut, если u > 0, t ≤ 0;

u + t, если u ≤ 0, t > 0.

 

2. Вычислить сумму значений функций

Y = F (sin(a), a) + F (cos(a), a) + F (sin 2 (a), a - 1)+ F (sin(a)–cos(a), a 2- 1),

где

u + sin(t), если u > 0;

F (u, t) = u + t, если u ≤ 0.

 

3. Вычислить сумму значений функций

Y = F (sin(a)+cos(b), a + b)+ F (sin(a), cos(b))+ F (a b, a) + F (sin 2(a) – 2, a),

где

u + t, если u > 1;

F (u, t) = ut, если 0 ≤ u ≤ 1;

t - u, если u < 0.

4. Получить таблицу значений функции y = e x sin x при x, изменяющемся от 0 до 2π с шагом π/10. Вычисление значений функции оформить в виде функции. Результаты представить в виде таблицы.

5. Получить таблицу значений функции у = (sin x)/ x при x, изменяющемся от π до 2π с шагом π/10. Вычисление значений функции оформить в виде функции. Результаты представить в виде таблицы.

6. Получить таблицу значений функции y = tg х при x, изменяющемся от -π до π с шагом π/5. Вычисление значений функции оформить в виде функции. Результаты представить в виде таблицы.

7. Получить таблицу значений функции y = 2 x 2 + x +-4 при x, изменяющемся от -5 до 5 с шагом 1. Вычисление значений функции оформить в виде функции. Результаты представить в виде таблицы.

8. Получить таблицу значений функции y = sh x при x, изменяющемся от -1 до 1 с шагом 0.1. Вычисление значений функции оформить в виде функции. Результаты представить в виде таблицы. Функция гиперболический синус определяется формулой .

9. Получить таблицу значений функции y = ch x при x, изменяющемся от -1 до 1 с шагом 0.1. Вычисление значений функции оформить в виде функции. Результаты представить в виде таблицы. Функция гиперболический косинус определяется формулой .

10. Получить таблицу значений функции y = th x при x, изменяющемся от -1 до 1 с шагом 0.1. Вычисление значений функции оформить в виде функции. Результаты представить в виде таблицы. Функция гиперболический тангенс определяется формулой .

11. Два треугольника заданы длинами своих сторон а, b и с. Вычислить площади треугольников по формуле Герона и опреде­лить наибольший из них.

12. Два треугольника заданы координатами своих вершин A(x 1, y 1), B(x 2, y 2) и С(x 3, у 3). Вычислить площади треугольни­ков и определить, которыйиз них больше. Площадь треугольника вычислять по формуле Герона:

S = .

13. Футболист ударом ноги посылает мяч вертикально вверх с высоты 1 м с начальной скоростью 20 м/с. На какой высоте мяч будет через 1, 3, 4 с? Движение мяча описывается зависимостью

y(t) = у 0 + v 0 t - ,

где у 0 — начальная высота; v 0 — начальная скорость; t- вре­мя. Оформить вычисление y(t) в виде функции. Предусмотреть печать необходимой текстовой информации.

14. Вычислить приближенно площадь фигуры, ограниченной осью х, прямыми x = 1 и x = 3 и кривой у (х) = 1/ х + 5, раз­делив интервал изменения х на 10 частей и суммируя площа­ди получившихся прямоугольников, принимаяих высоту, равную значению функции в середине каждого интервала. Вычисление площади прямоугольника оформить в виде функции.

15. Счастливым считается число N из шести цифр, в которой сумма левых трех цифр равна сумме правых трех цифр. Напри­мер, 457961: 4+5+7= 9+6+1 = 16. Найти все счастливые числа в интервале от N1 до N2 и подсчитатьих количество. Выделение цифры в числе оформить в виде функции.

16. Найти все такие числа в интервале от 1 до 1000, кото­рые содержатся в последних разрядах их квадрата, например: 52 = 25, 252 = 625. Выделение последних разрядов в числе офор­мить в виде функции.

17. Число Армстронга — число, состоящее из k цифр, у кото­рых сумма k -х степеней его цифр равна самому числу. Например: 153 = 13+53+33. Найти все числа Армстронга, состоящие из двух, трех и четырех цифр. Нахождение числа Армстронга оформить в виде функции.

 

Задачи II уровня

 

В следующих задачах необходимо со­ставить программу, содержащую процедуру.

1. Для каждой из двух матриц сформировать одномерные массивы, составленные из минимальных элементов столбцов.

2. В каждую из двух матриц вставить заданные числа перед мак­симальным элементом каждой строки.

3. В каждую из двух матриц вставить заданные числа после ми­нимального элемента каждого столбца.

4. Для каждой из двух матриц сформировать одномерный массив, составленный из максимальных элементов строки.

5. В каждую из двух матриц добавить по строке, в которой значения эле­ментов равны количеству отрицательных элементов в соответст­вующих столбцах.

6. В каждую из двух матриц добавить по строке, в которой значения эле­ментов равны суммам элементов соответствующего столбца.

7. В каждую из двух матриц добавить по столбцу, в котором значения эле­ментов равны количествам положительных элементов в соот­ветствующих строках.

8. Для каждой из двух матриц сформировать одномерные массивы, значения элементов которых равны суммам элементов в соответствующих строках.

9. Для каждой из двух матриц сформировать одномерные массивы, значения элементов которых равны суммам элементов в соответствующих столбцах.

10. Для каждой из двух матриц сформировать одномерные массивы, в которых значения элементов равны количествам отрицательных элементов в соответствующих строках.

11. Найти разность и произведение максимальных по модулю элементов двух матриц.

12. В каждую из двух матриц добавить по столбцу, в котором эле­менты равны суммам элементов соответствующих строк.

13. Найти среднее геометрическое и среднее арифметическое макси­мального и минимального элементов каждой из двух матриц.

14. Сформировать одномерные массивы из столбцов каждой из двух матриц, содержащих максимальные количества положительных эле­ментов.

15. Найти среднее арифметическое минимальных элементов каждой из двух матриц.

16. Сформировать одномерные массивы из строк каждой из двух мат­риц, содержащих минимальные элементы этих матриц.

17. Для каждой из двух матриц сформировать одномерные массивы, в которых значения элементов равны количествам положительных элементов в соответствующих столбцах.

18. Максимальные элементы двух матриц поменять местами. Найти среднее арифметическое максимальных элементов строк каждой из двух матриц.

19. Сформировать одномерные массивы из отрицательных элементов каждой из двух матриц.

20. Проверить, является ли произведение матриц А и В перестановочным, т.е. проверить равенство А В = В А.

21. Вычислить суммы и количества элементов, находящихся в интер­вале от p до q для матриц А и В.

22. Для каждой из двух целочисленных матриц вывести на печать элементы, кратные трем.

23. Найти суммы элементов главной диагонали матриц, равных произ­ведению А В и В А.

24. В каждой из двух матриц вычислить суммы элементов над гла­вной диагональю.

 

Глава 5. СОРТИРОВКА И ПОИСК

 

 

5.1. Сортировка

Очень часто на практике встречаются задачи, в которых требуется переставить элементы неупорядоченного массива, после чего они становятся упорядоченными по возрастанию или убыванию. Сортировка элементов одномерного массива – это такая перестановка его элементов, в результате которой они оказываются упорядоченными определенным образом.

Процесс упорядочивания при большом объеме данных очень трудоемок, поэтому часто прибегают к помощи компьютеров.

Проблема сортировки остро встала в связи с широким внедрением ЭВМ в бизнес, где необходимо было обрабатывать огромные массивы числовой и текстовой информации. Технические средства внешней памяти тогдашних компьютеров - накопители на магнитной ленте (НМЛ) - обеспечивали только последовательную запись и чтение информации, поэтому необходимо было упорядочивать данные для того, чтобы обеспечить их быстрый поиск.

Современные устройства внешней памяти компьютеров - накопители на магнитных дисках (НГМД) - обеспечивают прямой доступ к записанной на них информации, что в некоторых случаях организации массивов данных позволяет обходиться без сортировки, но до сих пор она остается важным аспектом вычислительной техники.

Рассмотрим задачу упорядочивания в простейшей постановке: дан числовой массив x 1, …, xn, эле­менты которого попарно различны; требуется переставить элементы массива так, чтобы после перестановки они были упорядочены в порядке возрастания: x 1 <...<xп.

 

Способы сортировки

Существует несколько способов решения задачи сортировки. Каждый из них требует выполнения различного количества операций, а следовательно, времени расчета и памяти ЭВМ, необходимой для их реализации.

Способы сортировки делятся на прямые и улучшенные. Выделим следующие виды сортировок прямым способом:

- обменом ("пузырьковая сортировка");

- выбором (выделением);

- вставкой (включением).

Улучшенные способы сортировки основываются на тех же принципах, что и прямые, с использованием оригинальных идей и рационализации для ускорения процесса преобразования массива данных.

 

Сортировка обменом

Одной из наиболее простых (но и наи­более медленных) является так называемая сортировка обменом пар.

Основой алгоритма является сравнение двух элементов и их переста­новка для получения порядка по возрастанию или убыванию значений элементов массива.



Поделиться:


Последнее изменение этой страницы: 2016-12-17; просмотров: 472; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.244.44 (0.359 с.)