ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
§ 7. Выполнение практических заданий из различных предметных областей
7.1 Построение геометрических фигур
Коротко о главном:
При построении изображений можно использовать следующие графические примитивы: точки, отрезки, прямоугольники, окружности, эллипсы.
Для совмещения работы с текстом и графикой в одном окне необходимо подключение модулей crt и GraphABC одновременно.
Упражнение 1
Составьте программу, которая выполняет чертёж одной из деталей и вычисляет её площадь. Масштаб: 1 клетка – 20 пикселей.
А)
Технология составления программы:
Проанализируем рисунок: высота фигуры – 6 клеток (см), ширина – 12 клеток (см), радиус отверстия - 3 клетки (см).
program upr7_1_1a;
uses crt, GraphABC; {Подключение модулей}
var r,a,b: integer;
S: real;
begin
SetWindowSize (320,320); {Размеры окна}
SetPenWidth (3); {Толщина пера}
line(110,50,50,50); {Рисование отрезков}
line(50,50,50,170);
line(50,170,290,170);
line(290,170,290,50);
line(290,50,230,50);
arc(170,50,60,180,360); {Рисование дуги: (170,50) - центр дуги, 60 - радиус дуги, (180,360) - размер дуги}
a:=12; b:=6; r:=3; {Определение начальных данных}
S:=a*b-pi*r*r/2; {Вычисление площади}
write('S= ',S:2:2); {Форматный вывод}
end.
Результат работы будет выглядеть так:

Б) 
Технология составления программы:
Проанализируем рисунок: площадь фигуры состоит из площади прямоугольника шириной 8 см и высотой 6 см, площади окружности радиуса 3 см за вычетом двух площадей окружностей радиуса 1 см.
program upr7_1_1b;
uses crt, GraphABC; {Подключение модулей}
var r1,r2,a,b: integer;
S: real;
begin
SetWindowSize (350,350); {Размеры окна}
SetPenWidth (3); {Толщина пера}
line(110,50,270,50); {Рисование отрезков}
line(110,170,270,170);
circle(110,110,20); {Рисование окружностей}
circle(270,110,20);
arc(110,110,60,90,270); {Рисование дуги: (110,110) - центр дуги, 60 - радиус дуги, (90,270) - размер дуги}
arc(270,110,60,270,90); {Рисование дуги: (270,110) - центр дуги, 60 - радиус дуги, (270,90) - размер дуги}
a:=8; b:=6; {Определение начальных данных}
r1:=1; r2:=3;
S:=a*b+pi*r2*r2-2*pi*r1*r1;{Вычисление площади}
write('S= ',S:2:2); {Форматный вывод}
end.
Результат работы будет выглядеть так:

В) 
Технология составления программы:
Проанализируем рисунок: площадь фигуры состоит из площади прямоугольника шириной 12 см и высотой 6 см за вычетом площади окружности радиуса 2 см и за вычетом половины площади окружности радиуса 3 см.
program upr7_1_1v;
uses crt, GraphABC; {Подключение модулей}
var r1,r2,a,b: integer;
S: real;
begin
SetWindowSize (350,350); {Размеры окна}
SetPenWidth (3); {Толщина пера}
line(110,50,230,50); {Рисование отрезков}
line(290,110,290,170);
line(290,170,50,170);
line(50,170,50,110);
circle(170,110,40); {Рисование окружности}
arc(50,50,60,270,360); {Рисование дуги: (50,50) - центр дуги, 60 - радиус дуги, (270,360) - размер дуги}
arc(290,50,60,180,270); {Рисование дуги: (290,50) - центр дуги, 60 - радиус дуги, (180,270) - размер дуги}
a:=12; b:=6; {Определение начальных данных}
r1:=2; r2:=3;
S:=a*b-pi*r1*r1-pi*r2*r2/2;{Вычисление площади}
write('S= ',S:2:2); {Форматный вывод}
end.
Результат работы будет выглядеть так:

