![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Форумчане есть классы с их реализацией, появилась проблема не могу реализовать правильно добавление в список. вот код.
Код:
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, что надо учитывать в циклах - проверка необходимости расширения массива сделана неправильно (кстати, проверка именно НЕОБХОДИМОСТИ, а не ВОЗМОЖНОСТИ!) - проверка существования элемента реализована неправильно (по заданию уникальность номеров сегментов не требуется) - поиск места вставки и сдвиг элементов с помощью ВЛОЖЕННЫХ циклов реализованы неправильно - это должны быть ДВА ОТДЕЛЬНЫХ цикла. Спасибо. |