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

Delphi Sources



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

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

Сорри торопился
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
класс 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 нет методов добавления в список, удаления из списка и поиска сегмента.
вот еще раз всё классы:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
класс 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;

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
класс 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 вот так:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
класс 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;
подскажите пожалуйста какие переменные использовать вот тут:
Код:
1
2
3
procedure AddSegment () // добавление элементов в список
    procedure DeleteSegment () // удаление элементов из списка
    procedure Search () // поиск сегмента
Ответить с цитированием
  #18  
Старый 24.12.2013, 22:19
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Форумчане преподаватель принял классы и я сделал реализацию (программную), подскажите пожалуйста по классу TRam вот весь код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
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 вот код программы.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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;
именно на эти строки подскажите по реализации
Код:
1
FMemory := Page;
Код:
1
FPage.Free;
Код:
1
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 вот код программы.
.....
именно на эти строки подскажите по реализации
Код:
1
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:"
вот смотрите у меня класс
Код:
1
2
3
4
5
6
7
8
9
10
11
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;
в поле приват описанные переменные.
но почему то, компилятор не не ругается на первый класс там всё нормально.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
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:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//*************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:
Код:
1
2
3
4
5
6
.....
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 у меня в поле
Код:
1
FFirst := nil;
я не правильно указал поле (оно наверное не должно быть пустое, должна быть страница), т.к. в классе указанно:
Код:
1
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. Может кто подскажет. Спасибо. Разработал последний класс. Тоже есть ошибки.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
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
По умолчанию

ни как не могу решить проблему с массивом подскажите пожалуйста кто чем может.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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, время: 14:00.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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