Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2016, 15:00   #1
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию Конвертировать cpp - > c#

Чисто ради примера нашел код. Хочу привести его к c# .Запутался в структуре. Мне нужно будет сделать два класса? в первом значение и левый и правый узел. и второй класс это методы для обработки так?

Код:
#include <iostream.h>
//=====НАША СТРУКТУРА========
struct Node
{
    Node *l,*r; //левое и правое поддерево
    int x; //Некоторые данные
};

/*ФУНКЦИЯ ДОБАВЛЕНИЯ ЗВЕНА В ДЕРЕВО*/
void add(int x,Node *&MyTree) //Функция добавления звена в дерево
{
    if (NULL==MyTree)  //То, о чем я в самом начале писал. Если дерева нет, то сеем семечко
    {
        MyTree=new Node; //Выделяем память под звено дерева
        MyTree->x=x; //Записываем данные в звено
        MyTree->l=MyTree->r=NULL; //Подзвенья инициализируем пустотой во избежание ошибок
    }

                   if (x<MyTree->x)   //Если нововведенный элемент x меньше чем элемент x из семечка дерева, уходим влево
                      {
                          if (MyTree->l!=NULL) add(x,MyTree->l); //При помощи рекурсии заталкиваем элемент на свободный участок
                          else //Если элемент получил свой участок, то
                          {
                              MyTree->l=new Node;  //Выделяем память левому подзвену. Именно подзвену, а не просто звену
                              MyTree->l->l=MyTree->l->r=NULL; //У левого подзвена будут свои левое и правое подзвенья, инициализируем их пустотой
                              MyTree->l->x=x; //Записываем в левое подзвено записываемый элемент 
                          }
                      }
                 
                    if (x>MyTree->x)   //Если нововведенный элемент x больше чем элемент x из семечка дерева, уходим вправо
                      {
                          if (MyTree->r!=NULL) add(x,MyTree->r); //При помощи рекурсии заталкиваем элемент на свободный участок
                          else //Если элемент получил свой участок, то
                          {
                              MyTree->r=new Node;  //Выделяем память правому подзвену. Именно подзвену, а не просто звену
                              MyTree->r->l=MyTree->r->r=NULL; //У правого подзвена будут свои левое и правое подзвенья, инициализируем их пустотой
                              MyTree->r->x=x; //Записываем в правое подзвено записываемый элемент 
                          }
                      }
        
}

/*ОБХОД В ПРЯМОМ ПОРЯДКЕ*/
 void Show(Node *&tree)
{
    if (NULL==tree)    return;    //Если дерева нет, выходим
   
    cout<<tree->x<<endl; //Посетили узел
    Show(tree->l); //Обошли левое поддерево   
    Show(tree->r); //Обошли правое поддерево   
}

void main()
{
    int x; //Некоторые данные
    Node *MyTree=NULL; //Указатель на нашу структуру. Инициализируем во избежание ошибок

  for (int i=0;i<7;i++) //В дереве будет 7 узлов
  {
      cout<<"X = "; cin>>x; //Ввели X с клавиатуры
      add(x,MyTree); //Добавили X в дерево
  }

  Show(MyTree); //Обошли дерево и показали его звенья в линейном порядке
}
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 02.10.2016, 15:15   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тут нет классов

но можно это все поместить в один.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.10.2016, 15:34   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Да при желании можно и в 0 классов (не считая класса для Main) поместить, как автору угодно
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.10.2016, 15:34   #4
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

ну класс , структура, одно и тоже, есть методы нет методов. Не могу до ума довести, где косячу?

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tree
{
    public class Tree
    {
        public int value;
    }

    public class Node
    {
        public Tree left;
        public Tree right;

        public Node()
        {
            left = null;
            right = null;
        }

        public void add(int data, Node tree)
        {
            if (tree == null)
            {
                tree = new Tree();
                tree.value = data;
                tree.left = null;
                tree.right = null;
                //return;
            }
            if (tree.value > data)
            {
                if (tree.left != null)
                {
                    add(data, tree.left);
                }
                else
                {
                    tree.left = new Tree();
                    tree.left.left = null;
                    tree.left.right = null;
                    tree.left.value = data;
                }
            }
            if (tree.value < data)
            {
                if (tree.right != null)
                {
                    add(data, tree.right);
                }
                else
                {
                    tree.right = new Tree();
                    tree.right.right = null;
                    tree.right.left = null;
                    tree.right.value = data;
                }
            }
        }

        public void show(Node tree)
        {
            if (tree == null)
            {
                return;
            }
            Console.WriteLine(tree.value);
            show(tree.left);
            show(tree.right);
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            Node A1 = new Node();

            int x = 0;
            for (int i = 0; i < 7; i++)
            {
                Console.Write(i + " X = ");
                x = Convert.ToInt32(Console.ReadLine());
                A1.add(x, A1);

            }

            A1.show(A1);
            Console.ReadLine();
            Console.ReadLine();
        }
    }
}
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 02.10.2016, 15:39   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тут один тип должен быть, а не два.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.10.2016, 15:43   #6
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Хорошо, без проблем. Вот так. Я не могу кострукцию правильно составить

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tree
{
    public class Node
    {
        public int value;
        public Node left;
        public Node right;
        public void add(int data, Node tree)
        {
            if (tree == null)
            {
                tree = new Node();
                tree.value = data;
                tree.left = null;
                tree.right = null;
                //return;
            }
            if (tree.value > data)
            {
                if (tree.left != null)
                {
                    add(data, tree.left);
                }
                else
                {
                    tree.left = new Node();
                    tree.left.left = null;
                    tree.left.right = null;
                    tree.left.value = data;
                }
            }
            if (tree.value < data)
            {
                if (tree.right != null)
                {
                    add(data, tree.right);
                }
                else
                {
                    tree.right = new Node();
                    tree.right.right = null;
                    tree.right.left = null;
                    tree.right.value = data;
                }
            }
        }

        public void show(Node tree)
        {
            if (tree == null)
            {
                return;
            }
            Console.WriteLine(tree.value);
            show(tree.left);
            show(tree.right);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Node A1 = new Node();

            int x = 0;
            for (int i = 0; i < 7; i++)
            {
                Console.Write(i + " X = ");
                x = Convert.ToInt32(Console.ReadLine());
                A1.add(x, A1);

            }

            A1.show(A1);
            Console.ReadLine();
        }
    }
}
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 02.10.2016, 15:46   #7
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Тоесть при инициализации Node A1 = new Node(); у меня уже будет первый элемент. А я хочу в цикле тока первый положить, как быть то?
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 02.10.2016, 18:06   #8
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Решил. неактуально.
a.n.o.n.i.m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
можно ли конвертировать Жека_ Общие вопросы C/C++ 7 23.10.2011 13:47
Конвертировать BD avoe Фриланс 5 23.11.2010 13:49
конвертировать дату bush007 PHP 8 11.04.2010 00:40
*.cpp и *.h mrandrey Общие вопросы C/C++ 7 24.08.2009 16:14
Конвертировать из C# в C++ RIO Фриланс 2 26.03.2008 21:21