Считать, преобразовать цифры файла в римские и записать в другой файл - Turbo Pascal
Формулировка задачи:
В файле находятся цифры, записанные через пробел. Нужно их считать, преобразовать в римские и записать в другой файл. Помогите, пожалуйста, переделать код.
Код, который работает с одной цифрой:
Листинг программы
- Uses crt;
- const
- {римские цифры}
- RomeDigits: array [1..13] of string[2] =
- ('I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');
- {соответствующие римским цифрам}
- ArabicNumbers: array [1..13] of integer =
- (1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);
- {Функция перевода арабского числа в римское}
- function ArabicToRome (n: integer): string;
- var
- i: integer;
- res: string;
- begin
- res:='';
- i:=13;
- while n>0 do begin
- while ArabicNumbers[i]>n do
- i:=i-1;
- res:=res+RomeDigits[i];
- n:=n-ArabicNumbers[i];
- end;
- ArabicToRome := res;
- end;
- procedure ReadFile (var arabic:integer);
- var
- f:text;
- begin
- assign(f,'arabicnumber.txt');
- reset(f);
- while not (eof(f)) do
- begin
- readln(f,arabic);
- end;
- close(f);
- end;
- procedure WriteFile(arabic:integer);
- var
- fr:text;
- begin
- assign(fr,'romenumber.txt');
- rewrite(fr,'romenumber.txt');
- write(fr,ArabicToRome(arabic));
- close(fr);
- end;
- {основная программа}
- var
- arabic: integer; {арабское число}
- begin
- readfile(arabic);
- writeln('Считанное арабское число: ',arabic);
- writefile(arabic);
- writeln('Римская запись: ',ArabicToRome(arabic));
- readln;
- end.
Решение задачи: «Считать, преобразовать цифры файла в римские и записать в другой файл»
textual
Листинг программы
- const
- {римские цифры}
- RomeDigits: array [1..13] of string[2] =
- ('I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');
- {соответствующие римским цифрам}
- ArabicNumbers: array [1..13] of integer =
- (1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);
- {Функция перевода арабского числа в римское}
- function ArabicToRome(n: integer): string;
- var
- i: integer;
- res: string;
- begin
- res := '';
- i := 13;
- while n > 0 do
- begin
- while ArabicNumbers[i] > n do
- i := i - 1;
- res := res + RomeDigits[i];
- n := n - ArabicNumbers[i];
- end;
- ArabicToRome := res;
- end;
- procedure ReadWriteFile;
- var
- fr, f: text;
- arabic: integer;
- begin
- assign(f, 'arabicnumber.txt');
- assign(fr, 'romenumber.txt');
- reset(f);
- rewrite(fr);
- while not seekeof(f) do
- begin
- read(f, arabic);
- write(fr, ArabicToRome(arabic), ' ');
- end;
- close(f);
- close(fr);
- end;
- {основная программа}
- var
- arabic: integer;{арабское число}
- begin
- ReadWriteFile;
- readln;
- end.
Объяснение кода листинга программы
- В строке с объявлением переменных
const
определяются два массива символовRomeDigits
иArabicNumbers
, которые представляют римские и арабские цифры соответственно. - Функция
ArabicToRome
принимает целое число и возвращает строку, представляющую это число в римской системе. Она использует циклwhile
, чтобы последовательно преобразовывать цифры от наибольшей к наименьшей, добавляя их к результирующей строкеres
. - В процедуре
ReadWriteFile
открываются два файла:f
для чтения из файлаarabicnumber.txt
иfr
для записи в файлromenumber.txt
. Затем происходит чтение числа из файлаarabicnumber.txt
, его преобразование в римскую систему с помощью функцииArabicToRome
и запись результата в файлromenumber.txt
. - Основная программа включает вызов процедуры
ReadWriteFile
и затем ожидает ввода с помощьюreadln
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д