![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
biba |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Женский Репутация: ![]() ![]() ![]() |
AAAAAAA Почему закрыли мою тему!?
![]() Вопрос в том, что нужно создать дерево из СПИСКА, а не из файла ( из файла- это уже другой пункт моей курсовой и я не думаю, что два разных задания решаются одной программой ![]() Написано сумбурно, но как могу так и пишу, по другому это я объяснить не могу. ![]() |
![]() ![]() |
BlackShadow |
![]()
Сообщение
#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". А про рамку я понял теперь окончательно. Выводит у тебя не так, как я написал, а поочерёдно. Но лечение прежнее ![]() |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 20:10 |