Цикл while. В цикле с условием while цикл выполняется, пока истинно задающее его условие. Поэтому этот цикл также иногда называют циклом "пока". Часто цикл while используется, когда невозможно заранее предсказать, сколько раз необходимо выполнить тело цикла. В повседневной жизни цикл while можно встретить в алгоритмах, вроде "Пока в пределах видимости есть машины, стоять на месте" или "Пока в ящике есть детали, достать деталь из ящика".
В следующей программе цикл while используется подобно циклу for для вывода на экран всех чисел от 1 до 10:
i=1 while i<=10: print i i=i+1 В этой программе переменной i присваивается значение 1. Затем начинается цикл (ключевое слово while) с проверяемым условием i<=10. Тело цикла содержит две инструкции: вывод на экран значения переменной i и увеличение значения переменной i на 1.
При выполнении этого цикла проверяется условие i<=10. Поскольку значение i изначально равно 1, то условие верно и выполняется тело цикла: на экран выводится значение переменной i, то есть 1 и переменной i присваивается значение i+1, то есть 2. Снова проверяется условие, поскольку оно верно, то выполняется блок цикла: на экран выводится число 2 и переменной i присваивается значение 3. Опять проверяется значение цикла, и так далее до тех пор, пока проверяемое условие истинно.
// PascalABC.NET 3.0, сборка 1073 const nn=30; mm=30; var a:array[1..mm,1..nn] of integer; m,n,i,j,k,s:integer; begin Writeln('Введите число строк и столбцов массива: '); Read(m,n); Randomize; Writeln('*** Исходный массив ***'); k:=0; for i:=1 to m do begin for j:=1 to n do begin a[i,j]:=Random(51)-25; Write(a[i,j]:4); if Odd(a[i,j]) then Inc(k) end; Writeln end; if k>5 then begin Writeln('Средние арифметические отрицательных элементов по строкам'); for i:=1 to m do begin s:=0; k:=0; for j:=1 to n do if a[i,j]<0 then begin Inc(k); s:=s+a[i,j] end; if k>0 then Writeln(s/k:9:5) else Writeln(' 0.00000'); end end else begin Writeln('*** Результирующий массив ***'); for i:=1 to m do begin for j:=1 to n do begin a[i,j]:=2*a[i,j]; Write(a[i,j]:4) end; Writeln end end end.
В цикле с условием while цикл выполняется, пока истинно задающее его условие. Поэтому этот цикл также иногда называют циклом "пока". Часто цикл while используется, когда невозможно заранее предсказать, сколько раз необходимо выполнить тело цикла. В повседневной жизни цикл while можно встретить в алгоритмах, вроде "Пока в пределах видимости есть машины, стоять на месте" или "Пока в ящике есть детали, достать деталь из ящика".
В следующей программе цикл while используется подобно циклу for для вывода на экран всех чисел от 1 до 10:
i=1
while i<=10:
print i
i=i+1
В этой программе переменной i присваивается значение 1. Затем начинается цикл (ключевое слово while) с проверяемым условием i<=10. Тело цикла содержит две инструкции: вывод на экран значения переменной i и увеличение значения переменной i на 1.
При выполнении этого цикла проверяется условие i<=10. Поскольку значение i изначально равно 1, то условие верно и выполняется тело цикла: на экран выводится значение переменной i, то есть 1 и переменной i присваивается значение i+1, то есть 2. Снова проверяется условие, поскольку оно верно, то выполняется блок цикла: на экран выводится число 2 и переменной i присваивается значение 3. Опять проверяется значение цикла, и так далее до тех пор, пока проверяемое условие истинно.
const
nn=30;
mm=30;
var
a:array[1..mm,1..nn] of integer;
m,n,i,j,k,s:integer;
begin
Writeln('Введите число строк и столбцов массива: '); Read(m,n);
Randomize;
Writeln('*** Исходный массив ***');
k:=0;
for i:=1 to m do begin
for j:=1 to n do begin
a[i,j]:=Random(51)-25;
Write(a[i,j]:4);
if Odd(a[i,j]) then Inc(k)
end;
Writeln
end;
if k>5 then begin
Writeln('Средние арифметические отрицательных элементов по строкам');
for i:=1 to m do begin
s:=0; k:=0;
for j:=1 to n do
if a[i,j]<0 then begin Inc(k); s:=s+a[i,j] end;
if k>0 then Writeln(s/k:9:5) else Writeln(' 0.00000');
end
end
else begin
Writeln('*** Результирующий массив ***');
for i:=1 to m do begin
for j:=1 to n do begin a[i,j]:=2*a[i,j]; Write(a[i,j]:4) end;
Writeln
end
end
end.
Тестовые решения:
Введите число строк и столбцов массива:
8 6
*** Исходный массив ***
-16 -8 -1 24 -22 1
-9 -20 -25 13 -11 10
-15 10 -12 20 -22 3
-6 25 -3 25 -14 22
24 -4 24 17 -4 -17
-23 -9 -22 1 -18 -13
-12 13 6 -16 2 -13
19 8 -22 14 -3 4
Средние арифметические отрицательных элементов по строкам
-11.75000
-16.25000
-16.33333
-7.66667
-8.33333
-17.00000
-13.66667
-12.50000
Введите число строк и столбцов массива:
3 5
*** Исходный массив ***
3 24 -21 -22 -8
-21 14 -22 0 -22
15 -16 -2 6 22
*** Результирующий массив ***
6 48 -42 -44 -16
-42 28 -44 0 -44
30 -32 -4 12 44