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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.68
Паша
Сообщений: n/a
#1

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

15.05.2006, 04:03. Просмотров 3722. Ответов 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); //Вывод правого поддерева
	}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2006, 04:03     Создать функции ввода/вывод для бинарных деревьев
Посмотрите здесь:

C++ Объединение 2-х бинарных деревьев в одно
C++ Массив: Учащиеся участвовали в посадке деревьев. Сколько деревьев было посажено
Программа для поиска седловых точек матрицы перестала работать после добавления функции ввода C++
Класс бинарных деревьев. Наследование C++
C++ Нужен совет по алгоритмам, обход бинарных деревьев
C++ Почему так(комбинации бинарных и не бинарных вводов и выводов)?
C++ Функции для ввода/вывода массивов и матриц с помощью шаблонов и перегрузки
C++ Функции:Написать рекурсивную процедуру для ввода с клавиатуры последовательности
C++ Укажите функции ввода-вывода для работы с бинарными файлами
Написать функции для работы с массивом - выделения/освобождения памяти, консольного ввода/вывода C++
C++ Создать двухмерный массив. Ввод вывод массива вынести в отдельные функции
C++ Написать шаблонные, перегруженные функции для ввода и вывода на экран массивов и матриц

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
glory-gerrard
0 / 0 / 2
Регистрация: 25.11.2012
Сообщений: 3
15.12.2013, 04:36     Создать функции ввода/вывод для бинарных деревьев #2
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <iostream>
struct rec
{
    float f1; 
    unsigned int f2;
    rec *p;
};
 
struct xrec
{
    xrec *p;
    rec *pb;
};
 
unsigned short k,i,j,count=1;
rec *pt,*ptn,*pte,*pts,*ptt;
xrec *ptb,*ptx;
 
unsigned short g(rec *p)
{
    return p->f2%3;
}
 
void newrec()
{
        pt=new rec;
        pt->f1=rand()%1000/10.-50;
        pt->f2=rand()%100;
        pt->p=NULL;
        ptx=ptb;
        for(j=0;j<g(pt);j++)
            ptx=ptx->p;
        if (ptx->pb==NULL)
            ptx->pb=pt;
        else
        {
            pts=ptx->pb;
            while (pts->p!=NULL)
                pts=pts->p;
            pts->p=pt;
        }   
}
 
void newsp()
{   
    ptb=new xrec;
    ptb->pb=NULL;
    ptb->p=new xrec;
    ptb->p->pb=NULL;
    ptb->p->p=new xrec;
    ptb->p->p->pb=NULL;
    for(i=0;i<11;i++)
        newrec();
    printf("Ñïèñîê ñòâîðåГ*Г®.\n");
}
void poutsp()
{
    printf("ГЏiäñïèñîê В№%d\n",i+1);
    while (pt!=NULL)
    {
        printf(" %2d %6.2f %4d \n",count++,pt->f1,pt->f2);
        pt=pt->p;
    }
}
void outspa()
{
    ptx=ptb;
        for(i=0;i<3;i++)
        {
            pt=ptx->pb;
            poutsp();
            ptx=ptx->p;
        }
}
void poutsp1()
{
    printf("Г‚ ГЇiäñïèñêó В№%d\n",i+1);
    count=0;
    while (pt!=NULL)
    {
        if (pt->f2%2==0 && pt->f2!=0)
        {
            printf(" %6.2f\n",pt->f1);
            count++;
        }       
        pt=pt->p;
    }
    if (count==0) printf("ГЌГҐ icГ*ГіВє ГЇГ*Г°Г*ГЁГµ åëåìåГ*ГІiГў\n");  
}
 
void ProcsgIndexList()
{
    printf("Âèâåñòè Ïîëå real, ГїГЄГ№Г® byte ГЇГ*Г°Г*ГҐ.\n");
    ptx=ptb;
        for(i=0;i<3;i++)
        {
            pt=ptx->pb;         
            poutsp1();
            ptx=ptx->p;         
        }       
}
 
int main()
{
    setlocale (LC_ALL,"rus");   
    printf("Ñòâîðèòè iГ*äåêñГ*ГЁГ© ñïèñîê ГІГ* ГўГЁГЄГ®Г*Г*ГІГЁ éîãî îáðîáêó.\n");
    printf("Âèâåñòè Ïîëå real, ГїГЄГ№Г® byte ГЇГ*Г°Г*ГҐ.\n");
    printf("Г‚Г*Г°iГ*Г*ГІ В№4, ГѓГ«Г*äèøåâ ВЄ.Г‘, ГЏГ‡-124.\n");       
    srand(time(NULL));
    
    bool exit=false;
    while (true)
    {
        printf("1.Ñòâîðèòè ñïèñîê.\n");
        printf("2.Âèâåñòè åëåìåГ*ГІГЁ.\n");
        printf("3.ÎáðîáêГ* Г±ГЇГЁГ±ГЄГі.\n");
        printf("4.ÂèõiГ¤.\n");
        scanf("%d",&k);
        printf("\n");
        switch (k)
        {
            case 1:newsp();break;
            case 2:outspa();break;
            case 3:ProcsgIndexList();break;
            case 4:
                exit=true;
                break;
        }
        if (exit)
            break;
    }
    return 0;
}


