Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.11.2006, 22:07
Kassel Kassel вне форума
Прохожий
 
Регистрация: 09.11.2006
Сообщения: 4
Репутация: 10
По умолчанию ПЛИЗ Help!!!(срочняк)

Как создать компоненту перевода арабского числа в римское и обратно??
Ответить с цитированием
  #2  
Старый 10.11.2006, 00:12
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Обязательно компонент?

Для начала вот (арабское в римское)
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<font color="RoyalBlue"><i>// Способ первый</i></font>
<b>function</b> IntToRoman( num: Cardinal ): <b>string</b>;
<b>const</b>
  N = <font color="RoyalBlue">13</font>;
  vals: <b>array</b> [1..N] <b>of</b> word =
        ( <font color="RoyalBlue">1</font>, <font color="RoyalBlue">4</font>, <font color="RoyalBlue">5</font>, <font color="RoyalBlue">9</font>, <font color="RoyalBlue">10</font>, <font color="RoyalBlue">40</font>, <font color="RoyalBlue">50</font>, <font color="RoyalBlue">90</font>, <font color="RoyalBlue">100</font>, <font color="RoyalBlue">400</font>, <font color="RoyalBlue">500</font>, <font color="RoyalBlue">900</font>, <font color="RoyalBlue">1000</font> );
  roms: <b>array</b> [1..N] <b>of</b> <b>string</b>[2] =
        ( <font color="RoyalBlue">'I'</font>, <font color="RoyalBlue">'IV'</font>, <font color="RoyalBlue">'V'</font>, <font color="RoyalBlue">'IX'</font>, <font color="RoyalBlue">'X'</font>, <font color="RoyalBlue">'XL'</font>, <font color="RoyalBlue">'L'</font>, <font color="RoyalBlue">'XC'</font>, <font color="RoyalBlue">'C'</font>, <font color="RoyalBlue">'CD'</font>, <font color="RoyalBlue">'D'</font>, <font color="RoyalBlue">'CM'</font>, <font color="RoyalBlue">'M'</font> );
<b>var</b>
  b: <font color="RoyalBlue">1</font>..N;
<b>begin</b>
   Result := <font color="RoyalBlue">''</font>;
   b := N;
   <b>while</b> num > <font color="RoyalBlue">0</font> <b>do</b>
   <b>begin</b>
      <b>while</b> vals[b] > num <b>do</b>
         Dec( b );
      Dec( num, vals[b] );
      Result := Result + roms[b];
   <b>end</b>;
<b>end</b>;
 
<b>procedure</b> TForm1.Button1Click(Sender: TObject);
<b>begin</b>
   ShowMessage( IntToRoman( <font color="RoyalBlue">1561</font> ) );
<b>end</b>;
 
<i><font color="RoyalBlue">/</font><font color="RoyalBlue">/ Способ второй</font></i>
<b>function</b> IntToRoman( num: Cardinal ): <b>string</b>;
<b>const</b>
  N = <font color="RoyalBlue">13</font>;
  vals: <b>array</b> [1..N] <b>of</b> word =
        ( <font color="RoyalBlue">1</font>, <font color="RoyalBlue">4</font>, <font color="RoyalBlue">5</font>, <font color="RoyalBlue">9</font>, <font color="RoyalBlue">10</font>, <font color="RoyalBlue">40</font>, <font color="RoyalBlue">50</font>, <font color="RoyalBlue">90</font>, <font color="RoyalBlue">100</font>, <font color="RoyalBlue">400</font>, <font color="RoyalBlue">500</font>, <font color="RoyalBlue">900</font>, <font color="RoyalBlue">1000</font> );
  roms: <b>array</b> [1..N] <b>of</b> <b>string</b>[2] =
        ( <font color="RoyalBlue">'I'</font>, <font color="RoyalBlue">'IV'</font>, <font color="RoyalBlue">'V'</font>, <font color="RoyalBlue">'IX'</font>, <font color="RoyalBlue">'X'</font>, <font color="RoyalBlue">'XL'</font>, <font color="RoyalBlue">'L'</font>, <font color="RoyalBlue">'XC'</font>, <font color="RoyalBlue">'C'</font>, <font color="RoyalBlue">'CD'</font>, <font color="RoyalBlue">'D'</font>, <font color="RoyalBlue">'CM'</font>, <font color="RoyalBlue">'M'</font> );
