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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2010, 16:14   #1
user1990
Пользователь
 
Регистрация: 13.07.2010
Сообщений: 11
По умолчанию Задача построить R деревьев и вывести для каждого из них определенные значения в файл

Привет, всем. вопрос может банальный , но ...При пошаговой отладки все отлично выполняется, но если просто запустить непонятно что получается.Задача построить R деревьев и вывести для каждого из них определенные значения в файл, так вот при отладки выводится в файл всё правильно , но как просто запуск , то в файле появляются только одна и та же запись по первому графу, размноженная в r экземплярах. Подскажите что может быть не так.....
Код:
Vershina.h

#define chislo_vershin 50
class massiv{
public:
	float k;
	int all_v;
	int vis_v;
	int ch_u;
};
 class Vershina
{
public:
    Vershina(int i,int rod);	
	int chislo_reber;
	int nomer_vershiny;
	int uroven_vershiny;
	int parent;
	Vershina ** potomki;
};
 
 template <typename t>void createTree(t** ukaz){
 t * tek_ukaz=0;
 std:: deque <t*> ochered;

 int i,j,Summa,kol_vershin_urovny;
 n=0; tek_uroven=1;n_=0;
 
 srand(static_cast<unsigned>(time(0)));
    tek_ukaz=new t(tek_uroven,0);
	*ukaz=tek_ukaz;
	ochered.push_front(tek_ukaz);
	Summa=1;	
			while((n<=chislo_vershin)&&(!ochered.empty())){
				kol_vershin_urovny=Summa;
				
				tek_uroven++;
                Summa=0;
				
				for(j=0;j<kol_vershin_urovny;j++){
				tek_ukaz=ochered.front();
				ochered.pop_front();

				for ( i=0;i<tek_ukaz->chislo_reber;i++){
					tek_ukaz->potomki[i]=new t(tek_uroven,tek_ukaz->nomer_vershiny);
					ochered.push_back(tek_ukaz->potomki[i]); }	    
				Summa+=tek_ukaz->chislo_reber;}
				
			}
			
	ochered.clear();
	
 };
template <typename t>void Ochistka (t ** ptr){	
std:: deque <t*> ochered;

ochered.push_front(*ptr);
while(!ochered.empty()){
*ptr=ochered.front();
ochered.pop_front();
for (int i=0;i<(*ptr)->chislo_reber;i++)
ochered.push_back((*ptr)->potomki[i]);
delete  (*ptr);
*ptr=0;
}
}



Vershina.cpp

#include "Vershina.h"
int n, n_;
Vershina * ukaz; 
Vershina_def * ukaz_def;
int tek_uroven;
float k;
int rebra[5];

Vershina::Vershina(int j,int rod)
{	n++;
	nomer_vershiny=n;
	parent=rod;
	uroven_vershiny=j;
	chislo_reber=rand()%5;
	if(chislo_reber!=0){
		potomki=new Vershina* [chislo_reber]; 
		for(int i=0;i<chislo_reber;i++)
		potomki[i]=NULL;}
	else {
		n_++;
		potomki=NULL;
	} 

}
void dop_function(System::Windows::Forms::ListBox^  sender){
std:: deque <Vershina*> ochered;
Vershina * tek_ukaz;

int i;

if (ukaz!=0){ 
Ochistka(&ukaz);}
createTree(&ukaz);

while(n<=10){
Ochistka(&ukaz);
createTree(&ukaz);}

ochered.push_front(ukaz);

while(!ochered.empty()){
	tek_ukaz=ochered.front();
	ochered.pop_front();
	if((tek_ukaz->uroven_vershiny==tek_uroven)&&(tek_ukaz->chislo_reber!=0)) 
	{tek_ukaz->chislo_reber=0;
	n_++;}
	for ( i=0;i<tek_ukaz->chislo_reber;i++)
	ochered.push_back(tek_ukaz->potomki[i]); }

ochered.clear();
 k=float (n)/float( n_);

}


функция , где идет цикл из 100 графов....
private: System::Void rГрафовToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
int j,i;
Vershina * tek_ukaz;
FILE *fp;
System::String ^ str="";
String ^ probel="   ";

char error[33];
ukaz=NULL;
massiv ** ref=new massiv*[chislo_graphov];
if((fp=fopen("отчет.txt","w"))==NULL)
{sprintf(error,"Ошибка открытия/созданя файла...");
String ^s=gcnew String(error);
MessageBox::Show(s);} 

for(j=0;j<chislo_graphov;j++){
	dop_function(listBox1);
	ref[j]=new massiv[1];
	ref[j]->all_v=n;
	ref[j]->ch_u=tek_uroven;
	ref[j]->k=k;
	ref[j]->vis_v=n_;

	fprintf(fp,"число уровней графа %d;\n",ref[j]->ch_u);
	fprintf(fp,"параметр а %f;\n",ref[j]->k);
	fprintf(fp,"число всех вершин %d;\n",ref[j]->all_v);
	fprintf(fp," число висячих вершин %d;\n",ref[j]->vis_v);
    fprintf(fp,"\n");
}
	fclose(fp);	}
user1990 вне форума Ответить с цитированием
Старый 15.10.2010, 18:44   #2
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Не уверен я, что кто-то будет разбираться в этом коде. Я бы на твоем месте закоментировал весь проект и по кустам его открывал, наблюдая на каком месте выполнение идет не так.
А вообще, как вы собираете проект, когда он работает не верно Release, Debug? Попробуйте собрать проект отключив всю оптимизацию.
coinkrsk вне форума Ответить с цитированием
Старый 15.10.2010, 20:47   #3
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

а еще лучше, сделать вывод всех данных в лог файл
NiCola999 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести слова с неповторяющейся в них первой буквой. ~SnusmumriK~ Помощь студентам 1 10.03.2010 13:03
Объсните решение!Вырубка деревьев.Паскаль.Задача перебор! suppppper2007 Помощь студентам 7 29.07.2009 19:47
(С++)построить окружность, проходящую через k>=3 точек каждого из двух множеств... Suitable Помощь студентам 1 18.01.2009 23:19