
25.02.2014, 10:39
|
Прохожий
|
|
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
|
|
форумчане извините за надоедливость. Преподаватель ответил следующее: Поле FFirst используется для адресации первого объекта-страницы, поэтому метод GetFirst должен возвращать адрес этого объекта и иметь тип TPage.
Не получается у меня прописать поле FFirst. Может кто подскажет. Спасибо. Разработал последний класс. Тоже есть ошибки.
Код:
function TRam.AddSegment (const Segment: TSegment): integer;
var
i, j: integer;
begin
if GetCount =0 then
begin
Rise;
FRam[0]:= TSegment.Create(Segment);
Result:=0;
Exit;
end;
for i:=0 to GetCount -1 do
if FRam[i].GetNum= Segment then
begin
Result:=i;
Exit;
end;
if Segment > FRam[GetCount-1].GetNum then
begin
Rise;
FRam[GetCount-1]:=TSegment.Create(Segment);
Result:=GetCount-1;
Exit;
end;
for i:= 0 to GetCount -1 do
if FRam[i].GetNum > Segment then
begin
for j:= GetCount-1 downto i+1 do
FRam[j]:=FRam[j-1];
FRam[i]:= TSegment.Create(Segment);
Result:=i;
Exit;
end;
Result:=-1;
end;
procedure TRam.Reset;
var
i: integer;
begin
for i:=0 to GetCount -1 do
FRam[i].Free;
SetLength(FRam,0);
end;
constructor TRam.Create (ACount: integer);
begin
inherited Create;
SetLength(FRam,ACount);
FCount:=0;
end;
function TRam.DelSegment (TSegment: integer): integer;
var
i,j: integer;
temp: TSegment;
begin
Result:=0;
for i:=0 to GetCount-1 do
if FRam[i].GetNum = TSegment then
begin
temp:= FRam[i];
for j:=i to GetCount -2 do
FRam[j]:= FRam[j+1];
Dec(FCount);
if FCount< Length(FRam) div 2 then
SetLength(FRam,FCount);
temp.Free;
Result:= TSegment;
Exit;
end;
end;
destructor TRam.Destroy;
begin
SetLength(FRam,0);
inherited Destroy;
end;
procedure TRam.Rise;
Inc(FCount);
if GetCount > Length(FRam) then
begin
if Length(FRam) <= 0 then SetLength(FRam,FCount)
else SetLength(FRam,(FRam)*2);
end;
end;
procedure TRam.SetCount (ACount: integer);
begin
FCount:=ACount;
end;
procedure TRam.LoadFile (const FileName: string);
var
f: TextFile;
s,st,st2,st3,name: string;
i,cop,j,g: integer;
Shelf: TSegment;
Page: TPage;
flag: Boolean;
begin
AssignFile(f,FileName);
Reset(f);
while not Eof(f) do
begin
Readln(f,s);
if s = ''then Continue;
i:= AddSegment(StrToint(s));
if i < 0 then Continue;
Shelf:= FRam[i];
while not Eof(f) do
begin
name:='';
flag:=false;
st3:='';
cop:=0;
Readln(f,s);
if s =''then Break;
for j:= 1 to Length(s) do
begin
st:= copy(s,j,1);
if st <> '*' then name:=name + st else begin flag:=true; break; end;
end;
if flag = true then begin // flag = True-
for g:= j+1 to Length(s) do
begin
st2:=copy(s,g,1);
st3:=st3+st2;
end; flag:=false end;
cop:=strtoint(st3);
Page:=TPage.Create(name,cop);
Shelf.AddTPage(Page);
end;
end;
CloseFile(f);
end;
procedure TRam.SaveFile (const FileName: string);
var
f: TextFile;
i: integer;
Element: TElement;
begin
AssignFile(f, FileName);
Rewrite (f);
for i := 0 to GetCount -1 do
begin
Writeln(f,FRam[i].GetNum);
Element := FRam[i].GetFirst;
While Assigned(Element) do
begin
Writeln(f,GetMemory.GetNumber, '*',Element.GetMemory.GetPriznak);
Element := Element.GetNext;
end;
Writeln(f);
end;
CloseFile(f);
end.
Посмотрите если не трудно.
|