Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2014, 19:39   #1
Deman1986
Пользователь
 
Регистрация: 08.04.2013
Сообщений: 16
По умолчанию Перестановка элементов массива. Добавить процедуры и функции в класс

вот тема проекта "Объектная реализация контейнера на основе комбинированной структуры «Список-массив динамических стеков", я разработал классы, написал программный код.
Вот тема: "Организация основной памяти"
* информационные объекты: страницы оперативной памяти (свойства – Номер Страницы, Состояние)
* страницы объединяются в рамках объекта Сегмент (свойство – Размер Сегмента)
* сегменты объединяются в рамках объекта-контейнера Основная Память (свойство–тип ОС).
написал классы с реализацией:
Код:
 type
TPage = class(TObject)
private
	FNumber: integer;
	FPriznak: Boolean;
	public
Constructor Create (const Number: integer; Priznak: boolean);
	function GetNumber: integer;
	procedure SetNumber (const Value: integer);
	function GetPriznak: boolean;
	procedure SetPriznak (const Value: boolean);
end;
TElement=class(TObject)
private
	FMemory: TPage;
	FNext: TElement;
public
	constructor Create (const Memory: TPage);
	destructor Destroy; override;
	function GetNext: TElement;
	procedure SetNext (const Value: TElement);
	function GetMemory: TPage;
end;
TSegment = class(TObject)
private
	FFirst: TPage;
	FNum: integer;
	public
	constructor Create (const Num: integer);
	destructor Destroy; override;
	function GetFirst: TSegment;
	function GetNum: integer;
	procedure SetNum (const Value: integer);
	procedure AddTPage (const Page: TPage);
	function Delete: TPage;
	procedure ClearAll;
end;
TRam = class(TObject)
private
	FRam: Array of  TSegment;
	FCount: integer;
public
	constructor Create (ACount: integer);
	destructor Destroy; override;
	procedure SetCount (ACount: integer);
	function AddSegment (const Segment: TSegment): integer;
	function DelSegment (TSegment: integer): integer;
	Procedure SaveFile (const FileName: string);
  Procedure LoadFile (const FileName: string);
	procedure Reset;
end;
implementation
{$R *.dfm}
//******************TPage************************************************
constructor TPage.Create (const Number: integer; Priznak: boolean);
begin
  inherited Create;
    FNumber := Number;
      FPriznak:= true;
end;
function TPage.GetNumber:  integer;
begin
  Result := FNumber;
end;
function TPage.GetPriznak:  boolean;
begin
  Result := FPriznak;
end;
procedure TPage.SetNumber (const Value: integer);
begin
  FNumber := Value;
end;
procedure TPage.SetPriznak (const Value: boolean);
begin
  FPriznak := Value;
end;
//*****************TElement**********************************************
constructor TElement.Create (const Memory: TPage);
begin
  inherited Create;
    FMemory := Memory;
     FNext := nil;
end;
destructor TElement.Destroy;
begin
  FMemory.Free;
    Inherited Destroy;
end;
function TElement.GetNext: TElement;
begin;
  Result := FNext;
end;
function TElement.GetMemory: TPage;
begin
  Result := FMemory;
end;
procedure TElement.SetNext (const Value: TElement);
begin
  FNext := Value;
end;

Последний раз редактировалось Deman1986; 08.02.2014 в 19:42.
Deman1986 вне форума Ответить с цитированием
Старый 08.02.2014, 19:39   #2
Deman1986
Пользователь
 
Регистрация: 08.04.2013
Сообщений: 16
По умолчанию

Код:
//*************TSegment**************************************************
constructor TSegment.Create (const Num: integer);
begin
  inherited Create;
    FNum :=  Num;
      FFirst := nil;
end;
destructor TSegment.Destroy;
begin
  Inherited Destroy;
end;
procedure AddTPage (const Page: TPage);
var
  New: TElement;
begin
  New := TElement.Create(Page);
    New.SetNext (FFirst);
      FFirst := New;
end;
procedure TSegment.ClearAll;
var
  Temp: TElement;
begin
  while Assigned(FFirst) do
begin
  Temp := FFirst;
    FFirst := FFirst.GetNext;
      Temp.Free;
end;
  FFirst := nil;
end;
function TSegment.GetFirst: TSegment;
begin
  Result := GetFirst;
end;
function TSegment.GetNum: integer;
begin
  Result := FNum;
end;
function TSegment.Delete: TPage;
var
  Temp: TElement;
begin
  Result:=nil;
    if not Assigned(FFirst) then Exit;
      Temp := FFirst;
        FFirst := FFirst.GetNext;
          Result := Temp;
            Temp.Free;
end;
procedure TSegment.SetNum (const Value: integer);
begin
  FNum := Value;
end;
//*****************TRam*************************************************
function TRam.AddSegment (const Segment: TSegment): integer;
var
  i, j: integer;
begin
  if GetCount =0 then
  begin
    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
  FRam[CetCount-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.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 < o 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;
end.
подскажите пожалуйста по реализации кода, не могу разобраться с классом TSegment в строке:
Код:
FFirst := nil;
не знаю что прописать.

Последний раз редактировалось Deman1986; 08.02.2014 в 19:41.
Deman1986 вне форума Ответить с цитированием
Старый 25.02.2014, 21:19   #3
калоша
Новичок
Джуниор
 
Регистрация: 25.02.2014
Сообщений: 1
По умолчанию

а текст проекта есть ?)
калоша вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перестановка элементов массива eduard93 Помощь студентам 3 15.12.2011 18:52
перестановка элементов массива Darknes Общие вопросы C/C++ 1 03.10.2010 19:21
перестановка элементов массива. DiLemma Помощь студентам 2 29.04.2010 23:08
Вставка, объединение, перестановка элементов массива. Vadim123456 Помощь студентам 4 07.02.2010 16:45