1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
| biba |
7.08.2004 17:05
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Женский Репутация: 0 |
AAAAAAA Почему закрыли мою тему!?
Вопрос в том, что нужно создать дерево из СПИСКА, а не из файла ( из файла- это уже другой пункт моей курсовой и я не думаю, что два разных задания решаются одной программой Написано сумбурно, но как могу так и пишу, по другому это я объяснить не могу. |
![]() ![]() |
| BlackShadow |
10.08.2004 13:57
Сообщение
#2
|
|
Гость |
Цитата Часть вторая - создание дерева (двоичного наверно, хотя написано в задании бинарного) Это одно и то же. А по-англицки это звучиь как Full Shit Ближе к теме. Двоичное дерево выглядит так: есть корень. У корня может быть до двух ветвей. У каждой ветви может быть до двух "подветвей" и т. д. Чем оно удобно? Например тем, что можно задавать путь к элементу серией указаний типа "налво, налево, налево (это уже измена выйдет) направо, направо, налево (иногда же можно), направо" От теории к практике: Код Type {Элемент дерева} PTreeItem=^TTreeItem; TTreeItem=Record Item:String; {Значение} Left:PTreeItem; {Левая ветвь} Right:PTreeItem {Правая ветвь} End; {Ещё одна тупость для преподов} Function Tree_Create:PTreeItem; Begin Tree_Create:=Nil End; {Освобождение памяти} Procedure Tree_Free(Var Tree:PTreeItem); Begin If Tree=Nil Then Exit; Tree_Free(Tree^.Left); Tree_Free(Tree^.Right); Dispose(Tree); Tree:=Nil End; {Добавление элемента} Procedure Tree_Set(Var Tree:PTreeItem;Key:String;Item:String); Begin If (Tree=Nil) Then Begin New(Tree); Tree^.Left:=Nil; Tree^.Right:=Nil; Tree^.Item:='' End; If (Key="") Tree^.Item:=Item Else If Key[1]="1" Then Tree_Set(Tree^.Left,Copy(Key,2,255),Item) Else Tree_Set(Tree^.Right,Copy(Key,2,255),Item) End; {Для удобства может понадобиться ф-ция перевода числа в строку} Function IntToStr(n:Integer):String; Var Result:String; Begin Str(n,s); IntToStr:=Result End; {А процедура перевода списка в дерево будет выглядеть примерно так...} Function Convert(List:PListRec):PTreeItem; Var Result:PTreeItem; p:PListRec; Begin Result:=Tree_Create; p:=List; While p<>Nil Do Tree_Set(Result,IntToStr(p^.Key),p^.Item); Convert:=Result End; Ну, напоминать про ошибочки не буду При работе с файлом можно сделать что-то типа такого: Код Var n:Integer; f:Text; s:String; Tree:PTreeItem; Begin Assign(f,"Input.Txt"); Reset(f); n:=1; Tree:=Tree_Create; While Not Eof(f) Do Begin ReadLn(f,s); Tree_Set(Tree,IntToStr(n),s); Inc(n) End; Close(f) End. При работе с юзьверем можно сделать так: Код Var n:Integer; s:String; Tree:PTreeItem; Begin n:=1; Tree:=Tree_Create; While Not Eof(f) Do Begin ReadLn(s); If s="end" Then Break; Tree_Set(Tree,IntToStr(n),s); Inc(n) End End. будет считывать, пока юзверь не введёт "end". А про рамку я понял теперь окончательно. Выводит у тебя не так, как я написал, а поочерёдно. Но лечение прежнее |
biba Преобразование списка в дерево 7.08.2004 17:05
BlackShadow Так тема будет оформлена ближе к правилам...
По-п... 9.08.2004 11:12
biba Ну значит так.
В первой части проги создается одно... 9.08.2004 17:31
BlackShadow
что-то новое...
список он на то и список, чтобы н... 10.08.2004 11:55
biba Пасибики :p2:
И еще тогада вопросик, можно :p2:
... 10.08.2004 12:56
APAL Неужели эти процедурки так медленно работают, что ... 10.08.2004 13:12
BlackShadow Я так понял, что идёт попытка чего-то типа
... 10.08.2004 13:32
biba Спасибики, будем пробовать :P
Насчет рамки => ... 10.08.2004 14:13
Guest Слова затирают рамку.
Без кода сложно сказать, где... 10.08.2004 14:44![]() ![]() |
|
Текстовая версия | 15.11.2025 7:57 |