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

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

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

В порядке изобретения велосипедов написал функцию, но она вставляет значение в массив, если индекс его вставки меньше, чем длина массива. Если больше- длина прибавляется, но значение в массиве не появляется. Более детальные вопросы- в комментах к программе. Помогите разобраться, пожалуйста.
Листинг программы
  1. program insertChar;
  2. type
  3. AnsiCharArray = array of AnsiChar;
  4. var
  5. charArray1, charArray2: array of AnsiChar;
  6. simpleChar: AnsiChar;
  7. function charToDynCharArray(charr: AnsiChar; insertIndex: integer;
  8. var arr: AnsiCharArray): AnsiCharArray;
  9. var
  10. i, arrLength: integer;
  11. begin
  12. if insertIndex = -1 then
  13. insertIndex := Length(arr);
  14. // выясняем, на сколько увел массив если...
  15. if insertIndex > Length(arr) then
  16. begin
  17. // пытался прямо назначить значение длины = insertIndex+1, не добавляется значение
  18. // в insertIndex в массив, стал делать через фор, добавлять любые значения до insertIndex
  19. for i := Length(arr) to insertIndex do
  20. begin
  21. SetLength(arr, i + 1);
  22. // добавил переменную, чтобы просматривать длину.
  23. arrLength := Length(arr);
  24. // почему в массив не добавляется значение? В инсп. отладки его не видно.
  25. arr[i] := '1';
  26. if i = insertIndex then
  27. arr[i-1] := charr;
  28. end;
  29. end
  30. else
  31. begin
  32. SetLength(arr, Length(arr) + 1);
  33. for i := Length(arr) - 1 downto insertIndex + 1 do
  34. arr[i] := arr[i - 1];
  35. arr[insertIndex] := charr;
  36. end;
  37. charToDynCharArray := arr;
  38. end;
  39. begin
  40. charArray2:='01';
  41. SetLength(charArray2,101);
  42. // почему в инспекторе отладки в charArray2 только 4 элемента?
  43. charArray2[100]:='1';
  44. simpleChar := '1';
  45. charArray1 := '02';
  46. charArray1 := charToDynCharArray(simpleChar, 1, charArray1);
  47. simpleChar := '0';
  48. charArray1 := charToDynCharArray(simpleChar, 0, charArray1);
  49. simpleChar := '3';
  50. charArray1 := charToDynCharArray(simpleChar, -1, charArray1);
  51. simpleChar := '6';
  52. charArray1 := charToDynCharArray(simpleChar, 6, charArray1);
  53. ReadLn();
  54. end.
И скажите пожалуйста, как она по рациональности (кроме for при увеличении размера массива, его добавил, так как при SetLength значения не появлялись) и стилю кода и так далее... Заранее спасибо.

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

textual
Листинг программы
  1. type
  2.   AnsiCharArr = array of AnsiChar;
  3.  
  4. procedure InsertChar(C: AnsiChar; Idx: Integer; var a: AnsiCharArr);
  5. var i: Integer;
  6. begin
  7.   if Idx>=Length(a) then SetLength(a,Idx+1);
  8.   for i:=Length(a)-1 downto Idx+1 do a[i]:=a[i-1];
  9.   a[Idx]:=C;
  10. end;
  11.  
  12. var
  13.   a: AnsiCharArr;
  14. begin
  15.   InsertChar('*',100,a);
  16.   WriteLn(a[100]='*');
  17. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы