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

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

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

> Бинарное дерево для работы с записями
Рэнэ
сообщение 10.06.2007 5:08
Сообщение #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 = ('Сведенья о поездах',
'ЪДДДДДДДВДДДДДДДДДДДДДВДДДДДДДДДДДДДї',
'і Номер і Станция і Время і',
'і поезда і назначения і отправления і',
'ГДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ',
'ГДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ',
'АДДДДДДДДБДДДДДДДДДДДДДБДДДДДДДДДДДДДЩ');

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.


Сообщение отредактировано: Рэнэ - 10.06.2007 5:55
 К началу страницы 
+ Ответить 

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


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

 



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