Нарисовать прямоугольный треугольник, соответствующий рисунку (катеты треугольника параллельны осям координат). Длины катетов и координаты прямого угла вводятся.
Алгоритм решения задачи.
1. Ввод исходных данных.
2. Чтобы изобразить треугольник, нужно выполнить следующие действия:
1) построить линии из точки с координатой (x; y) в точки с координатами (x + a; y) и (x; y + b);
2) соединить линией точки (x + a; y) и (x; y + b);
3) закрасить треугольник. Для закрашивания треугольника нужно знать координаты какой-либо точки внутри треугольника. Такой точкой в данном случае может быть точка с координатами (x + 2; y + 2)
Программа:
uses GraphABC;
var a,b,x,y,x_c, y_c:integer;
begin
writeln('Введите координаты');
read(x,y); writeln (x,' ',y);
writeln('Введите длины катетов');
read(a,b); writeln (a,' ',b);
Line(x,y,x+a,y); Line(x,y,x,y+b);
Line(x+a,y,x,y+b);
//Координаты точки внутри треугольника
x_c := x + 2; y_c := y + 2;
FloodFill(x_c,y_c,clRandom);
end.
Тестирование.
Запустить программу и ввести значения: координаты (100; 100), длины катетов 70 и 120.
Результат:
Другой вариант:
Нарисовать в графическом окне гриб. Задать координаты верхнего левого угла квадрата и длину его стороны для определения местоположения и размеров гриба.
Алгоритм решения задачи.
1. Ввод исходных данных.
2. Для того чтобы построить гриб, нужно выполнить следующие действия:
1) построить овал для изображения ножки гриба. Параметры команды для изображения эллипса определим следующим образом: ellipse(x + d div 3, y, x + 2*d div 3, y + d);
2) нарисовать шляпку гриба. Для этого можно использовать команду Pie (построение сектора круга). Координаты центра x y + + d d 2 3 ; , радиус — d 3 . Углы равны 0° и 180° соответственно.
Программа:
uses GraphABC;
var x,y,d: integer;
begin
writeln('Координаты');
read(x,y);
writeln (x,' ',y);
writeln('Сторона');
read(d);
writeln (d);
SetBrushColor(clYellow);
Ellipse (x + d div 3,y, x + 2 * d div 3,y + d);
SetBrushColor(clBrown);
Pie(x + d div 2,y + d div 3, d div 3,0,180);
end.
Тестирование.
Запустить программу и ввести значения: координаты (100; 100), сторона 150. Результат:
Написать программу для рисования на экране 10 разноцветных окружностей. Расположение окружностей, их радиусы и цвет определяются случайным образом.
Алгоритм решения задачи.
1. Установим толщину линий в 3 пикселя и прозрачную заливку.
2. Значения координат центра окружности и ее радиуса определяются функцией random. Значение цвета для границы круга — clRandom.
3. Так как количество повторений известно, будем использовать цикл for.
IV. Описание переменных: x, y (координаты центра), r (радиус) имеют типinteger.
Программа:
uses GraphABC;
var x,y,r: integer;
begin
SetPenWidth(3);
SetBrushStyle(bsClear);
for var i:= 1 to 10 do begin
x := random(600);
y := random(400);
R := random(150);
SetPenColor(clRandom);
circle(x,y,r);
end;
end.
Тестирование.
Запустить программу. Должно быть нарисовано 10 окружностей.
Написать программу для построения n равнобедренных прямоугольных треугольников с длиной катета а. Расположение треугольников определяется случайным образом.
Алгоритм решения задачи.
1. В примере 18.3 изображали окружности, расположенные случайным образом, а в примере 18.1 — прямоугольные треугольники. Воспользуемся программами этих примеров.
2. Ввод значений переменных n и а.
3. Так как количество повторений известно, будем использовать цикл for.
4. Изменим программу из примера 18.3. Для этого команду cirle (построение окружности) заменим на команду построения треугольника:
1) местоположение треугольника задается координатами прямого угла, которые определим случайным образом;
2) катеты прямоугольного треугольника имеют одинаковую длину — значение a.
5. Построение одного прямоугольного треугольника опишем во вспомогательном алгоритме pr_treug. Параметры процедуры построения треугольника — координаты вершины прямого угла и длины катетов. Алгоритм описан в примере 18.2.
Процедура:
Основная программа:
Программа:
uses GraphABC;
var n, x, y, a : integer;
procedure pr_treug (x, y, a, b : integer);
var x_c, y_c:integer;
begin
line(x, y, x + a,y);
line(x, y, x, y + b);
line(x + a, y, x, y + b);
x_c := x + 2; y_c := y + 2;
FloodFill(x_c,y_c,clRandom);
end;
begin
writeln('Ввeдите количество');
read(n); writeln (n);
writeln('Ввeдите длину катета');
read(a); writeln (a);
for var i:= 1 to n do begin
x:= random(500);
y:= random(400);
pr_treug(x, y, a, a);
end;
end.
Тестирование.
Запустить программу. Результат:
Нарисовать 10 грибов. Расположение и их размеры определяются случайным образом.
Алгоритм решения задачи.
1. Построение одного гриба опишем во вспомогательном алгоритме. Алгоритм описан в примере 18.2.
2. Значения координат верхнего левого угла и размер гриба определяются функцией random.
3. Так как количество повторений известно, будем использовать цикл for.
Описание переменных: x, y (координаты верхнего левого угла), d (размер) — integer.
Процедура:
Основная программа:
Программа:
uses GraphABC;
var x,y,d: integer;
procedure grib(x,y,d:integer);
begin
SetBrushColor(clYellow);
Ellipse(x + d div 3, y,
x + 2*d div 3, y + d);
SetBrushColor(clBrown);
Pie(x + d div 2, y + d div 3, d div 3, 0, 180);
end;
Begin
for var i: = 1 to 10 do begin
x:= random(400);
y:= random(200);
d:= random(150);
grib(x,y,d);
end;
end.
Тестирование.
Результат может быть следующим:
Можно добавить раскраску случайным цветом:
Заполнить графическое окно окружностями с радиусом 10.
Алгоритм решения задачи.
1. Задача является обобщением задачи примера 17.1. Команды программы следует повторить для нескольких рядов окружностей. Количество рядов определяется высотой окна. Рисование одного ряда оформим как вспомогательный алгоритм row.
2. Положение любого ряда окружностей определяется координатой y. Для каждого значения y, пока он не станет большим, чем вертикальный размер экрана, выполняем в цикле следующее:
1) рисуем ряд окружностей;
2) изменяем y.
Процедура:
Основная программа:
Программа:
uses GraphABC;
var x, y, r : integer;
procedure row(y : integer);
begin
x :=10; R := 10;
while x <= WindowWidth do begin
Circle(x,y,r); x := x+20;
end;
end;
begin
y := 10;
while y <= WindowHeight do begin
Row(y); y := y + 20;
end;
end.
Тестирование.
Результат:
1. Поэкспериментируйте с программой, вводя различные значения исходных данных. 2б
2. Объясните, что происходит при вводе отрицательных значений длин катетов. (Запишите в комментариях к программе в конце программы) +2б
3. Что произойдет, если ввести отрицательные значения координат? Объясните результат. (Запишите в комментариях к программе в конце программы) +2б
Выполните программу несколько раз. Уберите прозрачную заливку. Объясните, почему некоторые окружности не видны. (Опишите в комментариях к программе) 4б
Внесите в программу такие изменения, чтобы можно было изобразить 100 кругов. +1б
Какой максимальный размер может иметь радиус круга в программе? (Опишите в комментариях к программе) +1б
Внесите в программу изменения так, чтобы рисовались круги с радиусом не более 20. Количество кругов установите равным 10 000. +2б
Внесите изменения в программу так, чтобы пользователь мог вводить количество отображаемых на экране кругов. +2б
1. Запустите программу несколько раз. Объясните, почему при некоторых запусках треугольники рисуются поверх текста в верхнем левом углу экрана. Измените программу так, чтобы треугольники рисовались ниже текста (правее текста).
2. Добавьте в программу возможность ввода длины второго катета.
3. Измените программу так, чтобы длины катетов задавались случайным образом.
1. Сравните две программы решения задачи. Какой вариант решения данной задачи представляется вам лучшим? Почему?
2. Задайте в программе толщину отрезка в 3 пикселя.
3. Какие изменения нужны в программе, чтобы толщина отрезка была случайным числом из промежутка [2; 8]?
4. Внесите изменения в программу так, чтобы пользователь мог вводить количество отображаемых на экране отрезков.
5. Какие изменения нужно внести в программу, чтобы вместо горизонтальных отрезков изображались вертикальные? Диагональные?
Расставьте комментарии к программе (Программа и комментарии к ней см. в конце задания) 4б
Измените в программе значение r = 10 на r = 20. Почему получился такой рисунок? (Опишите в комментариях в конце программы). Поэкспериментируйте со значениями радиуса, установив прозрачную заливку. +2б
Какие изменения нужно внести в программу, чтобы экран заполнялся кругами с радиусом 20 без пересечений? (Указать в комментариях в конце программы) +1б
Внесите изменения в программу так, чтобы все круги были красными или разноцветными. +1б
Внесите в программу изменения так, чтобы графическое окно можно было заполнять кругами введенного радиуса. +2б
Программа:
uses GraphABC;
var x, y, r : integer;
procedure row(y : integer);
begin
x :=10; R := 10;
while x <= WindowWidth do begin
Circle(x,y,r); x := x+20;
end;
end;
begin
y := 10;
while y <= WindowHeight do begin
Row(y); y := y + 20;
end;
end.
Комментарии к программе:
// Начало основной программы
// Включение графического режима
// Рисование окружностей
// Описание переменных
// Задание значения радиуса окружностей
// Начало цикла рисования рядов окружностей
// Начало процедуры рисования ряда окружностей
// Окончание процедуры рисования одного ряда окружностей
// Начало цикла рисования одного ряда окружностей
1. Грибами (пример 18.2).
2. Фигурками из задания 6.