1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Бинарное дерево, не получается сохранить и прочитать из файла
Помогите пожалуйста. Все процедуры для огранизации дерева работают. Единственное никак не получается сохранить записи в файл и при повторном запуске их прочитать.
program lab10; uses CRt;
type data =record nomer:integer; F,I,O:string[15]; Ocenki:record math,history,physyc:integer end;end; Treeprt=^tree; tree=record inf:data; left,right:treeprt end; derevo = file of data;
var top: treeprt; z:data; Level,key, n: integer; i, number: integer; tab: derevo;
function AddTree (top:treeprt; newnode:data):treeprt; begin if top=nil then begin new(top); top^.inf:=newnode; top^.left:=nil; top^.right:=nil; end else if top^.inf.ocenki.math>newnode.ocenki.math then top^.left:=addTree(top^.left,newnode) else Top^.right:=addTree(top^.right,newnode); addTree:= top; end;
procedure OrgTree; begin Writeln('procedura organizacii dereva'); writeln('dlay vihoda *'); writeln('========================================='); top:=nil; while true do begin writeln('vvedite Familiu'); readln(z.F);
if z.F='*' then exit; writeln('imay'); readln(z.I); writeln('ot4estvo'); readln(z.O); writeln('vvedite ocenki'); with z.ocenki do readln(math,history,physyc); Top:=addTree(top,z); end; end;
if z.F='*' then exit; writeln('imay'); readln(z.I); writeln('ot4estvo'); readln(z.O); writeln('vvedite ocenki'); with z.ocenki do readln(math,history,physyc); top:=addTree(top,z); end;
procedure prosmotr(top:treeprt); begin
if Top<>nil then begin prosmotr(top^.left); write(tab,top^.inf); with Top^.inf do writeln ('³', F:10,' ³', I:10,' ³ ', O:10,' ³ ',ocenki.math:4,' ³ ',ocenki.history:4,' ³ ',ocenki.physyc:4,' ³'); prosmotr(top^.right); end; end;
procedure Otobr (top:treeprt; Otstup:integer); begin if top<> nil then begin otstup:=otstup+3; otobr(top^.right, otstup); writeln( ' ':otstup, top^.inf.ocenki.math); otobr(top^.left, otstup); end; end;
procedure obhod (top:treePrt); begin reset(tab); if Top<>nil then begin obhod (Top^.Left); read(tab, top^.inf);
obhod (Top^.Right) end end;
procedure nodeCount (top:treeprt;level:integer; var n:integer); begin if (level>=1) and (top<> nil) then begin if Level=1 then n:=n+1; nodeCount(top^.left, level-1, n); nodeCount(top^.right, level-1, n); end; end;
Ну, смотри: сами процедуры я написал выше... Без изменений добавь их в свою программу. А вызывать - так:
begin repeat ClrScr; writeln('1 - cozdanie dereva'); writeln('2 - dobavlenie lista'); writeln('3 - pods4et koli4estva vepshin'); writeln('4 - prosmotr dereva'); writeln('5 - save_tree'); writeln('6 - load_tree'); writeln('7 - vihod'); writeln('______________________'); writeln( 'vvedite punkt menu'); readln(key); case key of { Тут все пункты, от 1-го до 4-го } 5: savetree('tree.dat', top); { <--- Можешь поменять путь к файлу } 6: begin top := nil; loadtree('tree.dat', top); { <--- Здесь - тот же путь, что и выше... Я бы оформил его константой } end; end { case } until key = 7; end.
Только что проверил... После сохранения дерева в файл и перезапуска программы дерево успешно считывается...