1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
В общем задача заключается в том что надо из текстового файла заполнить дек и взять последние "Б" элементов и записать их в стек.Суть вопроса заключается в том какую реализацию выбрать.первый скособ это создать процедуру котора берет элемент из дека и пишет в стек,а вторая уже выполняет первую до выполнения условия(достижение Б),либо сделать лиш одну процедуру,которая делает все сразу.
Не, стек и дек обязательно должны быть,это принципи и есть суть задания.а запись у меня с конца.
Procedure Create(var Deq : TDeq; var fin:text); var curr: PTDeqItem; ch : TData; begin reset(fin); while not seekeof(fin) do begin curr:= new(PTDeqItem); read(fin,ch); curr^.next := Deq.pStart; curr^.prev := nil; curr^.data :=ch; If Deq.pStart <> nil Then Deq.pStart^.prev := curr Else Deq.pFinish := curr;
Deq.pStart := curr; end; close(fin); end;
Ту тему я подотру,чтобы если кому пригодится,не засорять.потому что темы немножко разные,потом может еще появится третья тема в моем исполнении про деревья.
Добавлено через 19 часов: Как вам такая реализация?
var Deq : TDeq; Stack : TStack; v : integer; {Љ®«-ў® н«Ґ¬Ґв®ў § ЇЁблў Ґ¬лҐ ў б⥪} fin : text;
Procedure CreateDeque(var Deq : TDeque; var fin:text); var curr: PTDeqItem; ch : TData; begin reset(fin); while not seekeof(fin) do begin curr:= new(PTDeqItem); read(fin,ch); curr^.next := Deq.руфв; curr^.prev := nil; curr^.data :=ch; If Deq.руфв <> nil Then Deq.head^.prev := curr Else Deq.tail := curr;
Deq.head := curr; end; close(fin); end;
Procedure CreateStack(var Deq : TDeque; var fin:text;v:integer); var CurrDeq: PTDeqItem; CurrStack:PTStackItem; begin reset(fin); while CurrDeq<V do begin CurrDeq:= new(PTDeqItem); CurrStack:= new(PTStackItem); CurrDeq^.prev := Deq.tail; CurrDeq^.next := nil; CurrStack^.next := nil; СurrStack^.data :=СurrDeq^.data; If Deq.pStart <> V Then Stack^.next := curr; end; end;
Просьба сильно ботинками не бить)
Добавлено через 6 часов: Ну так кто нибуть может прокоментировать,прально ли я все делаю??
Добавлено через 30 минут: процедура создания стека пересмотрена,но все равно не работает.
Procedure CreateStack(var Deq : TDeque; var fin:text;v:integer); var CurrDeq: PTDeqItem; CurrStack:PTStackItem; begin reset(fin); while CurrDeq^.data<V do begin CurrDeq:= new(PTDeqItem); CurrStack:= new(PTStackItem); CurrDeq^.prev := Deq.tail; CurrDeq^.next := nil; CurrStack^.next := nil; CurrStack^.data :=CurrDeq^.data; If CurrDeq^.data<>V Then Stack^.data:= CurrStack^.data; Deq.tail:=Deq.tail^.prev; end;