Добавлено через 2 минуты
C++ (Qt)
1
2
3
4
5
tf("Список створено.\n");
}
void poutsp()
{
    printf("Пiдсписо
Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <iostream>
struct rec
{
    float f1; 
    unsigned int f2;
    rec *p;
};
 
struct xrec
{
    xrec *p;
    rec *pb;
};
 
unsigned short k,i,j,count=1;
rec *pt,*ptn,*pte,*pts,*ptt;
xrec *ptb,*ptx;
 
unsigned short g(rec *p)
{
    return p->f2%3;
}
 
void newrec()
{
        pt=new rec;
        pt->f1=rand()%1000/10.-50;
        pt->f2=rand()%100;
        pt->p=NULL;
        ptx=ptb;
        for(j=0;j<g(pt);j++)
            ptx=ptx->p;
        if (ptx->pb==NULL)
            ptx->pb=pt;
        else
        {
            pts=ptx->pb;
            while (pts->p!=NULL)
                pts=pts->p;
            pts->p=pt;
        }   
}
 
void newsp()
{   
    ptb=new xrec;
    ptb->pb=NULL;
    ptb->p=new xrec;
    ptb->p->pb=NULL;
    ptb->p->p=new xrec;
    ptb->p->p->pb=NULL;
    for(i=0;i<11;i++)
        newrec();
    printf("Ñïèñîê ñòâîðåГ*Г®.\n");
}
void poutsp()
{
    printf("ГЏiäñïèñîê В№%d\n",i+1);
    while (pt!=NULL)
    {
        printf(" %2d %6.2f %4d \n",count++,pt->f1,pt->f2);
        pt=pt->p;
    }
}
void outspa()
{
    ptx=ptb;
        for(i=0;i<3;i++)
        {
            pt=ptx->pb;
            poutsp();
            ptx=ptx->p;
        }
}
void poutsp1()
{
    printf("Г‚ ГЇiäñïèñêó В№%d\n",i+1);
    count=0;
    while (pt!=NULL)
    {
        if (pt->f2%2==0 && pt->f2!=0)
        {
            printf(" %6.2f\n",pt->f1);
            count++;
        }       
        pt=pt->p;
    }
    if (count==0) printf("ГЌГҐ icГ*ГіВє ГЇГ*Г°Г*ГЁГµ åëåìåГ*ГІiГў\n");  
}
 
void ProcsgIndexList()
{
    printf("Âèâåñòè Ïîëå real, ГїГЄГ№Г® byte ГЇГ*Г°Г*ГҐ.\n");
    ptx=ptb;
        for(i=0;i<3;i++)
        {
            pt=ptx->pb;         
            poutsp1();
            ptx=ptx->p;         
        }       
}
 
int main()
{
    setlocale (LC_ALL,"rus");   
    printf("Ñòâîðèòè iГ*äåêñГ*ГЁГ© ñïèñîê ГІГ* ГўГЁГЄГ®Г*Г*ГІГЁ éîãî îáðîáêó.\n");
    printf("Âèâåñòè Ïîëå real, ГїГЄГ№Г® byte ГЇГ*Г°Г*ГҐ.\n");
    printf("Г‚Г*Г°iГ*Г*ГІ В№4, ГѓГ«Г*äèøåâ ВЄ.Г‘, ГЏГ‡-124.\n");       
    srand(time(NULL));
    
    bool exit=false;
    while (true)
    {
        printf("1.Ñòâîðèòè ñïèñîê.\n");
        printf("2.Âèâåñòè åëåìåГ*ГІГЁ.\n");
        printf("3.ÎáðîáêГ* Г±ГЇГЁГ±ГЄГі.\n");
        printf("4.ÂèõiГ¤.\n");
        scanf("%d",&k);
        printf("\n");
        switch (k)
        {
            case 1:newsp();break;
            case 2:outspa();break;
            case 3:ProcsgIndexList();break;
            case 4:
                exit=true;
                break;
        }
        if (exit)
            break;
    }
    return 0;
}
Yandex
Объявления
15.12.2013, 04:36     Создать функции ввода/вывод для бинарных деревьев
Ответ Создать тему
Опции темы

Текущее время: 21:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru