Во-первых, не whill, а while. Во-вторых, цикл с предусловием(while) выполняется только тогда, когда его условие возвращает ложь. Если условие возвращает правду, цикл завершается. Бывает так, что при попытке первой итерации цикла условие уже возвращает правду. В этом случае цикл не будет выполнен ни разу. Цикл с предусловием(repeat), наоборот, выполняется, пока условие возвращает правду и завершается ложью. Стоит заметить, что если цикл с предусловием проверяет своё условие перед итерацией, цикл с постусловием делает это после, а это значит, что последний выполнится хотя бы один раз.
// PascalABC.NET 3.0, сборка 1088 const n=9; m=7; var a:array[1..n,1..m] of integer; b:array[1..n] of boolean; i,j,k:integer; begin Randomize; Writeln('*** Исходный массив ***'); for i:=1 to n do begin k:=0; for j:=1 to m do begin a[i,j]:=Random(225)-112; Write(a[i,j]:5); if a[i,j]<0 Then Inc(k) end; Writeln; b[i]:=k>3 end; Writeln('*** Строки, содержащие больше 3 отрицательных элементов ***'); for i:=1 to n do if b[i] then Write(i,' '); Writeln end.
Во-вторых, цикл с предусловием(while) выполняется только тогда, когда его условие возвращает ложь. Если условие возвращает правду, цикл завершается. Бывает так, что при попытке первой итерации цикла условие уже возвращает правду. В этом случае цикл не будет выполнен ни разу.
Цикл с предусловием(repeat), наоборот, выполняется, пока условие возвращает правду и завершается ложью. Стоит заметить, что если цикл с предусловием проверяет своё условие перед итерацией, цикл с постусловием делает это после, а это значит, что последний выполнится хотя бы один раз.