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

 



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