Показать сообщение отдельно
  #29  
Старый 25.02.2014, 10:39
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 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.
Посмотрите если не трудно.
Ответить с цитированием