Найти объем воды, накопленной между массивами - Pascal ABC
Формулировка задачи:
Дан массив из n неотрицательных элементов, найти объем воды, накопленной между ними.
Например, a={5,1,0,3,7,2,3}, объем равен 12
Помогите, пожалуйста, заранее спасибо!
Решение задачи: «Найти объем воды, накопленной между массивами»
textual
Листинг программы
const n=10; type mas=array[1..n] of integer; var a:mas; i:integer; maxst,maxst1:integer; vod:integer; function kolv(x:mas;s1,s2:integer):integer; var ii,kv:integer; begin kv:=0; if s2>s1 then for ii:=s1 to s2-1 do kv:=kv+x[s1]-x[ii] else for ii:=s1 downto s2+1 do kv:=kv+x[s1]-x[ii]; kolv:=kv end; begin for i:=1 to n do begin a[i]:=random(10);write(a[i],' ') end; writeln; maxst:=1;vod:=0;i:=2; while i<=n do begin if a[i]>=a[maxst] then begin vod:=vod+kolv(a,maxst,i); maxst:=i end; inc(i); end; i:=n-1;maxst1:=n; while i>=maxst do begin if a[i]>=a[maxst1] then begin vod:=vod+kolv(a,maxst1,i); maxst1:=i end; dec(i) end; writeln(vod) end.
Объяснение кода листинга программы
- Переменная
n
и типmas
инициализируются. - Создается переменная
a
типаmas
. - Создается переменная
i
типаinteger
. - Создаются две переменные
maxst
иmaxst1
типаinteger
. - Задается начальное значение для
maxst
иmaxst1
равное 1. - Задается начальное значение для
vod
равное 0. - Запускается цикл
while
, который выполняется до тех пор, покаi
меньше или равноn
. - Внутри цикла
while
выполняется следующая последовательность действий:- Проверяется условие
if a[i]>=a[maxst]
. - Если условие истинно, то вызывается функция
kolv(a,maxst,i)
и обновляются значенияmaxst
иvod
. - Если условие ложно, то значение
i
увеличивается на 1.
- Проверяется условие
- После завершения внутреннего цикла
while
выполняется следующая последовательность действий:- Значение
i
устанавливается равнымn-1
. - Значение
maxst1
устанавливается равнымn
.
- Значение
- Запускается еще один цикл
while
, который выполняется до тех пор, покаi
больше или равноmaxst1
.- Внутри цикла
while
выполняется следующая последовательность действий:- Проверяется условие
if a[i]>=a[maxst1]
. - Если условие истинно, то вызывается функция
kolv(a,maxst1,i)
и обновляются значенияmaxst1
иvod
. - Если условие ложно, то значение
i
уменьшается на 1.
- Проверяется условие
- Внутри цикла
- После завершения внешнего цикла
while
выводится значениеvod
.