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

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

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

> Дерево в зеркальном отражении
Jekaterina
сообщение 29.12.2006 12:08
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 61
Пол: Женский
Реальное имя: Jekaterina Lauce

Репутация: -  0  +


Доброго всем утра!
Попалась задача: дано дерево, в узлах которого записаны неповторяющиеся числа. Задача: вывести в выходной файл зеркальное отражение дерева. При этом во входном файле дерево может быть записано двумя способами:1)в каждой строчке содержится информация об узле, не являющемся листом (внутренним узлом); либо 2) в записи первое число есть номер внутреннего узла, за которым выписаны дети в порядке с левой стороны в правую. Если, напр.б дан граф, как в пиложенном рисунке, то во входном файле запись его может быть и
1 2 3 4 5
3 6 7
5 8
8 9 10 11
и
5 8
3 6 7
8 9 10 11
1 2 3 4 5
В выходном файле граф выводистя подобным образом, но при условии, что внутренние узлы в порядке preoder (т.е. запись о родителе предшествует записи о ребенке). Я нашла решение задачи на с++, но очень плохо знаю этот язык. Если у кого-то будет время и желание, помогите, пожалуйста, перевести на паскаль эту программу. Прилагаю также тесты: из 8 тестов корректо выполняются 6.
Прикрепленное изображениеПрикрепленный файл  PD4.cpp ( 4.64 килобайт ) Кол-во скачиваний: 543
Прикрепленный файл  testiPD4.zip ( 2.69 килобайт ) Кол-во скачиваний: 352
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 30.12.2006 17:35
Сообщение #2


Гость






Ну, вот такой набросок попробуй использовать:
uses list;

function fill_list(var f: text): ptlist;

function get_num(var f: text): integer;
var
X: integer;
ch: char;
begin
get_num := -1;
if not seekeof(f) then begin

ch := #0; X := 0;
while not (ch in ['0'..'9']) do read(f, ch);

while (ch in ['0'..'9']) do begin
X := X * 10 + (Ord(ch) - Ord('0'));
read(f, ch);
end;
get_num := X
end;
end;

var
X, to_find: ttype;
curr_lst, unattended, main_start: ptlist;
up, upp, was_found: ptitem;
finished: boolean;

begin
unattended := new(ptlist, init);
while not seekeof(f) do begin

curr_lst := new(ptlist, init);
while not seekeoln(f) do begin

X := get_num(f);
if X > 0 then curr_lst.append(X);

end;
readln(f);

curr_lst.print;
if not curr_lst.empty then begin
unattended.append(curr_lst^.first^.info);
unattended^.last^.sublist := curr_lst;
end;

end;

up := unattended.first;
while up <> nil do begin

to_find := up^.sublist^.first^.info;
if to_find = 1 then main_start := up^.sublist
else begin

upp := unattended^.first;
finished := false;
while (upp <> nil) and (not finished) do begin

if upp^.sublist <> up^.sublist then begin
was_found := upp^.sublist^.find(to_find);
if was_found <> nil then finished := true
else upp := upp^.next;
end
else upp := upp^.next;

end;

if finished then begin
was_found^.sublist := up^.sublist;
end;

end;


up := up^.next;
end;
fill_list := main_start;
end;

var
f: text;
p: ptlist;
begin
assign(f, 'test_7.txt'); reset(f);
p := fill_list(f);
writeln('before invert');
p^.print;
p^.invert;
writeln('after invert');
p^.print;
end.
(вместо print - использовать процедуру записи в файл значений... После Invert в списке хранится зеркальная копия)...

Программа тестировалась и корректно отработала (под корректной работой имеется в виду "правильно отобразила инвертирование дерева") с тестовыми файлами №7 и №8...

"Развивайте мысль" (С) "Кролики"


Прикрепленные файлы
Прикрепленный файл  LIST.PAS ( 3.4 килобайт ) Кол-во скачиваний: 192
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Jekaterina   Дерево в зеркальном отражении   29.12.2006 12:08
volvo   Самый простой (на мой взгляд) вариант - работать Н...   29.12.2006 14:01
Jekaterina   Нужна помощь. У меня маленький опыт программирован...   29.12.2006 14:11
Jekaterina   :blink: :mega_chok:   29.12.2006 21:51
volvo   Ну, вот такой набросок попробуй использовать: uses...   30.12.2006 17:35
Jekaterina   Большое спасибо! Буду пробовать. С наступающим...   30.12.2006 20:16
volvo   :blink: Высокая температура сказывается... Приведе...   31.12.2006 0:08
Jekaterina   Уважаемый Volvo, спасибо! Будете смеяться над...   31.12.2006 20:28
Jekaterina   Может быть, все-таки эта задача решается без указ...   4.01.2007 1:52
Lapp   Может быть, все-таки эта задача решается без ука...   4.01.2007 10:00
volvo   Интересная история получается, тебе не кажется? ТЫ...   4.01.2007 9:52
volvo   Lapp, ты забыл Rewrite(f), будет ошибка №103 :blu...   4.01.2007 10:11
Lapp   Lapp, ты забыл Rewrite(f), будет ошибка №103 :bl...   4.01.2007 10:15
Jekaterina   :give_rose: Спасибо, буду изучать.   4.01.2007 10:31


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

 



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