Вложенные циклы и их использование при работе с графикой в АВС Pascal
Цикл - многократное повторение последовательности действий по некоторому условию. Тело цикла - последовательность действий, которые необходимо выполнить многократно.
Типы циклов 1. Цикл с предусловием (цикл-пока) — наиболее универсальная циклическая структура. Реализуется оператором While. Формат оператора: while <логическое выражение> do <тело цикла>; Тело цикла выполняется до тех пор, пока значение логического выражения = true (истина)
Типы циклов 2. Цикл с постусловием имеет формат: repeat <тело цикла> until <логическое выражение>; Выполнение операторов тела цикла заканчивается, когда логическое выражение принимает значение true. Тело цикла с постусловием выполняется хотя бы один раз.
Типы циклов 3. Цикл с параметром имеет два варианта записи: 1) for I: = In to Ik do <тело цикла>; 2) for I:= In downto Ik do <тело цикла>, где I - параметр цикла, In - начальное значение параметра, Ik -конечное значение параметра Выполнение операторов тела цикла повторяется до тех пор, пока значение параметра лежит в интервале между In и Ik.
Вложенные циклы Если в теле цикла содержится другой цикл, то такие циклы называются вложенными. При организации вложенных циклов выделяются внешний и внутренний циклы. Цикл, содержащий в себе другой цикл, называют внешним, а цикл, содержащийся в теле другого цикла – внутренним Внутренний и внешний циклы могут быть любыми из трёх видов: цикл с параметром, цикл с предусловием или цикл с постусловием.
Вложенные циклы При использовании вложенных циклов необходимо соблюдать следующее правило: все операторы внутреннего цикла должны полностью располагаться в теле внешнего цикла. При организации вложенных циклов изменение значений параметра (или управляющей переменной) внешнего цикла происходит только тогда, когда полностью отработает внутренний цикл
Пример 1 Разработать программу для создания серии повторяющихся по вертикали и горизонтали квадратов. Задать толщину контура, цвет контура и заливку фигур.
Словесное описание алгоритма Квадрат создаем как графический примитив прямоугольник с равными сторонами. Прямоугольник задается с помощью процедуры Rectangle(x1,y1,x2,y2), где x1,y1- координаты верхнего левого угла; x2,y2 – координаты нижнего правого угла. Для решения задачи используем вложенные циклы. Внешний и внутренний цикл имеют тип цикл с параметром.
Словесное описание алгоритма (продолжение) Во внутреннем цикле будем изменять координаты по горизонтали, соответственно получим повторяющиеся по горизонтали изображения. Во внешнем цикле будем изменять координаты по вертикали, соответственно получим повторяющиеся ряды изображений, полученных в результате выполнения внутреннего цикла.
Программа 1 Program Primer1; uses GraphABC; {подключение модуля ABC} var i, j, x, y: integer; begin SetPenWidth(5); {задается толщина контура} SetPenColor(clblue); {задается цвет контура} SetBrushColor(clred); {задается цвет заливки } SetBrushStyle(7); {задается стиль заливки } y:=5; {начальное значение координаты Y} {длина стороны квадрата =50} {расстояние между квадратами = 10}
Продолжение программы 1 for i:=1 to 4 do begin x:=5; {начальное значение координаты X} for j:=1 to 5 do begin rectangle (x, y, x+50, y+50); x:=x+50+10; end; y:=y+10+50; end; end.
Результат выполнения программы
Пример 2 Разработать программу для создания серии повторяющихся по вертикали и горизонтали квадратов. Длину стороны квадрата, расстояние между квадратами и размер окна вывода результатов задавать путем ввода соответствующих значений с клавиатуры.
Программа 2 Program Primer1; uses GraphABC; var i, j, x, y, a, d, m, n: integer; begin SetPenWidth(5); SetPenColor(clblue); SetBrushColor(clred); SetBrushStyle(7); y:=5; Writeln('a='); Readln(a); {ввод длины стороны квадрата} Writeln('d='); Readln(d); {ввод расстояния между квадратами} Writeln('m='); Readln(m); {ширина окна вывода результата} Writeln('n='); Readln(n); {высота окна вывода результата} SetWindowSize(m,n); {задание размера окна вывода результата}
Программа 2 (продолжение) y:=5; while y<=n do begin x:=5; while x<=m do begin rectangle (x, y, x+a,y+a); x:=x+a+d; end; y:=y+a+d; end; end.
Результат выполнения программы
Практическая работа Разработать программу для создания серии повторяющихся по вертикали и горизонтали окружностей. Задать толщину контура, цвет контура и заливку фигур.
Домашнее задание Разработать программу для создания повторяющихся графических примитивов: Задать толщину контура, цвет контура и заливку фигур. Размер стороны квадрата, радиуса окружности, расстояние между фигурами и размер окна вывода результатов задавать путем ввода соответствующих значений с клавиатуры.