Функция 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-й позиции
- Завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д