Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ очередь для символов

Автор: kr3v3tkus 7.11.2006 2:50

теперь вот сел за очередь ( та же задача http://forum.pascal.net.ru/index.php?showtopic=13227 ). Скатал готовый пасс ( тк своей башки на написание не хватит ), но как всегда пока переделывал чёто левое наворотил, проверьте пожалста. Я его описал ...
uses
MyQueue;
var
l,p,t: TQueue;
... вот так, но при обращении к этим переменным (када точечку ставиш smile.gif ) пишет чёто типа не могу откомпилировать пас


Прикрепленные файлы
Прикрепленный файл  MyQueue.pas ( 958 байт ) Кол-во скачиваний: 231

Автор: volvo 7.11.2006 3:08

У тебя сам myqueue.pas не компилируется, ибо ошибок много smile.gif

Так лучше?


Прикрепленные файлы
Прикрепленный файл  myqueue.pas ( 979 байт ) Кол-во скачиваний: 226

Автор: volvo 7.11.2006 4:06

Кстати, ты бы зашел сюда:
http://forum.pascal.net.ru/index.php?s=&showtopic=2085&view=findpost&p=38351

Тут я выкладывал реализации всех основных ДСД (динамических структур данных) через Object-ы...

Автор: kr3v3tkus 7.11.2006 4:24

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 7.11.2006 4:51

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

Если тебе надо ООП (а судя по твоему модулю - надо, ибо TQueue определено как класс) - я дал ссылку. Там все нормально работает... Что за привычка - придраться к самым незначащим участкам кода, и не посмотреть, как реализовано все основное? Что тебе с этого Halt? Неужели по смыслу не ясно, что Halt просто прервет выполнение программы? В общем, как знаешь... Хочешь изобретать - изобретай...

Автор: kr3v3tkus 7.11.2006 16:07

volvo ет я не придирался smile.gif я просто для примера сказал :D а ваще - задание сделать модуль для работы с очередью, я просто не догоняю как его написать и ета каша получилася потому что я пытался делать по примеру модуля стэка который препод давал sad.gif
если можно то дай плз ссылку smile.gif я не кулибин :D

Автор: kr3v3tkus 7.11.2006 23:07

упс пардон 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.