Упражнение 2
Составьте программу, которая рисует одну из пространственных фигур:
А) куб (длина ребра вводится с клавиатуры);
Технология составления программы:
program upr7_1_2a;
uses crt, GraphABC; {Подключение модулей}
var a, b:integer;
begin
SetWindowSize (350,350); {Размеры окна}
write('Введите длину ребра (1-8): ');
readln(a); {Ввод длины ребра куба}
SetPenWidth (3); {Толщина пера}
b:=a*20; {Учёт масштаба}
line(50,trunc(50+b/2),50,trunc(50+3*b/2));
{Рисование отрезков, trunc обеспечивает целочисленность координат}
line(50,trunc(50+3*b/2),50+b,trunc(50+3*b/2));
line(50+b,trunc(50+3*b/2),50+b,trunc(50+b/2));
line(50+b,trunc(50+3*b/2),trunc(50+3*b/2),50+b);
line(trunc(50+3*b/2),50+b,trunc(50+3*b/2),50);
line(trunc(50+3*b/2),50,trunc(50+b/2),50);
line(trunc(50+b/2),50,50,trunc(50+b/2));
line(50,trunc(50+b/2),50+b,trunc(50+b/2));
line(50+b,trunc(50+b/2),trunc(50+3*b/2),50);
end.
Результат работы может выглядеть так:

Б) конус (значения радиуса и высоты вводятся с клавиатуры);
Технология составления программы:
Пусть центр основания конуса находится в точке (200,200).
program upr7_1_2b;
uses crt, GraphABC; {Подключение модулей}
var a,b,r,h:integer;
begin
SetWindowSize (350,350); {Размеры окна}
write('Введите значение радиуса (1-4): ');
readln(a); {Ввод значения радиуса конуса}
write('Введите высоту (1-8): ');
readln(b); {Ввод высоты конуса}
SetPenWidth (3); {Толщина пера}
r:=a*20; h:=b*20; {Учёт масштаба}
line(200-r,200,200,200-h);{Рисование отрезков}
line(200,200-h,200+r,200);
Ellipse(200-r,trunc(200-r/2),200+r,trunc(200+r/2));
{Рисование эллипса, координаты которого заданы координатами противоположных вершин описанным около него прямоугольником; trunc обеспечивает целочисленность координат}
end.
Результат работы может выглядеть так:

Упражнение 3
Составьте программу, которая рисует:
А) выкройку платья (размер а вводится с клавиатуры);
Технология составления программы:
Расчёт координат произведём относительно размера платья r. Пусть отступим от начала координат по оси OХ расстояние r, по оси OY – 40 пикселей.
program upr7_1_3a;
uses crt, GraphABC; {Подключение модулей}
var a,r:integer;
begin
SetWindowSize (350,350); {Размеры окна}
write('Введите значение размера платья (1-7): ');
readln(a); {Ввод размера платья}
SetPenWidth (3); {Толщина пера}
r:=a*20; {Учёт масштаба}
line(trunc(r+r/4),40,r,40);
{Рисование отрезков, trunc обеспечивает целочисленность координат}
line(r,40,r,r+40);
line(r,r+40,trunc(r/2),2*r+40);
line(trunc(r/2),2*r+40,trunc(2*r+r/2),2*r+40);
line(trunc(2*r+r/2),2*r+40,2*r,r+40);
line(2*r,r+40,2*r,40);
line(2*r,40,trunc(r+3*r/4),40);
line(r,r+40,2*r,r+40);
arc(trunc(r+r/2),40,trunc(r/4),180,360); {Рисование дуги}
end.
Результат работы может выглядеть так:

Б) деталь в виде кольца внешним радиусом 150 и внутренним радиусом 50, в котором вырезаны отверстия радиусом 30. Их центры находятся на расстоянии 100 от центра кольца (число отверстий n вводится с клавиатуры).
Технология составления программы:
program upr7_1_3b;
uses crt, GraphABC; {Подключение модулей}
var n,i,u,u0,x,y:integer;
begin
SetWindowSize (400,400); {Размеры окна}
write('Введите число отверстий (2
readln(n); {Ввод количества отверстий}
SetPenWidth (2); {Толщина пера}
Circle(200,200,150); {Рисование окружности радиуса 150}
Circle(200,200,50); {Рисование окружности радиуса 50}
u0:=360 div n; {Определение угла смещения}
u:=0 ; {Начальный угол}
for i:=1 to n do {Повторение рисования окружности}
begin
x:=round(100*sin(pi/180*u));{Смещение по оси ОХ}
y:=round(100*cos(pi/180*u)); {Смещение по оси OY}
Circle(200-x,200-y,30);
{Рисование окружности радиуса 30}
u:=u+u0; {Увеличение угла}
end;
FloodFill(200,55,clGray);
{Закрашивание основной окружности}
end.
Результат работы может выглядеть так:


7.2 использование растровых изображений
Коротко о главном:
В среде PascalABC можно загружать рисунки в форматах BMP, JPG, GIF, PNG.
Процедура DrawPicture(nm,x,y) выводит рисунок с описателем nm в позицию (x,y) графического окна.
Движение изображений в среде PascalABC можно имитировать путём их многократного рисования и стирания.
Избежать моргания при имитации движения позволяет использование процедуры перерисовки Redraw.
Упражнение 1
Составьте программу, которая загружает из файлов и выводит на экран:
А) портреты учёных (например, Эйнштейна, Резерфорда, Бора), писателей (например, Купалы, Коласа, Быкова), художников, композиторов;
Технология составления программы:
program upr7_2_1a;
uses crt, GraphABC; {Подключение модулей}
var pic:integer;
begin
SetWindowSize (500,500); {Размеры окна}
ClearWindow(clwhite); {Белый фон}
pic:=LoadPicture('d:/uprajneniya /ainshtein.jpg');
{Загрузка изображения из файла}
DrawPicture(pic,10,10,150,200);
{Вывод изображения и размер}
pic:=LoadPicture('d:/uprajneniya /rezerford.jpg');
{Загрузка изображения из файла}
DrawPicture(pic,170,10,150,200);
{Вывод изображения и размер}
pic:=LoadPicture('d:/uprajneniya /bor-nils.jpg');
{Загрузка изображения из файла}
DrawPicture(pic,330,10,150,200);
{Вывод изображения и размер}
end.
Результат работы может выглядеть так:

Для вывода на экран изображений писателей, художников, композиторов в предложенной программе изменить имена файлов с учёными на имена файлов, содержащие эти изображения.
Б) изображения животных, растений, памятников архитектуры;
Технология составления программы:
program upr7_2_1b;
uses crt, GraphABC; {Подключение модулей}
var pic:integer;
begin
SetWindowSize (500,500); {Размеры окна}
ClearWindow(clGreen); {Зелёный фон}
pic:=LoadPicture('d:/uprajneniya/los.jpg');
{Загрузка изображения из файла}
DrawPicture(pic,10,10,100,120);
{Вывод изображения и размер}
pic:=LoadPicture('d:/uprajneniya/medved.jpg');
DrawPicture(pic,170,10,100,120);
pic:=LoadPicture('d:/uprajneniya/volk.jpg');
DrawPicture(pic,330,10,100,120);
end.
Результат работы может выглядеть так:

Для вывода на экран изображений растений, памятников архитектуры в предложенной программе изменить имена файлов с животными на имена файлов, содержащие эти изображения.
Упражнение 2
Составьте программу, которая:
А) рисует рекламные плакаты (турфирмы, концерта, спортивного праздника);
Технология составления программы:
Создать рекламный анимированный плакат: изображение движется с верхнего левого угла - в нижний правый и при движении увеличивается в размерах. После окончания движения на плакате появляется текст.
program upr7_2_2a;
uses crt, GraphABC; {Подключение модулей}
var pic,x,y,w,h:integer;
begin
SetWindowSize (500,500); {Размеры окна}
pic:=LoadPicture('d:/uprajneniya/turfirma.jpg');
{Загрузка изображения}
SetPictureTransparent(pic,true); {Прозрачный фон}
x:=0;y:=0; {Начальные координаты}
w:=30;h:=30; {Начальный размер изображения}
while x
begin
ClearWindow;
{Очистка графического окна белым цветом}
DrawPicture(pic,x,y,w,h); {Вывод изображения}
x:=x+2; y:=y+2; {Изменение координат}
w:=w+2; h:=h+2; {Изменение размера изображения}
sleep(20); {Задержка на 20 мс}
Redraw; {Перерисовка}
end;
SetBrushStyle(bsClear); {Прозрачный фон кисти}
SetFontColor(clRed); {Цвет шрифта}
SetFontSize(20); {Размер шрифта}
SetFontStyle(fsBold); {Начертание}
TextOut(60,40,'Турфирма "Алые паруса"'); {Вывод текста}
end.
Результат работы может выглядеть так:

