Форум программистов, компьютерный форум CyberForum.ru

Создать функции ввода/вывод для бинарных деревьев - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ вещественный массив http://www.cyberforum.ru/cpp-beginners/thread4182.html
Вообщем у меня такая проблема: У меня скоро зачёт, а я не фига не знаю про программу С++...=((( Вообщем мне надо ответить на такие вопросы: Вести вещественный массив. а) Найти число с максимальной дробной частью. б) Найти сумму всех элементов второй половины массива Помогите пожалуйста, чем можите!!!!!!!!!!!!!!!!!!
C++ Найти все минимальные дизъюнктивные нормальные формы функции задание на диплом... на вход подается булева функция в символьном или табличном виде.. на выходе ВСЕ минимальные дизъюнктивные нормальные формы этой функции.. число переменных - хватит 20. люди, помогите!!! http://www.cyberforum.ru/cpp-beginners/thread4152.html
Проблема с массивом - найти позиции крайних отрицательных элементов C++
Дан массив случайных чисел в диапазоне от -20 до +20. Необходимо найти позиции крайних отрицательных элементов (самого левого отрицательного элемента и самого правого отрицательного элемента) и отсортировать элементы, находящиеся между ними.
C++ Удаление символа из строки
всем привет как можно удалить символ из строки? посоветовали воспользоваться ф-ей memmove, но я новичек и не очень понял.. если можно, показать на примере...так быстрее дойдет. хочу разобраться. спасибо
C++ C++ Графика (MS DirectX SDK) http://www.cyberforum.ru/cpp-beginners/thread4101.html
На сайте я прочитал, что MS DirectX SDK - это как доп. утилита для С++. Хотел спросить, ее ставят на Билдер или куда-то еще?
C++ Нужна помощь с задачкой на фукнции На зачот мне осталось всего одну задачку решить,но вот никак не могу одолеть ее,аццкие программеры взываю к вам, помогите мне пожалуйста :) вот текст задачи: Используя функцию перевода заданного числа из десятичной системы счисления в двоичную и обратно,а также функцию сложения чисел в двоичной системе счисления,найти сумму N натуральных чисел,заданных в десятичной системе. заранее очень... подробнее

Показать сообщение отдельно
Паша
Сообщений: n/a

Создать функции ввода/вывод для бинарных деревьев - C++

15.05.2006, 04:03. Просмотров 3721. Ответов 1
Метки (Все метки)

Не могу создать функции ввода/вывод для бинаных деревьев. очень срочно нужно! скажите где ошибка...

Вот текст:

Код
	 #include  conio.h;
	 #include  math.h;
	 #include  dos.h;
	 #include  stdlib.h;
	 #include  graphics.h;
	 #include  iostream.h;
	 #include  fstream.h;
	 #include  stdio.h;


		 // г л о б а л ь н ы е:
	 int Xkn=30, // координаты верхнего левого угла области меню
	     Ykn=130, 
	     Dkn=40, // расстояние между кнопками меню
	     dx=200, // длина кнопки
	     dy=30,  // высота кнопки
	     nw=0, 
	     pw, 
	     s=0, x=1;
	     
	 char ch;


	 void init_graph(void); // инициализация графики
	 void menu();  // изображение меню
	 void select(); // выбор пункта меню
	 void knopka( int i, int color); // кнопка с надписью пункта меню
	 void knopka1( int i, int col ); // рисует границу кнопки
	  void menu0();
	  void menu1();
	  void menu2();
	  void menu3();

void input();
void output();
void inout ();

void ins(void);
void del();
void test ();

struct Node{
	    int key;
	    char *fam, *name;
	    Node *left;
	    Node *right;
};
Node *root;

