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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2009, 19:42   #1
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию Помогите визуально переработать прожку на С++

Ну вообщем у нас в групе препод лабы проверяет через прогу(ну как на олимпиадах) тоесть мы отсылаем файл.срр ему а он уже смотрит и защитывает. У нас один вариант на всех ну прога есть но нужно какт-то чуть визуально изменить ее код чтобы мы с подругой не спалились

Ну вообщем эта прога на бинарные деревья.
Вместе с прогой должен находиться файл data.txt через который будет осуществляться добавление, поиск, удаление и вывод дерева.

Ну и сам код:
Код:
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
struct tree
{
	int Inf;
    tree *Left,*Right;
};
void add_left(tree* &t,int X) 
{
	tree* temp; 
	temp=new tree;
	temp->Inf=X;
	temp->Left=NULL;
	temp->Right=NULL;
	t->Left=temp;
}
void add_right(tree* &t,int X)
{
	tree* temp;
	temp=new tree;
	temp->Inf=X;
	temp->Left=NULL;
	temp->Right=NULL;
	t->Right=temp;
}
void add_root(tree* &t,int X)
{
	t=new tree;
	t->Inf=X;
	t->Left=NULL;
	t->Right=NULL;
}
//template<class T>
void print_tree(tree* t,int h)
{
    if(t!=NULL)
	{
		print_tree(t->Right,h+1);
		for(int i=1;i<=h;i++)
			cout<<".";
		cout<<t->Inf<<endl;
		print_tree(t->Left,h+1);
	}
}

bool Tree_Add(tree* &root,int X)
{
	bool OK=false;
	if(root==NULL)
	{
		add_root(root,X);
		OK=true;
		return true;
	}
	else
	{
		tree* t=root;
		while(!OK)  
		{
			if(t->Inf==X)
				return false;
			else
			{
			if(X>t->Inf)
				if(t->Right!=NULL)
					t=t->Right;
				else
				{
					add_right(t,X);
					OK=true;
				}
			else
				if (t->Left!=NULL)
					t=t->Left; 
				else
				{	
					add_left(t,X);
					OK=true;
				}
			}
		}
	}
	return true;
}
bool search(tree* P,int X)
{
	if(P==NULL)  
	{
		//cout<<"There is no element, with this key"<<endl;
		return false;
	} 
	else
		if(X>P->Inf)
			return search(P->Right,X);
		else
			if(X<P->Inf)
				return search(P->Left,X);
			else
			{
				//cout<<"Here is this element: "<<P<<endl;
				return true;
			}
}
int DelMin(tree* &root)
{
   tree* tmp;
   if(root->Left==NULL)
   {
	   int temp;
	   temp=root->Inf;
	   tmp=root;
       delete[] root;
	   root=root->Right;
	   return temp;
   }
   else
		return DelMin(root->Left);
}
void del(tree* &root,int X)
{
   tree *tmp;
   if(root==NULL)
	   return;
   if(X<root->Inf)
	   return del(root->Left,X);
   if(X>root->Inf)
	   return del(root->Right,X);
   if (root->Left==NULL && root->Right==NULL)
   {
	   delete[] root;
	   root=NULL;
	   return;
   }
   if(root->Left==NULL)
   {
		tmp=root;
		root=root->Right;
		delete[] tmp;
		return;
   }
   if(root->Right==NULL)
   {
		tmp=root; 
		root=root->Left;
		delete[] tmp;
		return;
   }
   root->Inf=DelMin(root->Right);
}
int main()
{
	ifstream fin("data.txt");
	string command;
	int num;
	tree *root=NULL;
	while(fin>>command)
	{
		if(command=="ADD")
		{
			fin>>num;
			if(Tree_Add(root,num))
				cout<<"DONE\n";
			else
				cout<<"ALREADY\n";
		}
		else
			if(command=="SEARCH")
			{
				fin>>num;
				if(search(root,num))
					cout<<"YES\n";
				else
					cout<<"NO\n";
			}
			else 
				if(command=="DELETE")
				{
					fin>>num;
					if(search(root,num))
					{
						del(root,num);
						cout<<"DONE\n";
					}
					else
						cout<<"CANNOT\n";
				}
				else
					if(command=="PRINTTREE")
						print_tree(root,1);
					else
						cout<<"Unknown command\n";
	}
	system("pause");
	return 0;
}
Если помогла нажмите на весы

Последний раз редактировалось Olya90; 21.09.2009 в 19:44.
Olya90 вне форума Ответить с цитированием
Старый 21.09.2009, 20:01   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

гы =)

первое, что пришло на ум: сделайте выбор команд оператором switch, измените имена переменных, повставляйте коментов...
counter вне форума Ответить с цитированием
Старый 21.09.2009, 20:05   #3
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
гы =)

первое, что пришло на ум: сделайте выбор команд оператором switch, измените имена переменных, повставляйте коментов...
ну с именами переменных понятно и с комментами тоже но свитчем говорил пользоваться нельзя
Какие еще идеи подскажите
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 21.09.2009, 20:30   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

почему нельзя свитчем пользоваться? команды и данные обязательно надо из файла брать?
counter вне форума Ответить с цитированием
Старый 21.09.2009, 20:53   #5
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
почему нельзя свитчем пользоваться? команды и данные обязательно надо из файла брать?
ага, нельзя все берется токо из data.txt
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 21.09.2009, 21:10   #6
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

можно данные читать не потоками а по сишному (fgets,fscanf), можно все загнать в классы
counter вне форума Ответить с цитированием
Старый 21.09.2009, 21:17   #7
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
можно данные читать не потоками а по сишному (fgets,fscanf), можно все загнать в классы
ооо точно спасибо
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Ответ


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