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