Функция insert char to dynamic char array работает не во всех случаях - Free Pascal
Формулировка задачи:
В порядке изобретения велосипедов написал функцию, но она вставляет значение в массив, если индекс его вставки меньше, чем длина массива. Если больше- длина прибавляется, но значение в массиве не появляется. Более детальные вопросы- в комментах к программе. Помогите разобраться, пожалуйста.
И скажите пожалуйста, как она по рациональности (кроме for при увеличении размера массива, его добавил, так как при SetLength значения не появлялись) и стилю кода и так далее... Заранее спасибо.
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.
Решение задачи: «Функция 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.
Объяснение кода листинга программы
- Объявление типа данных AnsiCharArr - массив символов AnsiChar
- Создание процедуры InsertChar для вставки символа в динамический массив
- Проверка индекса вставки символа, увеличение длины массива при необходимости
- Копирование символов в массиве начиная с конца и двигаясь к индексу вставки
- Вставка символа C в массив по индексу Idx
- Объявление и инициализация переменной a типа AnsiCharArr
- Вызов процедуры InsertChar для вставки символа '*' в массив a на 100-й позиции
- Запись в файл символа a на 100-й позиции
- Завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д