Выбор метода решения и проектирование. Введем обозначения: I – номер команды (I принимает целочисленные значения из интервала от 1 до 3), j – номер участника (j принимает целочисленные значения из
Введем обозначения: I – номер команды (I принимает целочисленные значения из интервала от 1 до 3), j – номер участника (j принимает целочисленные значения из интервала от 1 до 10), tji – время, за которое пробежал дистанцию j-й участник I-й команды. Для вычисления si – времени, с которым подошла к финишу I-я команда необходимо просуммировать результаты всех десятерых ее участников:
. (8.1.)
Наиболее подходящей (из изученных нами) структурой для хранения результатов каждого участника представляется двумерный массив, у которого первый индекс – номер команды, второй – номер участника. Результаты команд удобнее всего хранить в одномерном массиве, индексированном по номеру команды.
Первая проблема, с которой придется столкнуться – это ввод двумерного массива. Возможны два подхода, зависящие от того, какую форму имеет протокол соревнований.
1) Протоколы составляются для каждой команды отдельно и обрабатываются последовательно. Сначала вводятся все 10 результатов участников первой команды в соответствии с первым протоколом. Завершив эту операцию, переходим к вводу результатов участников второй команды в соответствии со вторым протоколом, затем третей. Фрагмент блочной схемы, организующий ввод данных по предложенной схеме показан на рисунке 8.3а и реализует построчный ввод матрицы.
2) Отдельные протоколы не составляются, ведется единый сводный протокол, отражающий результаты в таблице, сгруппированной по номерам участников и командам. В этом случае сначала вводятся результаты участников, идущих под первым номером для каждой из команд. В соответствии с условием задачи таких участников трое. Затем точно также вводятся результаты вторых номеров, затем – третьих, четвертых, пятых и т.д., до тех пор, пока не будут введены результаты последних троих соперников, идущих под номером 10. Фрагмент блочной схемы, организующий ввод данных по предложенной схеме показан на рисунке 8.3б и реализует ввод матрицы по столбцам.
Право на существование имеет как первый, так и второй подход: результаты ввода будут идентичными. Реализации будут отличаться на уровне организации удобного пользовательского интерфейса.
После того, как массив исходных данных введен, можно приступить к расчетам по формуле (8.1). Здесь уже выбор варианта перебора элементов матрицы не зависит от требований интерфейса. Мы должны вычислять суммы для каждой из трех команд, поэтому в качестве внешнего цикла следует использовать тот, параметром которого является номер команды. Блочная схема алгоритма решения задачи 8.4. представлена на рисунке 8.4.
Текст программы[10]:
program Сompetitions;
var
I,J:Integer;
S:array[1..3] of Real;
T:array[1..3,1..10] of Real;
begin
for I:=1 to 3 do
begin
WriteLn(‘Команда N ’,I);
for J:=1 to 10 do
begin
Write(‘Время ’,J,‘-го участника? ’);
ReadLn(T[I,J]);
end;
end;
for I:=1 to 3 do
begin
S[I]:=0;
for J:=1 to 10 do
S[I]:=S[I]+T[I,J];
end;
for I:= 1 to 3 do
Write(‘Время ’,I,‘-й команды ’,S[I]);
end.
Задание 8.5.
Постановка задачи
Заполнить квадратную матрицу A порядка n таким образом, чтобы выше главной диагонали располагались нули, ниже – единицы, а по главной диагонали – двойки (рисунок 8.5).