Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 20.11.2013, 10:46
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Сорри торопился
Код:
класс TRam
type
	TRam = class(TObject)
private
// поля
	FRam: Array of  TSegment; // динамический массив 
	FCount: integer; // приватное поле, количество сегментов
public
// конструкторы и деструкторы
	constructor Create (ACount: integer);  // инициализация
	destructor Destroy; override;
// методы
	procedure SetCount (ACount: integer); // установка количества элементов
	procedure Reset; // обнуление данных
       function WinInfo(Root_Key: HKEY; Key_Open, Key_Read: string): string;
end;

Уважаемые форумчане я наверное вас уже замучал. Вот что ответил мне преподаватель.
Из всех классов правильно описан только класс TPage.
Класс TSegment в принципе имеет неправильное описание, т.к. по заданию у вас сегменты реализуются как контейнеры страниц на основе ДИНАМИЧЕСКОЙ, АДРЕСНОЙ реализации, а не на основе массива! Кроме того, не объявлены методы добавления и удаления.
Аналогично, в классе TRam нет методов добавления в список, удаления из списка и поиска сегмента.
вот еще раз всё классы:
Код:
класс TSegment
type
	TSegment = class(TObject)
private
// поля
	FPages: Array of TPage; // массив
	function GetCount: integer;
	function GetPage (Index: integer): TPage; 
	public
// конструкторы и деструкторы
	constructor Create (ACount: integer); virtual; // инициализация
	destructor Destroy; override; // уничтожение
// свойства
	property Count: integer read GetCount;
	property Pages[Index: integer]: TPage read GetPage;
// методы
	procedure ClearAll;
end;

Код:
класс TRam
type
	TRam = class(TObject)
private
// поля
	FRam: Array of  TSegment; // динамический массив 
	FCount: integer; // приватное поле, количество сегментов
public
// конструкторы и деструкторы
	constructor Create (ACount: integer);  // инициализация
	destructor Destroy; override;
// методы
	procedure SetCount (ACount: integer); // установка количества элементов
	procedure Reset; // обнуление данных
        function WinInfo(Root_Key: HKEY; Key_Open, Key_Read: string): string;
end;
Помогите пожалуйста я уже не знаю что хочет преподаватель. Спасибо за помощь

Последний раз редактировалось M.A.D.M.A.N., 23.11.2013 в 20:02.
Ответить с цитированием
  #17  
Старый 27.11.2013, 12:41
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Описал класс TRam вот так:
Код:
класс TRam
type
	TRam = class(TObject)
private
// поля
	FRam: Array of  TSegment; // динамический массив 
	FCount: integer; // приватное поле, количество сегментов
public
// конструкторы и деструкторы
	constructor Create (ACount: integer);  // инициализация
	destructor Destroy; override;
// методы
	procedure SetCount (ACount: integer); // установка количества элементов
	procedure AddSegment () // добавление элементов в список
	procedure DeleteSegment () // удаление элементов из списка
	procedure Search () // поиск сегмента
	procedure Reset; // обнуление данных
        function WinInfo(Root_Key: HKEY; Key_Open, Key_Read: string): string;
end;
подскажите пожалуйста какие переменные использовать вот тут:
Код:
procedure AddSegment () // добавление элементов в список
	procedure DeleteSegment () // удаление элементов из списка
	procedure Search () // поиск сегмента
Ответить с цитированием
  #18  
Старый 24.12.2013, 22:19
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Форумчане преподаватель принял классы и я сделал реализацию (программную), подскажите пожалуйста по классу TRam вот весь код:
Код:
unit MeineClasse;
interface
uses
SysUnits;

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);
	procedure DelFirst: 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;
	function BinarySearch (const Values: array of TSegment; const Item: integer;
  	out FoundIndex: Integer): Boolean;
Procedure SaveFile (const FileName: string);
	Procedure LoadFile (const FileName: string);
function WinInfo(Root_Key: HKEY; Key_Open, Key_Read: string): string;
	procedure Reset;
end;

