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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2020, 15:10   #11
Audax_Rogerus
Пользователь
 
Регистрация: 06.06.2020
Сообщений: 36
По умолчанию

И вот сам код (почему-то не загрузился сразу)
Вложения
Тип файла: rar Архив WinRAR.rar (17.3 Кб, 1 просмотров)
Audax_Rogerus вне форума Ответить с цитированием
Старый 15.07.2020, 16:33   #12
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Программа генерирует вырожденное дерево.
Как ваш файл с заданием открыть, я не знаю.
Вы можете в другом виде указать свое задание поточнее?
Когда вам это надо?
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 15.07.2020, 16:55   #13
Audax_Rogerus
Пользователь
 
Регистрация: 06.06.2020
Сообщений: 36
По умолчанию

Разве что ввиде скринов только ... сейчас скину
Audax_Rogerus вне форума Ответить с цитированием
Старый 15.07.2020, 17:02   #14
Audax_Rogerus
Пользователь
 
Регистрация: 06.06.2020
Сообщений: 36
По умолчанию

вот
Вложения
Тип файла: rar scr.rar (459.4 Кб, 2 просмотров)
Audax_Rogerus вне форума Ответить с цитированием
Старый 15.07.2020, 19:21   #15
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Кто сказал, что обход дерева надо делать в ширину?
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 15.07.2020, 20:07   #16
Audax_Rogerus
Пользователь
 
Регистрация: 06.06.2020
Сообщений: 36
По умолчанию

Задание сказало... В самом низу в приложении (вариант мой такой к сожалению... Не счастливый 13)

Последний раз редактировалось Audax_Rogerus; 15.07.2020 в 20:44.
Audax_Rogerus вне форума Ответить с цитированием
Старый 16.07.2020, 04:53   #17
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Сделал ввод из файла невырожденного дерева.

Формат входного файла:
Цитата:
- идентификатор узла
- данные узла
- идентификатор левого узла
- идентификатор правого узла

Например
Цитата:
1 1 2 3
2 2 4 5
3 3 8 9
4 4 6 7
5 5 0 0
6 6 0 0
7 7 0 0
8 8 0 0
9 9 0 0
Дерево загружается только из файла. 1.txt в проекте.

Дерево. Не знаю - много лишних полей.
Код:
// дерево
class treeNode
{
	public:
		int id; // идентификатор
		int idl; // левый узел
		int idr; // правый узел
		int data; //данные

		int x;
		int y;


		int index;
		int height = 1;

		bool is_lChild=0;
		bool is_rChild=0;
		bool is_root=0;

		treeNode* lChild = NULL; // левый узел
		treeNode* rChild = NULL; // правый узел
		treeNode* up = NULL;
};
Двусвязный список узлов.
Код:
// двусвязный список узлов
class  treeNodeList
{
public:
	treeNode* d;
	treeNodeList* n = 0;
	treeNodeList* p = 0;

	treeNodeList() { n = 0; p = 0; }
	treeNodeList(treeNode* a) { n = 0; p = 0; this->d = a; }
	void add_next(treeNode* a) { treeNodeList* i = this; while (i->n != 0) { i = i->n; } if (i->n == 0) { i->n = new treeNodeList(a); } }


};
Обход в ширину с помощью двусвязного списка узлов. Обход в ширину сделан только для вывода дерева на экран.
Код:
// обход в ширину
void outputtree1(treeNode *root, int x, int y, int s)//, int wdth, int hgt, Point^ parent, int *step)
{
	if (root == NULL) { return; }
	
	int pxs = 0;
	int px;
	p = new treeNodeList(root);
	p->d->x = x;
	p->d->y = y;
	Graphics^ output = pictureBox1->CreateGraphics();
	Pen^ pen = gcnew Pen(Brushes::Black);
	output->DrawEllipse(pen, x, y, 25, 25);
	String^ str = Convert::ToString(root->data);
	output->DrawString(str, gcnew System::Drawing::Font("Arial", 8), gcnew SolidBrush(Color::Black), Point(x + 5, y + 5));

	while (p != 0)
	{
		treeNode *i = p->d->lChild;
		if (i != 0)
		{
			output->DrawLine(pen, Point(p->d->x, p->d->y + 20), Point(p->d->x - 30, p->d->y + 40));
			i->x = p->d->x - 50;
			i->y = p->d->y + 30;

			if (pxs == 1)
			{
				if (abs(i->x - px) < 20)
				{
					i->x += 25;
				}
			}
		}
		treeNode *j = p->d->rChild;
		if (j != 0)
		{
			output->DrawLine(pen, Point(p->d->x + 25, p->d->y + 25), Point(p->d->x + 30, p->d->y + 30));
			j->x = p->d->x + 30;
			j->y = p->d->y + 30;
			px = j->x;
			pxs = 1;
		}

		if (p->n != 0) 
		{ 
			p = p->n; 
		}
		else 
		{ 
			delete p; 
			p = 0; 
		}

		if (i != 0)
		{
			if (p == 0)
			{ 
				p = new treeNodeList(i);
			}
			else
			{
				p->add_next(i);
			}
			output->DrawEllipse(pen, i->x, i->y, 25, 25);
			String^ str = Convert::ToString(i->data);
			output->DrawString(str, gcnew System::Drawing::Font("Arial", 8), gcnew SolidBrush(Color::Black), Point(i->x + 5, i->y + 5));
		}
		if (j != 0)
		{
			if (p == 0) 
			{ 
				p = new treeNodeList(j);
			}
			else
			{
				p->add_next(j);
			}
			output->DrawEllipse(pen, j->x, j->y, 25, 25);
			String^ str = Convert::ToString(j->data);
			output->DrawString(str, gcnew System::Drawing::Font("Arial", 8), gcnew SolidBrush(Color::Black), Point(j->x + 5, j->y + 5));
		}
	}
}
Теория learnc.info/adt/binary_tree_traversal.html

