Найти объем воды, накопленной между массивами - 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.

Объяснение кода листинга программы

  1. Переменная n и тип mas инициализируются.
  2. Создается переменная a типа mas.
  3. Создается переменная i типа integer.
  4. Создаются две переменные maxst и maxst1 типа integer.
  5. Задается начальное значение для maxst и maxst1 равное 1.
  6. Задается начальное значение для vod равное 0.
  7. Запускается цикл while, который выполняется до тех пор, пока i меньше или равно n.
  8. Внутри цикла while выполняется следующая последовательность действий:
    • Проверяется условие if a[i]>=a[maxst].
    • Если условие истинно, то вызывается функция kolv(a,maxst,i) и обновляются значения maxst и vod.
    • Если условие ложно, то значение i увеличивается на 1.
  9. После завершения внутреннего цикла while выполняется следующая последовательность действий:
    • Значение i устанавливается равным n-1.
    • Значение maxst1 устанавливается равным n.
  10. Запускается еще один цикл while, который выполняется до тех пор, пока i больше или равно maxst1.
    • Внутри цикла while выполняется следующая последовательность действий:
      • Проверяется условие if a[i]>=a[maxst1].
      • Если условие истинно, то вызывается функция kolv(a,maxst1,i) и обновляются значения maxst1 и vod.
      • Если условие ложно, то значение i уменьшается на 1.
  11. После завершения внешнего цикла while выводится значение vod.

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы