- •Задание
- •Реферат
- •Содержание
- •1.1.Обоснование и выбор методов решения
- •1.2.Описание программы
- •1.2.1.Общие сведения
- •1.2.2.Функциональное назначение
- •1.2.3.Описание структур данных, используемых в программе
- •1.2.4.Описание логической структуры программы
- •1.2.4.1.Отношения между классами
- •1 Лошадь .2.4.2.Описание классов
- •1.2.5.Описание физической структуры программы
- •1.2.6.Описание основных алгоритмов программы
- •1.3.Руководство пользователя
- •1.4.Список использованных источников
- •1.5.Приложения
1.4.Список использованных источников
База знаний кафедры ИКТ (ЭВА) МИЭМ, лекция 3-Методы построения деревьев решений. ― Режим доступа: http://wiki.auditory.ru/Лекция_3_-_Методы_построения_деревьев_решений
Симонова Е.В. Курс лекций «Информационные технологии». – СГАУ.
Справочник по C#.― Режим доступа:msdn.microsoft.com
1.5.Приложения
Приложение А. Класс «Узел дерева решений»
public class TreeNode// Класс «Узел дерева решений»
{
public string question; //Информационное поле узла
public TreeNode yes; //Ссылканалевогопотомкаузла
public TreeNode no; //Ссылка на правого потомка узла
[XmlIgnore]//Запрет на сериализацию свойства Yes
public TreeNode Yes
{
get { return yes; }
set { yes = value; }
}
[XmlIgnore]//Запрет на сериализацию свойства No
public TreeNode No
{
get { return no; }
set { no = value; }
}
[XmlIgnore]//Запрет на сериализацию свойства isAnswer
public bool isAnswer//Проверка, является ли ответом
{
get
{
return (yes == null)&&(no == null);
}
}
[XmlIgnore]//Запрет на сериализацию свойства Question
public string Question
{
get { return question; }
set { question = value; }
}
public TreeNode()//Конструктор без параметров
{
yes = null;
no = null;
}
public TreeNode( string question)//Конструктор с одним параметром
{
Question= question;
}
public TreeNode(string question, TreeNode yes, TreeNode no)
{ //Конструктор с двумя
Question = question; //параметрами
Yes = yes;
No = no;
}
}
Приложение В. Класс «Дерево решений»
[XmlRootAttribute("SolutionTree", IsNullable = false)] //Корневой элемент
public class SolutionTree //Класс «Дереворешений»
{
public TreeNode root; //Ссылка на корневой узел
[XmlIgnore]//Запрет на сериализацию поля current
public TreeNode current;//Ссылка на текущий узел
[XmlIgnore]//Запрет на сериализацию поля prev
public TreeNode prev; //Ссылка на узел, расположенный уровнем выше
[XmlIgnore]//Запрет на сериализацию свойства Root
public TreeNode Root
{
get { return root; }
set { root = value; }
}
public SolutionTree() //Конструктор без параметров
{
root = null;
current = null;
prev = null;
}
public void Save(string filename)//Метод сохранения нового узла в ХML-файл
{
File.Delete(filename);//Удаление старого файла
XmlSerializer serializer = new XmlSerializer(typeof(SolutionTree));//Создает XML-объект
TextWriter writer = new StreamWriter(filename,false);//Открывается файл для записи
serializer.Serialize(writer, this);//Сериализация; this-ссылка на сохраняемый объект
writer.Close();//Закрытие файла
}
public static SolutionTree Open(string filename) //Метод для чтения из файла
{
SolutionTree st;
try
{
XmlSerializer serializer = new XmlSerializer(typeof(SolutionTree));
FileStream fs = newFileStream(filename,
FileMode.Open); //Открывается поток для чтения
st = (SolutionTree)serializer.Deserialize(fs);
fs.Close();
}
catch//Исключение, возникшее при открытии пустого файла
{
st = new SolutionTree();//Создание дерева с корнем и двумя потомками
st.Root = new TreeNode("Это человек");
st.Root.Yes = new TreeNode("Гарри Поттер");
st.Root.No = new TreeNode("Лошадь");
}
return st; //Возвращается прочитанный объект
}
public void P(TreeNode root, int x, int y, Font f, Graphics g)//Метод рисования узлов дерева
{
Pen p = new Pen(Color.Black);//Создание нового объекта «Карандаш»
Brush b = Brushes.Black;//Создание нового объекта «Заливка»
if (root.Question.ToString().Length> 15)//Проверка на длину инф. поля узла
{
string s;
int i = 0;
int j = 0;
string[] m = root.Question.ToString().Split(' '); //Преобразование инф. полей узлов в массив строк
while (i < m.Length)
{
s = m[i];
i++;
while ((i < m.Length) && ((s.Length + m[i].Length) < 15))
{
s +=" "+ m[i];
i++;
}
g.DrawString(s, f, b, x, y + (10 * j)); //Рисование строки
j++;
}
}
else
{
g.DrawString(root.Question.ToString(), f, b, x, y);
}
}
public void R (TreeNode root, int n, ref int x, Font f, Graphics g, ref int k)//Перебор узлов дерева и перемещение их в метод P
{
if (root != null)
{
R(root.Yes, n + 1, ref x, f, g, ref k);
P(root, x, 80 * n, f, g);
x = x + 40;
R(root.No, n + 1, ref x, f, g, ref k);
}
else
{
x = x + 20;
}
if (k < x) { k = x; }
}
public void L(ref int k, TreeNoderoot)//Метод установки длины скроллера
{
if (root != null)
{
L(ref k, root.Yes);
k = k + 40;
L(ref k, root.No);
}
else
{
k = k + 20;
}
}
}
}