1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 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;
Да по поводу задачи с деревьями,она еще в силе.Стоит ли создавать отделью тему или мне кто нибудь в этой поможет? Еще хотелось бы услышать коменрарии к момему способу реализации задачи на стек и дек.