<b>var</b>
  b: <font color="RoyalBlue">1</font>..N;
<b>begin</b>
   Result := <font color="RoyalBlue">''</font>;
   b := N;
   <b>while</b> ( num > <font color="RoyalBlue">0</font> ) <b>and</b> ( b >= <font color="RoyalBlue">1</font> ) <b>do</b>
   <b>begin</b>
      <b>if</b> num >= vals[b] <b>then</b>
      <b>begin</b>
         Result := Result + roms[b];
         Dec( num, vals[b] );
      <b>end</b>
      <b>else</b>
         Dec( b );
   <b>end</b>;
<b>end</b>;
 
<b>procedure</b> TForm1.Button1Click(Sender: TObject);
<b>begin</b>
   ShowMessage( IntToRoman( <font color="RoyalBlue">1561</font> ) );
<b>end</b>;

Обратное действие посложнее будет, там надо будет парсер писать... Попробуй самостоятельно (по аналогии)...

По поводу компонента... В инете про это много написано, не вижу смысла повторять все это тут... Ну а если не справишься, пиши, постораюсь помочь (чем смогу)...

Последний раз редактировалось Decoding, 11.11.2006 в 22:04.
Ответить с цитированием
  #3  
Старый 11.11.2006, 22:03
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

А вот и обратная функция
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<b>function</b> RomanToInt( num: <b>string</b> ): integer;
<b>const</b>
  N = <font color="RoyalBlue">13</font>;
  vals: <b>array</b> [<font color="RoyalBlue">1</font>..N] <b>of</b> word =
        ( <font color="RoyalBlue">4</font>, <font color="RoyalBlue">9</font>, <font color="RoyalBlue">40</font>, <font color="RoyalBlue">90</font>, <font color="RoyalBlue">400</font>, <font color="RoyalBlue">900</font>, <font color="RoyalBlue">1</font>, <font color="RoyalBlue">5</font>, <font color="RoyalBlue">10</font>, <font color="RoyalBlue">50</font>, <font color="RoyalBlue">100</font>, <font color="RoyalBlue">500</font>, <font color="RoyalBlue">1000</font> );
 
  roms: <b>array</b> [1..N] <b>of</b> <b>string</b>[2] =
        ( <font color="RoyalBlue">'IV'</font>, <font color="RoyalBlue">'IX'</font>, <font color="RoyalBlue">'XL'</font>, <font color="RoyalBlue">'XC'</font>, <font color="RoyalBlue">'CD'</font>, <font color="RoyalBlue">'CM'</font>, <font color="RoyalBlue">'I'</font>, <font color="RoyalBlue">'V'</font>, <font color="RoyalBlue">'X'</font>, <font color="RoyalBlue">'L'</font>, <font color="RoyalBlue">'C'</font>, <font color="RoyalBlue">'D'</font>, <font color="RoyalBlue">'M'</font> );
<b>var</b>
  i: integer;
<b>begin</b>
   Result := <font color="RoyalBlue">0</font>;
   <b>while</b> Length( num ) > <font color="RoyalBlue">0</font> <b>do</b>
   <b>begin</b>
      <b>for</b> i := Low( roms ) <b>to</b> High( roms ) <b>do</b>
         <b>if</b> AnsiUpperCase( Copy( num, <font color="RoyalBlue">1</font>, Length( roms[i] ) ) ) = roms[i] <b>then</b>
         <b>begin</b>
            Inc( Result, vals[i] );
            Delete( num, <font color="RoyalBlue">1</font>, Length( roms[i] ) );
            Break;
         <b>end</b>;
   <b>end</b>;
<b>end</b>;
Долго тестировал, вроде работает нормально...
Ответить с цитированием
  #4  
Старый 17.11.2006, 21:57
Kassel Kassel вне форума
Прохожий
 
Регистрация: 09.11.2006
Сообщения: 4
Репутация: 10
По умолчанию Decoding

Спасибо большое!!!Ты откуда?Если из Оренбурга-то пиши если будут проблемы:вытрясти долги с кого-нибудь, морду набить и т.д.Обращайся не в чём не откажу!И ещё раз спасибо!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:35.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025