![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Екатерина7 |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 43 Пол: Женский Репутация: ![]() ![]() ![]() |
кто может помочь, есть такая задача
написать программу которая печатате все числа бинарного дерева,используемые больше одного раза. напечатать все узлы дерева, в состав которых не входит заданная цифра и уровни соответствующие таким узлам Uses Crt; Const {-------------------------} {Форматы вывода числовых данных} S = 4; T = 1; {-------------------------} LTree = 4; {Размерность дерева, чем больше - тем большее дерево можно выводить на экран} {Используется для вывода дерева} {-------------------------} Type {-----------------------} TNode=^TTree; {Узел бинарного дерева} TTree = Record Info : Integer; {Числов узле} Left,Right : TNode; {Ссылки на сыновей} End; {-----------------------} var Number,ColN,k : Integer; {Число и счетчики} Tr: TNode; {Ссылка на вершину списка} St,St1: String; {Вспомогательные строки} P : Boolean; {Флаг вхождения числа в список удаляемых} {=============================================================} Function NewTree( X : Integer) : TNode; {Функция создания нового бинарного дерева} Var P : TNode; Begin New(P); P^.Info := X; P^.Left := Nil; P^.Right := Nil; NewTree := P; End; {NewTree} {-----------------------} Procedure AddTree(Var Tr:TNode; X : Integer); {Добавление в дерево по условию задачи} Begin If Tr = Nil Then Tr := NewTree(X) Else If(Tr^.Info = X) Then {Дубликаты запихиваем в правое поддерево} AddTree(Tr^.Right,X) {Добавление в правое поддерево} Else AddTree(Tr^.Left,X) {Добавление в левое поддерево} End; {AddTree} {---------------------------------------} Procedure Find(Tr:TNode); {Поиск чисел встречающихся неоднократно} Begin If Tr <> Nil Then Begin If Tr^.Right <> Nil Then Write(Tr^.Info: 3); Find(Tr^.Left); End; End; {Find} {---------------------------------------} Procedure FindLevel(Tr:TNode; Level : Integer); {Ищет узлы в которых нет заданного числа} Begin If Tr <> Nil Then Begin Inc(Level); {Увеличение уровня} If Tr^.Info <> Number Then {Вывод найденного узла} Writeln('Узел c цифрой = ', Tr^.Info, ' на уровне ', Level); FindLevel(Tr^.Left,Level); FindLevel(Tr^.Right,Level); End; End; {FindLevel} {----------------------------} Procedure PrintTree2(Tr:TNode; TecX,TecY,N,k: Integer); {Второй вариант распечатки дерева (Крутой)} Var P : Integer; Begin If Tr<>Nil then Begin If N < LTree Then Begin N := LTree; P := 1 End Else P := 0; If k = 0 Then Begin GotoXY(abs(TecX - (N div 2))+1,TecY-1); Write('\'); End; If k = 1 Then Begin GotoXY(TecX + (N div 2) + S-1,TecY-1); Write('/'); End; GotoXY(TecX,TecY); Write(Tr^.Info:3); PrintTree2(Tr^.Left,TecX - N,TecY+2,N-LTree,1); PrintTree2(Tr^.Right,TecX + N,TecY+2,N-LTree,0); End; End; {PrintTree2} {=============================================} Begin ClrScr; {----------------------------} {Инициализация данных и добавление их в дерево} Tr:=Nil; ColN := 0; Writeln('Введите массив чисел (Вводи любого символа - КОНЕЦ): '); While k = 0 do Begin Write('Введите ', ColN + 1, '-е число : '); Readln(St); Val(St,Number,k); If k = 0 Then Begin St1 := St1 +' ' + St; AddTree(Tr,Number); Inc(ColN); End; End; {----------------------------} Writeln; ClrScr; Writeln('Исходный массив чисел :'); Writeln(St1); {Выводим на экран введенную строку чисел} Writeln('---------------------------------------------------------'); Write('Введите число для проверки условия: '); Readln(Number); Writeln('---------------------------------------------------------'); Writeln('Полученное дерево с дубликатами :'); PrintTree2(Tr,WhereX+45,WhereY,ColN-2,3); {Распечатка дерева} Readkey; ClrScr; Writeln('---------------------------------------------------------'); Write('Числа используемые больше одного раза: '); Find(Tr); Writeln; {Ищем числа использованные больше одного раза} Writeln('---------------------------------------------------------'); Writeln('Узлы дерева, в состав которых не входит цифра ', Number,' :'); FindLevel(Tr,0); {Ищем узлы, в которых нет заданного числа} Writeln('---------------------------------------------------------'); Write('Нажмите клавишу ...'); Readkey; End. {Program End} и к ней программа.. что нужно исправить, чтоб было такое задание: написать программу,которая создает бинарное дерево, состоящее из целых чисел, вводимых с клавиатуры, печатает все числа бинарного дерева,используемые больше одного раза. напечатать все числа заданного дерева, в состав которых входит заданная цифра |
![]() ![]() |
![]() |
Текстовая версия | 29.07.2025 17:31 |