Не знаю - пойдет или нет? Нужно еще доделывать и создавать html отчет и сохранять данные в виде изображения?

Проект во вложении
Вложения
Тип файла: zip f.zip (729.4 Кб, 1 просмотров)
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"

Последний раз редактировалось challengerr; 16.07.2020 в 06:08.
challengerr вне форума Ответить с цитированием
Старый 16.07.2020, 06:40   #18
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Нужно еще доделывать и что доделывать?

Обход в ширину с сохранением в файл

Код:
	void outputtree1(treeNode *root, int x, int y, int s)
	{
		if (root == NULL) { return; }
	
		int pxs = 0;
		int px; // чтобы два узла не накладывались

		p = new treeNodeList(root); // корень 
		p->d->x = x;
		p->d->y = y; 

		bmp = gcnew Bitmap(pictureBox1->Width, pictureBox1->Height);
		Graphics^ G = Graphics::FromImage(bmp);

		G->Clear(SystemColors::Window);
		time_t sec = std::time(NULL);
		tm* temp = localtime(&sec);
		time = Convert::ToString(temp->tm_mday) + "_" + Convert::ToString(temp->tm_mon) + "_" + Convert::ToString(temp->tm_year) + "_" + Convert::ToString(temp->tm_hour) + "_" + Convert::ToString(temp->tm_min);
	

		Graphics^ output = pictureBox1->CreateGraphics();
		Pen^ pen = gcnew Pen(Brushes::Black);
		output->DrawEllipse(pen, x, y, 25, 25);
		G->DrawEllipse(pen, x, y, 25, 25);
		String^ str = Convert::ToString(root->data);
		output->DrawString(str, gcnew System::Drawing::Font("Arial", 8), gcnew SolidBrush(Color::Black), Point(x + 5, y + 5));
		G->DrawString(str, gcnew System::Drawing::Font("Arial", 8), gcnew SolidBrush(Color::Black), Point(x + 5, y + 5));

		while (p != 0)
		{
			treeNode *i = p->d->lChild;
			if (i != 0)
			{
				G->DrawLine(pen, Point(p->d->x, p->d->y + 20), Point(p->d->x - 30, p->d->y + 40));
				output->DrawLine(pen, Point(p->d->x, p->d->y + 20), Point(p->d->x - 30, p->d->y + 40));
				i->x = p->d->x - 50;
				i->y = p->d->y + 30;

				if (pxs == 1)
				{
					if (abs(i->x - px) < 20)
					{
						i->x += 27;
					}
				}
			}
			treeNode *j = p->d->rChild;
			if (j != 0)
			{
				G->DrawLine(pen, Point(p->d->x + 25, p->d->y + 25), Point(p->d->x + 30, p->d->y + 30));
				output->DrawLine(pen, Point(p->d->x + 25, p->d->y + 25), Point(p->d->x + 30, p->d->y + 30));
				j->x = p->d->x + 30;
				j->y = p->d->y + 30;
				px = j->x;
				pxs = 1;
			}

			if (p->n != 0) 
			{ 
				p = p->n; 
			}
			else 
			{ 
				delete p; 
				p = 0; 
			}

			if (i != 0)
			{
				if (p == 0)
				{ 
					p = new treeNodeList(i);
				}
				else
				{
					p->add_next(i);
				}
				G->DrawEllipse(pen, i->x, i->y, 25, 25);
				output->DrawEllipse(pen, i->x, i->y, 25, 25);
				String^ str = Convert::ToString(i->data);
				G->DrawString(str, gcnew System::Drawing::Font("Arial", 8), gcnew SolidBrush(Color::Black), Point(i->x + 5, i->y + 5));
				output->DrawString(str, gcnew System::Drawing::Font("Arial", 8), gcnew SolidBrush(Color::Black), Point(i->x + 5, i->y + 5));
			}
			if (j != 0)
			{
				if (p == 0) 
				{ 
					p = new treeNodeList(j);
				}
				else
				{
					p->add_next(j);
				}
				G->DrawEllipse(pen, j->x, j->y, 25, 25);
				output->DrawEllipse(pen, j->x, j->y, 25, 25);
				String^ str = Convert::ToString(j->data);
				G ->DrawString(str, gcnew System::Drawing::Font("Arial", 8), gcnew SolidBrush(Color::Black), Point(j->x + 5, j->y + 5));
				output->DrawString(str, gcnew System::Drawing::Font("Arial", 8), gcnew SolidBrush(Color::Black), Point(j->x + 5, j->y + 5));
			}
		}

		String^ fileName = time;
		fileName += ".bmp";
		bmp->Save(fileName, System::Drawing::Imaging::ImageFormat::Bmp);
		delete G;
		delete output;


	}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 16.07.2020, 08:14   #19
Audax_Rogerus
Пользователь
 
Регистрация: 06.06.2020
Сообщений: 36
По умолчанию

Понятно... а почему подчеркивает?
Изображения
Тип файла: png Безымянный.png (38.9 Кб, 0 просмотров)
Audax_Rogerus вне форума Ответить с цитированием
Старый 16.07.2020, 08:15   #20
Audax_Rogerus
Пользователь
 
Регистрация: 06.06.2020
Сообщений: 36
По умолчанию

причем везде... в каждом файле
Audax_Rogerus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" Бахтиёр1916 Windows 1 05.04.2017 12:53
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23
Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" link90 Общие вопросы C/C++ 2 27.03.2016 12:34
Для заданной строки определить все входящие в неё символ. Например: строка "abccbbabbac" состоит из символов "a", "b" и "c" Sandakan01 Помощь студентам 1 24.02.2016 03:20