Плакаты концерта и спортивного праздника можно сделать по аналогии с плакатом турфирмы.
Б) генерирует меню школьной столовой;
Технология составления программы:
program upr7_2_2b;
uses crt, GraphABC; {Подключение модулей}
var i, pic: integer; s1,s2,s3,b1,b2,b3: string;
begin
SetWindowSize (500,500); {Размеры окна}
write('Выберите номер комплекса: 1 или 2 '); read(i);
case i of {Выбор имён файлов и текста}
1: begin b1:='d:/uprajneniya/borg.jpg';
b2:='d:/uprajneniya/plov.jpg';
b3:='d:/uprajneniya/kompot.jpg';
s1:='Борщ';
s2:='Плов';
s3:='Компот';
end;
2: begin b1:='d:/uprajneniya/ovoj_sup.jpg';
b2:='d:/uprajneniya/farsh_perez.jpg';
b3:='d:/uprajneniya/sok.jpg';
s1:='Овощной суп';
s2:='Фарш. перец';
s3:='Cок';
end;
end;
SetPenColor(clLtGray); {Цвет пера}
Rectangle(20,20,490,490); {Рисование прямоугольника}
pic:=LoadPicture(b1); {Загрузка изображения из файла}
DrawPicture(pic,30,30,100,100); {Вывод изображения}
pic:=LoadPicture(b2); {Загрузка изображения из файла}
DrawPicture(pic,150,30,100,100); {Вывод изображения}
pic:=LoadPicture(b3); {Загрузка изображения из файла}
DrawPicture(pic,270,30,100,100); {Вывод изображения}
SetBrushStyle(bsClear); {Прозрачный фон кисти}
SetFontColor(clBlack); {Цвет шрифта}
SetFontSize(10); {Размер шрифта}
SetFontStyle(fsBold); {Начертание}
TextOut(30,140,s1); {Вывод текста}
TextOut(150,140,s2); {Вывод текста}
TextOut(270,140,s3); {Вывод текста}
end.
Результат работы может выглядеть так:


Упражнение 3
Составьте программу, которая имитирует падение брошенного с башни яблока.
Технология составления программы:
program upr7_2_3;
uses crt, GraphABC; {Подключение модулей}
var fon,pic,x,y,i:integer;
begin
SetWindowSize (230,380); {Размеры окна}
fon:=LoadPicture('d:/uprajneniya/TOWER.JPG');
{Загрузка изображений}
pic:=LoadPicture('d:/uprajneniya/APPLE.GIF');
SetPictureTransparent(pic,true); {Прозрачный фон}
x:=120;y:=40; {Начальные координаты}
while x
begin
ClearWindow;
{Очистка графического окна белым цветом}
DrawPicture(fon,0,0); {Вывод изображения}
DrawPicture(pic,x,y,20,20);
x:=x+1; y:=y+3; {Изменение координат}
sleep(30); {Задержка на 20 мс}
Redraw; {Перерисовка}
end;
end.
Результат работы может выглядеть так:

7.3 Построение графиков и диаграмм
Упражнение 1
Составьте программу, которая строит график зависимости:
А) у(х)=0,5х•cos2x на промежутке [-12;12];
Технология составления программы:
program upr7_3_1a;
uses crt, GraphABC; {Подключение модулей}
var x0,y0,x1,y1,k:integer; x,y:real;
begin
SetWindowSize (640,400); {Размеры окна}
x0:=320;y0:=200; k:=20;
line(20,y0,620,y0); {Ось абсцисс}
line(x0,20,x0,380); {Ось ординат}
SetPenColor(clRed); {Цвет пера}
x:=-12; {Начальное значение аргумента}
while x
begin
y:=0.5*x*cos(2*x); {Функция}
x1:=trunc(x0+x*k); {Экранные координаты}
y1:=trunc(y0+y*k);
circle(x1,y1,2);
x:=x+0.01;
end;
end.
Результат работы будет выглядеть так:

Б) у(х)=8sinx•sin2x на промежутке [-15;15];
Технология составления программы:
program upr7_3_1b;
uses crt, GraphABC; {Подключение модулей}
var x0,y0,x1,y1,k:integer; x,y:real;
begin
SetWindowSize (640,400); {Размеры окна}
x0:=320;y0:=200; k:=20;
line(20,y0,620,y0); {Ось абсцисс}
line(x0,20,x0,380); {Ось ординат}
SetPenColor(clRed); {Цвет пера}
x:=-15; {Начальное значение аргумента}
while x
begin
y:=8*sin(x)*sin(2*x); {Функция}
x1:=trunc(x0+x*k); {Экранные координаты}
y1:=trunc(y0+y*k);
circle(x1,y1,2);
x:=x+0.01;
end;
end.
Результат работы будет выглядеть так:

