Циклы в графике паскаль авс

Нарисуем объекты и графики функций в Pascal ABC, используя циклы.
1. Нарисуем случайным цветом 30 окружностей случайного радиуса в пределах от 5 до 50, центры которых лежат в произвольных точках экрана. Раскрасим эти окружности цветом границы.
Будем использовать цикл For, поскольку известно число итераций.
В каждой итерации случайно определяется цвет, радиус и координаты центра каждой окружности.
program p1;
uses graphABC; { подключаем модуль GraphABC для работы }
var
R, x0, y0, n, c: Integer;
begin {начало основного блока операторов программы}
Randomize; {инициализируем генератор случайных чисел}
{цикл счета 30 окружностей}
for n:=1 to 30 do
begin
c:=clRandom;
SetBrushColor(c);{установка случайного цвета}
SetPenColor(c);
x0:=random(641); {случайная координата х из диапазона 0-640}
y0:=random(321); {случайная координата у из диапазона 0-320}
R:=5+random(46); {случайная величина радиуса от 5 до 50}
Circle(x0,y0,R); {вывод окружности на экран}
end;
End.
2. Изменим программу так, чтобы центры окружностей лежали на одной горизонтальной прямой (у = 200).
program p2;
uses graphABC; { подключаем модуль GraphABC для работы }
var
R, x0, y0, n, c : Integer;
begin {начало основного блока операторов программы}
Randomize; {инициализируем генератор случайных чисел}
y0:=200; { координата у }
{цикл счета 30 окружностей}
for n:=1 to 30 do
begin
c:=clRandom;{выбор случайного цвета для кисти и пера}
SetBrushColor(c);{установка случайного цвета}
SetPenColor(c);
x0:=random(641); {случайная координата х из диапазона 0-640}
R:=5+random(46); {случайная величина радиуса от 5 до 50}
Circle(x0,y0,R); {вывод окружности на экран}
end;
End.
3. Изменим программу так, чтобы центры окружностей лежали на одной вертикальной прямой (х = 300). Раскрасить эти окружности цветом границы.
program p3;
uses graphABC; { подключаем модуль GraphABC для работы }
var
R, x0, y0, n, c: Integer;
begin {начало основного блока операторов программы}
Randomize; {инициализируем генератор случайных чисел}
x0:=300; {значение x – постоянно}
{цикл счета 30 окружностей}
for n:=1 to 30 do
begin
c:=clRandom;{выбор случайного цвета для кисти и пера}
SetBrushColor(c);{установка случайного цвета}
SetPenColor(c);
y0:=random(421); {случайная координата у из диапазона 0-320}
R:=5+random(46); {случайная величина радиуса от 5 до 50}
Circle(x0,y0,R); {вывод окружности на экран}
end;
End.
4. Выполним последнее задание с помощью циклов с пред- и постусловием.
Цикл с предусловием:
program p4;
uses graphABC; { подключаем модуль GraphABC для работы }
var
R, x0, y0, n, c: Integer;
begin {начало основного блока операторов программы}
Randomize; {инициализируем генератор случайных чисел}
n:=1;
x0:=300; {значение x – постоянно}
{цикл с постусловием, пока n<=30}
While n <= 30 do
begin
c:=clRandom;{выбор случайного цвета для кисти и пера}
SetBrushColor(c);{установка случайного цвета}
SetPenColor(c);
y0:=random(421); {случайная координата у из диапазона 0-320}
R:=5+random(46); {случайная величина радиуса от 5 до 50}
Circle(x0,y0,R); {вывод окружности на экран}
n:=n+1; {увеличение счетчика}
end;
End.
Цикл с постусловием
program p5;
uses graphABC; { подключаем модуль GraphABC для работы }
var
R, x0, y0, n, c: Integer;
begin {начало основного блока операторов программы}
Randomize; {инициализируем генератор случайных чисел}
n:=1;
x0:=300; {значение x – постоянно}
{цикл с постусловием, пока n<=30}
Repeat
c:=clRandom;{выбор случайного цвета для кисти и пера}
SetBrushColor(c);{установка случайного цвета}
SetPenColor(c);
y0:=random(421); {случайная координата у из диапазона 0-320}
R:=5+random(46); {случайная величина радиуса от 5 до 50}
Circle(x0,y0,R); {вывод окружности на экран}
n:=n+1; {увеличение счетчика}
until n > 30;
End.
5. Кривая кардиоида
Формула кардиоиды:
x:=320+round(2Rsin(t)+Rsin(2t));
y:=240+round(2Rcos(t)+Rcos(2t));
program card;
uses graphABC; { подключаем модуль GraphABC для работы }
var R,x,y,t: integer; {объявления переменных}
begin
R:=25; t:=0;
Repeat
x:=320+round(2*R*sin(t)+R*sin(2*t)); {вычисление координаты х}
y:=240+round(2*R*cos(t)+R*cos(2*t)); {вычисление координаты у}
PutPixel(x,y,clRed); {вывод точки красного цвета в указанные координаты}
t:=t+1; {увеличение счетчика цикла}
until t>3600; {цикл выполняется, пока значение t не превысит 3600}
end.
6. Кривая астроида
Формула для вывода астроиды:
x:=320+round(Rsin^3(t));
y:=240+round(Rcos^3(t));
program astr;
uses graphABC; { подключаем модуль GraphABC для работы }
var R,x,y,t: integer; {объявления переменных}
begin
R:=25; t:=0;
Repeat
x:=320+round(R*sin(t)*sin(t)*sin(t)); {вычисление координаты х}
y:=240+round(R*cos(t)*cos(t)*cos(t)); {вычисление координаты у}
PutPixel(x,y,clRed); {вывод точки красного цвета в указнные кординаты}
t:=t+1; {увеличение счетчика цикла}
until t>3600; {цикл выполняется, пока значение t не превысит 3600}
end.
7. Нарисуем кривую – эпициклоиду за 3600 итераций цикла.
Формула эпициклоиды:
x:=320+round(6.2Rsin(t)+Rsin(6.2t));
y:=240+round(6.2Rcos(t)+Rcos(6.2t));
program ec;
uses graphABC; { подключаем модуль GraphABC для работы }
var R,x,y,t: integer; {объявления переменных}
begin
R:=25; t:=0;
Repeat
x:=320+round(6.2*R*sin(t)+R*sin(6.2*t)); {вычисление координаты х}
y:=240+round(6.2*R*cos(t)+R*cos(6.2*t)); {вычисление координаты у}
PutPixel(x,y,clRed); {вывод точки красного цвета в указнные кординаты}
t:=t+1; {увеличение счетчика цикла}
until t>3600; {цикл выполняется, пока значение t не превысит 3600}
end.
8. Нарисуем нефроиду.
Параметры нефроиды:
x:=320+round(6Rcos(t)-4Rcos^3(t));
y:=240+round(4Rsin^3(t));
program nefr;
uses graphABC; { подключаем модуль GraphABC для работы }
var R,x,y,t: integer; {объявления переменных}
begin
R:=25; t:=0;
Repeat
x:=320+round(6*R*cos(t)-4*R*cos(t)*cos(t)*cos(t)); {вычисление координаты х}
y:=240+round(4*R*sin(t)*sin(t)*sin(t)); {вычисление координаты у}
PutPixel(x,y,clRed); {вывод точки красного цвета в указнные кординаты}
t:=t+1; {увеличение счетчика цикла}
until t>3600; {цикл выполняется, пока значение t не превысит 3600}
end.
9. Нарисуем синусоиду (y=10sin(x/10)) в системе координат с осями ОХ и ОУ, и началом координат, расположенным в точке (300,200) экрана.
Сначала нарисуем координатные оси, затем в цикле саму синусоиду.
program s;
uses graphABC; { подключаем модуль GraphABC для работы }
var x,y: integer; {объявления переменных}
begin
Line(0,200,600,200);{ось х}
Line(300,0,300,400);{ось у}
x:=-300;
Repeat
y:=Round(10*sin(x/10)); {вычисление координаты у}
PutPixel(x+300,200-y,clBlue); {вывод точки синего цвета с учетом начала координат}
x:=x+1; {увеличение счетчика цикла}
until x>300; {цикл выполняется, пока значение x не превысит 300}
end.
Как рисовать различные объекты в Pascal ABC, можно посмотреть здесь.
Источник
После запуска PascalABC, по умолчанию, запускается текстовый режим. Для работы с графикой служит отдельное графическое окно.
Чтобы его открыть, необходимо подключить модуль GraphABC. В этом модуле содержится набор процедур и функций, предназначенных для работы с графическим экраном, а также некоторые встроенные константы и переменные, которые могут быть использованы в программах с графикой.
С их помощью можно создавать разнообразные графические изображения и сопровождать их текстовыми надписями.
Подключение осуществляется в разделе описаний.
Формат подключения модуля GraphABC:Uses GraphABC;
Графический экран PascalABC (по умолчанию) содержит 640 точек по горизонтали и 400 точек по вертикали. Начало отсчета – левый верхний угол экрана. Ось x направлена вправо, а ось y -вниз. Координаты исчисляются в пикселях.
Все команды библиотеки GraphABC являются подпрограммами и описаны в виде процедур и функций. Для того, что бы команда выполнилась необходимо указать команду и задать значения параметров.
Управление графическим окном
После запуска PascalABC, по умолчанию, запускается текстовый режим. Для работы с графикой служит отдельное графическое окно.
Чтобы его открыть, необходимо подключить модуль GraphABC. В этом модуле содержится набор процедур и функций, предназначенных для работы с графическим экраном, а также некоторые встроенные константы и переменные, которые могут быть использованы в программах с графикой.
С их помощью можно создавать разнообразные графические изображения и сопровождать их текстовыми надписями.
Подключение осуществляется в разделе описаний.
Формат подключения модуля GraphABC:Uses GraphABC;
Графический экран PascalABC (по умолчанию) содержит 640 точек по горизонтали и 400 точек по вертикали. Начало отсчета – левый верхний угол экрана. Ось x направлена вправо, а ось y -вниз. Координаты исчисляются в пикселях.
Все команды библиотеки GraphABC являются подпрограммами и описаны в виде процедур и функций. Для того, что бы команда выполнилась необходимо указать команду и задать значения параметров.
Процедуры рисования графических примитивов
Процедуры, используемые для работы с цветом
Процедуры для работы с текстом
Цвета в PascalABC
Пример графической программы, рисующей изображение дома:
Program Domik; uses Graphabc; //подключение модуля GraphABC begin SetWindowWidth(800); //ширина окна программы SetWindowHeight(600); //высота окна программы SetPenWidth(3); //толщина пера SetFontSize(18); //размер шрифта SetFontColor(clRed); //цвет шрифта SetFontStyle(fsBold); //жирный стиль шрифта TextOut(100,100,’Домик’); //текст Rectangle(200, 300, 600,600); //дом Circle(400,225, 40); //круг SetBrushColor(clAqua); //цвет заливки окна FillRect(300, 400,500,500); //процедура заливки окна rectangle(300,400,500,500); //окно Line(400,400,400,500); // окно Line(300,450,500,450); //окно Line(200,300,400,150); //крыша Line(400,150,600,300); //крыша Line(480,210,480,160); //труба Line(480,160,520,160); //труба Line(520,160,520,240); //труба end. Рисунок в PascalABC
Программа, рисующая фигурку:
Program Figurka; uses GraphABC; begin SetWindowSize(500, 500); //задаем размер графического окна SetPenWidth(3); //устанавливаем стиль пера SetBrushColor(clFuchsia); //устанавливаем цвет кисти Circle(225,160,50); //рисуем окружность Line(225,160,225,180); //рисуем линии Line( 210,190,240,190); Line( 225,210,225,250); Line( 100,100,200,260); Line( 200,260,400,260); Line( 210,350,200,480); Line(240,350,250,480); Rectangle(200,230,250,350); //рисуем прямоугольник SetBrushColor(clLime); FillRect(0, 480,500,500); //рисуем закрашенный прямоугольник SetBrushColor(clWhite); Circle(205,150,10); Circle(245,150,10); end.
Практическая работа за компьютером
Задание 1. Определите координаты и составьте программу, выводящую на экран рисунок дома и дерева.
Программа будет иметь вид:
Program domik_2; uses GraphABC; var i: integer; st:string; begin SetWindowSize(500, 500); {Коричневая стена} SetPenWidth(2); SetBrushColor(clBrown); FillRect(100,50,150,100); {Крыша желтого цвета} SetPenColor(clBrown); Line(125,25,80,75); Line(125,25,170,75); FloodFill(125, 30,clYellow); {Крона дерева} SetPenColor(clGreen); SetBrushColor(clGreen); Ellipse(100,150,150,200); {ствол дерева} SetBrushColor(clBrown); FillRect(120,200,130,230); end.
Задание 2. Используя оператор цикла и введя переменную для пересчета координат по оси x, постройте “поселок”, состоящий из 5 домов. Внесите соответствующие дополнения и изменения в предыдущую программу.
Весь наш «поселок» выстроился вдоль горизонтальной оси экрана – оси X. Построение рисунка начинается с левого верхнего угла стены первого дома – точки с координатами (100, 50). Координата Y не изменяется. Чтобы начать рисовать второй домик, нужно координату X увеличить на 150 (50 точек – ширина первого дома и 100 точек – расстояние между домиками).
Выберем в качестве параметра цикла целочисленную переменную X.
Для всех элементов нашего рисунка абсолютное значение координаты X заменим на относительное. Например, для стены дома процедура для рисования запишется следующим образом:
FillRect(x,50,x+50,100);
Сформулируем условие выполнения цыклических действий для нашей задачи.Какие координаты имеет левый верхний угол пятого дома? Конечное значение выбранного нами параметра цикла x = 700. Тогда условие выполнения цикла записывается так: x<=700.
Словесное описание алгоритма коротко можно записать так:
Переменной цикла x присвоить начальное значение 100. Пока x<=700 выполнять серию действий «Нарисуй дом и дерево», после каждого фрагмента рисунка увеличивать значение переменной цикла на 150.
Программа будет иметь вид:
Program Domik; uses GraphABC; var i: integer; st:string; x:integer; begin SetWindowSize(800, 500); x:=100; While x<=700 do begin {Коричневая стена} SetPenWidth(2); SetBrushColor(clBrown); FillRect(x,50,x+50,100); {Крыша желтого цвета} SetPenColor(clBrown); Line(x+25,25,x-20,75); Line(x+25,25,x+70,75); FloodFill(x+25, 30,clYellow); {Крона дерева} SetPenColor(clGreen); SetBrushColor(clGreen); Ellipse(x,150,x+50,200); {ствол дерева} SetBrushColor(clBrown); FillRect(x+20,200,x+30,230); x:=x+150; end; end.
Источник
При решении задач может возникнуть необходимость повторить одни и те же действия несколько или множество раз. В программировании блоки кода, которые требуется повторять не единожды, оборачиваются в специальные конструкции – циклы. У циклов выделяют заголовок и тело. Заголовок определяет, до каких пор или сколько раз тело цикла будет выполняться. Тело содержит выражения, которые выполняются, если в заголовке цикла выражение вернуло логическую истину (True, не ноль). После того как достигнута последняя инструкция тела, поток выполнения снова возвращается к заголовку цикла. Снова проверяется условие выполнения цикла. В зависимости от результата тело цикла либо повторяется, либо поток выполнения переходит к следующему выражению после всего цикла.
В языке программирования Паскаль существует три вида циклических конструкций.
Цикл for
Часто цикл for называют циклом со счетчиком. Этот цикл используется, когда число повторений не связано с тем, что происходит в теле цикла. Т.е. количество повторений может быть вычислено заранее (хотя оно не вычисляется).
В заголовке цикла указываются два значения. Первое значение присваивается так называемой переменной-счетчику, от этого значения начинается отсчет количества итераций (повторений). Отсчет идет всегда с шагом равным единице. Второе значение указывает, при каком значении счетчика цикл должен остановиться. Другими словами, количество итераций цикла определяется разностью между вторым и первым значением плюс единица. В Pascal тело цикла не должно содержать выражений, изменяющих счетчик.
Цикл for существует в двух формах:
for счетчик:=значение to конечное_значение do тело_цикла; for счетчик:=значение downto конечное_значение do тело_цикла;
Счетчик – это переменная любого из перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto, то значение параметра будет уменьшаться на единицу.
Количество итераций цикла for известно именно до его выполнения, но не до выполнения всей программы. Так в примере ниже, количество выполнений цикла определяется пользователем. Значение присваивается переменной, а затем используется в заголовке цикла. Но когда оно используется, циклу уже точно известно, сколько раз надо выполниться.
var i, n: integer; begin write (‘Количество знаков: ‘); readln (n); for i := 1 to n do write (‘(*) ‘); readln end.
Цикл while
Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.
Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание, одна из самых неприятных ошибок в программировании.
var i, n: integer; begin write (‘Количество знаков: ‘); readln (n); i := 1; while i <= n do begin write (‘(*) ‘); i := i + 1 end; readln end.
Цикл repeat
Цикл while может не выполниться ни разу, если логическое выражение в заголовке сразу вернуло false. Однако такая ситуация не всегда может быть приемлемой. Бывает, что тело цикла должно выполниться хотя бы один раз, не зависимо оттого, что вернет логическое выражение. В таком случае используется цикл repeat – цикл с постусловием.
В цикле repeat логическое выражение стоит после тела цикла. Причем, в отличие от цикла while, здесь всё наоборот: в случае true происходит выход из цикла, в случае false – его повторение.
var i, n: integer; begin write (‘Количество знаков: ‘); readln (n); i := 1; repeat write (‘(*) ‘); i := i + 1 until i > n; readln end.
В примере, даже если n будет равно 0, одна звездочка все равно будет напечатана.
Источник
Инфоурок
› Информатика ›Презентации›Презентация по информатике на тему “Графика в PascalABC – цикл с параметром”
Описание презентации по отдельным слайдам:
1 слайд
Описание слайда:
Pascal ABC графика с переменными Гильзер Наталья Владимировна, г. Уфа МБОУ «Лицей № 60»
2 слайд
Описание слайда:
Рисуем с помощью цикла while Задача №1. Задача №2. Задача №3.
3 слайд
Описание слайда:
while x<540 do begin rectangle(x,y,x+2*n,y+2*n); x:=x+80; end; Задача №1. x:=10; y:=10; x:=100; y:=100; или
4 слайд
Описание слайда:
while (x<540) and (y<350) do begin rectangle(x,y,x+2*n,y+2*n); x:=x+2*n; y:=y+2*n; end; Задача №2. x:=10; y:=10; x:=100; y:=100; или
5 слайд
Описание слайда:
while (x<540) and (y<350) do begin rectangle(x,y,x+2*n,y+2*n); x:=x+2*n; y:=y+2*n; end; Задача №3. x:=50; y:=50; n:=30; k:=0;
6 слайд
Описание слайда:
Решения: uses graphabc; var x,y,n:integer; begin x:=10; y:=10; N:=10; while x<540 do begin rectangle(x,y,x+2*n,y+2*n); x:=x+2*n; end; end. uses graphabc; var x,y,n:integer; begin x:=10; y:=10; while (x<540) and (y<350) do begin rectangle(x,y,x+2*n,y+2*n); x:=x+2*n; y:=y+2*n; end; end. Задача №1. Задача №2. Задача №3. uses graphabc; var x,y,n,k:integer; begin x:=50; y:=50; n:=30; k:=0; setBrushStyle(bsClear); while k<100 do begin rectangle(x+k,y+k,x+10*n-k,y+10*n-k); k:=k+10; end; end.
7 слайд
Описание слайда:
uses graphabc; var x,y,n,c:integer; begin x:=100; y:=100; c:=0; n:=10; while (x<540)and (y>0) do begin rectangle(x+2*c,y-c,x+2*n+2*c,y+2*n+2*c); x:=x+2*n; c:=c+10; end; end.
8 слайд
Описание слайда:
Начальные координаты: X:=10; Y:=200; N:=20; – масштаб Изменения координат: Rectangle(10,200,30,220) (30,190,60,220) (60,180,100,220) . . . Задача №4. (дополнительно) Разработать алгоритм решения.
9 слайд
Описание слайда:
uses graphabc; var x,y,n:integer; begin x:=10; y:=30; while x<600 do begin rectangle(x,y,x+40,y+80); line(x,y,x+20,y-20); line(x+20,y-20,x+40,y); x:=x+40; end; end. Рисуем забор
10 слайд
Описание слайда:
uses graphabc; var x,y,n:integer; begin x:=200; y:=200; n:=100; while n>10 do begin circle(x,y,n); n:=n-10; end; end. Если рисуем множество окружностей, то начинаем с фигуры большего радиуса, так как она имеет заливку белого цвета и закрывает собой предыдущие. ! Круги на воде
11 слайд
12 слайд
Описание слайда:
Домашнее задание:
Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.
Пожаловаться на материал
Курс повышения квалификации
Курс профессиональной переподготовки
Учитель математики и информатики
Курс профессиональной переподготовки
Учитель информатики
Найдите материал к любому уроку,
указав свой предмет (категорию), класс, учебник и тему:
также Вы можете выбрать тип материала:
Общая информация
Номер материала: ДБ-095002
Вам будут интересны эти курсы:
Оставьте свой комментарий
Источник