Внести необходимые изменения в программу - 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)
- Код завершается