Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Бассейн 21 без меток
const n = 15; // n = (0, 1,..) количество стенок (если n > 45, то могут быть искажения картинки стенок, но результат будет правильный) var h : array [1..n] of integer; var i, j, step, min, s, h_max, fl : integer; begin randomize; for i := 1 to n do // генерим высоты стенок h[i] := random(11); // h[1] := 0; h[2] := 1; h[3] := 2; h[4] := 3; h[5] := 4; //; h[6] := 1; // либо задаём их сами h_max := h[1]; // Находим стенку с максимальной высотой for i := 2 to n do if h[i] > h_max then h_max := h[i]; writeln; // Блок вывода стенок for i := 1 to h_max do // Начинаем вывод всех "этажей" begin write(' '); // Делаем отступ на один пробел для выравнивания (не обязательно) for j := 1 to n do // Для каждой стенки от 1 до n определяем что выводить: "|" или пробел if h[j] >= h_max-i+1 then write(' | ') else write(' '); writeln; end; // Конец блока вывода стенок for i := 1 to n do // Выводим числовые значения высот стенок write(h[i]:3); writeln; for i := 1 to n do // Выводим порядковые номера стенок write(i:3); writeln; // конец вывода массива на экран // начало алгоритма i := 1; // начальные значения: i - номер первой слева стенки s := 0; // s - значение "объёма" fl := 1; // fl - служит для "обхода" лишнего вычисления объёма while i < n do // просматриваем стенки слева направо: i - номер текущей стенки begin // i НЕ ОБЯЗАТЕЛЬНО увеличивается на 1 min := h[i]; // min - это минимальная разница высот текущей стенки и j-ой. Вначале в ней h[i] for j := i + 1 to n do // цикл по всем стенкам справа от i-ой begin if h[i] > h[j] then // если i-ая стенка выше j-ой begin // в min загоняем текущую минимальную разницу высот if h[i] - h[j] <= min then // "<=" чтобы не зацикливался цикл, если последняя стена высотой 0 begin min := h[i] - h[j]; // вычисляем конкретное значение min step := j; // step = удаление j-ой стенки от i-ой end; // конец if, когда i-ая стенка выше j-ой end else {h[i] <= h[j]} // если же h[i] <= h[j], то begin s := s + (j-i) * h[i];// вычисляем "объём": высота меньшей (i-ой) стенки умножить на длину i := j; // текущей становится j-ая стенка fl := 0; // флаг обнуляем, чтобы обойти "лишнее" вычисление объёма end; // конец else-блока (случай h[i] <= h[j]) end; // конце цикла for по всем стенкам после i-ой стенки if fl = 1 then begin // если флаг = 1, то вычисляем "объём", когда h[i]>h[j] s := s + (step-i) * h[step]; // вычисляем "объём": высота step-ой стенки умножить на длину i := step; // текущей становится step-ая стенка end // конец if else // если же флаг был обнулён (в блоке else {h[i] <= h[j]} fl := 1; // то снова ставим его в "1" end; // конец цикла while writeln(s); // печатаем "объём" end.
run
|
edit
|
history
|
help
0
Calculatrice 1.0
24/10/17
practica 9 ejercicio 8
practica 3 ejercicio 1
LISTNAME
testMatrice0.1
practica 11 ejercicio 7 BETA
пи методом монте карло на единичной окружности
sound
test28