IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> деревья, опять не выводит(( где ошибка??
-Екатерина-
сообщение 19.05.2007 15:09
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 82
Пол: Женский

Репутация: -  0  +


 
TYPE
	ND = ^ NODE;
	NODE = RECORD
		 INF1 : INTEGER;
		 INF2 : STRING ;
		 LEFT : ND;
		 RIGHT : ND;
		END;

VAR 
	ROOT,P,Q,T : ND;
  	ans: string

procedure create_root (var root:nd);
begin
	clrscr;
	root:=nil;
	writeln ('koren dereva sozdan');
	READLN;
END;


PROCEDURE INSERT_EL (P:ND; {адрес включаемого элемента} VAR ROOT:ND);

BEGIN
	IF ROOT = NIL 
	THEN  ROOT:= P {элемент стал корнем}
	ELSE   BEGIN { поиск по дереву }
		 T := ROOT;
		 Q := ROOT;
		 WHILE ( T <> NIL ) DO
		 BEGIN
		   IF P^.INF1 < T^.INF1  
		   THEN   BEGIN
		      		Q := T;
				{ запоминание текущего адреса}
				T := T^.LEFT; {уход по левой ветви}
			  END
		   ELSE   IF P^.INF1 > T^.INF1 
		          THEN    BEGIN
					Q := T;
					{ запоминание текущего адреса}
					T := T^.RIGHT; 
					{уход по правой ветви}
      		 		  END
     			  ELSE    BEGIN 
                         	        WRITELN ('найден дубль включаемого элемента');
					READLN;	
   	                            	EXIT; {завершение работы процедуры}
			 	  END
		  END;
               end;
	{после выхода из цикла в q - адрес элемента, 
         к которому должен быть подключен новый элемент}
	IF P^.INF1 < Q^.INF1  
        THEN   Q^.LEFT := P {подключение слева }
	ELSE   Q^.RIGHT := P; {подключение справа} 		 
END;	


procedure creat_tree (q: nd; VAR ROOT:ND); {v dialoge}

begin
        root:=nil;
	ans:='y';
	while ans='y' do
  	 begin
	   new(q);
	   WRITELN ('vvedite znachenie pervogo inf. polya ');
	   READLN ( Q^.INF1 );	
	   WRITELN ('vvedite znachenie vtorogo inf. polya ');
	   READLN ( Q^.INF2 );
           INSERT_EL(q,root);
	   root:=q;
           writeln ('ewe yzel?? y-da');
           readln (ans);
         end;
end;

PROCEDURE obxod_OLP ( Q : ND ); {pryamoi}
BEGIN
	clrscr;
	IF Q <> NIL 
	THEN  BEGIN
                writeln (q^.inf1,'______________',q^.inf2); 
		obxod_OLP( Q^.LEFT );{уход по левой ветви-Л}
		obxod_OLP( Q^.RIGHT );{уход по правой ветви-П}
		
	      END
	else writeln ('derevo pystoe');
END;



ничего не выводит!! подскажите пожалуйста где ошибка!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2007 15:17
Сообщение #2


Гость






Что за привычка давать куски кода? ВЫЗОВ процедур где? Ты можешь написать все идеально, но при неправильном вызове ничего не будет работать!

Добавлено через 2 мин.
Кстати, заполнение дерева неправильно реализовано... Это должна быть рекурсивная процедура, а у тебя рекурсивного вызова нет...
 К началу страницы 
+ Ответить 
nikita182
сообщение 19.05.2007 15:25
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 60
Пол: Мужской
Реальное имя: Никита

Репутация: -  0  +


убери clrscr с процедуры obxod_OLP

ошибок много..

Сообщение отредактировано: nikita182 - 19.05.2007 15:27
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-Екатерина-
сообщение 19.05.2007 15:26
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 82
Пол: Женский

Репутация: -  0  +


вот вызовы процедур!


procedure pr2_tree;
var fl4: boolean;
    s: integer;
begin
 fl4:=true;
 while fl4=true do
  begin
   ved_tree(s);
   case s of
	1: create_root (root);
	4: creat_tree(q,root);
	5: begin
                    Q:= ROOT;
                    obxod_OLP(q); 
                end;
   end;
  end;
end;

 


а как создать рекурсивно, чтобы было в диалоге с пользователем??

Добавлено через 6 мин.
Цитата(nikita182 @ 19.05.2007 16:25) *


ошибок много..


описание вроде верно, создание пустого дерева тоже верно, вставка элемента вроде верно, сам обход правильный
или где не так??
подскажите где ошибки??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2007 15:41
Сообщение #5


Гость






Обязательно велосипед изобрести? Я вот тут уже ТАК все разжевал, что дальше некуда:
Бинарные деревья
 К началу страницы 
+ Ответить 
-Екатерина-
сообщение 19.05.2007 15:56
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 82
Пол: Женский

Репутация: -  0  +


я все это видела!
можно тогда так переделать?? это правильно будет???


procedure Insert(var Root: TTree; X: T);
	procedure CreateNode(var p: TTree; n: T);
	begin
		New(p);
                        WRITELN ('vvedite znachenie pervogo inf. polya ');
	            READLN ( p^.INF1 );	
	            WRITELN ('vvedite znachenie vtorogo inf. polya ');
	            READLN ( p^.INF2 );
		p^.Left := nil;
		p^.Right := nil
	end;
	 
begin
	if Root = nil Then CreateNode(Root, X) { создаем новый узел дерева }
	else 
		if p^.inf1 < X then Insert(Right, X)
			else
				if p^.inf1 > X Then Insert(Left, X)
				else writeln ('DUBL')!!!
				
		
end;



 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 24.07.2025 23:38
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"