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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 05.05.2009, 22:54   #1
lubafffka
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 46
По умолчанию бинарное дерево записать в файл.

объясните пожалуйста почему не работает, надо бинарное дерево записать в файл.

Код:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
struct Ttree
{
	int d;
	Ttree *left;
	Ttree *right;
};
Ttree * first (int d);
Ttree * insert(Ttree * root, int d);
void print_tree(Ttree * root, int l);
void create(void);
//-------------------------------------------------------
void main()
{
	int b[]={10,25,20,6,21,8,1,30};
	Ttree *root=first(b[0]);
   for(int i=1;i<8;i++)insert(root,b[i]);
   print_tree(root,0); create();
   //return 0;
   }
//-------------------------------------------------------
//formirovanie pervogo elementa dereva
Ttree * first(int d)
{
	Ttree *pv=new Ttree;
   pv->d=d;
   pv->left=0;
   pv->right=0;
   return pv;
   }
//-------------------------------------------------------
//cozdanie novogo uzla
Ttree *insert(Ttree *root,int d)
{
	Ttree*pv=root,*prev;
   prev=pv;
   Ttree *pnew=new Ttree;
   pnew->d=d;
   pnew->left=0;
   pnew->right=0;
   if(d<prev->d)
   //prisoedinenie k levoi chasti
   prev->left=pnew;
   else
   //prisoedinenie k pravomy
   prev->right=pnew;
   return pnew;}
//-------------------------------------------------------
//coxpanenie v fail
void print_tree(Ttree*p,int level)
{ if (p){
			print_tree(p->left,level+1);     // vivod levogo poddereva
         for(int i=0;i<level;i++)cout<<"   ";
         cout<<p->d<<endl;                    //vivod kornya poddereva
         print_tree(p->right,level+1);      //vivod pravogo poddereva
         }}
//sozdanie faila
void create (void)  //созданиe файла исходных данных
  {FILE *f;
  int nsb,i,sim;
  char name[30];
 clrscr();
 printf("imya faila: "); scanf("%s",&name);
 while(fopen(name,"r")!=NULL) //проверка существования файла с данным именем
  {printf("fail s dannym imenim uzhe sushchestvuet\nimya faila: ");
   scanf("%s",&name);}
 f=fopen(name,"w"); //открытие файла на запись
 print_tree(f,root,0);        }
lubafffka вне форума
Старый 05.05.2009, 23:57   #2
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Идет вызов функции
Код:
print_tree(f,root,0)
хотя ее прототип
Код:
print_tree(Ttree*,int)
и еше так же неизвестный параметр
Код:
root
который не описан ни в функции ни в глобальной области. Так же мне не совсем понятно где именно идет запись в файл... наверное здесь
Код:
 f=fopen(name,"w"); //открытие файла на запись
 print_tree(f,root,0);        }
что то напутно...
|{ot вне форума
Старый 06.05.2009, 00:24   #3
lubafffka
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 46
Радость

подскажи пожалуйста как исправить
lubafffka вне форума
Старый 06.05.2009, 02:12   #4
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Попробуйте так:

Код:
 void save_tree(ofstream &f,Ttree*p,int level)
{ if (p){
			print_tree(p->left,level+1);     // save levogo poddereva
         for(int i=0;i<level;i++)f<<"   ";
         f<<p->d<<endl;                    //save kornya poddereva
         print_tree(p->right,level+1);      //save pravogo poddereva
         }
}


void create (Ttree*r)  //созданиe файла исходных данных
  {ofstream f;
  int nsb,i,sim;
  char name[30];
 clrscr();
 printf("imya faila: "); scanf("%s",&name);
 while(fopen(name,"r")!=NULL) //проверка существования файла с данным именем
  {printf("fail s dannym imenim uzhe sushchestvuet\nimya faila: ");
   scanf("%s",&name);}

f.open(name);//открытие файла
if (f.fail()) {cout<<"\tERROR with file";f.close();}
 save_tree(f,r,0);

}
Добавил новую функцию void save_tree(ofstream &f,Ttree*p,int level) и немного изменил void create (Ttree*r)

Если нужно сохранить все дерево, то функция вызывайте так create(root)

только на работоспособность не проверял...

Последний раз редактировалось |{ot; 06.05.2009 в 02:36.
|{ot вне форума
Старый 06.05.2009, 15:47   #5
lubafffka
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 46
По умолчанию

спасиб большое=)
lubafffka вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
бинарное дерево записать в файл lubafffka Помощь студентам 1 05.05.2009 19:22
Бинарное дерево lubafffka Общие вопросы C/C++ 0 29.04.2009 12:28
Бинарное дерево g0liath Помощь студентам 2 16.02.2008 23:54