1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
В общем задача заключается в том что надо из текстового файла заполнить дек и взять последние "Б" элементов и записать их в стек.Суть вопроса заключается в том какую реализацию выбрать.первый скособ это создать процедуру котора берет элемент из дека и пишет в стек,а вторая уже выполняет первую до выполнения условия(достижение Б),либо сделать лиш одну процедуру,которая делает все сразу.
Трудно ожидать от программы, вываливающейся по RTE 216 корректной работы...
Извини,с этим разделом я не знаком.Программа работает,просто когда я делал ,то я ожидал,что при записи в стек моя последовательность чисел опять перевернеться,а получилось что она выводит в том же порядке,что и записана в дек,но о этой причине я уже разобрался.
Цитата
ты только даешь всем советы, как делать правильно, а сам - непонятно что творишь...
Скажм так советы я даю в той области,которую понимаю.Разве мои советы не несут никакого смысла?и не могут помоч в решении.А эту область, по которой я задаю вопросы,я не очень понимаю,поэтому у меня и глупые ошибки.Поэтому и прошу выносить критику.
Цитата
Как оно ДОЛЖНО работать - это нам предстоит догадаться?
дерево должно заполниться из файла.
P.S.можно как нить помягче,а то такое ощущение,что ты на меня кричиш))))Что я полный дебил,и вообще нихрена не знаю.
А еще у меня вопрос.Почему,если из процедуры CreateStack я удалю reset(fin); То в этой строке мне выдает Division by zero.
Function IsEmpty(Var Deq: TDeque): Boolean; Begin isEmpty := (Deq.head = nil); End;
Procedure CreateDeq(var Deq : TDeque; var fin:text); var curr: PTDeqItem; ch : TElem; begin reset(fin); while not seekeof(fin) do begin new(curr); read(fin,ch); curr^.next := Deq.head; curr^.prev := nil; curr^.data :=ch; If Deq.head <> nil Then Deq.head^.prev := curr Else Deq.tail := curr;
Изменил.После того, как добавил new(CurrDeq); при удалении reset(fin); перестала выдаваться ошибка.Просьба обьяснить взаимосвязь.
И еще по поводу дерева..В приведенном ниже коде я пытаюсь создать деверо из информации,берущейся из текстового файла(Stat-пол мужчина-женщина,name-мня человека,Data-дата рождения данного человека)Сначала считываются пол,затем имя и в конце дата.печать чисто формальна,чтобы просто проверить заполнение дерева.
program laba11; Uses CRT; type DTree = record Data: integer; Name: string; stat: String; end;
PTree = ^TTree; TTree = record head : DTree; left,right: PTree; end; var fin:text; temp:PTree; root:PTree;
Function ReadFile(var fin: text; var str: string): boolean; var tmp: char; begin str:=''; repeat read(fin, tmp); if not (tmp = ' ') and not (tmp=';') then str:=str+tmp; until (tmp=' ') or eoln(fin) or (tmp=';'); case tmp of ' ': readFile:=true; else readFile:=false; end; end;
{ Функция, создающая новый лист дерева с заданным значением Data } var parent, pwalk: PTree;
Begin
if root = nil then CreateNode(X,root) else begin
{ Если дерево уже не пустое - тогда начинаем "прогулку" по нему... }
pWalk := root; { "гулять" начнем с корня } while pWalk <> nil do begin { пока не добрались до пустого указателя - делаем следующее }
parent := pWalk;
if pWalk^.head.stat='male' then pWalk := pWalk^.left else pWalk := pWalk^.right
end;
if x^.head.stat='male' then CreateNode(parent^.left,X) else CreateNode(parent^.right,X);
end;
End;
Procedure CreateTree(var root: PTree;var fin : text); var temp : PTree; begin readfile(fin,temp^.head.stat); readfile(fin,temp^.head.name); read(fin,temp^.head.data); temp^.Left := nil; temp^.Right := nil; root:=temp; while not eof(fin) do begin readfile(fin,temp^.head.stat); readfile(fin,temp^.head.name); read(fin,temp^.head.data); AddItem(root,temp); end; end;
procedure printKLP(root:PTree); begin if (root<>NIL) then (* Если дерево не пустое *) begin write(root^.head.name,' '); (* Распечатать корень дерево *) printKLP(root^.left); (* Распечатать левое поддерево *) printKLP(root^.right);(* Распечатать правое поддерево *) end; end;
procedure printKLP_wrapper(root:PTree); begin clrscr; if (root=NIL) then (* Если дерево пустое *) writeln('Дерево пусто!') (* Сообщить об этом *) else (* Иначе *) PrintKLP(root); (* Распечатать дерево *) writeln; writeln('Нажмите любую клавишу для выхода в главное меню'); readkey; end;
begin clrscr; chdir('C:\TPascal'); assign(fin,'test.txt'); reset(fin); CreateTree(root,fin); printKLP_wrapper(root); close(fin); end.
Добавлено через 18 часов: volvo,а мне тоже надо создавать отдельюную тему для дерева,или ты в этой поможеш.А то я вон смотрю,ты на многих ругаешся,когда по несколько задач в одной теме.И почему хоть и изредка,но я получаю ответ только от тебя,остальным впадлу чтоли читать код:)Или у вас есть какое то разделение по "сферам влияния".В общем жду ответов,вроде все твои коментарии я учел,если правильно их понял.Если что поправлясь.
Добавлено через 3 часа: В общем я немного пересмотрел программу с деревьями и получилось так.Ошибка про подсистему изчезла,но дерево все еще упорно не заполняется.
program laba11; Uses CRT; type DTree = record Data: integer; Name: string; stat: String; end;
PTree = ^TTree; TTree = record head : DTree; left,right: PTree; end; var fin:text; temp:PTree; root:PTree;
Procedure ReadFile(var fin: text; var str: string); var tmp: char; begin str:=''; repeat read(fin, tmp); if not (tmp = ' ') and not (tmp=';') then str:=str+tmp; until (tmp=' ') or eoln(fin) or (tmp=';'); end;
{ Функция, создающая новый лист дерева с заданным значением Data } var parent, pwalk: PTree;
Begin
if root = nil then CreateNode(temp,root) else begin
pWalk := root; { "гулять" начнем с корня } while pWalk <> nil do begin { пока не добрались до пустого указателя - делаем следующее }
parent := pWalk;
if pWalk^.head.stat='male' then pWalk := pWalk^.left else pWalk := pWalk^.right
end;
if temp^.head.stat='male' then CreateNode(temp,parent^.left) else CreateNode(temp,parent^.right);
end;
End;
Procedure CreateTree(var root: PTree;var fin : text); var temp : PTree; begin new(temp); new(root); while not eof(fin) do begin readfile(fin,temp^.head.stat); readfile(fin,temp^.head.name); read(fin,temp^.head.data); AddItem(root,temp); end; end;
procedure printKLP(root:PTree); begin if (root<>NIL) then (* Если дерево не пустое *) begin write(root^.head.name,' '); (* Распечатать корень дерево *) printKLP(root^.left); (* Распечатать левое поддерево *) printKLP(root^.right);(* Распечатать правое поддерево *) end; end;
procedure printKLP_wrapper(root:PTree); begin clrscr; if (root=NIL) then (* Если дерево пустое *) writeln('Дерево пусто!') (* Сообщить об этом *) else (* Иначе *) PrintKLP(root); (* Распечатать дерево *) writeln; writeln('Нажмите любую клавишу для выхода в главное меню'); end;
begin clrscr; chdir('C:\TPascal'); assign(fin,'test.txt'); reset(fin); CreateTree(root,fin); printKLP_wrapper(root); close(fin); readkey; end.