Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] деревья 
:(
    Опции темы
Ripper
Дата 10.12.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 6
Всего: 23



Меня попросили кинуть задачку, одна девушка из группы. У нас пол группы на этом попали (лабы ведут два препода, один дает халявное задание на графику а деревья нам как то и не объясняли)... Говорит сделать ничего не получается.. ( 
Задача:
Разработать объект-дерево для реализации следующих методов обработки последовательности элементов - целых чисел: определить число вхождений некоторого элемента последовательности в дерево, вычислить сумму элементов дерева, вычислить среднее арифметическое всех элементов дерева, определить максимальную глубину дерева для каждой рассматриваемой произвольной последовательности, обеспечить вывод дерева на экран, создать и сохранить в файле исходную последовательность чисел

Вот цитаты вопросов:
Код

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.

"Для получения зачета осталось написать одну программу, дали на деревья, не получается написать. Ниже приведена попытка...нужно:  
Разработать объект-дерево для реализации следующих методов обработки последовательности элементов - целых чисел: определить число вхождений некоторого элемента последовательности в дерево, вычислить сумму элементов дерева, вычислить среднее арифметическое всех элементов дерева, определить максимальную глубину дерева для каждой рассматриваемой произвольной последовательности, обеспечить вывод дерева на экран, создать и сохранить в файле исходную последовательность чисел.
создать дерево и вывести на экран получается, а все остальное нет, я попробовала написать процедуры для определения числа вхождений некоторого элемента последовательности в дерево, определения максимальной глубины дерева для каждой рассматриваемой произвольной последовательности,  создания и сохранить в файле исходную последовательность чисел, но не работает, а как посчитать сумму всех элементов и среднее арифметическое, я не знаюsmile помогите, пожалуйста, очень нужно..."


Это сообщение отредактировал(а) Ripper - 10.12.2006, 19:42


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1048 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.