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

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

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

> бинарные деревья
biv171
сообщение 18.11.2008 22:06
Сообщение #1


Новичок
*

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

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


здравствуйте,помогите если можете...задача у меня простая,но я че-то недогоняю, у меня есть бинарное дерево,я читаю данные с клавиатуры и хочу вывести мое дерево на экран,скажите в чем тут моя ошибка и как ее исправить?(я знаю что у вас есть ссылки на готовую прогу на бинарные деревья,где уже имеется процедура печати,но мне не хочется плагиатить-хочется разобраться в чем я не прав,так сказать научиться)

program derevo;
uses crt;
type pstruct=^struct;
struct= record
inf:integer;
left,right:pstruct;
end;
var n,y,x,q,w,m:integer;
tree:pstruct;
z:struct;


function newd(x:integer):pstruct;
var p:pstruct;
begin
new(p);
p^.inf:=x;
p^.left:=nil;
p^.right:=nil;
newd:=p;
end;

procedure setleft(p:pstruct;x:integer);
begin
p^.left:=newd(X);
end;

procedure setright(p:pstruct;x:integer);
begin
p^.right:=newd(x);
end;



procedure viv(p:pstruct;m:integer);
begin
read(n);
while not eoln do if p=nil then begin
p:=newd(n);
gotoxy(q,w);
write(p^.inf);
read(n);
end
else if p^.inf<n then begin
setright(newd(p^.inf),n);
gotoxy(q+17,w+1);
writeln(n);
{q:=q+17;
w:=w+1;}
viv(newd(n),n);
end
else begin
setleft(newd(p^.inf),n);
gotoxy(q-17,w+1);
writeln(n);
{q:=q-17;
w:=w+1;}
viv(newd(n),n);
end;


end;

begin
clrscr;
tree:=nil;
q:=40;
w:=1;
viv(tree,m);
readln;
end.


М
При публикации программ используй теги (выделить, применить нужную опцию меню CODE)
Lapp

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 18.11.2008 22:58
Сообщение #2


Гость






Цитата
у меня есть бинарное дерево,я читаю данные с клавиатуры и хочу вывести мое дерево на экран
Неправда... У тебя нет никакого бинарного дерева (tree = nil, не забыл? У тебя есть структура, описывающая дерево, но сами элементы дерева отсутствуют), и ты хочешь одновременно читать данные с клавиатуры, создавать дерево и выводить его на экран?

"Не пытайся объять необъятного" (С) Козьма Прутков Разбей это действие на подзадачи: сначала - заполнение дерева, а уж потом - его печать.

 К началу страницы 
+ Ответить 
biv171
сообщение 19.11.2008 21:47
Сообщение #3


Новичок
*

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

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


Цитата(volvo @ 18.11.2008 22:58) *

Неправда... У тебя нет никакого бинарного дерева (tree = nil, не забыл? У тебя есть структура, описывающая дерево, но сами элементы дерева отсутствуют), и ты хочешь одновременно читать данные с клавиатуры, создавать дерево и выводить его на экран?

"Не пытайся объять необъятного" (С) Козьма Прутков Разбей это действие на подзадачи: сначала - заполнение дерева, а уж потом - его печать.



volvo я осознал свои ошибки по заполнению,но вот вывод на экран че то не получается,помоги пожайлуста..

Код
program derevo;
uses crt;
type pstruct=^struct;
     struct= record
             inf:integer;
             left,right:pstruct;
            end;

var n,y,x,q,w,m:integer;
tree:pstruct;
    z:struct;


function  newd(x:integer):pstruct;
var tec:pstruct;
begin
  new(tec);
  tec^.inf:=x;
  tec^.left:=nil;
  tec^.right:=nil;
  newd:=tec;
end;

procedure setleft(tec:pstruct;x:integer);
begin
  tec^.left:=newd(X);
end;

procedure setright(tec:pstruct;x:integer);
begin
  tec^.right:=newd(x);
end;

procedure zapolnenie(tec:pstruct;z:struct);
  begin
   while not eoln do
    begin
     read(z.inf);
     if tec=nil then begin
                      tree:=newd(z.inf);
                      tec:=tree;
                     end
                else if z.inf<tec^.inf then
                  begin
                   setleft(tec,z.inf);
                   zapolnenie(tec^.left,z);                                              
                  end
                                       else begin
                                             setright(tec,z.inf);
                                             zapolnenie(tec^.right,z);          
                                            end;

                     end;
  end;




procedure soz(tec:pstruct;f:byte);
begin
y:=y+1;
if tec<>nil then begin
                 if f=1 then x:=x-27;
                 if f=2 then x:=x+15;
                 gotoxy(x,y);
                 if f=0 then writeln(tec^.inf);
                 if f=1 then writeln(tec^.inf,'/');
                 if f=2 then writeln('\',tec^.inf);
                 soz(tec^.left,1);
                 soz(tec^.right,2);
                end;
y:=y-1;
end;

{Основная программа}
begin
  clrscr;
  tree:=nil;
  x:=30;
  y:=0;
  window(5,1,100,25);
  zapolnenie(tree,z);
  soz(tree,0);
  readkey;

end.[code]

Сообщение отредактировано: biv171 - 19.11.2008 22:13
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
biv171   бинарные деревья   18.11.2008 22:06
volvo   Неправда... У тебя нет никакого бинарного дерева (...   18.11.2008 22:58
biv171   Неправда... У тебя нет никакого бинарного дерева ...   19.11.2008 21:47
biv171   упс :blink: это было бы лучше всего...   19.11.2008 0:00
volvo   Если б ты их осознал, то заполнение было бы правил...   19.11.2008 22:59
biv171   volvo а почему 3 в левом поддереве(относительно 4)...   20.11.2008 1:07
volvo   Блин... Опять не заметил... Нет, с деревом все в п...   20.11.2008 2:00
biv171   господа,не могли бы еще помочь,мне нужно удалить и...   21.11.2008 14:14
samec   господа,не могли бы еще помочь,мне нужно удалить ...   21.11.2008 15:28
volvo   Обходишь дерево, находишь элемент с заданным значе...   21.11.2008 15:22
biv171   Обходишь дерево, находишь элемент с заданным знач...   21.11.2008 17:12
volvo   С использованием приведенной у меня на сайте функц...   21.11.2008 19:02
biv171   эх блин при 3 не получается....(   22.11.2008 0:34
Lapp   эх блин при 3 не получается....( Что не получается...   22.11.2008 0:52
biv171   Извините,теперь будуболее конкретно задавать вопро...   22.11.2008 1:13
Lapp   будуболее конкретно задавать вопросы Я думаю, был...   22.11.2008 1:19
volvo   biv171, смотри чего я придумал: :cool: ydalenie...   22.11.2008 2:27
biv171   [b]biv171, смотри чего я придумал: :cool: ydal...   28.11.2008 22:18
biv171   Спасибо огромное разобрался:)) :)   22.11.2008 20:10
volvo   Пожалуйста... Кусок процедуры remove_less из твоег...   28.11.2008 22:59


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

 



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