1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
В общем задача заключается в том что надо из текстового файла заполнить дек и взять последние "Б" элементов и записать их в стек.Суть вопроса заключается в том какую реализацию выбрать.первый скособ это создать процедуру котора берет элемент из дека и пишет в стек,а вторая уже выполняет первую до выполнения условия(достижение Б),либо сделать лиш одну процедуру,которая делает все сразу.
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 curr:= new(PTDeqItem); 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;
Ну я надеюсь,хоть кто нибудь ответит,или только волво со мной мучаться будет..
Добавлено через 7 часов: Ауууу желающие помоч отзовитесь,у меня есть еще задачка на деревья,но пока я с этой недомараюсь,ту спрашивать не стану,ибо слишком жирно будет для меня)
Добавлено через 2 часа: Так же выношу на суд божий еще одно мое творение, которое нефига не рабоатет.В этот раз выдает ошибку 16 разрядной подсистемы дос,типа процессор обнарушил неизвестную инстукцию
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; Procedure CreateNode(n: PTree;var p:PTree); Begin p^.head.stat := n^.head.stat; p^.head.name := n^.head.name; p^.head.data := n^.head.data; p^.left := nil; p^.right := nil; End;
Procedure AddItem(Var root: PTree; X: PTree);
{ Функция, создающая новый лист дерева с заданным значением 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.
Добавлено через 16 часов: В общем по поводу первой задачи я ее сделал своими силами и она работает,только почему то она работает не так,как задумывал.Если кому надо:
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 curr:= new(PTDeqItem); 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;
Да по поводу задачи с деревьями,она еще в силе.Стоит ли создавать отделью тему или мне кто нибудь в этой поможет? Еще хотелось бы услышать коменрарии к момему способу реализации задачи на стек и дек.