Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PASСAL_a4_2007.doc
Скачиваний:
63
Добавлен:
13.09.2019
Размер:
2.51 Mб
Скачать

Лабораторная работа 31. Сортировка массивов

Задание 1

Имеется список спортсменов, участвующих в соревнованиях по прыжкам в длину, и их результаты. Составить программу, которая позволит вывести список участников на экран дисплея в порядке занятых ими мест.

Задание 2

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

Задание 3

Измените программу так, чтобы массив сортировался в порядке убывания.

Задание 4

Еще одна модификация: замените числовой массив строковым и отсортируйте его в алфавитном порядке.

Задание 5*

Напишите алгоритм слияния двух массивов, отсортированных в порядке возрастания, в один массив, также отсортированный в порядке возрастания.

Самый простой способ решения этой задачи состоит в том, чтобы попросту "склеить" эти два массива, а затем отсортировать получившийся массив, например, методом пузырька. Подсчитайте количество сравнений, которые придется выполнить.

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

Лабораторная работа 32. Программа обслуживания конькобежных соревнований

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

Задание 1

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

Задание 2

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

Задание 3

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

Задание 4

Еще лучше, если программа выдаст на экран:

а) фамилию победителя;

б) фамилии участников, занявших первое, второе и третье места.

Теоретическая работа з. Двумерные и многомерные массивы

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

Мы уже решали похожую "спортивную" задачу о конькобежных соревнованиях. Теперь нужно понять, чем отличается турнир по шахматам от одиночных соревнований (с точки зрения организации данных). В одиночных соревнованиях каждый участник имеет один результат, поэтому данные о результатах соревнований удобно хранить в знакомых нам массивах. Игровой турнир предполагает встречи участников друг с другом, при этом каждый участник имеет несколько результатов. Обычно результаты турниров заносятся в турнирные таблицы. Средством обработки таких таблиц в языках программирования служат двумерные массивы.

Описание двумерного массива в языке Pascal записывается так:

<Имя_массива>:array[<n1>..<n2>,<k1>..<k2>] of <тип>,

где строки таблицы имеют номера с n1 по n2, а столбцы - с k1 по k2. Запись <Имя_массива>[n,k] указывает на элемент, стоящий на пересечении n-й строки и k-го столбца. Например, описание

Tab : array[1..10,1..15] of Integer;

задает таблицу из 10 строк и 15 столбцов (всего 10 х 15 = 150 элементов), состоящую из целых чисел. Tab[3,5] указывает на 5-й элемент в 3-й строке.

Турнирную таблицу для N участников удобно хранить в двумерном массиве N x N типа Real, так как результатом шахматной партии для каждого участника может быть победа (1 очко), поражение (0 очков) или ничья (0.5 очка). Таблица описывается следующим образом:

Tab : array[1..N,1..N] of Real .

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

...

writeln('Введите номер первого участника встречи');

readln(n1);

writeln('Введите номер второго участника встречи');

readln(n2);

writeln('Сколько очков у участника ',n1,' ?');

readln(Tab[n1,n2]);

Tab[n2,n1] := 1-Tab[n1,n2];

...

Эти действия нужно повторять столько раз, сколько встреч состоится в турнире. Если все запланированные встречи состоятся, то их количество можно сосчитать по формуле n(n-1) (подумайте, почему). Однако может случиться, что по каким-либо причинам часть встреч не состоится, а какие-то будут сыграны дважды. Поэтому удобнее обозначить окончание ввода данных в программе, например после каждой встречи выяснять, будут ли еще вводиться данные. Приводим фрагмент программы, предназначенный для ввода результатов всех встреч турнира:

...

Repeat

writeln('Введите номер первого участника встречи');

readln(n1);

writeln('Введите номер второго участника встречи');

readln(n2);

writeln('Сколько очков у участника ',n1,' ?');

readln(Tab[n1,n2]);

Tab[n2,n1] := 1-Tab[n1,n2];

writeln('Будут ли еще встречи ? (Д/Н)');

readln(kon);

until (kon=‘Д’) or (kon=‘D’) or (kon=‘d’) or (kon=‘д’);

...

По окончании турнира нужно вывести турнирную таблицу на экран:

for i := 1 to N do

begin

for k:= 1 to N do write(Tab[i,k]:3:1);

writeln;

end;

Бывают задачи, в которых данные удобно хранить в виде трехмерного (и даже четырех- и более -мерного) массива. Например, результат встречи в футбольном турнире представляет собой не одно, а три числа - количество забитых и пропущенных мячей и количество очков (2 - победа, 0 - поражение, 1 - ничья). Такую таблицу удобно заносить в массив

Football : array[1..N,1..N,1..3] of Integer;

Элемент Football[3,5,2] содержит информацию о коли­чес­тве мячей, пропущенных 3-й командой в матче с 5-й командой. Поразмышляйте над процедурой ввода результатов футбольного турнира.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]