Обмен данными между классами - C#
Формулировка задачи:
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- namespace WindowsFormsApplication10
- {
- public partial class Form1 : Form
- {
- Tree tr;
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- Random rnd = new Random();
- for (int i = 0; i < 100; i++)
- {
- listBox1.Items.Add(rnd.Next(1, 1000));
- }
- }
- private void button1_Click(object sender, EventArgs e)
- {
- tr = new Tree(null, null, null);
- for (int i = 0; i < 100; i++)
- {
- tr.Insert(new Data(int.Parse(listBox1.Items[i].ToString()), ""));
- }
- }
- private void button2_Click(object sender, EventArgs e)
- {
- tr.traverse(tr);
- }
- }
- ////////////////////////
- class Data
- {
- public int k;
- public string v;
- public Data(int nk, string nv)
- {
- k = nk;
- v = nv;
- }
- }
- class Tree
- {
- public List<int> lst = new List<int>();
- Data data;
- Tree left;
- Tree right;
- public Tree(Data nd, Tree nl, Tree nr)
- {
- data = nd;
- left = nl;
- right = nr;
- }
- public void Insert(Data ndata)
- {
- if (this.data == null)
- {
- // MessageBox.Show("V " + ndata.k.ToString());
- this.data = ndata;
- }
- else
- {
- if (ndata.k < this.data.k)
- {
- if (left == null)
- {
- //MessageBox.Show("Пишу лево " + ndata.k.ToString());
- this.left = new Tree(ndata, null, null);
- }
- else
- {
- //MessageBox.Show("Перехожу лево " + ndata.k.ToString());
- left.Insert(ndata);
- }
- }
- else if (ndata.k >= this.data.k)
- {
- if (right == null)
- {
- // MessageBox.Show("Пишу право " + ndata.k.ToString());
- this.right = new Tree(ndata, null, null);
- }
- else
- {
- //MessageBox.Show("Перехожу право " + ndata.k.ToString());
- right.Insert(ndata);
- }
- }
- else
- throw new Exception("Узел уже существует");//no fuckin' way!
- }
- }
- public void traverse(Tree visitor)
- {
- if (left != null)
- {
- left.traverse(left);
- }
- MessageBox.Show(this.data.k.ToString());
- //данные this.data.k.ToString() надо добавить в листбокс в форме
- if (right != null)
- {
- right.traverse(right);
- }
- }
- }
- ////////////////////////////////
- }
Решение задачи: «Обмен данными между классами»
textual
Листинг программы
- using System;
- public interface TreeVisitor<T> where T : IComparable<T>
- {
- void Visit(Tree<T> node);
- }
- public class KeyPrinter<T> : TreeVisitor<T> where T : IComparable<T>
- {
- public void Visit(Tree<T> tree)
- {
- Console.Write("{0} ", tree.Key);
- }
- }
- public class Tree<T> where T: IComparable<T>
- {
- public Tree(T key)
- {
- this.Key = key;
- }
- public Tree<T> Left { get; set; }
- public Tree<T> Right { get; set; }
- public T Key { get; set; }
- public void Insert(Tree<T> tree)
- {
- if (tree.Key.CompareTo(this.Key) < 0)
- if (Left != null)
- Left.Insert(tree);
- else
- Left = tree;
- else
- if (Right != null)
- Right.Insert(tree);
- else
- Right = tree;
- }
- public void Traverse(TreeVisitor<T> visitor)
- {
- if (Left != null)
- Left.Traverse(visitor);
- visitor.Visit(this);
- if (Right != null)
- Right.Traverse(visitor);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Tree<int> tree = new Tree<int>(7);
- tree.Insert(new Tree<int>(5));
- tree.Insert(new Tree<int>(9));
- tree.Traverse(new KeyPrinter<int>());
- Console.ReadKey(true);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д