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

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

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

> Бинарное дерево для работы с записями
сообщение
Сообщение #1


Гость






Условие:
Автоматезированная инфомационная система система на железнодорожном вокзале содержит сведения от отправлении поездов дальнего следования. Данные в информационной системе организованы в виде двоичного дерева.
Для каждого поезда указывают:
1)номер поезда
2)Станцию назначения
3)Время отправления
Написать программу которая:
1) обеспечивает первоначальный ввод данных в информационную систему и формирование двоичного дерева.
2) Производит вывод всего дерева (и как это сделать?)
3) Вводит название станции назначения и выводит данные обо всех поездах, следующих до этой станции.
Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе (аналогично 2, ну по крайней мере относительно контроля ошибок) blum.gif

Ну первый пункт он у меня вроде как выполняет и по станции сортирует, только вот когда речь заходит о нескольких поездах идуших до одной станции, вместо того чтобы вывести их всех, он выводит только один mega_chok.gif blum.gif И как же с этим быть?
Цитата
Program Derevo;
Uses Crt;
Type
St12 = string[12];
Pstruct = ^Struct;
Struct = Record
Nz : 57..90;
Stancia : St12;
Vremia : integer;
Left, Right : Pstruct;
end;
Const c : array[1..7] of String = ('Сведенья о поездах',
'ЪДДДДДДДВДДДДДДДДДДДДДВДДДДДДДДДДДДДї',
'і Номер і Станция і Время і',
'і поезда і назначения і отправления і',
& #39;ГДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
',
& #39;ГДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
',
& #39;АДДДДДДДДБДДДДДДДДДДДДДБДДДДДДДДДДДДДЩ
');

Var Tree : Pstruct;
F2, F1 :TEXT;

{-------Вывод данных одной строки таблицы----------}
Procedure P(Z:STRUCT);
Begin
Writeln(F1,#179, Z.Nz:5,#179:4,' ',Z.Stancia,#179:13-length(Z.Stancia),' ', Z.Vremia:5,#179:8,' ');
Writeln(#179, Z.Nz:5,#179:4,' ',Z.Stancia,#179:13-length(Z.Stancia),' ', Z.Vremia:5,#179:8,' ');
end;
{-------------Вывод шапки таблицы----------}
Procedure Shapka;
Var
i : Byte;
Begin
For i := 1 to 5 do
Writeln (C[i]);
End;
{-------------Удаление пробелов в начале и в конце строки----------}
Function Filtr (Str:St12):St12;
var
i,j,l:integer;
Begin
l:=length(Str);
For i:=1 to l do
if Str[i]<>' ' then
For j:=l downto i do
If Str[j] <> ' ' then
begin
Filtr:=copy (Str,i,j-i+1);
Exit
End;
Filtr:='';
end;
{-------------Включение нового элимента в дерево----------}
Procedure Form (Var TR:Pstruct; z:struct);
Begin
If TR = Nil Then
Begin new(TR);
TR^ :=Z;
End
Else
If z.Stancia < TR^.Stancia Then Form(TR^.Left,z)
Else
Form(TR^.Right,z);
End;
{-------------Ввод всех записей в дерево----------}
Procedure Vvod (NF: String);
Var
z: Struct;
b: Char;
Begin
Assign(F2, NF);
Reset (F2);
Writeln (F1,'Заполнение дерева новыми записями');
Shapka;
While not Seekeof(F2) DO
With z do
Begin
Readln(F2,Nz,b,Stancia,b,Vremia);
Stancia:=Filtr(Stancia);
Left :=Nil;
Right:=Nil;
P(z);
Form(Tree,z)
End;
Close(F2);
End;
{-------Обход дерева для вывода сортировочных данных дерева----------}
Procedure Sort(TR:Pstruct);
Begin
If TR<>Nil Then
Begin
Sort(TR^.Left);
P(TR^);
Sort(TR^.Right);
End;
End;
{-------Поиск по дереву----------}
Procedure Poisk_TR (TR: Pstruct; TFM : St12);
Begin
While TR<>Nil do
If TFM = TR^.Stancia Then
Begin
P(TR^);
Exit;
End
Else
If TFM < TR^.Stancia Then
TR:=TR^.Left
Else
TR:= TR^.Right;
Writeln (F1,'Станция введена не верно');
End;
{-------Поиск по дереву по заданному значению станции----------}
Procedure Poisk;
Var
TStancia : St12;
Begin
Assign(F2,'c:\TRPOI.DAT');
Reset (F2);
While not Seekeof(F2) do
Begin
Readln (F2,TStancia);
TStancia := Filtr (TStancia);
If TStancia = '' Then
Begin
Writeln(F1,'Нет станции для поиска');
Continue
End;
Writeln(F1,'Поиск',TStancia);
Poisk_TR(Tree,TStancia);
End;
End;
{-------Основная программа----------}
Begin
Clrscr;
Assign(F1,'c:\TR.Res');
Rewrite(F1);
Writeln(F1,'Создание дерева:');
Tree := Nil;
Vvod('c:\TR.DAT');
Writeln (F1,'Сортировка деревом:');
Shapka;
Sort(Tree);
Readln;
Poisk;
Close(F1);
end.


Сообщение отредактировано: Рэнэ -
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
А вообще я просто пыталась написать такое:
А вот этого делать нельзя... Целое число и строка - несовместимы... Делай еще одну процедуру:
Procedure Poisk_TR_num(TR: Pstruct; search_num: integer);
Begin
if TR <> nil Then Begin
If search_num = TR^.Nz Then P(TR^);

Poisk_TR_num(TR^.Left, search_num);
Poisk_TR_num(TR^.Right, search_num);
End;
End;

(поиск по всему дереву, потому что у тебя Nz - не ключевое поле...)
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





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