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

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

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

> Задача с деревом.
Timon
сообщение 26.07.2005 18:56
Сообщение #1


Гость






Добрый день.
Помогите, плиз. Дана вот такая задачка:

Текстовый файл содержит набор целых чисел. Прочитать его в память и сформировать бинарное дерево, содержащий номера элементов исходного массива, абсолютное значение которых является простым числом. Повторяющиеся значения в дерево не включать.
Порядок ввода исходных данных:
- имя файла с данными;
- файл с числами. Числа размещены в нескольких строках и отделены друг от друга пробелом или концом строки. Признаком окончания данных является конец файла.
Порядок вывода результатов:
- исходные данные;
- число элементов в дереве;
- элементы дерева в порядке убывания значений.

Сама программа, вроде бы не особо сложная, но как-то не получается не включать повторяющиеся значения. Помогите плиз.

И ещё, если не сложно, напишите вкрадце как вывести дерево в порядке убывания значений. Просто сдавать уже завтра и с отчётом, а надо ещё одну программу дописать.
Заранее спасибо.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
volvo
сообщение 26.07.2005 19:21
Сообщение #2


Гость






Цитата(Timon @ 26.07.05 18:56)
Сама программа, вроде бы не особо сложная, но как-то не получается не включать повторяющиеся значения. Помогите плиз.
Это еще почему? Перед занесением в дерево проверяй элемент на дублирование... Что-то в этом роде:
Var
arr: array[1 .. 20] of integer; { для примера }

Function DuplicateElement(index: integer): Boolean;
...
Begin
DuplicateElement := False;
For i := 1 To Pred(index) Do
If arr[i] = arr[index] Then Begin
DuplicateElement := True; Exit
End;
End;

...
For i := 1 To n Do
If not DuplicateElement(i) Then AddToTree(root, i);

Может быть можно и еще проще... ;)

Цитата(Timon @ 26.07.05 18:56)
И ещё, если не сложно, напишите вкрадце как вывести дерево в порядке убывания значений.
В порядке убывания каких значений? Индексов, или именно значений?
 К началу страницы 
+ Ответить 
Timon
сообщение 26.07.2005 19:28
Сообщение #3


Гость






За первое спасибо. Большое. Просто у меня, почему-то, выходил какой-то отстой.
Насчёт второго. Именно по величине именно значений. Индексы тут не ведутся.
 К началу страницы 
+ Ответить 
volvo
сообщение 26.07.2005 20:08
Сообщение #4


Гость






Тогда еще проще: в процедуре
AddToTree(p: ptree; val: integer);
заноси в дерево индексы, но сортируй не по значению Val, а по значению arr[Val], то есть примерно так:
procedure AddToTree(var root:PTree; val: integer);
var elem:PTree;
begin
if (root=Nil) then begin
{ создать новый лист (elem) и записать в него значение Val }
root := elem; { присоединить новый лист вместо пустого дерева }
end

else begin
if (arr[Val] < arr[root^.info]) { <--- Вот основная идея !!! }
then AddToTree(root^.left, Val)
else AddToTree(root^.right, Val);
end;
end;

Ну, а теперь для того, чтобы распечатать элементы в порядке убывания, достаточно просто пройти по дереву в таком порядке: Правое поддерево -> Левое поддерево -> Корень... И все... rolleyes.gif
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 21.06.2025 1:06
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"