![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
-Катюшка- |
![]() ![]()
Сообщение
#1
|
Гость ![]() |
Помогите плиз!!Я не знаю, как исправить...
Procedure KolE(Root:TreePtr;n:Integer;Node:rabotnik); Здесь наверняка ещё куча ошибок, но помочь мне нужно только с while. Или подсказать, как исправить... Эта процедура должна найти количество вхождений элемента в дерево. Элемент дерева--запись о сотруднике...Заранее спасибо!! |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Правильно зацикливается... Какое условие задано, то и проверяется...
New(Root); будет выполняться до тех пор, пока программа не прервется из-за невозможности выделить память по New... Когда используется рекурсия ВСЕГДА нужно описывать условия ее прекращения. Вот ты сначала сформулируй, когда ты хочешь, чтобы рекурсия прекращалась, и мы тебе поможем это исправить... P.S. Никакого количества элементов дерева считаться не будет, ибо все то, как ты изменишь N внутри более "глубокой" рекурсии будет неизвестно в более "мелкой"... Используй Var хотя бы... |
-Катюшка- |
![]()
Сообщение
#3
|
Гость ![]() |
Получается, что процедура делает обход дерева слева направо, параллельно сравнивая каждый элемент дерева. Так? Сравниваем эл-т дерева с введённым, пока указатель не станет равным nil. Логика хоть правильная у меня?
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Телепаты на другом форуме. Ты не привела даже описания структуры, с которой работаешь. Что ты хочешь, чтобы тебе сказали? Что ошибка в 17-ой строке?
Ну, сделала ты New(Root)... А как Node с этим самым Root-ом связан? Как данные в Root^.Data появляются? Ты же ничего туда не заносишь... P.S. Вопрос об условии завершения рекурсии ты, я так понял, игнорируешь? Как знаешь... Только не удивляйся потом, что тебе ТОЖЕ не отвечают на те вопросы, которые ты задаешь... |
Гость |
![]()
Сообщение
#5
|
Гость ![]() |
Вот структура
Type Данные берутся из предварительно подготовленного файла. А условие завершения рекурсии, это вероятно root=nil. |
-Катюшка- |
![]()
Сообщение
#6
|
Гость ![]() |
А если вот так написать?
Procedure KolE(Root:TreePtr;n:Integer;Node:rabotnik); Вот только при отладке программы в root^.data.FIO(и остальные данные о сотруднике) абсолютно не похожи на правду...написан какой-то бред.ПОЧЕМУ?? |
Lapp |
![]()
Сообщение
#7
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Катюшка, ты сначала сама разберись в алгоритме. У тебя есть логические ошибки. Например, переменная n передается в функцию (не описана как var), и при этом сразу зануляется..
И опиши подробнее задачу. И нам поможет, и тебе. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гость |
![]()
Сообщение
#8
|
Гость ![]() |
Значит так. Нужно написать рекурсивную процедуру или функцию, подсчитывающую количество вхождений элемента Е в бинарное дерево. Элемент Е вводится с клавиатуры. Вроде бы лего(наверняка легко), но не могу сделать эту задачку. Не получается...
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Procedure Count_E(Root:TreePtr; Var n:Integer; E:rabotnik); Распечатывать результат тоже не нужно прямо внутри процедуры... Делай это после ее вызова... Если дерево у тебя будет сформировано правильно (на форуме уже есть по крайней мере 10 реализаций построения бинарного дерева, ищи...) - то вышеприведенная процедура должна работать... |
-Катюшка- |
![]() ![]()
Сообщение
#10
|
Гость ![]() |
Inc(n)-- это увеличение n на единицу, да?
Объясните мне пожалуйста, а почему вводить данные не нужно? Ведь надо выбрать какой-то элемент дерева, кол-во которого будем определять. |
-Катюшка- |
![]() ![]()
Сообщение
#11
|
Гость ![]() |
Вот, что я наделала... (Показать/Скрыть)
|
-Катюшка- |
![]() ![]()
Сообщение
#12
|
Гость ![]() |
Всё увидела и исправила))
... Но всё равно не работает!!!!!!!!!!!!!!!!! ![]() |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
-Катюшка-, ну сколько раз говорить? Ты должна сначала заполнить элемент для поиска, а уже потом - ИСКАТЬ его в дереве!!!
А ты что делаешь? На каждом шаге рекурсии заново заполняешь E? Смысл в чем? Procedure Count_E(Root:TreePtr;Var n:Integer;E:rabotnik); Цитата всё равно не работает! В чем это выражается? Зависает? Вылетает? Зацикливается?P.S. Файл данных можешь присоединить? И напиши, что именно ты вводишь для поиска... |
-Катюшка- |
![]()
Сообщение
#14
|
Гость ![]() |
Всё равно не считает количество этих элементов!!!!! Всё время выводит ноль...
![]() |
Гость |
![]()
Сообщение
#15
|
Гость ![]() |
Я для поиска ввожу всё--ФИО, оклад и тд. Все поля, что есть. А файл не присоединяется...
|
Гость |
![]()
Сообщение
#16
|
Гость ![]() |
Когда я делала отладку программы, оказалось, что в процедуре не сравниваются элементы дерева с вводимыми данными...
|
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Рассказать, почему?
Ты очень сильно путаешься при работе с глобальными и локальными переменными... А ведь это - основы... Посмотри то, что я присоединил. Эта программа отработала (без файла, мой вариант я закомментировал)... Прикрепленные файлы ![]() |
-Катюшка- |
![]()
Сообщение
#18
|
Гость ![]() |
Всё вышло!!!!!!!!!!!!!!!!! Спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
![]() |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 18:16 |