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

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

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

> Задача на стек и дек.
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
тобиш по суди дожно выводится boris kor bob ksenia rita bob maria
Значит, так. Дерево создается неправильно, пересматривай алгоритм создания. Это минус. Плюс - в том, что оно-таки создается, и все итемы, прочитанные из файла в него попадают и благополучно выводятся на печать. Что я поменял (относительно программы из поста №18):

{ 1 - реализацию CreateNode }
Procedure CreateNode(temp : PTree; var root:PTree);
Begin
new(root); { !!! вот только в этом месте выделяем память под элемент !!! }

root^.head.stat := temp^.head.stat;
root^.head.name := temp^.head.name;
root^.head.data := temp^.head.data;
root^.left := nil;
root^.right := nil;
End;

{ 2 - процедура печати дерева теперь такая: }
procedure printKLP(root:PTree);

procedure print(level: integer; root:PTree);
begin
if root<>NIL then begin
writeln('':2*level, root^.head.name);
print(level+1, root^.left);
print(level+1, root^.right);
end;
end;

begin
clrscr;
if (root=NIL) then writeln('Дерево пусто!')
else Print(0, root);

writeln;
writeln('Нажмите любую клавишу для выхода в главное меню');
end;

{ 3 - ну, и само создание дерева: }
Procedure CreateTree(var root: PTree; var fin : text);
var
temp : PTree;
begin
while not eof(fin) do begin
new(temp); { <--- Временное хранилище: создали ... }
readfile(fin,temp^.head.stat); { читаем stat }
readfile(fin,temp^.head.name); { читаем имя }
read(fin,temp^.head.data); { читаем дату рождения }
readln(fin); { все остальное - пропускаем !!! }
AddItem(root,temp); { и добавляем прочитанное в дерево }
dispose(temp); { <--- Временное хранилище: удалили}
end;
end;

Хотя я бы процедуру CreateTree и AddItem переписал. Зачем создавать и удалять временный буфер, если можно прочесть данные в строки и число, и передавать их в AddItem... Хотя с другой стороны, тогда придется тянуть все параметры по многим подпрограммам, можешь оставить как есть...

Теперь о твоем многострадальном Деке + Стеке. Оно работает, выдает корректный результат. Все было бы хорошо, если бы не утечки памяти. Ты не чистишь память за собой, это плохо, и преподаватели (хорошие преподаватели) знают, как это проверяется. А для себя - это еще хуже. Привыкаешь работать, "не убирая мусор" за собой - потом при программировании под Win получаешь на пустом, казалось бы, месте ошибки типа "не хватает памяти для ресурсов", или что-нибудь в таком роде. А памяти-то гигабайты. И все равно, все очень быстро забрасывается мусором. Привыкай прямо сейчас: память выделил - значит надо вернуть.
 К началу страницы 
+ Ответить 

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


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

 





- Текстовая версия 10.09.2025 20:32
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name