Помощь - Поиск - Пользователи - Календарь
Полная версия: очередь для символов
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
kr3v3tkus
теперь вот сел за очередь ( та же задача http://forum.pascal.net.ru/index.php?showtopic=13227 ). Скатал готовый пасс ( тк своей башки на написание не хватит ), но как всегда пока переделывал чёто левое наворотил, проверьте пожалста. Я его описал ...
uses
MyQueue;
var
l,p,t: TQueue;
... вот так, но при обращении к этим переменным (када точечку ставиш smile.gif ) пишет чёто типа не могу откомпилировать пас
volvo
У тебя сам myqueue.pas не компилируется, ибо ошибок много smile.gif

Так лучше?
volvo
Кстати, ты бы зашел сюда:
FAQ: ООП

Тут я выкладывал реализации всех основных ДСД (динамических структур данных) через Object-ы...
kr3v3tkus
ooops smile.gif оч лучше smile.gif
а в фак я защёл сразу, но чёт ваще через объект не понял () я даже не знаю что такое halt(102) smile.gif кста там гдето и вытянул эту очередь smile.gif мнеб тут бы разобраться - вот у нас процедура пуш
Код
Procedure TQueue.Push(var q:TQueue; e: Char);
var z:Tlist;
begin
  new(z);
  z^.info:=E;
  z^.next:=nil;
  If Empty(q) then q.head:=z else q.tail^.next:=z;
  q.tail:=z
end;

вот например a.push(q,e) - e это наш символ, который мы передаём, а что такое q? у меня блин проблемы с описаниями и передачею всегда smile.gif
зы а с очередью всё ок? тоесть в хвост кладём голову вынимаем? а то в инструкции к модулю написано так
Цитата
Procedure OueuePush(var q:TQueue; e:TElem);
поместить в хвост

Function QueuePop(var q:TQueue):TElem;
извлечь из хвоста

или я чёт не догоняю? smile.gif
volvo
А у тебя, извини модуль нерабочий... Он только компилируется, а работать от этого лучше не станет... Зачем тебе вызывать метод объекта (ну, или класса, не столь важно), и в него же передавать сам экземпляр этого же класса? "Масло масляное"? Это было неудачно переведено с процедурной версии... В смысле, у тебя это и есть процедурная версия, я просто заставил твой модуль компилироваться...

Если тебе надо ООП (а судя по твоему модулю - надо, ибо TQueue определено как класс) - я дал ссылку. Там все нормально работает... Что за привычка - придраться к самым незначащим участкам кода, и не посмотреть, как реализовано все основное? Что тебе с этого Halt? Неужели по смыслу не ясно, что Halt просто прервет выполнение программы? В общем, как знаешь... Хочешь изобретать - изобретай...
kr3v3tkus
volvo ет я не придирался smile.gif я просто для примера сказал :D а ваще - задание сделать модуль для работы с очередью, я просто не догоняю как его написать и ета каша получилася потому что я пытался делать по примеру модуля стэка который препод давал sad.gif
если можно то дай плз ссылку smile.gif я не кулибин :D
kr3v3tkus
упс пардон smile.gif я думал ты сказал дам а не дал smile.gif
кароче чёт сложно для меня sad.gif) я вощем такую фигню накатал, вроде катит
Код
unit MyQueue;

interface

type
PNode = ^Node;
Node = record
     Info:Char;
     Next:PNode;
end;
TQueue = class
   private
     head,tail:PNode;
   public
     function Empty:Boolean;
     procedure Push (Value:Char);
     procedure Pop (var Value:Char);
     constructor Create;
     destructor Destroy; override;
end;

implementation

constructor TQueue.Create;
begin
   inherited;
   head:=nil;
   tail:=nil;
end;

destructor TQueue.Destroy;
var Value:Char;
begin
   while (not Empty) do Pop (Value);
   inherited;
end;

function TQueue.Empty:Boolean;
begin
   Empty := not assigned(head);
end;

procedure TQueue.Push (Value:Char);
var P:PNode;
begin
   new(P);
   p^.info:=value;
   p^.next:=nil;
   if empty then head:=p
   else tail^.next := p;
   tail:=p;
end;

procedure TQueue.Pop (var Value:Char);
var P:PNode;
begin
   if not Empty then
     begin
       value:=head^.info;
       p:=head;
       head:=p^.next;
       if head=nil then tail:=nil;
       dispose(p);
     end;
end;

end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.