<span><span>var mass: array [</span>1..20<span>] of </span>integer;</span>
<span>i,n:integer;</span>
<span /><span>
begin
</span>
<span /><span>writeln('Изначальный массив: ');</span><span />
<span>randomize;
</span><span><span /></span>
<span><span>for i:=</span>1 to 20 do begin</span>
<span>mass[i]:=random(30);</span><span />
<span>write(mass[i],' ');</span><span><span /></span>
<span><span>end;</span></span>
<span /><span>writeln('Новый массив: ');</span><span /><span><span /></span>
<span><span>for i:=</span>1 to 20 do begin</span>
<span /><span><span>if i<=</span>10 then</span>
<span>mass[i]:= mass[i]+4;</span>
<span>write(mass[i],' ');</span><span />
<span><span>end;</span></span>
<span><span>end.</span></span>
Для обычного пользователя, программа может в любой момент перестать работать, запрося ключ активации.
Если на предприятии используется не лицензионное ПО, могут возникнуть проблемы с законом, которые могут повлечь за собой крупные денежные штрафы.
А код верный? Судя по тому, что в условии цикла стоит знак <=, цикл будет работать до тех пор, пока i меньше или равно некоторого числа. То есть цикл должен остановиться, когда i станет больше выбранного числа (которое нужно поставить вместо многоточия). Но в цикле стоит операция уменьшения параметра i. То есть i будет только уменьшаться! Цикл будет бесконечным!
Пример 1:
i:=5;
while i<=4 do begin writeln('Привет'); i:=i-1; end;
Цикл не сработает ни разу, т.к. условие с самого начала неверное!
Пример 2:
i:=5;
while i<=5 do begin writeln('Привет'); i:=i-1; end;
Условие верное, программа "заходит в цикл", выполняет вывод текста, а затем уменьшает значение i на 1, т.е. i=4. Далее идет автоматическая проверка условия цикла, и оно снова верное: 4<=5!
Идет снова выполнение всех операторов цикла, и опять уменьшение i на 1, то есть i=3. И снова условие цикла верное: 3<=5!
И так далее. Теперь каждое следующее значение параметра i меньше предыдущего, а значит, и условие цикла всегда верное! Цикл никогда не остановится!
Пример 3:
i:=5;
while i<=6 do begin writeln('Привет'); i:=i-1; end;
И даже если вместо многоточия поставить число более 5, получим аналогичный результат: условие верное, программа "заходит в цикл", выполняет вывод текста, а затем уменьшает значение i на 1, т.е. i=5. Далее идет автоматическая проверка условия цикла, и оно снова верное: 5<=5!
Идет снова выполнение всех операторов цикла, и опять уменьшение i на 1, то есть i=4. И снова условие цикла верное: 4<=5!
И так далее. Теперь каждое следующее значение параметра i меньше предыдущего, а значит, и условие цикла всегда верное! Цикл никогда не остановится!
Возможно, ошибка в условии цикла? Если записать while i>=3 do..., то цикл сработает 3 раза: при i, равном 5, 4, 3. Либо неверно указано действие в цикле: i:=i-1. Если записать i:=i+1, а вместо многоточия поставить i<=7, то цикл также сработает ровно 3 раза, т.к. i будет менять свое значение 5, 6, 7.
<u>PascalABC.NET 3.4.0, сборка 1675 от 12.06.2018</u>
<u>Внимание! Если программа не работает, обновите версию!</u>
begin
var n:=ReadInteger('n=');
var a:=ArrRandom(n,-50,50); a.Println;
var b:=new integer[n];
for var i:=0 to n-1 do
b[i]:=a[:i+1].Max;
b.Println
end.
<em>Пример</em>
n= 15
-21 27 -19 -7 34 -20 25 36 40 -2 40 43 -37 41 7
-21 27 27 27 34 34 34 36 40 40 40 43 43 43 43