Внести необходимые изменения в программу - Free Pascal

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

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

Программа не запускается в фри паскале потому что сделана в абс что поменять нужно?
Листинг программы
  1. const
  2. NUMBER_OF_DIGITS = 16;
  3. HEX_DIGITS: array[1..NUMBER_OF_DIGITS] of char = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
  4. DEC: array[1..NUMBER_OF_DIGITS] of string = ('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15');
  5. Nmax = 100;
  6. type
  7. vector = array[1..Nmax] of string;
  8. var
  9. digitsFile: text;
  10. digits: vector;
  11. digitsNumber: integer;
  12. newDigitsFile: text;
  13. i: integer;
  14. firstPart, secondPart, allResults: string;
  15. {процедура посимвольного чтения файла}
  16. procedure loadFromFile(path: string; var digitsFile: text; var digits: vector;var digitsNumber: integer);
  17. var
  18. symbol: char;
  19. begin
  20. digitsNumber := 1;
  21. assign(digitsFile, path);
  22. reset(digitsFile);
  23. while not eof(digitsFile) do begin
  24. while not Eoln(digitsFile) do begin
  25. read(digitsFile, symbol);
  26. if (symbol <> ' ') then
  27. digits[digitsNumber] := digits[digitsNumber] + symbol;
  28. if (symbol = ' ') then
  29. digitsNumber := digitsNumber + 1;
  30. end;
  31. Readln(digitsFile);
  32. end;
  33. end;
  34. {функция перевода символов из массива чисел шестнадцатеричной системы}
  35. function getDecimal(source: string): string;
  36. var
  37. i, j: integer;
  38. res: string;
  39. begin
  40. res := '';
  41. for i := 1 to length(source) do begin
  42. for j := 1 to NUMBER_OF_DIGITS do begin
  43. if source[i] = HEX_DIGITS[j] then begin
  44. res := res + DEC[j];
  45. end;
  46. end;
  47. end;
  48. getDecimal := res;
  49. end;
  50. {перевод исходного числа в десятичную систему счисления}
  51. function hexToDecimal(source: string): string;
  52. var
  53. i: integer;
  54. numberStr: string;
  55. numberVal: integer;
  56. sum: integer;
  57. res: string;
  58. processingString: string;
  59. begin
  60. processingString := source;
  61. if source[1] = '-' then begin
  62. processingString := Copy(source, 2, length(source) - 1);
  63. res := res + '-';
  64. end;
  65. for i := length(processingString) downto 1 do begin
  66. numberStr := getDecimal(processingString[i]);
  67. numberVal := StrToInt(numberStr);
  68. sum := sum + numberVal * Round(Power(16, Length(processingString) - i));
  69. end;
  70. res := res + IntToStr(sum);
  71. hexToDecimal := res;
  72. end;
  73. begin
  74. firstPart := 'Исходные числа: ';
  75. loadFromFile('Source.txt', digitsFile, digits, digitsNumber);
  76. for i := 1 to digitsNumber do
  77. begin
  78. firstPart := firstPart + digits[i];
  79. if i=digitsNumber then break;
  80. firstPart := firstPart + ' ';
  81. end;
  82. secondPart := 'В десятичной СС: ';
  83. for i := 1 to digitsNumber do
  84. begin
  85. secondPart := secondPart + hexToDecimal(digits[i]);
  86. if i=digitsNumber then break;
  87. secondPart := secondPart + ' ';
  88. end;
  89. allResults:= firstPart + #13#10 + secondPart;
  90. assign (newDigitsFile, 'Results.txt');
  91. rewrite (newDigitsFile);
  92. write (newDigitsFile,allResults);
  93. close(newDigitsFile);
  94. end.

Решение задачи: «Внести необходимые изменения в программу»

textual
Листинг программы
  1. uses
  2.   math,sysutils;
  3. const
  4.   NUMBER_OF_DIGITS = 16;
  5.   HEX_DIGITS: array[1..NUMBER_OF_DIGITS] of char = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
  6.   DEC: array[1..NUMBER_OF_DIGITS] of string = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15');
  7.   Nmax = 100;
  8.  
  9. type
  10.   vector = array[1..Nmax] of string;
  11.  
  12. var
  13.   digitsFile: text;
  14.   digits: vector;
  15.   digitsNumber: integer;
  16.   newDigitsFile: text;
  17.   i: integer;
  18.   firstPart, secondPart, allResults: string;
  19. {процедура посимвольного чтения файла}
  20. procedure loadFromFile(path: string; var digitsFile: text; var digits: vector; var digitsNumber: integer);
  21. var
  22.   symbol: char;
  23. begin
  24.   digitsNumber := 1;
  25.   assign(digitsFile, path);
  26.   reset(digitsFile);
  27.   while not eof(digitsFile) do
  28.   begin
  29.     while not Eoln(digitsFile) do
  30.     begin
  31.       read(digitsFile, symbol);
  32.       if (symbol <> ' ') then
  33.         digits[digitsNumber] := digits[digitsNumber] + symbol;
  34.       if (symbol = ' ') then
  35.         digitsNumber := digitsNumber + 1;
  36.     end;
  37.     Readln(digitsFile);
  38.   end;
  39. end;
  40. {функция перевода символов из массива чисел шестнадцатеричной системы}
  41. function getDecimal(source: string): string;
  42. var
  43.   i, j: integer;
  44.   res: string;
  45. begin
  46.   res := '';
  47.   for i := 1 to length(source) do
  48.   begin
  49.     for j := 1 to NUMBER_OF_DIGITS do
  50.     begin
  51.       if source[i] = HEX_DIGITS[j] then begin
  52.         res := res + DEC[j];
  53.       end;
  54.     end;
  55.   end;
  56.   getDecimal := res;
  57. end;
  58. {перевод исходного числа в десятичную систему счисления}
  59. function hexToDecimal(source: string): string;
  60. var
  61.   i: integer;
  62.   numberStr: string;
  63.   numberVal: integer;
  64.   sum: integer;
  65.   res: string;
  66.   processingString: string;
  67. begin
  68.   res:='';
  69.   processingString := source;
  70.   if source[1] = '-' then begin
  71.     processingString := Copy(source, 2, length(source) - 1);
  72.     res := res + '-';
  73.   end;
  74.   sum:=0;
  75.   for i := length(processingString) downto 1 do
  76.   begin
  77.     numberStr := getDecimal(processingString[i]);
  78.     numberVal := StrToInt(numberStr);
  79.     sum := sum + numberVal * Round(Power(16, Length(processingString) - i));
  80.   end;
  81.   res := res + IntToStr(sum);
  82.   hexToDecimal := res;
  83. end;
  84.  
  85. begin
  86.   firstPart := 'Исходные числа: ';
  87.   loadFromFile('Source.txt', digitsFile, digits, digitsNumber);
  88.   for i := 1 to digitsNumber do
  89.   begin
  90.     firstPart := firstPart + digits[i];
  91.     if i = digitsNumber then break;
  92.     firstPart := firstPart + ' ';
  93.   end;
  94.   secondPart := 'В десятичной СС: ';
  95.   for i := 1 to digitsNumber do
  96.   begin
  97.     secondPart := secondPart + hexToDecimal(digits[i]);
  98.     if i = digitsNumber then break;
  99.     secondPart := secondPart + ' ';
  100.   end;
  101.   allResults := firstPart + #13#10 + secondPart;
  102.   assign(newDigitsFile, 'Results.txt');
  103.   rewrite(newDigitsFile);
  104.   write(newDigitsFile, allResults);
  105.   close(newDigitsFile);
  106.   readln;
  107. end.

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

  1. Объявлены переменные и константы:
    • digitsFile, digits, digitsNumber, newDigitsFile, i, firstPart, secondPart, allResults (строки)
    • NUMBER_OF_DIGITS (константа)
    • HEX_DIGITS, DEC (массивы)
    • Nmax (переменная типа Integer)
  2. Объявлен тип данных vector (массив)
  3. Выполнена процедура loadFromFile, которая считывает данные из файла Source.txt и сохраняет их в переменных digitsFile, digits, digitsNumber.
  4. Выполнена функция getDecimal, которая принимает строку и возвращает строку с эквивалентом в десятичной системе счисления.
  5. Выполнена функция hexToDecimal, которая принимает строку в шестнадцатеричной системе счисления и возвращает строку в десятичной системе счисления.
  6. Выполнена основная часть программы:
    • создается файл Results.txt
    • в него записывается исходное число и его эквивалент в десятичной системе счисления, разделенные символом #13#10
    • файл закрывается
  7. Программа ожидает ввода пользователя (readln)
  8. Код завершается

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


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

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

12   голосов , оценка 4.417 из 5

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

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

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