Упражнение 2
Составьте программу, которая строит круговую диаграмму, иллюстрирующую:
А) распределение результатов тестирования по трём предметам (данные вводятся с клавиатуры);
Технология составления программы:
program upr7_3_2a;
uses crt, GraphABC; {Подключение модулей}
var a,b,c,a1,b1,c1,S:integer;
begin
SetWindowSize (640,400); {Размеры окна}
write('Введите результат первого теста: '); readln(a);
write('Введите результат второго теста: '); readln(b);
write('Введите результат третьего теста: '); readln(c);
S:=a+b+c;
{Вычисление суммарного результата тестов}
a1:=round(a*360/S); {Вычисление конечного угла сектора}
SetBrushColor(clRed); {Цвет кисти}
Pie(220,240,140,0,a1); {Рисование сектора}
b1:=a1+round(b*360/S); {Вычисление конечного угла сектора}
SetBrushColor(clGreen); {Цвет кисти}
Pie(220,240,140,a1,b1); {Рисование сектора}
c1:=b1+round(c*360/S); {Вычисление конечного угла сектора}
SetBrushColor(clYellow); {Цвет кисти}
Pie(220,240,140,b1,c1); {Рисование сектора}
end.
Результат работы может выглядеть так:

Б) химический состав земной коры (данные вводятся с клавиатуры: кислород – 47, 2%, кремний – 27,6%, алюминий – 8,3%, железо – 5,1%, кальций – 3,6%, другие элементы – 8,2%).
Технология составления программы:
program upr7_3_2b;
uses crt, GraphABC; {Подключение модулей}
const K: array[1..6] of string = ('кислород','кремний','алюминий',
'железо','кальций','другие элементы');
var u0,u,i:integer; N: array[1..6] of real;
begin
SetWindowSize (640,400); {Размеры окна}
u0:=0;
for i:=1 to 6 do
begin
write('Введите процентный состав элемента ', K[i],' ');
readln(N[i]);
u:=u0+round(N[i]*360/100);
{Вычисление конечного угла сектора}
SetBrushColor(rgb(random(255),random(255),random(255)));
{Цвет кисти}
Pie(220,240,140,u0,u); {Рисование сектора}
u0:=u;
end;
end.
Результат работы может выглядеть так:

§ 8. Выполнение практических заданий по темам учебных предметов
8.1 Астрономия
Упражнение 1
Составьте программу, которая загружает из файлов и выводит на экран изображение одной из планет Солнечной системы на фоне звёздного неба.
Технология составления программы:
program upr8_1_1;
uses crt, GraphABC; {Подключение модулей}
var fon,pic:integer;
begin
SetWindowSize (170,150); {Размеры окна}
fon:=LoadPicture('d:/uprajneniya/SKY.GIF'); {Загрузка изображения из файла}
DrawPicture(fon,0,0); {Вывод изображения}
pic:=LoadPicture('d:/uprajneniya/saturn.jpg'); {Загрузка изображения из файла}
DrawPicture(pic,30,30,100,100);{Вывод изображения}
end.
Результат работы может выглядеть так:

Упражнение 2
Составьте программу, которая демонстрирует:
А) прямолинейное движение спутника на фоне звёздного неба и Земли;
Технология составления программы:
program upr8_1_2а;
uses crt, GraphABC; {Подключение модулей}
var fon,pic,din,x:integer;
begin
SetWindowSize (170,150); {Размеры окна}
fon:=LoadPicture('d:/uprajneniya/SKY.GIF'); {Загрузка изображений из файла}
pic:=LoadPicture('d:/uprajneniya/zemlya.jpg');
din:=LoadPicture('d:/uprajneniya/sputnik.jpg');
x:=0;
while x
begin
ClearWindow;
{Очистка графического окна белым цветом}
DrawPicture(fon,0,0); {Вывод изображений}
DrawPicture(pic,0,50,400,200);
DrawPicture(din,x,20,20,20);
x:=x+1; {Изменение координат}
sleep(30); {Задержка на 30 мс}
Redraw; {Перерисовка}
end;
end.
Результат работы может выглядеть так:

А)движение планет вокруг Солнца по круговым орбитам;
Технология составления программы:
program upr8_1_2b;
uses crt, GraphABC; {Подключение модулей}
var fon,pic,din1,din2,x0,y0,x,y,u,R:integer;
begin
SetWindowSize (170,150); {Размеры окна}
fon:=LoadPicture('d:/uprajneniya/SKY.GIF'); {Загрузка изображений из файла}
pic:=LoadPicture('d:/uprajneniya/sun.jpg');
din1:=LoadPicture('d:/uprajneniya/ZEM.GIF');
din2:=LoadPicture('d:/uprajneniya/mars.jpg');
x0:=75; y0:=55; {Координаты центра}
R:=50; u:=1; {Радиус орбиты}
while u
begin
ClearWindow;
{Очистка графического окна белым цветом}
DrawPicture(fon,0,0); {Вывод изображений}
DrawPicture(pic,70,60,30,30);
x:=round(x0+R*cos(pi*u/180)); {Координаты Земли}
y:=round(y0-R*sin(pi*u/180));
DrawPicture(din1,x,y,10,10);
x:=round(x0+R*0.8*cos(pi*u/180)); {Координаты Марса}
y:=round(y0-R*0.8*sin(pi*u/180));
DrawPicture(din2,y,x,10,10);
u:=u+1; {Изменение координат}
sleep(30); {Задержка на 30 мс}
Redraw; {Перерисовка}
end;
end.
Результат работы может выглядеть так:

8.2 География
Упражнения
Составьте программу, которая:
А) выводит карту Беларуси и обозначает национальные парки квадратами, размеры которых пропорциональны площади парка: Беловежская пуща – 87,5 тыс.га, Браславские озёра – 71,5 тыс.га, Припятский – 82, 4 тыс.га, Нарочанский – 94 тыс.га;
Технология составления программы:
program upr8_2_a;
uses crt, GraphABC; {Подключение модулей}
const A: array[1..4] of real=(87.5,71.5,82.4,94);
B: array[1..4] of string=('Беловежская пуща',
'Браславские озёра','Припятский','Нарочанский');
var karta,i,R:integer;
begin
SetWindowSize (520,480); {Размеры окна}
writeln('Площадь национальных парков Беларуси:');
karta:=LoadPicture('d:/uprajneniya/karta.gif');
{Загрузка изображений из файла}
DrawPicture(karta,10,50);
setBrushColor(clRed);
for i:=1 to 4 do
writeln(B[i],' ',A[i],' тыс.га');
R:=round(sqrt(A[1]/pi));
circle(50,400,R);
R:=round(sqrt(A[2]/pi));
circle(250,100,R);
R:=round(sqrt(A[3]/pi));
circle(300,400,R);
R:=round(sqrt(A[4]/pi));
circle(200,200,R);
end.
Результат работы может выглядеть так:

Б) выводит карту Беларуси, строит таблицу с данными о площади и глубине озёр, столбчатую или линейную диаграмму (по указанию учителя);
Технология составления программы:
Воспользуемся данными таблицы (рис. 8.2.1) для составления программы.
рис. 8.2.1
program upr8_2_b;
uses crt, GraphABC; {Подключение модулей}
const A: array[1..8] of real=(79.6,52.8,40.3,37.7,36.1,
26.0,24.6,22.3);
B: array[1..8] of real=(24.8,7.5,2.9,11.5,12.0,
2.3,8.1,8.7);
C: array[1..8] of string=('Нарочь','Освея',
'Червоное','Лукомльское','Дривяты','Выгонощенское',
'Нещердо','Свирь');
var karta,i,S:integer;
begin
SetWindowSize (640,480); {Размеры окна}
writeln('Площадь и глубина озёр Беларуси:');
karta:=LoadPicture('d:/uprajneniya/karta.gif');
{Загрузка изображений из файла}
DrawPicture(karta,340,0,250,200);
writeln('Озеро':15,'Площадь':13,'Глубина':9);
for i:=1 to 8 do
writeln(i,C[i]:15,' ',A[i]:7:2,' км.кв ', B[i]:7:2,' м'); {Вывод данных на экран из массива}
writeln;writeln;
writeln('Выберите вариант диаграммы: 1-столбчатая, 2-линейчатая');
read(S); {Осуществление выбора варианта диаграммы}
writeln;
SetPenWidth(5); {Толщина пера}
case S of {Выбор варианта диаграммы}
1: begin writeln('Столбчатая диаграмма');
{Построение диаграммы}
for i:=1 to 8 do
begin
write(' ',i);
setPenColor(clRed); {Цвет пера}
Line(5+25*i,420-round(2*A[i]),5+25*i,420); {Рисование линий}
setPenColor(clBlue); {Цвет пера}
Line(10+25*i,420-round(2*B[i]),10+25*i,420); {Рисование линий}
end;
end;
2: begin writeln('Линейчатая диаграмма');
{Построение диаграммы}
for i:=1 to 8 do
begin
writeln(C[i]:15,' ');
{Вывод данных на экран из массива}
setPenColor(clRed); {Цвет пера}
Line(160,250+15*i,160+round(5*A[i]),250+15*i); {Рисование линий}
setPenColor(clBlue); {Цвет пера}
Line(160,255+15*i,160+round(5*B[i]),255+15*i); {Рисование линий}
end;
end;
end;
end.
Результат работы может выглядеть так:
Вариант 1 – столбчатая диаграмма

Вариант 2 – линейчатая диаграмма

В) выводит карту Европы и помечает страны (столицы государств) символами, размеры которых пропорциональны численности населения.
Технология составления программы:
Для определения численности населения страны Европы воспользуемся диаграммой (рис. 8.2.2). Возьмём только часть данных: для стран - Германия, Франция, Великобритания, Италия, Испания, Польша, Нидерланды, Греция.
рис. 8.2.2
program upr8_2_v;
uses crt, GraphABC; {Подключение модулей}
const A: array[1..8] of real=(82.5,60.9,60.4,
58.8,43.8,38.1,16.3,11.1);
B: array[1..8] of string=('Германия','Франция',
'Великобритания','Италия','Испания','Польша','Нидерланды','Греция');
var karta,i,R:integer;
begin
SetWindowSize (500,560); {Размеры окна}
writeln('Численность населения стран Европы');
karta:=LoadPicture('d:/uprajneniya/europe.gif');
{Загрузка изображений из файла}
DrawPicture(karta,0,160,500,400);
writeln('Страна':15,' Численность населения':13);
for i:=1 to 8 do
writeln(i,B[i]:15,' ',A[i]:7:1,' млн. чел ');
{Вывод данных на экран из массива}
setBrushColor(clRed);
R:=round(sqrt(A[1]/pi)); { Германия }
circle(250,400,R);
R:=round(sqrt(A[2]/pi)); { Франция }
circle(200,450,R);
R:=round(sqrt(A[3]/pi)); { Великобритания }
circle(160,350,R);
R:=round(sqrt(A[4]/pi)); { Италия }
circle(310,500,R);
R:=round(sqrt(A[5]/pi)); { Испания }
circle(160,515,R);
R:=round(sqrt(A[6]/pi)); { Польша }
circle(330,400,R);
R:=round(sqrt(A[7]/pi)); { Нидерланды }
circle(230,395,R);
R:=round(sqrt(A[8]/pi)); { Греция }
circle(360,510,R);
end.
Результат работы может выглядеть так:

