Пример 2. Камера наблюдения, установленная в населённом пункте, регистрирует в автоматическом режиме скорость проезжающих мимо неё автомобилей, округляя полученные значения до целых чисел. Программа, которую вам необходимо составить, получает на вход значения скорости проехавших автомобилей. Программа должна анализировать скорость каждого автомобиля и один раз в сутки выводить на экран следующую информацию: 1) количество автомобилей, проехавших со скоростью, превышающей 60 км/ч; 2) максимальную скорость проехавших автомобилей; 3) количество автомобилей, проехавших с максимальной скоростью; 4) среднюю скорость проехавших автомобилей; 5) количество автомобилей, проехавших со скоростью, ниже средней; 6) для каждого проехавшего автомобиля его скорость и комментарий: «Нарушитель», если скорость превышает 60 км/ч, но не превышает 250 км/ч; «Дисциплинированный водитель», если скорость от 30 до 60 км/ч; «Тише едешь — дальше будешь!», если скорость меньше 30 км/ч; «Ошибка», если значение скорости меньше 1 или больше 250. Для получения каких из требуемых результатов можно организовать обработку последовательности? Какие результаты можно получить, организовав обработку массива? Напишите программу, решающую поставленную задачу.
При обработке последовательности очередное значение скорости сразу заменяет предыдущее. Поэтому за один проход можно накапливать число скоростей больше
Для результата
program Speeds;
var
A: array[ .. ] of integer;
N, i, countValid, over , maxSpeed, countMax,
belowAverage: integer;
sumSpeed: longint;
average: real;
begin
readln(N);
for i := to N do readln(A[i]);
countValid := ;
over := ;
countMax := ;
maxSpeed := ;
sumSpeed := ;
for i := to N do
if (A[i] >= ) and (A[i] <= ) then
begin
countValid := countValid + ;
sumSpeed := sumSpeed + A[i];
if A[i] > then over := over + ;
if A[i] > maxSpeed then
begin
maxSpeed := A[i];
countMax := ;
end
else if A[i] = maxSpeed then
countMax := countMax + ;
end;
writeln('Быстрее км/ч: ', over );
if countValid > then
begin
average := sumSpeed / countValid;
belowAverage := ;
for i := to N do
if (A[i] >= ) and (A[i] <= )
and (A[i] < average) then
belowAverage := belowAverage + ;
writeln('Максимальная скорость: ', maxSpeed);
writeln('Автомобилей с максимальной скоростью: ', countMax);
writeln('Средняя скорость: ', average: : );
writeln('Медленнее средней: ', belowAverage);
end
else
writeln('Корректных скоростей нет');
for i := to N do
begin
write('Автомобиль ', i, ': ', A[i], ' км/ч — ');
if (A[i] < ) or (A[i] > ) then
writeln('Ошибка')
else if A[i] > then
writeln('Нарушитель')
else if A[i] >= then
writeln('Дисциплинированный водитель')
else
writeln('Тише едешь — дальше будешь!');
end;
end.
Первый цикл сохраняет скорости; второй получает сумму, максимум и счётчики, а третий сравнивает элементы с известной средней. Последний цикл выдаёт комментарии в исходном порядке. Условия проверяются от ошибки к диапазонам скоростей, поэтому каждое значение получает ровно один комментарий.
Последовательности достаточно для результатов
