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

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

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

 
 Ответить  Открыть новую тему 
> деревья, опять не выводит(( где ошибка??
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

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


Пионер
**

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

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


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

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

Сообщение отредактировано: nikita182 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Обязательно велосипед изобрести? Я вот тут уже ТАК все разжевал, что дальше некуда:
Бинарные деревья
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





- Текстовая версия 28.03.2024 15:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name