1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Бинарные деревья, Компилятор находит ошибку, не знаю как её исправить
Program TreeProcess; Uses Crt; Type rabotnik=record {Описание записи о сотруднике} number:integer; FIO:string[15]; godroj:integer; pol:char; cem:string[15]; koldet:integer; oklad:integer; end; TreePtr=^Tree; {Описание узла дерева} Tree=record data:rabotnik; left,right:TreePtr end; rab=file of rabotnik; Var Top:TreePtr; r:rabotnik; f:rab; n,i:Integer; {================ФУНКЦИЯ ДОБАВЛЯЮЩАЯ ЛИСТ К ДЕРЕВУ============} Function AddTree(Top:TreePtr;Newnode:rabotnik):TreePtr; Begin If Top=Nil then begin New(Top); Top^.data:=Newnode; Top^.left:=nil; Top^.right:=nil; end else If Top^.data.FIO>Newnode.FIO then Top^.left:=AddTree(Top^.left,Newnode) else Top^.right:=AddTree(Top^.right,Newnode); AddTree:=Top End;
{=============ПРОЦЕДУРА ОРГАНИЗАЦИИ ДЕРЕВА====================} Procedure OrgTree; Begin writeln('Выполняется процедура организации дерева'); Readln; Reset(f); Top:=Nil; while not eof(f) do begin read(f,r); Top:=AddTree(Top,r); end; End;
{=============ПРОЦЕДУРА ОТОБРАЖЕНИЯ СТРУКТУРЫ ДЕРЕВА==========} Procedure Prosmotr(Top:TreePtr); {значения узлов дерева просматриваются} {слева направо} Begin if Top<>Nil then begin Prosmotr(Top^.left); with Top^.data do writeln(number:4,' ',FIO:15,' ',godroj:6,' ',pol:3,' ',cem:15,' ', koldet:7,' ',oklad:5); i:=i+1; Prosmotr(Top^.right); end; End;
{====ФУНКЦИЯ ОПРЕДЕЛЯЮЩАЯ ЧИСЛО ВХОЖДЕНИЙ ЭЛ-ТА В ДЕРЕВО======} Procedure KolE(Root:TreePtr;n:Integer;Node:rabotnik); Begin Reset(f); writeln('Введите элемент'); Read(f,r); Node:=r; n:=0; while Root<>Nil do if Root^.data=Node then {Здесь выдаёт ошибку про несовпадение типов для данного оператора} n:=n+1; KolE(Root^.left,n,Node); KolE(Root^.right,n,Node); writeln('количество элементов равно',n); Close(f); End;
{====================ОСНОВНАЯ ПРОГРАММА========================} Begin Assign(f,'C:\derevo.dat'); repeat ClrScr; {Очистка экрана} writeln('1-Организация двоичного дерева'); writeln('2-Просмотр дерева'); writeln('3-Количество вхождений эл-та в двоичное дерево'); writeln('4-Выход'); writeln('------------------------------'); writeln('Нажмите клавишу от 1 до 4'); key:=readKey; {Считывание кода нажатой клавиши} case key of {Вызов необходимой процедуры по номеру} '1':OrgTree; '2':Begin writeln('Выполняется процедура просмотра дерева'); writeln; i:=0; writeln('N':4,' ','FIO':15,' ','godroj':6,' ','pol':3,' ','cemeunoe_poloj':15,' ', 'kol_det:7,' ','oklad':5); Prosmotr(Top); readln; end; '3': end; until key='4'; {Выход из программы} End.
ПОМОГИТЕ!!!!!!!!!!!! Я не знаю,как исправить мою ошибку...