Показать сообщение отдельно
  #2  
Старый 07.10.2014, 15:55
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Как-то так
Код:
function TRam.AddSegment (const Segment: TSegment; Index: integer): integer;
var
  i,j,tmp: integer; // переменные локальные
begin
  Result:=-1;
  // контроль параметров
  if Index >= FCount then Exit; 
  if Index < 0 then Exit; 


// сначала проверка необходимости вставки
// это на случай, если нужны уникальные номера
// если не надо, то следующий цикл комментируем
  for i:= 0 to FCount-1 do begin
    if FRam[i].GetNum = Segment.GetNum then begin
      Result:=i;
      Exit;
    end;
  end;


// теперь посмотрим, есть ли место в массиве
  FCount:=GetCount+1; // увеличение счётчика
  if High(FRam) >= FCount then begin 
    //место есть, ничего делать не надо
  end else begin
    // надо увеличивать
    // расширение массива в 2 раза
    setlength(FRam,length(FRam) *2);
  end;

// сдвигаем
  for i:= FCount downto (Index+1) do
    FRam[i] := FRam[i-1]; 

// записываем 
  FRam[Index]:=Segment;
//выдаём - куда записали
  Result:=Index;
end;
Ответить с цитированием