Функция insert char to dynamic char array работает не во всех случаях - Free Pascal

Узнай цену своей работы

Формулировка задачи:

В порядке изобретения велосипедов написал функцию, но она вставляет значение в массив, если индекс его вставки меньше, чем длина массива. Если больше- длина прибавляется, но значение в массиве не появляется. Более детальные вопросы- в комментах к программе. Помогите разобраться, пожалуйста.
program insertChar;
 
type
  AnsiCharArray = array of AnsiChar;
var
  charArray1, charArray2: array of AnsiChar;
  simpleChar: AnsiChar;
 
  function charToDynCharArray(charr: AnsiChar; insertIndex: integer;
  var arr: AnsiCharArray): AnsiCharArray;
  var
    i, arrLength: integer;
  begin
    if insertIndex = -1 then
      insertIndex := Length(arr);
    // выясняем, на сколько увел массив если...
    if insertIndex > Length(arr) then
 
    begin
      // пытался прямо назначить значение длины = insertIndex+1, не добавляется значение
      // в insertIndex в массив, стал делать через фор, добавлять любые значения до insertIndex
      for i := Length(arr) to insertIndex do
      begin
        SetLength(arr, i + 1);
        // добавил переменную, чтобы просматривать длину.
        arrLength := Length(arr);
        // почему в массив не добавляется значение? В инсп. отладки его не видно.
        arr[i] := '1';
        if i = insertIndex then
          arr[i-1] := charr;
      end;
    end
    else
    begin
      SetLength(arr, Length(arr) + 1);
      for i := Length(arr) - 1 downto insertIndex + 1 do
        arr[i] := arr[i - 1];
      arr[insertIndex] := charr;
    end;
    charToDynCharArray := arr;
  end;
 
begin
  charArray2:='01';
  SetLength(charArray2,101);
  // почему в инспекторе отладки в charArray2 только 4 элемента?
  charArray2[100]:='1';
  simpleChar := '1';
  charArray1 := '02';
  charArray1 := charToDynCharArray(simpleChar, 1, charArray1);
  simpleChar := '0';
  charArray1 := charToDynCharArray(simpleChar, 0, charArray1);
  simpleChar := '3';
  charArray1 := charToDynCharArray(simpleChar, -1, charArray1);
  simpleChar := '6';
  charArray1 := charToDynCharArray(simpleChar, 6, charArray1);
  ReadLn();
end.
И скажите пожалуйста, как она по рациональности (кроме for при увеличении размера массива, его добавил, так как при SetLength значения не появлялись) и стилю кода и так далее... Заранее спасибо.

Решение задачи: «Функция insert char to dynamic char array работает не во всех случаях»

textual
Листинг программы
type
  AnsiCharArr = array of AnsiChar;
 
procedure InsertChar(C: AnsiChar; Idx: Integer; var a: AnsiCharArr);
var i: Integer;
begin
  if Idx>=Length(a) then SetLength(a,Idx+1);
  for i:=Length(a)-1 downto Idx+1 do a[i]:=a[i-1];
  a[Idx]:=C;
end;
 
var
  a: AnsiCharArr;
begin
  InsertChar('*',100,a);
  WriteLn(a[100]='*');
end.

Объяснение кода листинга программы

  1. Объявление типа данных AnsiCharArr - массив символов AnsiChar
  2. Создание процедуры InsertChar для вставки символа в динамический массив
  3. Проверка индекса вставки символа, увеличение длины массива при необходимости
  4. Копирование символов в массиве начиная с конца и двигаясь к индексу вставки
  5. Вставка символа C в массив по индексу Idx
  6. Объявление и инициализация переменной a типа AnsiCharArr
  7. Вызов процедуры InsertChar для вставки символа '*' в массив a на 100-й позиции
  8. Запись в файл символа a на 100-й позиции
  9. Завершение работы программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5
Похожие ответы