Программа для перевода арабского числа в римскую систему счисления и обратно

Автор работы: Пользователь скрыл имя, 02 Июня 2010 в 17:53, Не определен

Описание работы

Проект

Файлы: 1 файл

Проектная работа.doc

— 195.50 Кб (Скачать файл)

    { 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

    //выбор номера элемента массива, который будет выведен в результирующую строку

     перебор  элементов начинается с последнего  элемента, т.е. с 1000

     если  входное число меньше текущего  элемента, то переход к элементу  с меньшим

     значением

    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:=ArabicToRoman(StrToInt(Edit1.Text));

      end;

   2: begin   //перевод римских в арабские

        StaticText1.Caption:='Римские -> Арабские';

        StaticText2.Caption:=IntToStr(RomanToArabic(Edit1.Text));

      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','X','V',#8])) then

    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',#8])) then

    Key:=#0;

end; 

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

Form2.Show

end; 

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

Form3.Show

end; 

end. 
 

Вывод по проделанной работе:

     В результате проделанной работы была разработана программа для перевода арабского числа в римскую систему и обратно. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Список  использованных источников:

  1. В.В. Фаронов “DELPHI Программирование на языке высокого уровня” Питер 2006 г.
  2. Н.Б. Культин Основы прграммирования в Delphi 7. Питер 2006 г.
  3. В. Пестриков и А. Маслобоев Delphi на примерах. Питер 2003 г.
  4. В. Гофман и А. Хомоненко Delphi быстрый старт. Питер 2005 г.
  5. М. Е. Фленов Библия Программиста (Delphi)
  6. М. Зелковиц, А. Шоу, Дж. Гэннон Принципы разработки программного обеспечения (пер. с анг.)

Информация о работе Программа для перевода арабского числа в римскую систему счисления и обратно