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

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

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

> Задача на стек и дек.
Krjuger
сообщение 17.05.2009 16:54
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


В общем задача заключается в том что надо из текстового файла заполнить дек и взять последние "Б" элементов и записать их в стек.Суть вопроса заключается в том какую реализацию выбрать.первый скособ это создать процедуру котора берет элемент из дека и пишет в стек,а вторая уже выполняет первую до выполнения условия(достижение Б),либо сделать лиш одну процедуру,которая делает все сразу.

TElem = integer;
TStack = ^TElement;
TElement = record
info:TElem;
Next:TStack;
end;
TData = integer;
PTDeqItem = ^TDeqItem;
TDeqItem = record
Data: TData;
next, prev: PTDeqItem;
End;

TDeq = Record
pStart, pFinish: PTDeqItem;
End;


Вот описание стека и дека.Вопрос в том можно ли создать лиш одну буферную переменную или делать через две.каждого типа.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Krjuger
сообщение 17.05.2009 21:38
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Не, стек и дек обязательно должны быть,это принципи и есть суть задания.а запись у меня с конца.
 
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 часов:
Как вам такая реализация?

program laba10;
Uses CRT;
Type

TElem = integer;

PTStackItem = ^TStackItem;
TStackItem = record
Data: TElem;
Next: PTStackItem;
end;
TStack = PTStackItem;

PTDeqItem = ^TDeqItem;
TDeqItem = record
Data: TElem;
next, prev: PTDeqItem;
End;

TDeque = Record
head,tail: PTDeqItem;
End;

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;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Krjuger   Задача на стек и дек.   17.05.2009 16:54
volvo   Я уже задавал тебе этот вопрос, ты решил, что лучш...   17.05.2009 18:44
Krjuger   Не, стек и дек обязательно должны быть,это принцип...   17.05.2009 21:38
volvo   Нет, конечно... В смысле, неправильно. Сам же сказ...   18.05.2009 22:24
Krjuger   Могу удивить он компилируется в легкую.Так насчет ...   18.05.2009 22:28
volvo   Ты сказки-то будешь внукам рассказывать... Это ком...   18.05.2009 22:59
Krjuger   Вот полная прога.Теперь, вроде, стек заполняется ,...   19.05.2009 12:50
volvo   Если б работало так, как задумывал, может и пригод...   20.05.2009 17:38
Krjuger   Извини,с этим разделом я не знаком.Программа рабо...   20.05.2009 19:11
volvo   Ты файл test.txt наконец покажешь или нет? Я ж не ...   21.05.2009 18:29
Krjuger   Хорошо вот текстовый файл и оновленный вариант про...   21.05.2009 18:49
volvo   В результате ты хочешь получить вот такой результа...   21.05.2009 19:04
Krjuger   Вообще мне необходимо получить генеагогическое де...   21.05.2009 20:01
volvo   Значит, так. Дерево создается неправильно, пересма...   21.05.2009 20:26
Krjuger   В общем я почитал пяток другой факов и немного пер...   22.05.2009 15:42
volvo   Если , то дерево в принципе не будет заполняться, ...   22.05.2009 16:49
Krjuger   Да это мой косяк,добавить добавил а упомянуть об ...   22.05.2009 17:22
Krjuger   Вроде я понял о чем ты так усердно пытался мне ска...   22.05.2009 18:47
Krjuger   При этом,если сделать в процедуре Procedure AddS...   22.05.2009 19:24


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

 



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