Node *input_klava    	();
Node *input_file	();
Node *search_insert	(Node *root, Node *p);
void print_tree		(Node *root);

	 void main()
	 {
	    init_graph();
	    menu();
	    select();
	 }

	  void select()
	  { knopka(nw, 10);
	    do  // выбор пункта меню клавишами "стрелка вверх"
	    { ch=getch();                 // и "стрелка вниз"
		    if (int(ch)==0)
		    { ch=getch();
			    switch (int(ch))
			    { case 72: //стрелка вверх
				    { pw=nw;
					    nw-=1;
					    if (nw==-1) nw=4;
					    knopka(pw, 2);
					    delay(50);
					    knopka(nw, 10);
					    break;
				    }
				    case 80: //стрелка вниз
				    { pw=nw;
					    nw+=1;
					    if (nw==5) nw=0;
					    knopka(pw, 2);
					    delay(50);
					    knopka(nw, 10);
					    break;
				    }
			    }
		    }
		    if (int(ch)==13) // по кл_Enter выбор пункта меню
		    { closegraph();   clrscr();
		      switch (nw)
			    { case 0: { menu0(); break; }
			      case 1: { menu1(); break; }
			      case 2: { menu2(); break; }
			      case 3: { menu3(); break; }
			      case 4: exit(1);
			    }
		    }
	     } while ( int(ch) != 27 ); // Кл_ESC
	    getch();
	   }

	 void menu()
	 {     
	       init_graph();
	       setfillstyle(SOLID_FILL, 1);
	       bar(0, 0, 640, 480); //
	       setfillstyle(SOLID_FILL, 0);
	       bar(0, 0, 640, 100); //
	   setcolor(2); // надпись черного цвета
	   settextstyle(0, HORIZ_DIR, 1);
	   settextjustify(CENTER_TEXT, CENTER_TEXT);
	   outtextxy(320, 30, "Разряженный массив");
	   outtextxy(320, 70, "на основе бинарного дерева");

	       for(int i=0; i5; i++) // изображение меню из 5-и пунктов
	       { knopka1(i, 0); // граница кнопки
		 knopka(i, 2);  // кнопка с надписью пункта меню
	       }
	 }

	  void knopka( int i, int color) // изображение i-ой кнопки
	  { char *mn[]={ "Справка", "Ввод/вывод данных", 
			 "Тест", "Об авторе", "Выход" };
	   setfillstyle(SOLID_FILL, color);
	   bar(Xkn, Ykn+i*Dkn, Xkn+dx, Ykn+i*Dkn+dy);
	   setcolor(0); // надпись черного цвета
	   settextstyle(0, HORIZ_DIR, 1);
	   settextjustify(CENTER_TEXT, CENTER_TEXT);
	   outtextxy(Xkn+dx/2, Ykn+i*Dkn+dy/2, mn[i]);
	  }

	  void knopka1( int i, int col)
	  { setfillstyle(SOLID_FILL, col); // col - цвет границы кнопки
	    bar(Xkn-1, Ykn+i*Dkn-1, Xkn+dx+1, Ykn+i*Dkn+dy+1);
	  }
	  void menu0()
	  {
		char buf[81];
		ifstream f("info.txt", ios::in|ios::nocreate);
		if (!f) {cout "Ошибка открытия файла"; getch(); exit(1);}
		while (!f.eof()) {f.getline(buf, 81); coutbufendl; }
		f.close();
		getch();
		menu();
		knopka(nw, 10);
	  }

	  //Формирование бинарного дерева


	  void menu1()
	  {
		inout(); getch();
		menu();
		knopka(nw, 10);
	  }
	  void menu2()
	  {
		test(); getch();
		menu();
		knopka(nw, 10);
	  }
	  void menu3()
	  {  
		char buf[81];
		ifstream f("autor.txt", ios::in|ios::nocreate);
		if (!f) {cout "Ошибка открытия файла"; getch(); exit(1);}
		while (!f.eof()) {f.getline(buf, 81); coutbufendl; }
		f.close();
		getch();
		menu();
		knopka(nw, 10);
	  }

 void init_graph()
  { int gr_driver,  // графический драйвер
	gr_mode,    // графический режим
	error_code; // код ошибки

	gr_driver = DETECT; // автораспознавание драйвера
	initgraph(&gr_driver, &gr_mode, "");
	error_code = graphresult();
	if (error_code != grOk ) // ..., то произошла ошибка
  { printf("Ошибка инициализации графики: %s", grapherrormsg(error_code));
	    exit(1); // прерывание выполнения программы
  }
  } // конец init_graph


//-----------------------Ввод / вывод---------------------------------------//
void inout ()
{
int inoutint;
couts;
clrscr();
cout"Ввод/вывод данных:"endlendlendl;
//--------Меню-----------------------------------
cout"Ввод____________________________(0)"endl;
cout"Вывод___________________________(1)"endl;
cout"Отмена__________________________(2)"endlendlendl;
do
	{
 	cout"Ваш выбор: ";
	cin;;inoutint;
	}
while (inoutint!=0&&inoutint!=1&&inoutint!=2);
switch (inoutint){
	case 0: { input(); break;}
	case 1: { output(); break;}
	}
coutendlendlendl"Для выхода в меню нажмите Enter";
}



//-------------Ввод данных-----------------
void input()
{
clrscr();
cout"Ввод данных: "endlendlendl;
int i;
//-------------Меню------------------------
cout"Из файла________________________(0)"endl;
cout"С клавиатуры____________________(1)"endl;
cout"Отмена__________________________(2)"endlendlendl;
do
	{
	cout"Ваш выбор: ";
	cin;;i;
	}
while (i!=0&&i!=1&&i!=2);
switch (i){
	case 0: {  //Ввод из файла
	clrscr();
	char cha;
	delete (root);
	root = input_file ();
	coutendl"Чтение из файла завершено успешно!"endl;
	break;}

	case 1: {  //Ввод с клавиатуры
	clrscr();
	cout"Ввод с клавиатуры:"endlendlendl;
        delete (root);
	root = input_klava ();
	break;}
	}
}



//----------------------Вывод данных----------------
void output()
{
clrscr();
cout"Вывод данных: "endlendlendl;

int i;
cout"В файл__________________________(0)"endl;
cout"На экран________________________(1)"endl;
cout"Отмена__________________________(2)"endlendlendl;
do
	{
	cout"Ваш выбор: ";
	cin;;i;
	}
while (i!=0&&i!=1&&i!=2);

switch (i){
	case 0: {
	clrscr();
	cout"Вывод в файл:"endlendlendl;
	ofstream f("Output.dat", ios::out|ios::trunc);
	if (!f) {cout "Ошибка открытия файла"; getch(); exit(1);}
		froot-;key" "root-;fam" "root-;nameendl;

	f.close();

	break;}

	case 1: {
	clrscr();
	cout"Вывод на экран"endlendl;
	print_tree(root);
	break;}
	}
}
//-------------------------Тестирование-------------------------//
void test ()
{
int testint;
clrscr();
cout"Тестирование программы:"endlendlendl;
cout"Добавить элемент________________(0)"endl;
cout"Удалить элемент_________________(1)"endl;
cout"Отмена__________________________(2)"endlendlendl;
do
	{
	cout"Ваш выбор: ";
	cin;;testint;
	}
while (testint!=0&&testint!=1&&testint!=2);

switch (testint){
	case 0: { ins(); break;}

	case 1: { del(); break;}
	}
coutendlendlendl"Для выхода в меню нажмите Enter";
}

void ins() // Добавление элемента
{
clrscr();

cout"Добавить элемент: "endlendlendl;

Node *p = new Node;
cout"# паспорта:      ";
cin;;p-;key;
cout"Фамилия:         ";
cin;;p-;fam;
cout"Имя:             ";
cin;;p-;name;
p-;left  = 0;
p-;right = 0;


search_insert(root, p);
}


void del()
{
clrscr();
cout"Удалить элемент: "endlendlendl;
}

Node *input_klava() //Ввод с клавиатуры
{
	Node *pnew = new Node;    //Формирование первого элемента

	cout"# паспорта:      ";
	cin;;pnew-;key;
	cout"Фамилия:         ";
	cin;;pnew-;fam;
	cout"Имя:             ";
	cin;;pnew-;name;
	pnew-;left=0;
	pnew-;right=0;

	root = pnew;

	int key, i;
	Node *p = new Node;


	for (i=0; i3; i++)
		{
		cout"# паспорта:      ";
		cin;;p-;key;
		cout"Фамилия:         ";
		cin;;p-;fam;
		cout"Имя:             ";
		cin;;p-;name;
		p-;left  = 0;
		p-;right = 0;
		search_insert(root, p);
		}
	return pnew;
}

Node *input_file () //Ввод из файла
{
cout"Ввод из файла:"endlendlendl;
ifstream f("Input.dat", ios::in|ios::nocreate);
if (!f) {cout "Ошибка открытия файла"; getch(); exit(1);}

Node *pnew = new Node;
f;;pnew-;key;;pnew-;fam;;pnew-;name; // Формирование первого элемента

root = pnew;
Node *p = new Node;

while (!f.eof())
	{
	f;;p-;key;;p-;fam;;p-;name;
	p-;left  = 0;
	p-;right = 0;
	search_insert (root, p);
	}
f.close();
return pnew;
}

Node *search_insert	(Node *root0, Node *p) //Поиск с включением
{
Node *pv = root0, *prev;
int found = 0, key = p-;key;
while (pv && !found)
	{
	prev = pv;
	if	(key == pv-;key) found = 1;
	else if	(key   pv-;key) pv    = pv-;left;
	else			 pv    = pv-;right;
	}
if (found) return pv;

Node *pnew	= new Node;
pnew = p;
delete p;
if (key  prev-;key)
	prev-;left  = pnew;
else
	prev-;right = pnew;
return pnew;
}


void print_tree		(Node *p) // Вывод дерева на экран
{
	if (p)
	{
	print_tree(p-;left); //Вывод левого поддерева
	coutp-;key" "p-;fam" "p-;nameendl; //Вывод корня поддерева
	print_tree(p-;right); //Вывод правого поддерева
	}
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru