Автор работы: Пользователь скрыл имя, 02 Июня 2010 в 17:53, Не определен
Проект
{ Private declarations }
Mode: integer;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit3;
{$R *.dfm}
const
R: array[1..13] of string[2] =
('I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');
A: array[1..13] of Integer =
(1, 4, 5, 9, 10, 40,
50, 90, 100, 400, 500, 900, 1000);
function ArabicToRoman(N: Integer): string; //Арабские в римские
var
i: Integer;
begin
Result := '';
i := 13;
//выполнение цикла пока входное число >0
while N > 0 do
begin
//выбор номера элемента массива, который будет выведен в результирующую строку
перебор
элементов начинается с
если входное число меньше текущего элемента, то переход к элементу с меньшим
значением
while A[i] > N do
Dec(i);// уменьшение значения на i
//добавление
выбранного элемента к
Result := Result + R[i];
//уменьшение входного числа на величину выбранного элемента
и повтор цикла пока входное число не станет равным нулю
Dec(N, A[i]);
end;
end;
function RomanToArabic(S: string): Integer; //Римские в арабские
var
i, p: Integer;
begin
Result := 0;
i := 13;
p := 1; //позиция,
с которой ведётся анализ
while p <= Length(S) do //если позиция больше либо равна длине строки
begin
//выделение из входной строки отдельных цифр
длина обозначения цифры может быть = 1 или 2
перебор массива элементов начинается с конца массива
while Copy(S, p, Length(R[i])) <> R[i] do//с p элемента , количество length
begin
Dec(i); // уменьшение значения на i
if i = 0 then
Exit;
end;
//увеличения
результата (в арабском представлении)
на значение выбранного
Result := Result + A[i];
//сдвиг
позиции анализа на длину
p := p + Length(R[i]);
end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
if Edit1.Text='' then
Mode:=0
else
case Edit1.Text[1] of
'0'..'9': Mode:=1;
else
Mode:=2;
end;
case Mode of
0: begin //длина строки =0 - ничего не делаем
StaticText1.Caption:='';
StaticText2.Caption:='';
end;
1: begin //перевод арабских в римские
StaticText1.Caption:='Арабские -> Римские';
StaticText2.Caption:=
end;
2: begin //перевод римских в арабские
StaticText1.Caption:='Римские
StaticText2.Caption:=IntToStr(
end;
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
//Key - нажатый на клавиатуре символ
//переводим символ в верхний регистр
Key:=UpCase(Key);
//фильтр, чтобы
программа игнорировала
//к обозначению римских и арабских цифр
//#8 - это код когда нажимаешь кнопки Delete или BackSpace
//если символы не входят в разрешённые, то Key обнуляется
if (Mode=0) and (not
(Key in ['0'..'9','I','M','D','C','L',
Key:=#0;
if (Mode=1) and (not (Key in ['0'..'9',#8])) then
Key:=#0;
if (Mode=2) and (not
(Key in ['I','M','D','C','L','X','V',#
Key:=#0;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Form2.Show
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
Form3.Show
end;
end.
Вывод по проделанной работе:
В
результате проделанной работы была
разработана программа для
Список использованных источников:
Информация о работе Программа для перевода арабского числа в римскую систему счисления и обратно