Главная страница
Навигация по странице:

  • 2 Листинг программного кода

  • Листинг класса Tree

  • 3 Экранная форма

  • Технологии программирования 5 лаба. Бинарные деревья. Лаба 5 ТП. 1 Цель Цель познакомится с бинарными деревьями. Изучить создание собственных типов данных с помощью класса. Научится создавать оконные приложения с помощью Windows Forms. Задания


    Скачать 72.39 Kb.
    Название1 Цель Цель познакомится с бинарными деревьями. Изучить создание собственных типов данных с помощью класса. Научится создавать оконные приложения с помощью Windows Forms. Задания
    АнкорТехнологии программирования 5 лаба. Бинарные деревья
    Дата20.11.2022
    Размер72.39 Kb.
    Формат файлаdocx
    Имя файлаЛаба 5 ТП.docx
    ТипДокументы
    #802314

    1 Цель

    Цель: познакомится с бинарными деревьями. Изучить создание собственных типов данных с помощью класса. Научится создавать оконные приложения с помощью Windows Forms.

    Задания: Последовательность букв представить в виде идеально сбалансированного бинарного дерева. Вывести на экран дерево и все слои дерева, начиная с вершины, а затем - с корня.

    2 Листинг программного кода

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

    using System.Windows.Forms;
    namespace сем2_Лабораторная_5_БАЗА

    {

    public partial class Form1 : Form

    {

    private Tree osinka;
    public Form1()

    {

    InitializeComponent();

    }
    private void выходToolStripMenuItem_Click(object sender, EventArgs e)

    {

    Close();

    }
    private void загрузитьДанныеToolStripMenuItem_Click(object sender, EventArgs e)

    {

    int k = 0;

    string[] mastree;

    int elementscount = 0;

    string Element = "";

    textBoxTree.Clear();

    textBoxBypass.Clear();
    try

    {

    if (openFileDialog1.ShowDialog() == DialogResult.OK)

    {

    osinka = new Tree();// создать новое дерево

    textBoxTree.Clear();

    using (var file = new System.IO.StreamReader(openFileDialog1.FileName))

    {

    while (file.Peek() > 0)

    {

    Element +=( file.ReadLine() + " " );

    elementscount++;

    }

    }

    }

    }

    catch

    {

    MessageBox.Show("Ошибка ввода", "Графы", MessageBoxButtons.OK, MessageBoxIcon.Question);

    }

    mastree = Element.Split(' ');

    string results = "";

    string invertresult = "";

    foreach (string elem in mastree)

    {

    if (elem != "")

    {

    osinka.Add(elem, k);

    k++;

    }

    }

    int step = 0;

    for (; Math.Pow(2, step) < mastree.Length; step++)

    { }

    string []ouy = new string[step];

    textBoxBypass.Text += "Слои с корня" + Environment.NewLine;

    for (int i = 0; true; i++)

    {

    if (Math.Pow(2, i) > mastree.Length)

    break;

    for (int j = 0; j < (Math.Pow(2, i + 1) - Math.Pow(2, i)); j++)

    {

    int bn = j + Convert.ToInt32(Math.Pow(2, i)) - 1;

    if (bn == mastree.Length)

    break;

    invertresult += mastree[bn];

    invertresult += " ";

    }

    invertresult += "Слой "; invertresult += i; invertresult += Environment.NewLine;

    ouy[i] = invertresult;

    invertresult = "";

    }

    foreach (string elem in ouy)

    {

    textBoxBypass.Text +=elem;

    }

    textBoxBypass.Text += "Слои с конца" + Environment.NewLine;

    for (int y = ouy.Length-1;y>=0;y--)

    textBoxBypass.Text += ouy[y];

    osinka.Output(ref results);

    textBoxTree.Text += results;

    }


    }

    }
    Листинг класса Tree

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;
    namespace сем2_Лабораторная_5_БАЗА

    {

    public class Tree

    {

    public class TreeNode

    {

    public string Value; // значение ключа

    public int Count = 1;

    public bool Full;// количество одинаковых ключей

    public TreeNode Left; // левое поддерево

    public TreeNode Right; // правое поддерево
    }

    public TreeNode Node; // экземпляр класса "Поддерево"

    bool left = true;

    public void Add(string val, int count)// добавление элемента - интерфейсный метод

    {

    bool INIright = Convert.ToBoolean( count % 2);

    AddChildren(ref Node, val,INIright);

    }

    public void Output(ref string s) // вывод данных в форму - интерфейсный метод

    {

    s = ""; // обнуляем строку

    OutputTree(Node, 0, ref s);
    }


    //Инкапсулированные методы

    //ref TreeNode Node - текущий "элемент дерева"

    private void AddChildren(ref TreeNode node, string val, bool right)

    {

    if (node == null)

    {

    node = new TreeNode();

    node.Value = val;

    }

    else

    {

    if ((node.Right == null) && (node.Left == null))

    AddChildren(ref node.Right, val, right);

    else

    if ((node.Right != null) && (node.Left == null))

    {

    node.Full = true;

    AddChildren(ref node.Left, val, right);

    }

    else

    if (node.Full)

    {

    if (node.Right.Full && node.Left.Full)

    {

    if(right)

    AddChildren(ref node.Right, val, right);

    else

    AddChildren(ref node.Left, val, right);

    }

    else if (node.Right.Full)

    AddChildren(ref node.Left, val, right);

    else

    AddChildren(ref node.Right, val, right);

    }

    }

    }

    private void OutputTree(TreeNode root, int spaces, ref string s)

    {

    if (root != null)

    {

    for (int i = 0; i < root.Count; i++)

    {

    for (int j = 0; j <= spaces; j++)

    if (j == 0) s += "|";

    else s += " -";

    s += " ";

    s += root.Value.ToString();

    s += Environment.NewLine;

    }

    OutputTree(root.Left, spaces + 1, ref s);

    OutputTree(root.Right, spaces + 1, ref s);

    }

    }

    }
    }

    3 Экранная форма


    Рисунок 1 – Пример работы программы

    Вывод: в ходе работы проведено ознакомление с бинарными деревьями. Была совершена проба создания собственного типа данных с помощью класса. Получены навыки создания оконных приложений с помощью Windows Forms.


    написать администратору сайта