Меня попросили кинуть задачку, одна девушка из группы. У нас пол группы на этом попали (лабы ведут два препода, один дает халявное задание на графику а деревья нам как то и не объясняли)... Говорит сделать ничего не получается.. ( Задача: Разработать объект-дерево для реализации следующих методов обработки последовательности элементов - целых чисел: определить число вхождений некоторого элемента последовательности в дерево, вычислить сумму элементов дерева, вычислить среднее арифметическое всех элементов дерева, определить максимальную глубину дерева для каждой рассматриваемой произвольной последовательности, обеспечить вывод дерева на экран, создать и сохранить в файле исходную последовательность чисел
Вот цитаты вопросов:
| Код | program Project72;
{$APPTYPE CONSOLE}
uses SysUtils; type
ref=^node; node=record key:integer; left,right:ref; end; ff=file of node; var nn:ref; n:integer; f:ff; //q,h:integer;
function Creat_tree(n:integer):ref; var newnode:ref; x,nl,nr:integer; begin if n=0 then Creat_tree:=nil else begin nl:=n div 2; nr:=n-nl-1; x:=random(99)+1; new(Newnode); with newnode^ do begin key:=x; left:=Creat_tree(nl); right:= Creat_tree(nr); end; creat_tree:=newnode; end; end;
function Creat(n:integer):ref; var newnode:ref; x:integer; nl,nr:integer; begin if n=0 then Creat:=nil else begin nl:= n div 2; nr:= n - nl -1; new(Newnode); with newnode^ do begin writeln('vvedite chislo'); readln(key); left:=creat(nl); right:=creat(nr); end; creat:=newnode; end; end;
procedure Prn_tree(t:ref; k:integer); var i:integer; begin { TODO -oUser -cConsole Main : Insert code here } if t<>nil then with t^ do begin Prn_tree(left,k+1); for i:=1 to k do write('****'); writeln(key:5); Prn_tree(right,k+1); end; end;
procedure infix(t:ref); var o,a,k,i:integer; begin if t<>nil then with t^ do begin Prn_tree(left,k+1); for i:=1 to k do write('****'); writeln(key:5); a:=a+1; Prn_tree(right,k+1); writeln(a); end; end;
procedure poisc(var t:ref;m:integer; c:integer); var y:integer; begin if t<> nil then with t^ do begin poisc(left,m+1,c); if key=c then begin y:=y+1; end; poisc(right,m+1,c); end; writeln('colichestvo'); writeln(y); end;
procedure saveall(t:ref); begin if t^.left<>nil then saveall(t^.left); writeln(f,t^.key); if t^.right<>nil then saveall(t^.right); end;
procedure savefile; var e:string; begin write('vvedite imya faila:'); readln(e); assignfile(f,e); rewrite(f); saveall(ref); closefile(f); end;
procedure count(t:ref; k:integer); var m:array of integer; i:integer; begin if t^.right<>nil then begin k:=k+1; count (t^.right); end else begin m[i]:=k; i:=i+1; k:=k-1; if t^.left<>nil then begin count (t^.left); k:=k+1; m[i]:k; i:=i+1; end; sravnenie(m); end;
procedure sravnenie(m:array [1..i] of integer;y:integer); var z,n:integer; begin n:=1; if z+n<=i then begin if m[z]<m[z+n] then begin n:=n+1; m[z]:=m[z+n]; end else begin m[z+n]:=m[z+n+1]; n:=n+1; end; end else writeln(); end;
var q,d,c,h:integer; t:ref; begin
ref:=nil; write('vvedite imya faila:'); readln(e); assignfile(f,e); reset(f); while not eof(f) do begin readln(e); addnewr(ref,e); end; closefile(f);
repeat writeln('*********************************************'); writeln('menu'); writeln('1. sozdanie dereva'); writeln('2. kolichestvo elementa v dereve'); writeln('3. summa elementov dereva'); writeln('4. srednee arifmeticheskoe elementov dereva'); writeln('5. max glybina dereva'); writeln('6. vivod dereva'); writeln('7. soxranit v fail'); //writeln('8. zavershenie raboti'); writeln('9. vixod'); writeln('*********************************************'); writeln; readln(q); case q of 1: begin writeln('vvodim sami ili po randomy?'); writeln('1-sami'); writeln('2-po randomy'); writeln('vash vibor'); readln(h); if h=1 then begin writeln('vvedite colichestvo yzlov dereva'); readln(n); nn:=Creat(n); writeln('derevo sozdano'); end else begin writeln('vvedite colichestvo yzlov dereva'); readln(n); nn:=Creat_tree(n);
writeln('derevo sozdano'); end; readln; end;
2:begin writeln('vvedite chislo'); readln©; poisc(nn,0,c); end;
5: count(t);
6: begin writeln('tree':10); prn_tree(nn,0); end; 7:
savefile;
end; until q=9; end. |
"Для получения зачета осталось написать одну программу, дали на деревья, не получается написать. Ниже приведена попытка...нужно: Разработать объект-дерево для реализации следующих методов обработки последовательности элементов - целых чисел: определить число вхождений некоторого элемента последовательности в дерево, вычислить сумму элементов дерева, вычислить среднее арифметическое всех элементов дерева, определить максимальную глубину дерева для каждой рассматриваемой произвольной последовательности, обеспечить вывод дерева на экран, создать и сохранить в файле исходную последовательность чисел. создать дерево и вывести на экран получается, а все остальное нет, я попробовала написать процедуры для определения числа вхождений некоторого элемента последовательности в дерево, определения максимальной глубины дерева для каждой рассматриваемой произвольной последовательности, создания и сохранить в файле исходную последовательность чисел, но не работает, а как посчитать сумму всех элементов и среднее арифметическое, я не знаю помогите, пожалуйста, очень нужно..."
|