implementation
//******************TPage************************************************
constructor TPage.Create (const Number: integer; Priznak: boolean);
begin
inherited Create;	// при создании сразу инициализируем поля объекта
FNumber := Number;
FPriznak:= Boolean;
end;
function TPage.GetNumber:  integer;
begin
Result :=  FPriznak;
end;
function TPage.GetPriznak:  boolean;
begin
Result := FPriznak;
end;
procedure TPage.SetNumber (const Value: integer);
begin
FName := Value;
end;
procedure TPage.SetPriznak (const Value: boolean);
begin
FPriznak := Value;
end;
//*****************TElement**********************************************
constructor TElement.Create (const Memory: TPage);
begin
inherited Create;
FNext := nil;
FMemory := Page;
end;
destructor TElement.Destroy;
begin
FPage.Free;
Inherited Destroy;
end;
function TElement.GetNext: TElement;
begin;
Result := FNext;
end;
function TElement.GetMemory: TPage;
begin
Result := FPage;
end;
procedure TElement.SetNext (const Value: TElement);
begin
FNext := Value;
end;
//*************TSegment**************************************************
constructor TSegment.Create (const Num: integer);
begin
inherited Create;
FFirst := TPage;
FNum := nil;
end;
destructor TSegment.Destroy;
begin
Clear;
Inherited Destroy;
end;
procedure AddTPage (const Page: TPage);
var
New: TElement;
begin
New := TElement.Create(Page); // Создаём новый элемент, присваиваем его переменной New 
New.SetNext(FFirst); // Ссылка на следующий элемент = голова стека
FFirst := New; // Голова стека = новый элемент
end;
procedure TSegment.ClearAll;
var
Temp: TElement;
begin
while Assigned(FFirst) do // Пока голова стека не nul, то
begin
Temp := FFirst; // Временный элемент = голова стека
FFirst := FFirst.GetNext; // Голова стека = следующий элемент
Temp.Free; // Уничтожаем временный элемент (цикл проходит по стеку и при каждой итерации удаляет элемент)
end;
FFirst := nil;
end;
function TSegment.GetFirst: TSegment;
begin
Result := FFirst;
end;
function TSegment.GetNum: integer;
begin
Result := FNum;
end;
procedure TSegment.DelFirst: TPage;
var
Temp: TElement;
begin
Result:=nil;
if not Assigned(FFirst) then Exit; // Если голова стека = nul, то выходим из процедуры
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
…….
function TRam.BinarySearch (const Values: array of TSegment; const Item: integer; out FoundIndex: Integer): boolean;
var
  L, H: Integer;
  mid, Index, Count : Integer;
begin
  Index := Low(Values);
  Count := Length(Values);
 
  if (Index < Low(Values)) or ((Index > High(Values)) and (Count > 0))
    or (Index + Count - 1 > High(Values)) or (Count < 0)
    or (Index + Count < 0) then
    raise Exception.Create('Argument out of range');
 
  Result := False;
 
  if Count = 0 then
  begin
    FoundIndex := Index;
    Exit;
  end;
 
  L := Index;
  H := Index + Count - 1;
  while L <= H do
  begin
    mid := L + (H - L) shr 1;
    if Values[mid] < Item then
      L := mid + 1
    else
    begin
      H := mid - 1;
      if Values[mid] = Item then
        Result := True;
    end;
  end;
  FoundIndex := L;
