Форумчане есть классы с их реализацией, появилась проблема не могу реализовать правильно добавление в список. вот код.
Код:
function TRam.AddSegment (const Segment: TSegment; Index: integer): integer;
var
i,j,tmp: integer; // переменные локальные
begin
FCount:=GetCount+1; // увеличение счётчика
if High(FRam) <= FCount+1 then setlength (FRam,FCount)
else setlength(FRam,length(FRam) *2); // проверка возможности расширение массива в 2 раза
for i:= 0 to FCount do
if FRam[i].GetNum <> Segment.GetNum then Exit// проверка возможности добавления, если элемент существует выходим из процедуры
for i:=0 to GetCount do
begin
j:=i;
tmp:=FRam[i];
while (Index > 0) and (Index < GetCount) do begin// поиск места вставки
for j:=0 downto Index do // внутренний цикл
begin
FRam[j+1]:=FRam[j];
FRam[Index]:=Segment;
Result:=Index;
Exit;
end;
Result:=-1;
end;
вот что пишет преподаватель:
Ошибки в методе добавления:
- индексация в дин. массивах начинается с 0, что надо учитывать в циклах
- проверка необходимости расширения массива сделана неправильно (кстати, проверка именно НЕОБХОДИМОСТИ, а не ВОЗМОЖНОСТИ!)
- проверка существования элемента реализована неправильно (по заданию уникальность номеров сегментов не требуется)
- поиск места вставки и сдвиг элементов с помощью ВЛОЖЕННЫХ циклов реализованы неправильно - это должны быть ДВА ОТДЕЛЬНЫХ цикла.
Спасибо.