Автор: InFuz 29.4.2010, 15:34
Задание: Создать объект - однонаправленный список L1 без головного элемента.
Добавить в стандартный набор объекта ваш метод согласно варианту.
Задание варианта: Если среди первых трех элементов есть два равных, то удалить первый из них, иначе вставить в начало списка сумму трех элементов. Напечатать эти элементы.
Не разобрался как работают указатели. Стандартные методы нам дали на лекциях осталось только свой метод сделать.
Код
program Spisok;
uses Crt;
type Inf=integer;
const Zero:Inf=0;
type ptr=^EL;
EL=record
Dn:Inf;
Nx:ptr;
end;
List = Object
private p:ptr;
public
constructor Init;
function Empty:boolean;
procedure MyMethod;
procedure AddHead(D:Inf);
procedure AddEnd(D:inf);
destructor Done;
procedure Print;
end;
{--------------------------------------------------------------}
constructor List.Init; begin p:=nil end;
function List.Empty:boolean; begin Empty:=p=nil end;
procedure List.MyMethod;
var q:prt;
begin
end;
procedure List.AddHead(D:Inf); var q:ptr;
begin new(q); q^.Dn:=D; q^.Nx:=p; p:=q; end;
procedure List.AddEnd(D:inf); var q,t:ptr;
begin new(q); q^.Dn:=D; q^.Nx:=nil;
if p=nil
then p:=q
else begin t:=p;
while t^.Nx<>nil do t:=t^.Nx;
t^.Nx:=q;
end;
end;
destructor List.Done;
var q:ptr;
begin
while not Empty do
begin q:=p; p:=q^.Nx; dispose(q) end;
end;
procedure List.Print;
var q:Ptr;
begin
if p=nil
then write('->|')
else begin q:=p;
while q<>nil do
begin write(q^.Dn:3,' ');q:=q^.Nx end;
end;
writeln;
end;
{--------------------------------------------------------}
var L1:List; n,i,k:longint;
BEGIN
ClrScr; TextColor(10);
writeln;
writeln('Mem Before = ',MemAvail); TextColor(15);
write('Vvedite dliny spiska: n = ');
readln(n);
L1.Init; {randomize;}
for i:=1 to n do
L1.AddEnd (100 - random(100));
L1.Print;
{if n<3 then begin writeln('Malo elementov')
else begin
L1.MyMethod;
L1.Print;
end;}
L1.Done; TextColor(10);
writeln('Mem After = ',MemAvail);
readln;
END.
Помогите хотя бы, как правильно записать сравнение первых 3 элементов
с помощью указателей, а дальше может сам тогда разберусь.
Автор: InFuz 12.5.2010, 16:14
Все убейте тему, сам разобрался.