end;
function WinInfo(Root_Key: HKEY; Key_Open, Key_Read: string): string;
var
registry: TRegistry;
begin
// если WinNT, открываем другой ключ
If ((GetVersion and $80000000)=0) and (Key_Open=WinVers) then
Key_Open := `SOFTWARE\Microsoft\Windows NT\CurrentVersion`;
Registry := TRegistry.Create;
Try
Registry.RootKey := Root_Key;
Registry.OpenKey (Key_Open, False);
Result := Registry.ReadString (Key_Read);
Finally
Registry.Free;
end;
// если ничего не найдено, выводим «невозможно определить»
If Result <> EmptyStr then Result := Key_read+`: `+Result else Result := Key_read+`: невозможно определить`;
end;
function TRam.DelSegment (TSegment: integer): integer;
….
constructor TRam.Create (ACount: integer);
begin
P := nil;
count :=0;
SetCount (ACount);
end;
procedure TRam.SetCount (ACount: integer);
var
np : PArray;
begin
if count = ACount then
exit;
(память не была выделена)
If p = nil then
begin
(новое кол-во элементов в массиве равно 0)
If ACount <= 0 then
begin
count := 0;
end;
(новое кол-во элементов в массиве больше 0)
else
begin
(выделение памяти)
GetMem (p, ACount * sizeof(integer));
(обнуление данных)
fillchar (p^, ACount * sizeof(integer),0);
count := ACount;
end;
end;
else
begin
(новое кол-во элементов в массиве равно 0)
If Acount <=0 then
begin
(освобождение памяти)
FreeMem (p, count * sizeof(integer));
count := 0;
end;
else
begin
(выделение памяти)
GetMem (np, ACount * sizeof(integer));
(требуется увеличить кол-во элементов)
If ACount > count then
begin
(перемещение старых данных в новое место)
move (p^, np^, count * sizeof(integer));
(обнуление новых элементов массива)
fillchar (np^[count], (ACount-count) * sizeof(integer), 0);
end
else
begin
(перемещение старых данных на новое место)
move (p^, np^, count * sizeof(integer));
(обнуление новых элементов массива)
fillchar (np^[count], (ACount-count) * sizeof(integer), 0);
end
else
begin
(перемещение части старых данных на новое место)
move (p^, np^, ACount * sizeof(integer));
end;
(освобождение старо памяти)
FreeMem (p, count * sizeof(integer));
p := np;
count := ACount;
end;
end;
end; 
procedure TRam.Reset;
begin
fillchar (p^, count * sizeof(integer), 0);
end;
destructor TRam.Destroy;
begin
SetCount(0);
end;
procedure TRam.LoadFile (const FileName: string);
……..
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,………)
Element := Element.GetNext;
end;
Writeln(f);
end;
CloseFile(f);
end;
end.  
Спасибо огромное просто не могу реализовать никак.

Последний раз редактировалось Deman1986, 24.12.2013 в 22:22.
Ответить с цитированием
  #19  
Старый 16.01.2014, 15:25
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

форумчане компилятор ругается на реализацию класса TElement вот код программы.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
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 DelFirst: 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;
	function BinarySearch (const Values: array of TSegment; const Item: integer;
  	out FoundIndex: Integer): Boolean;
  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;
    FNext := nil;
      FMemory := Page;
end;
destructor TElement.Destroy;
begin
FPage.Free;
Inherited Destroy;
end;
function TElement.GetNext: TElement;
begin;
Result := FNext;
end;
function TElement.GetMemory: TPage;
begin
Result := FPage;
end;
procedure TElement.SetNext (const Value: TElement);
begin
FNext := Value;
end;
именно на эти строки подскажите по реализации
Код:
FMemory := Page;
Код:
FPage.Free;
Код:
Result := FPage;
У нас программистов в городе нет вообще приходится спрашивать тут на форуме. Спасибо

Последний раз редактировалось Deman1986, 16.01.2014 в 15:29.
Ответить с цитированием
  #20  
Старый 16.01.2014, 15:34
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Deman1986
форумчане компилятор ругается на реализацию класса TElement вот код программы.
.....
именно на эти строки подскажите по реализации
Код:
FMemory := Page;
Где объявлена переменная Page?
Ответить с цитированием
  #21  
Старый 16.01.2014, 15:44
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо за ответ, вот я тоже задался этим вопросом, где её лучше объявить, как глобальную переменную или же как локальную в конструкторе.
Ответить с цитированием
  #22  
Старый 16.01.2014, 16:57
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Deman1986
Спасибо за ответ, вот я тоже задался этим вопросом, где её лучше объявить, как глобальную переменную или же как локальную в конструкторе.
А она вообще зачем нужна?
Есть подозрение что у тебя в конструкторе должно быть не "Memory", а "Page". И соответственно поле должно быть не "FMemory", а "FPage". Ну или всё наоборот - ты разработчик - тебе видней что как называть. Для меня "Element" однозначно не ассоциируется ни с "Memory" ни с "Page".
Ответить с цитированием
  #23  
Старый 16.01.2014, 17:30
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

пробывал и так и так компилятор выводит "Undeclared identifier:"
вот смотрите у меня класс
Код:
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;
в поле приват описанные переменные.
но почему то, компилятор не не ругается на первый класс там всё нормально.
Код:
 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;
реализация классов выше. если вам не трудно киньте в Delphi и посмотрите пожалуйста. Я учусь еще на разраба только))). Спасибо.
Ответить с цитированием
  #24  
Старый 16.01.2014, 18:30
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Deman1986
пробывал и так и так компилятор выводит "Undeclared identifier:"
Какой identifier undeclared?
Цитата:
Сообщение от Deman1986
в поле приват описанные переменные.
но почему то, компилятор не не ругается на первый класс там всё нормально.
Он и на второй класс не ругается - он всего лишь сообщает, что идентификатор "Page" нигде и никак не объявлен, поэтому он не знает что с ним делать. Переименуй как я написал.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Deman1986 (19.01.2014)
  #25  
Старый 19.01.2014, 11:56
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо большое заменил всё как вы написали.

можно еще спросить в реализации кода класса TSegment:
Код:
//*************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 := FFirst; // во тут компилятор выдаёт ошибку "Несовместимость типов" TElement и TPage.
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;
Спасибо.

Последний раз редактировалось M.A.D.M.A.N., 06.02.2014 в 22:12.
Ответить с цитированием
  #26  
Старый 23.01.2014, 15:01
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Deman1986
можно еще спросить в реализации кода класса TSegment:
Код:
.....
function TSegment.GetFirst: TSegment;
begin
  Result := FFirst; // во тут компилятор выдаёт ошибку "Несовместимость типов" TElement и TPage.
end;
.....
Спасибо.
Только наверное не TElement, а TSegment. Если так, то ничего удивительного: поле TSegment.FFirst имеет тип TPage, а метод TSegment.GetFirst должен вернуть значение типа TSegment. Типы TSegment и TPage никак между собой не совместимы, о чём компилятор и сообщает.
Ответить с цитированием
  #27  
Старый 23.01.2014, 15:17
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

да Вы правильно подметили не TElement, а TSegment, сорри это я ошибся.

не могу ни как исправить ошибку по классу TSegment у меня в поле
Код:
FFirst := nil;
я не правильно указал поле (оно наверное не должно быть пустое, должна быть страница), т.к. в классе указанно:
Код:
FFirst: TPage;
помогите исправить, не знаю что прописать. Спасибо

Последний раз редактировалось M.A.D.M.A.N., 06.02.2014 в 22:12.
Ответить с цитированием
  #28  
Старый 07.02.2014, 10:45
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

пожалуйста подскажите. Спасибо.
Ответить с цитированием
  #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.
Посмотрите если не трудно.

Последний раз редактировалось Deman1986, 25.02.2014 в 10:54.
Ответить с цитированием
  #30  
Старый 09.04.2014, 15:02
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

ни как не могу решить проблему с массивом подскажите пожалуйста кто чем может.
Код:
function TRam.AddSegment (const Segment: TSegment): integer;
var
  i, j: integer;
begin
  if GetCount =0 then  // создание сегментов
  begin
  FRam[0]:= TSegment.Create(0);
        Result:=0;
          Exit;
            end;
  for i:=0 to GetCount -1 do
    if FRam[i].GetNum= 0 then
      begin
        Result:=i;
          Exit;
            end;
if 1 > FRam[GetCount-1].GetNum then
begin
  FRam[GetCount-1]:=TSegment.Create(1);
    Result:=GetCount-1;
      Exit;
        end;
for i:= 0 to GetCount -1 do
  if FRam[i].GetNum > 1 then
  begin
      for j:= GetCount-1 downto i+1 do
        FRam[j]:=FRam[j-1];
          FRam[i]:= TSegment.Create(1);
            Result:=i;
              Exit;
                end;
                Result:=-1;
end;
вот что преподаватель ответил, По смыслу вашей задачи метод должен добавлять новый сегмент с заданным номером ДО или ПОСЛЕ сегмента с заданным номером, поэтому метод должен иметь ДВА входных параметра и выполнять поиск места вставки. Спасибо
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:31.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter