Для реализации задачи №1 была выбрана следующая структура данных:
A – массив от 1 до 200 типа integer (целочисленный тип) для хранения чисел;
I - переменная типа integer (целочисленный тип) предназначенная для хранения текущего числа;
Count - переменная типа integer (целочисленный тип) предназначенная для хранения количества найденных чисел.
Для реализации задачи №2 была выбранная следующая структура данных:
dx - переменная типа integer (целочисленный тип) предназначенная для инициализации графики;
angle - переменная типа integer (целочисленный тип) предназначенная для хранения угла поворота;
posx - переменная типа integer (целочисленный тип) предназначенная для хранения позиции звезды по х;
posy - переменная типа integer (целочисленный тип) предназначенная для хранения позиции звезды по у;
maxx, maxy - переменная типа integer (целочисленный тип) предназначенная для хранения максимальных значений координат экрана;
ainc - переменная типа integer (целочисленный тип) предназначенная для хранения приращения угла поворота;
|
|
xinc - переменная типа integer (целочисленный тип) предназначенная для хранения приращения позиции по х;
yinc - переменная типа integer (целочисленный тип) предназначенная для хранения приращения позиции по у;
k - переменная типа real (вещественный тип) предназначенная для хранения приращения коэффициента масштабирования;
kinc - переменная типа real (вещественный тип) предназначенная для хранения приращения коэффициента масштабирования.
4 Описание применяемого алгоритма к задаче №1:
Блок № 1 – dsum (i) вычисление суммы цифр числа i
Блок № 2 – sum:=0 сумма цифр
Блок № 3 – (i<>0)
Блок № 4 – sum:=sum+(i mod 10) к сумме цифр добавляем остаток от деления на 10,
i:=i div 10 числу i присваиваем целую часть от деления на 10
Блок № 5 – dsum:=sum
Блок № 6 – end
Блок № 7 – begin
Блок № 8 – count:=0 (количество выведенных чисел)
i:=1 (число которое мы будем проверять и искать)
Блок № 9 – count<>120 do (пока количество выведенных чисел не равно 120)
Блок № 10 – dsum (i) mod 10 = 0 (если сумма цифр числа кратна 10)
Блок № 11 – inc(count) (увеличиваем количество выведенных чисел)
a[count]:=i (заносим число в массив)
Блок № 12 – a[count] (выводим число)
Блок № 13 – inc(i) (проверяем следующее число)
Блок № 14 – end
Блок схема – 1
Блок схема – 2
5 Описание применяемого алгоритма к задаче №2:
Блок № 1 – DrawObj(x,y,a,k) (рисует один луч звезды)
(х,y – позиция нулевой точки для риосвания, а - угол поворота, к – масштабирующий коэффициент)
Блок № 2 – MoveTo(x,y) (для рисования: перемешаемся в точку х, у)
Блок № 3 – (вычисляем координаты для второй точки, первая х,у)
dx:=7*k*cos(a*3.14/180)
dy:=7*k*sin(a*3.14/180)
Блок № 4 – LineTo(x+round(dx),y+round(dy)) (проводим линию)
(рисуем вторую линию с углом поворота а и масштабом к)
|
|
Блок № 5 – a:=a+45;
Блок № 6 – dx:=20*k*cos(a*3.14/180)
dy:=20*k*sin(a*3.14/180)
Блок № 7 – LineTo(x+round(dx), y+round(dy)) (проводим линию)
(рисуем третью линию с углом поворота а и масштабом к)
Блок № 8 – a:=a+45;
Блок № 9 – dx:=7*k*cos(a*3.14/180)
dy:=7*k*sin(a*3.14/180)
Блок № 10 – LineTo(x+round(dx), y+round(dy)) (проводим линию)
Блок № 11 – end
Блок № 12 DrawStar(x,y,a,k) (рисует всю звезду путем рисования 4 лучей с разными углами наклона)
Блок № 13 DrawObj(x,y,-a,k)
Блок № 14 DrawObj(x,y,-a+90,k)
Блок № 15 DrawObj(x,y,-a+180,k)
Блок № 16 DrawObj(x,y,-a+270,k)
Блок № 17 end
Блок № 18 begin
Блок № 19 ainc:=random(40)-20 (на сколько увеличивать угол поворота
xinc:=random(40)-20 (на сколько увеличивать координату х)
Блок № 20 yinc:=random(40)-20 (на сколько увеличивать координату у)
angle:=random(90) (начальный угол поворота)
Блок № 21 posx:=100+random(200) (начальная позиция по х)
posy:=100+random(200) (начальная позиция по у)
Блок № 22 k:=1+random(20)/10 (начальный масштабирующий коэффициент)
kinc:=random(10)/10 (на сколько увеличивать масштаб)
Блок № 23 dx:=Detect (инициализация графики)
Блок № 24 InitGraph(dx,dy,'') (инициализация графики)
maxx:=getmaxx (узнаем размер экрана по х)
maxy:=getmaxy (узнаем размер экрана по у)
Блок № 25 ClearDevice (очищаем экран)
angle:=angle + ainc (изменяем угол поворота)
Блок № 26(angle > 360)
Блок № 27 angle:=angle – 360 (если угол больше 360, то надо вычесть из него 360)
Блок № 28 k+kinc>3) or (k+kinc<1)
Блок № 29 kinc:=-1*kinc (масштабирующий коэффициент должен быть больше 1 и меньше 3, иначе меняем знак у прирашения масштабирующего коэффициента на противоположенный)
Блок № 30 K:=k+kinc (изменяем масштабирующий коэффициент)
Блок № 31((posx+xinc+20*k>=maxx) or (posx+xinc-20*k<=0))
Блок № 32 xinc:= -1*xinc (координата х должна находиться на экране иначе меняем знак приращение по х на противоположенный)
Блок № 33((posy+yinc+20*k>=maxy) or (posy+yinc-20*k<=0))
Блок № 34 yinc:=-1*yinc (координата у должна находиться на экране иначе меняем знак приращение по у на противоположенный)
Блок № 35 posx:=posx+xinc (изменяем координату по х)
posy:=posy+yinc (изменяем координату по у)
Блок № 36 drawstar(posx,posy,angle,k) (рисуем звезду с заданными параметрами)
delay(250) (задержка 0.25 секунды)
Блок № 37 KeyPressed (повторяем пока не нажата кнопка)
Блок № 38 CloseGraph (закрываем графику)
Блок № 39 end.
Рисунок 7 – Тело программы, лист 1
Рисунок 8 – Тело программы, лист 2
Рисунок 9 – Тело программы, лист 3
Рисунок 10 – Тело программы, лист 4