Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/26: Рейтинг темы: голосов - 26, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 04.01.2010
Сообщений: 6

Создать и вывести на экран дерево, элементы которого вводятся с клавиатуры и имеют целый тип

05.01.2010, 12:11. Показов 5093. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать и вывести на экран дерево, элементы которого вводятся с клавиатуры
и имеют целый тип. Причем для каждой вершины дерева во всех левых вершинах
должны находиться числа меньшие, а в правых – большие чем числа, хранящиеся
в этой вершине (дерево поиска).
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Program laba6;
uses
  crt;
Type
  PTree = ^TTree;
  TTree = Record
     Data : Integer;
     Left, Right : PTree;
  end;
 
Procedure InsTree(var ANode : PTree; n : integer);
Begin
  if ANode = nil then
     Begin
       new(ANode);
       With ANode^ do
          Begin
            Left := nil;
            Right := nil;
            Data := n;
          end;
     end
  else if n< ANode^.Data then InsTree(ANode^.Left, n) else InsTree(ANode^.Right, n);
End;
 
Procedure PrintTree(ANode : PTree);
Begin
  if ANode <> nil then
     Begin
       PrintTree(ANode^.Left);
       Write(ANode^.Data:4);
       PrintTree(ANode^.Right)
     End;
End;
 
Var
  Tree : PTree;
  p:boolean;
  n:integer;
  ch:char;
begin
  p:=true;
  tree:=nil;
  repeat
    clrscr;
    Writeln('BBedute 4islo');
    readln(n);
    if IOResult=0 then
      InsTree(tree,n)
    else
     p:=false;
  until not(p);
  clrscr;
  Writeln('npocmotpeTb noly4eHHoe dereVo? (esc=no)');
  ch:=readkey;
  if ch<>#27 then
  begin
    clrscr;
    PrintTree(Tree)
  end;
  readkey                                                                                               
end.
Как сделать так, чтобы процедура PrintTree выводила дерево примерно так:
Code
1
2
3
4
5
        14
    15
20      13
    10
         9
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.01.2010, 12:11
Ответы с готовыми решениями:

Создать массив, элементы которого вводятся с клавиатуры, и определить наибольший элемент массива
создать массив, элементы массива вводятся с клавиатуры и определить наибольший элемент массива

Дано описание массива, у которого индексы имеют перечислимый тип, а тип элемента – integer или real. Выведите на экран,
Дано описание массива, у которого индексы имеют перечислимый тип, а тип элемента – integer или real. Выведите на экран, сколько места в...

Поиск наименьшего элемента в массиве элементы которого вводятся с клавиатуры
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdbool.h&gt; #include &lt;math.h&gt; #include &lt;locale.h&gt; #define A 10 int main() ...

5
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
05.01.2010, 14:30
Что-то до вывода никак не добрался, ввожу числа и никакого конца нет.
0
1 / 1 / 0
Регистрация: 04.01.2010
Сообщений: 6
06.01.2010, 08:41  [ТС]
А Вы можете подкинуть ссылку на пример реализации функции вывода дерева, как показанно в примере.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
06.01.2010, 08:44
Fuel, Зачем Вам вывод, если у Вас и ввод не работает?
1
1 / 1 / 0
Регистрация: 04.01.2010
Сообщений: 6
06.01.2010, 08:46  [ТС]
Очень надо посмотреть эту функцию.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
06.01.2010, 09:35
http://www.cyberguru.ru/progra... age28.html

Добавлено через 28 минут
Вы совсем не хотите ничего искать сами. В Гугле есть все, например вот пример вывода дерева на экран.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.01.2010, 09:35
Помогаю со студенческими работами здесь

Найти наименьший элемент массива размером М х N, элементы которого вводятся с клавиатуры
Найти наименьший элемент массива размером МхN, элементы которого вводятся с клавиатуры.

В одномерном массиве Е(Л) элементы которого вводятся с клавиатуры, подсчитайте сумму нечетных элементов массива
Помогите пожалуйста решить Нужна полностью программа по заданию: В одномерном массиве Е(Л) элементы которого вводятся с клавиатуры,...

Найти произведение элементов в каждой строке массива размером MxN, элементы которого вводятся с клавиатуры
Найти произведение элементов в каждой строке массива размером MxN, элементы которого вводятся с клавиатуры. Пожалуйста сделайте, очень...

Дан одномерный массив A[12],элементы которого вводятся с клавиатуры.Выяснить сколько нечётных элементов в массиве.
Народ помогите два кода написать очень срочно надо,вот задачи. 1)Дан одномерный массив A,элементы которого вводятся с клавиатуры.Выяснить...

Дан одномерный массив Е(10) элементы которого вводятся с клавиатуры. Подсчитать сумму максимального и минимального элемента в массиве Е.
Здравствуйте программисты) Меня не было всего лишь на паре тем по паскалю, и по этому не знаю ответа) Поможете решить задачу)) Дан...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru