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

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

  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
Похожие ответы