nextupprevious

Next:4.4.3 Упражнения
Up:4.4 Функции на последовательностях
Previous:4.4.1 Подсчет вхождений


4.4.2 Количество максимумов

Задача. Подсчитать количество максимумов в заданной последовательности целых чисел.

Решение. В отличие от задачи из п. 4.4.1, для функции $КоМак$КоМакс (количество максимумов в последовательности) не удается напрямую записать соотношение, позволяющее сводить исходную задачу к задаче для подпоследовательности.

Однако если ввести в рассмотрение дополнительную функцию Макс (максимальный элемент последовательности), такое сведение становится вполне очевидным: зная  и X, можно вычислить КоМакс$КоМак(X \parallel\beta)$ и Макс$Макс(X \parallel \beta)$.


Программа КоличествоМаксимумов$КоличествоМаксимумов$ реализует решение задачи на основе этих соотношений.

module КоличествоМаксимумов;
    var X,M, Ответ: integer;
begin
    if Eof then Ответ := 0 (* {Ответ= КоМак(Input)} *)
    else
        Ответ := 1; Read(M);
        (* {M= Макс(Input1), Ответ= КоМак(Input1)} *)
        while ~ Eof do (* Ограничивающее выражение: |Input2| *)
                (* {M= Макс(Input1), |Input2|>0, Ответ= КоМак(Input1)} *)
                read(X);
                if X = M then Ответ := Ответ + 1
                elsif X > M then M := X; Ответ := 1
               end
        end
        (* {M= Макс(Input1), |Input2|=0, Ответ= КоМак(Input1)}*)
    end;
    (* {Ответ= КоМак(Input)} *)
    write('В последовательности',Ответ,'максимумов':20)
end КоличествоМаксимумов.

Next:4.4.3 Упражнения
Up:4.4 Функции на последовательностях
Previous:4.4.1 Подсчет вхождений



© В.Н. Касьянов, Е.В.Касьянова, 2004