8.3 Биология
Упражнения
Составьте программу, которая вычисляет:
А) через сколько дней уровень загрязнения воды отходами уменьшится в N раз, если каждый день он уменьшается на P% (значения N и P вводятся с клавиатуры);
Технология решения:
program upr8_3_a;
var N,P,i,t,u0:integer; u :real;
begin
write('Введите уровень загрязнения воды '); readln(u0);
write('Введите значение уменьшения загрязнения воды '); readln(P);
write('Введите коэффициент уменьшения загрязнения воды '); readln(N);
t:=0; u:=u0;
while u=u0 div N do
begin
u:=u-u*p/100; {Формула уменьшения загрязнения}
t:=t+1; {Подсчёт количества дней}
end;
write('Через ',t,' дней');
end.
Результат работы может выглядеть так:
Введите уровень загрязнения воды 3000
Введите значение уменьшения загрязнения воды 5
Введите коэффициент уменьшения загрязнения воды 2
Через 14 дней
Б) через сколько дней количество атомов радиоактивного изотопа ИОД-131 уменьшится в 100 раз, если период полураспада (время уменьшения количества атомов вдвое) составляет 8,14 дня;
Технология решения:
program upr8_3_b;
var k0:integer; k,t :real;
begin
write('Введите количество атомов радиоактивного изотопа Иод-131 '); readln(k0);
t:=0; k:=k0;
while k=k0 div 100 do
begin
k:=k/2;t:=t+8.14;
end;
write('Через ',t,' дней');
end.
Результат работы может выглядеть так:
Введите количество атомов радиоактивного изотопа Иод-131 10000
Через 56.98 дней
В) через сколько дней выздоровеет больной, т.е. через сколько дней концентрация болезнетворных бактерий в крови уменьшится с 50 до 12 единиц. В результате применения лекарства концентрация бактерий ежедневно уменьшается на 20% по сравнению с предыдущим днём.
Технология решения:
program upr8_3_v;
var t:integer; k :real;
begin
t:=0; k:=50;
while k=12 do
begin
k:=k-k*20/100;
t:=t+1;
end;
write('Через ',t,' дней');
end.
Результат работы программы:
Через 7 дней
8.4 Физика
Упражнение
Составьте программу, которая
А) строит изображения предмета в плоском зеркале (расстояние от предмета до зеркала вводится с клавиатуры);
Технология составления программы:
program upr8_4_a;
uses crt, GraphABC; {Подключение модулей}
var pic,R:integer;
begin
SetWindowSize (640,480); {Размеры окна}
write('Введите расстояние от предмета до зеркала (5-100): ');
readln(R);
pic:=LoadPicture('d:/uprajneniya/robot.jpg');
{Загрузка изображения из файла}
SetPenColor(clbrown); {Цвет пера}
SetPenWidth(7); {Толщина пера}
line(320,50,320,400); {Рисование линий}
line(50,400,590,400);
DrawPicture(pic,320+R,100,200,290); {Вывод изображения}
DrawPicture(pic,320-R,100,-200,290);
{Вывод отображённого изображения}
SetPenColor(clGray); {Цвет пера}
SetPenWidth(2); {Толщина пера}
line(trunc(120+R/2),100,trunc(520-R/2),100); {Рисование линии}
end.
Результат работы может выглядеть так:

Б) демонстрирует отражение и преломление света на плоской поверхности (угол падения вводится с клавиатуры).
Технология составления программы:
program upr8_4_b;
uses crt, GraphABC; {Подключение модулей}
var u,x,y:integer;
begin
SetWindowSize (300,400); {Размеры окна}
write('Введите угол падения луча(5-85): ');
readln(u);
SetPenColor(clGreen); {Цвет пера}
SetPenWidth(4); {Толщина пера}
line(150,50,150,350); {Рисование линии}
SetPenColor(clGray); {Цвет пера}
line(0,200,300,200); {Рисование линий}
FloodFill(50,250,clGray ); {Заливка области серым цветом}
SetPenColor(clRed); {Цвет пера}
x:=abs(round(150*sin(pi/180*(180-u))));
{Вычисление длины катета прямоугольного треугольника (смещение по оси OX)}
y:=abs(round(150*cos(pi/180*(180-u))));
{Вычисление длины катета прямоугольного треугольника (смещение по оси OY)}
line(150,200,150-x,200-y);
{Построение луча падения (с учётом второй четверти декартовой системы координат)}
x:=round(150*sin(pi/180*u));
{Вычисление длины катета прямоугольного треугольника (смещение по оси OX)}
y:=round(150*cos(pi/180*u));
{Вычисление длины катета прямоугольного треугольника (смещение по оси OY)}
line(150,200,150+x,200-y);
{Построение луча отражения (с учётом первой четверти декартовой системы координат)}
SetPenColor(flyblow);
x:=abs(round(150*sin(pi/180*(270+u))));
{Вычисление длины катета прямоугольного треугольника (смещение по оси OX)}
y:=abs(round(150*cos(pi/180*(270+u))));
{Вычисление длины катета прямоугольного треугольника(смещение по оси OY)}
line(150,200,150+ xs,200+y);
{Построение луча преломления (с учётом четвёртой четверти декартовой системы координат)}
end.
Результат работы может выглядеть так:
