Внести необходимые изменения в программу - Free Pascal
Формулировка задачи:
Программа не запускается в фри паскале потому что сделана в абс что поменять нужно?
const NUMBER_OF_DIGITS = 16; 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'); DEC: array[1..NUMBER_OF_DIGITS] of string = ('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15'); Nmax = 100; type vector = array[1..Nmax] of string; var digitsFile: text; digits: vector; digitsNumber: integer; newDigitsFile: text; i: integer; firstPart, secondPart, allResults: string; {процедура посимвольного чтения файла} procedure loadFromFile(path: string; var digitsFile: text; var digits: vector;var digitsNumber: integer); var symbol: char; begin digitsNumber := 1; assign(digitsFile, path); reset(digitsFile); while not eof(digitsFile) do begin while not Eoln(digitsFile) do begin read(digitsFile, symbol); if (symbol <> ' ') then digits[digitsNumber] := digits[digitsNumber] + symbol; if (symbol = ' ') then digitsNumber := digitsNumber + 1; end; Readln(digitsFile); end; end; {функция перевода символов из массива чисел шестнадцатеричной системы} function getDecimal(source: string): string; var i, j: integer; res: string; begin res := ''; for i := 1 to length(source) do begin for j := 1 to NUMBER_OF_DIGITS do begin if source[i] = HEX_DIGITS[j] then begin res := res + DEC[j]; end; end; end; getDecimal := res; end; {перевод исходного числа в десятичную систему счисления} function hexToDecimal(source: string): string; var i: integer; numberStr: string; numberVal: integer; sum: integer; res: string; processingString: string; begin processingString := source; if source[1] = '-' then begin processingString := Copy(source, 2, length(source) - 1); res := res + '-'; end; for i := length(processingString) downto 1 do begin numberStr := getDecimal(processingString[i]); numberVal := StrToInt(numberStr); sum := sum + numberVal * Round(Power(16, Length(processingString) - i)); end; res := res + IntToStr(sum); hexToDecimal := res; end; begin firstPart := 'Исходные числа: '; loadFromFile('Source.txt', digitsFile, digits, digitsNumber); for i := 1 to digitsNumber do begin firstPart := firstPart + digits[i]; if i=digitsNumber then break; firstPart := firstPart + ' '; end; secondPart := 'В десятичной СС: '; for i := 1 to digitsNumber do begin secondPart := secondPart + hexToDecimal(digits[i]); if i=digitsNumber then break; secondPart := secondPart + ' '; end; allResults:= firstPart + #13#10 + secondPart; assign (newDigitsFile, 'Results.txt'); rewrite (newDigitsFile); write (newDigitsFile,allResults); close(newDigitsFile); end.
Решение задачи: «Внести необходимые изменения в программу»
textual
Листинг программы
uses math,sysutils; const NUMBER_OF_DIGITS = 16; 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'); DEC: array[1..NUMBER_OF_DIGITS] of string = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'); Nmax = 100; type vector = array[1..Nmax] of string; var digitsFile: text; digits: vector; digitsNumber: integer; newDigitsFile: text; i: integer; firstPart, secondPart, allResults: string; {процедура посимвольного чтения файла} procedure loadFromFile(path: string; var digitsFile: text; var digits: vector; var digitsNumber: integer); var symbol: char; begin digitsNumber := 1; assign(digitsFile, path); reset(digitsFile); while not eof(digitsFile) do begin while not Eoln(digitsFile) do begin read(digitsFile, symbol); if (symbol <> ' ') then digits[digitsNumber] := digits[digitsNumber] + symbol; if (symbol = ' ') then digitsNumber := digitsNumber + 1; end; Readln(digitsFile); end; end; {функция перевода символов из массива чисел шестнадцатеричной системы} function getDecimal(source: string): string; var i, j: integer; res: string; begin res := ''; for i := 1 to length(source) do begin for j := 1 to NUMBER_OF_DIGITS do begin if source[i] = HEX_DIGITS[j] then begin res := res + DEC[j]; end; end; end; getDecimal := res; end; {перевод исходного числа в десятичную систему счисления} function hexToDecimal(source: string): string; var i: integer; numberStr: string; numberVal: integer; sum: integer; res: string; processingString: string; begin res:=''; processingString := source; if source[1] = '-' then begin processingString := Copy(source, 2, length(source) - 1); res := res + '-'; end; sum:=0; for i := length(processingString) downto 1 do begin numberStr := getDecimal(processingString[i]); numberVal := StrToInt(numberStr); sum := sum + numberVal * Round(Power(16, Length(processingString) - i)); end; res := res + IntToStr(sum); hexToDecimal := res; end; begin firstPart := 'Исходные числа: '; loadFromFile('Source.txt', digitsFile, digits, digitsNumber); for i := 1 to digitsNumber do begin firstPart := firstPart + digits[i]; if i = digitsNumber then break; firstPart := firstPart + ' '; end; secondPart := 'В десятичной СС: '; for i := 1 to digitsNumber do begin secondPart := secondPart + hexToDecimal(digits[i]); if i = digitsNumber then break; secondPart := secondPart + ' '; end; allResults := firstPart + #13#10 + secondPart; assign(newDigitsFile, 'Results.txt'); rewrite(newDigitsFile); write(newDigitsFile, allResults); close(newDigitsFile); readln; end.
Объяснение кода листинга программы
- Объявлены переменные и константы:
- digitsFile, digits, digitsNumber, newDigitsFile, i, firstPart, secondPart, allResults (строки)
- NUMBER_OF_DIGITS (константа)
- HEX_DIGITS, DEC (массивы)
- Nmax (переменная типа Integer)
- Объявлен тип данных vector (массив)
- Выполнена процедура loadFromFile, которая считывает данные из файла Source.txt и сохраняет их в переменных digitsFile, digits, digitsNumber.
- Выполнена функция getDecimal, которая принимает строку и возвращает строку с эквивалентом в десятичной системе счисления.
- Выполнена функция hexToDecimal, которая принимает строку в шестнадцатеричной системе счисления и возвращает строку в десятичной системе счисления.
- Выполнена основная часть программы:
- создается файл Results.txt
- в него записывается исходное число и его эквивалент в десятичной системе счисления, разделенные символом #13#10
- файл закрывается
- Программа ожидает ввода пользователя (readln)
- Код завершается
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д