Описание применяемого алгоритма к задаче №2

Описание структур данных

Для реализации задачи №1 была выбрана следущая стрктура данных.

ArrType – массив от 1 до 55 типа integer (целочисленный тип) предназначенная для хранения значения функции y

xx: integer; переменная типа integer (целочисленный тип) играет роль индекса элемента массива, а также значения x в функции

Для реализации задачи №2 была выбранная следующая структура данных:

desk – тип двумерного массива от 1 до 8, от 0 до 2, где 0-пусто; 1-поле которое бьёт ферзь; 2-ферзь.

cur_desk – переменная типа desk, обозначающая текущий статус доски.

now_f – переменная типа byte (целочисленный тип), обозначает какой ферзь ставится в данный момент.

count – переменная типа byte (целочисленный тип), обозначает количество ферзей на доске

fi,fj – переменные типа byte (целочисленный тип) в массиве от 1 до 5, обозначающие координаты ферзей.

i,j – переменные типа byte (целочисленный тип), обозначающие координаты для расстановки первого ферзя.

Ferzes – массив уже существующего типа desk.


5. Описание применяемого алгоритма к задаче №1:

Блок №1 – x:=2

Блок №2 – x<=size

Блок №3 - Line(arr[x-1], y, arr[x], y+y1), циклически начинаем рисовать линии, гистограммы, начало линии, это значение предстоящего значения, конец линии текущий элемент массива.

Блок №4 - xx<=size

Блок №5 - arr[xx]:= 420 div (xx+(xx*xx)) заполняем циклически массив значениями.


Блок №6 - Draw(15) рисуем гистограмму, входная переменная означем шаг, который мы отступаем между каждым значением x.


 
 

 


Рисунок 1 - Блоксхема №1

 

 
 

 

Рисунок 2 - Блоксхема №2



 

Блоксхема №3 -заполняем "1" столбик и строку с номером позиции ферзя ki, kj.

 

           
   
+
 
   
-
     
+
 
 
 
-

 


Рисунок 3 - Блоксхема №3

 

Блоксхема №4 - заполняем "1" диагонали, которые бъёт ферзь с номером позиции ki, kj

 

 

 


Рисунок 4 - Блоксхема №4

 

Блоксхема №5 - проверяет, бьют ли все 5 ферзей всё поле.

 

 

 

 


Рисунок 5 - Блоксхема №5

 

Блоксхема №6 - выводит массив ferzes, то есть правильную расстановку.

 

 


Рисунок 6 - Блоксхема №6

 

Блоксхема №7 рекурсивная процедура которая расставляет ферзей.

Блок №1 - i:=after_i

Блок №2 - i<=8

Блок №3 - i:=after_i переменные, которые служат для исключения повторений,

то есть поиск места для след. ферзя идёт по значениям i, j которые

идут после места только что поставленного ферзя.

Блок №4 - tempk:=after_j

Блок №5 - tempk:=1

Блок №6 - j:=tempk

Блок №7 - j<=8, это условие когда не могут ббить лруг друга, то есть ферзь ставится на место.

Блок №8 - cur_desk[i,j]=0

Блок №9 - inc(now_f), то есть какого ферзя ставим; inc(count), колличество ферзей.

Блок №10 - fi[now_f]:=i, запоминаем i,j позицию ферзя с номером now_f, ставим ферзя на доску.

Блок №11 - st(fi[now_f], fj[now_f]); diag(fi[now_f], fj[now_f]), две процедуры, описанные выше.

Блок №12 - count<>5, если не все ферзи поставлены.

Блок №13 - fi[now_f]:=0; fj[now_f]:=0; dec(count); dec(now_f);

Блок №14 - put(i,j), восстанавливает значение, когда один из проходов закончен.

Блок №15 - filled

Блок №16 - cur_desk:=old_desk; fi[now_f]:=0; fj[now_f]:=0; dec(count); dec(now_f);

Блок №17 - inc(variants); print_ar; cur_desk:=old_desk;

Блок №18 - inc(j)

Блок №19 - cur_desk:=old_desk, нашли вариант, и вывели массив если надо.

Блок №20 - inc(i)

 

 

 


Блоксхема №8 - цикл по всей доске для выбора куда поставить самого 1 ферзя, показывается инициализация доски для 1 ферзя.

 
 

 


Рисунок 8 - Блоксхема №8