IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> бинарное дерево, программа зацикливается
сообщение
Сообщение #1


Гость






Помогите плиз!!Я не знаю, как исправить...
Procedure KolE(Root:TreePtr;n:Integer;Node:rabotnik);
Begin
writeln('Введите элемент');
Write('Введите ФИО сотрудника ');
Readln(Node.FIO);
Write('Введите год рождения сотрудника ');
Readln(Node.godroj);
Write('Введите пол сотрудника ');
Readln(Node.pol);
Write('Введите семейное положение сотрудника ');
Readln(Node.cem);
Write('Введите количество детей сотрудника ');
Readln(Node.koldet);
Write('Введите оклад сотрудника ');
Readln(Node.oklad);
n:=0;
New(Root);
while Root<>Nil do {========Здесь зацикливается=====}
if (Root^.data.FIO=Node.FIO) and (Root^.data.pol=Node.pol) and (Root^.data.cem=Node.cem) and
(Root^.data.koldet=Node.koldet) and (Root^.data.oklad=Node.oklad) then
n:=n+1;
KolE(Root^.left,n,Node);
KolE(Root^.right,n,Node);
writeln('количество элементов равно',n);
End;

Здесь наверняка ещё куча ошибок, но помочь мне нужно только с while. Или подсказать, как исправить...
Эта процедура должна найти количество вхождений элемента в дерево. Элемент дерева--запись о сотруднике...Заранее спасибо!!
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Правильно зацикливается... Какое условие задано, то и проверяется...
New(Root);
while Root<>Nil do ...

будет выполняться до тех пор, пока программа не прервется из-за невозможности выделить память по New...

Когда используется рекурсия ВСЕГДА нужно описывать условия ее прекращения. Вот ты сначала сформулируй, когда ты хочешь, чтобы рекурсия прекращалась, и мы тебе поможем это исправить...

P.S. Никакого количества элементов дерева считаться не будет, ибо все то, как ты изменишь N внутри более "глубокой" рекурсии будет неизвестно в более "мелкой"... Используй Var хотя бы...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
-Катюшка-   бинарное дерево   1.05.2006 17:45
volvo   Правильно зацикливается... Какое условие задано, т…   1.05.2006 18:05
-Катюшка-   Получается, что процедура делает обход дерева слев…   1.05.2006 19:21
volvo   Телепаты на другом форуме. Ты не привела даже опис…   1.05.2006 19:29
Гость   Вот структура Type rabotnik=record number:int…   1.05.2006 19:44
-Катюшка-   А если вот так написать? Procedure KolE(Root:TreeP…   1.05.2006 21:01
lapp   Катюшка, ты сначала сама разберись в алгоритме. У…   2.05.2006 14:50
Гость   Значит так. Нужно написать рекурсивную процедуру и…   4.05.2006 23:31
volvo   Procedure Count_E(Root:TreePtr; Var n:Integer; E:r…   4.05.2006 23:53
-Катюшка-   Inc(n)-- это увеличение n на единицу, да? Объяснит…   5.05.2006 0:46
-Катюшка-   program TreeProcess; Uses Crt; Type rabotnik=re…   5.05.2006 1:25
-Катюшка-   Всё увидела и исправила)) ... Procedure Count_E(R…   5.05.2006 1:32
volvo   -Катюшка-, ну сколько раз говорить? Ты должна снач…   5.05.2006 2:39
-Катюшка-   Всё равно не считает количество этих элементов…   5.05.2006 3:01
Гость   Я для поиска ввожу всё--ФИО, оклад и тд. Все поля,…   5.05.2006 3:12
Гость   Когда я делала отладку программы, оказалось, что в…   5.05.2006 3:33
volvo   Рассказать, почему? Ты очень сильно путаешься при…   5.05.2006 4:18
-Катюшка-   Всё вышло!!!!!!!!…   5.05.2006 4:34


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 2:55
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name