Помощь - Поиск - Пользователи - Календарь
Полная версия: Создание класса очереди
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
forMator
Опять классы... unsure.gif
Задача: Нужно создать класс очереди.Программа ошибок не выдаёт, но у меня не получается ввести все n элементы, а вводится только первый.. Помогите пожалуйста разобраться с задачей!

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type pelement=^telement;
telement=record
data:integer;
next:pelement;
end;
tQueue=class
first,last:pelement;
size:integer;
constructor create;
destructor destroy;
override;
procedure add(x:integer);    //добавление элемента в очередь
procedure viv(Var x:integer);     //вывод
end;
constructor tqueue.create;   //метод создания пустой очереди
begin
inherited create;
last:=nil;
size:=0;
end;
destructor tqueue.destroy;//метод уничтожения очереди
Var tmp:pelement;
begin
while last<>Nil do
begin
tmp:=first^.next;
dispose(first);
end;
inherited destroy;
end;
procedure tqueue.add;
Var tmp:pelement;
begin
new(tmp);
tmp^.data:=x;
tmp^.next:=nil;
last:=tmp;
end;
procedure tqueue.viv;
Var tmp:pelement;
begin
if first=nil then writeln('ochered pusta') else begin
x:=first^.data;
tmp:=first;
first:=first^.next;
end;
end;
Var och:tqueue;
i,n,x:integer;
begin
  { TODO -oUser -cConsole Main : Insert code here }
  write('vvedi n=');readln(n);
 for i:=1 to n do begin
 write('vvedi x=');readln(x);
 och.add(x);
 end;
 och.viv(x);
 write('x=');readln(x);
  readln;
end.


мисс_граффити
на будущее: существует отдельный раздел Delphi
переношу тему туда

что касается основного вопроса...
procedure tqueue.add(x:integer);
Var tmp:pelement;
begin
new(tmp);
tmp^.data:=x;
tmp^.next:=nil;
if last<>nil then
  last^.next:=tmp
else
  first:=tmp;
last:=tmp;
end;


Var och:tqueue;
i,n,x:integer;
tmp:pelement;
begin
 och:=tQueue.create;
 write('vvedi n=');readln(n);
 for i:=1 to n do
   begin
   write('vvedi x=');readln(x);
   och.add(x);
   end;
 och.viv(x);
 tmp:=och.first;
 while tmp<>nil do
   begin
   Writeln(tmp^.data);
   tmp:=tmp^.next;
   end;
 readln;
end.


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