Обычно начинающие программисты рисуют графические изображения. указывая координаты непосредственно в месте рисования графического объекта.
Например :
uses GraphABC; begin rectangle(50,50,450,450); // рамка setbrushcolor(clBlack); // цвет заливки (рисуем только чёрные ячейки) Rectangle(100,50,150,100); Rectangle(200,50,250,100); Rectangle(300,50,350,100); Rectangle(400,50,450,100); Rectangle(50,100,100,150); Rectangle(150,100,200,150); Rectangle(250,100,300,150); Rectangle(350,100,400,150); Rectangle(100,150,150,200); Rectangle(200,150,250,200); Rectangle(300,150,350,200); Rectangle(400,150,450,200); Rectangle(50,200,100,250); Rectangle(150,200,200,250); Rectangle(250,200,300,250); Rectangle(350,200,400,250); Rectangle(100,250,150,300); Rectangle(200,250,250,300); Rectangle(300,250,350,300); Rectangle(400,250,450,300); Rectangle(50,300,100,350); Rectangle(150,300,200,350); Rectangle(250,300,300,350); Rectangle(350,300,400,350); Rectangle(100,350,150,400); Rectangle(200,350,250,400); Rectangle(300,350,350,400); Rectangle(400,350,450,400); Rectangle(50,400,100,450); Rectangle(150,400,200,450); Rectangle(250,400,300,450); Rectangle(350,400,400,450); end.
Результат:
Несмотря на то, что белые ячейки мы не рисовали, код все равно громоздкий .
Поэтому лучше попытаться сделать то же самое с помощью циклов...
While, или цикл с предусловиемКак вы, наверное, уже поняли из названия, while — это цикл, в котором условие стоит перед телом. Причем тело цикла выполняется тогда и только тогда, когда условие true; как только условие становится false, выполнение цикла прекращается.
While имеет формат:
while < условие> do <оператор 1>; {Пока … делай ….}
Данный цикл подходит только для одного оператора, если же вы хотите использовать несколько операторов в своем коде, вам следует заключить их в операторные скобки — begin и end; .
Repeat, или цикл с постусловиемRepeat — полная противоположность while. Repeat — это цикл, в котором условие стоит после тела. Причем оно выполняется тогда и только тогда, когда результат условия false; как только логическое выражение становится true, выполнение цикла прекращается.
Repeat имеет формат:
repeat { повторяй … }
< оператор 1>;
< оператор 2>;
…
until {до…} <условие>
Begin и end не требуются.
For, или цикл с параметромFor — это цикл, в котором тело выполняется заданное количество раз.
Существует две формы записи этого цикла
Первая форма:
for <счетчик1> := <значение1> to <конечное_значение> do <оператор1>;
После каждой итерации значение <счетчик1> будет увеличиваться на 1.
<значение1> — это начальное значение счетчика. Это может быть переменная или число.
<конечное_значение> : как только значение <счетчик1> станет больше <конечное_значение>, выполнение цикла прекратится.
Если требуется написать несколько операторов в теле цикла, используем begin и end.
И <счетчик1>, и <конечное_значение>, и <значение1> — переменные целого типа.
Чаще всего в качестве счетчика используется переменная i.
Вторая форма:
for <счетчик2> := <значение2> downto <конечное_значение> do <оператор1>;
После каждой итерации значение <счетчик2> будет уменьшатся на 1.
<значение2> — это начальное значение счетчика.
<конечное_значение> : как только значение <счетчик2> станет меньше <конечное_значение>, выполнение цикла прекратится.
Важно:
- Цикл повторяется, пока значение значение счетчика лежит в отрезке [значение ; конечное_значение].
- Изменять значение счетчика внутри тела нельзя!
Нарисуем шахматную доску с помощью цикла:
uses GraphABC; var i,j: integer; begin rectangle(50,50,450,450); // рамка setbrushcolor(clBlack); // заливка for i:=1 to 8 do for j:=1 to 8 do if odd(i+j) then // если сумма индексов i+j - нечетная, то... Rectangle(i*50+50,j*50+50,i*50,j*50); end.
Согласитесь, данный код проще и лаконичнее, чем предыдущий. И цикл for — не совсем обычный цикл, в нем нет логического условия. Другими словами , цикл с параметром — это дополнения синтаксиса языка программирования, которые не добавляют новых возможностей, а делают использование языка более удобным для человека.
Для полноты картины пронумераем шахматные клетки с помощью еще одного цикла:
for i:=0 to 7 do begin setbrushcolor(clwhite); TextOut(70+i*50,453,chr(97+i)); TextOut(70+i*50,33,chr(97+i)); // горизонталь TextOut(37,70+i*50,chr(56-i)); TextOut(453,70+i*50,chr(56-i)); // вертикаль end;
Результат:
Ещё один пример , но теперь c циклом while :
Код без цикла:
uses graphABC; begin setwindowsize(640,200); // зададим размер окна clearwindow(clBlack); Brush.Color :=clWhite; // 1й ряд circle(20,20,20); circle(60,20,20); circle(100,20,20); circle(140,20,20); circle(180,20,20); circle(220,20,20); circle(260,20,20); circle(300,20,20); circle(340,20,20); circle(380,20,20); circle(420,20,20); circle(460,20,20); circle(500,20,20); circle(540,20,20); circle(580,20,20); circle(620,20,20); // 2й ряд circle(20,60,20); circle(60,60,20); circle(100,60,20); circle(140,60,20); circle(180,60,20); circle(220,60,20); circle(260,60,20); circle(300,60,20); circle(340,60,20); circle(380,60,20); circle(420,60,20); circle(460,60,20); circle(500,60,20); circle(540,60,20); circle(580,60,20); circle(620,60,20); // 3й ряд circle(20,100,20); circle(60,100,20); circle(100,100,20); circle(140,100,20); circle(180,100,20); circle(220,100,20); circle(260,100,20); circle(300,100,20); circle(340,100,20); circle(380,100,20); circle(420,100,20); circle(460,100,20); circle(500,100,20); circle(540,100,20); circle(580,100,20); circle(620,100,20); // 4й ряд circle(20,140,20); circle(60,140,20); circle(100,140,20); circle(140,140,20); circle(180,140,20); circle(220,140,20); circle(260,140,20); circle(300,140,20); circle(340,140,20); circle(380,140,20); circle(420,140,20); circle(460,140,20); circle(500,140,20); circle(540,140,20); circle(580,140,20); circle(620,140,20); // 5й ряд circle(20,180,20); circle(60,180,20); circle(100,180,20); circle(140,180,20); circle(180,180,20); circle(220,180,20); circle(260,180,20); circle(300,180,20); circle(340,180,20); circle(380,180,20); circle(420,180,20); circle(460,180,20); circle(500,180,20); circle(540,180,20); circle(580,180,20); circle(620,180,20); end.
Результат:
А теперь нарисуем с помощью while :
uses graphABC; var x,y,r:integer; begin setwindowsize(640,200); // зададим размер окна r:=20; // радиус y:=r; clearwindow(clBlack); while y<=windowheight-r do // пока "игрик" меньше высоты окна с учетом радиуса: begin x:=r; while x<=windowwidth-r do // пока "икс" меньше ширины окна с учетом радиуса делаем begin Brush.Color :=clWhite; // рисуем круги белым цветом circle(x,y,r); x:=x+2*r end; y:=y+2*r end; end.
Результат: