Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
N000Yn
0 / 0 / 0
Регистрация: 12.03.2014
Сообщений: 3
1

Если строка является записью римского числа, то преобразуйте ее в целое число

12.03.2014, 00:54. Просмотров 916. Ответов 10
Метки нет (Все метки)

Вводиться строка. Если она является записью римского числа, то преобразуйте ее в целое число.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2014, 00:54
Ответы с готовыми решениями:

Определить, является ли текст правильной записью римскими цифрами целого числа от 1 до 999, и, если является, вывести на экран число арабским
Вот как звучит задача:дан текст из заглавных латинских букв, за которым следует...

Выяснить, является ли строка идентификатором переменной или десятичной записью числа
Помогите пожауйста! Дана строка; выяснить, является ли она идентификатором...

Является ли введенная строка правильной записью целого десятичного числа без знака?
Пожалуйста помогите с задачей. Определить, не используя стандартную процедуру,...

Дана строка, изображающая целое число. Вывести сумму цифр этого числа.
Помогите пожалуйста написать программы на форме самым примитивным...

Является ли подстрока числом? Если да, выяснить: целое или вещественное число, положительное или отрицательное
Недавно только поступил на программирование. С делфи еще совсем не освоился,...

10
FantomaS91
5 / 5 / 0
Регистрация: 26.05.2010
Сообщений: 65
12.03.2014, 09:12 2
Кидаешь на форму Едит и Батон далее код по Батону:
Delphi
1
2
3
4
5
6
case Edit1.Text do
'I': Edit1.Text:='1';
'II': Edit1.Text:='2';
'III': Edit1.Text:='3';
...
else ShowMessage('Введенный текст не является римским числом');
Добавлено через 2 минуты
Извените ошибся, щас подправлю
0
droider
Universal
Эксперт Pascal/Delphi
4405 / 2451 / 765
Регистрация: 04.10.2012
Сообщений: 8,911
12.03.2014, 09:43 3
FantomaS91, вряд ли Ваш вариант будет работать. Можно так
Delphi
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
function RomanToInt(const romanNumber : string) : integer ;
 const
   romanChars = 'IVXLCDMvxlcdm?!#' ;
   decades : array [0..8] of integer = (0, 1, 10, 100, 1000, 10000, 100000,
         1000000, 10000000) ;
   OneFive : array [boolean] of byte = (1, 5) ;
 var
   newValue, oldValue : integer ;
   cIdx, P : byte ;
 begin
   result := 0;
   oldValue := 0 ;
   for cIdx := Length(romanNumber) downto 1 do
   begin
     P := Succ(Pos(romanNumber[cIdx], romanChars)) ;
     newValue := OneFive[Odd(P)] * decades[P div 2] ;
     if newValue = 0 then
     begin
       result := -1;
       Exit;
     end ;
     if newValue < oldValue then newValue := - newValue ;
     Inc(result, newValue) ;
     oldValue := newValue
   end ;
 end;
 
procedure TForm1.btn1Click(Sender: TObject);
begin
ShowMessage('Данное число: '+IntToStr(RomanToInt(edt1.text)));
end;
 
end.
0
Николайчик
0 / 0 / 1
Регистрация: 23.11.2014
Сообщений: 136
30.11.2014, 13:19 4
Цитата Сообщение от droider Посмотреть сообщение
FantomaS91, вряд ли Ваш вариант будет работать. Можно так
Delphi
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
function RomanToInt(const romanNumber : string) : integer ;
 const
   romanChars = 'IVXLCDMvxlcdm?!#' ;
   decades : array [0..8] of integer = (0, 1, 10, 100, 1000, 10000, 100000,
         1000000, 10000000) ;
   OneFive : array [boolean] of byte = (1, 5) ;
 var
   newValue, oldValue : integer ;
   cIdx, P : byte ;
 begin
   result := 0;
   oldValue := 0 ;
   for cIdx := Length(romanNumber) downto 1 do
   begin
     P := Succ(Pos(romanNumber[cIdx], romanChars)) ;
     newValue := OneFive[Odd(P)] * decades[P div 2] ;
     if newValue = 0 then
     begin
       result := -1;
       Exit;
     end ;
     if newValue < oldValue then newValue := - newValue ;
     Inc(result, newValue) ;
     oldValue := newValue
   end ;
 end;
 
procedure TForm1.btn1Click(Sender: TObject);
begin
ShowMessage('Данное число: '+IntToStr(RomanToInt(edt1.text)));
end;
 
end.
А как сделать так чтобы переводилось наоборот с десятичной системы счисления в римские?
0
newyork7776
350 / 343 / 279
Регистрация: 21.05.2013
Сообщений: 1,313
Завершенные тесты: 1
30.11.2014, 13:37 5
Pascal
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
var
  x: integer;
 
begin
  read(x);
  if x = 100
    then
      write('C')
    else
     begin
 
      case x div 10 of
       1: write('X');
       2: write('XX');
       3: write('XXX');
       4: write('XL');
       5: write('L');
       6: write('LX');
       7: write('LXX');
       8: write('LXXX');
       9: write('XC');
      end;
 
 
      case x mod 10 of
       1: write('I');
       2: write('II');
       3: write('III');
       4: write('IV');
       5: write('V');
       6: write('VI');
       7: write('VII');
       8: write('VIII');
       9: write('IX');
     end;
   end;
readln;
readln;
end.
Добавлено через 12 минут
вот delphi
Кликните здесь для просмотра всего текста
Delphi
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
57
58
59
60
61
62
63
64
65
66
67
68
69
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    function qwe(var str:string):string;
  end;
 
var Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var tmp:string;
begin
  tmp:=edit1.Text;
  Label1.Caption:=self.qwe(tmp);
end;
 
function TForm1.qwe(var str: string): string;
var x: integer;
    ans:string;
begin
  x:=strtoint(str);
  ans:='';
  if x = 100
    then
      ans:='C'
    else
     begin
 
      case x div 10 of
       1: ans:=ans+'X';
       2: ans:=ans+('XX');
       3: ans:=ans+('XXX');
       4: ans:=ans+('XL');
       5: ans:=ans+('L');
       6: ans:=ans+('LX');
       7: ans:=ans+('LXX');
       8: ans:=ans+('LXXX');
       9: ans:=ans+('XC');
      end;
 
 
      case x mod 10 of
       1: ans:=ans+('I');
       2: ans:=ans+('II');
       3: ans:=ans+('III');
       4: ans:=ans+('IV');
       5: ans:=ans+('V');
       6: ans:=ans+('VI');
       7: ans:=ans+('VII');
       8: ans:=ans+('VIII');
       9: ans:=ans+('IX');
     end;
   end;
  Result := ans;
end;
 
 
end.
0
Николайчик
0 / 0 / 1
Регистрация: 23.11.2014
Сообщений: 136
30.11.2014, 14:17 6
Показует ошыбку ShowMessage('Данное число: '+IntToStr(RomanToInt(edt1.text))); а точнее в (edt1.text). Что не правильно?

Добавлено через 2 минуты
Цитата Сообщение от droider Посмотреть сообщение
FantomaS91, вряд ли Ваш вариант будет работать. Можно так
Delphi
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
function RomanToInt(const romanNumber : string) : integer ;
 const
   romanChars = 'IVXLCDMvxlcdm?!#' ;
   decades : array [0..8] of integer = (0, 1, 10, 100, 1000, 10000, 100000,
         1000000, 10000000) ;
   OneFive : array [boolean] of byte = (1, 5) ;
 var
   newValue, oldValue : integer ;
   cIdx, P : byte ;
 begin
   result := 0;
   oldValue := 0 ;
   for cIdx := Length(romanNumber) downto 1 do
   begin
     P := Succ(Pos(romanNumber[cIdx], romanChars)) ;
     newValue := OneFive[Odd(P)] * decades[P div 2] ;
     if newValue = 0 then
     begin
       result := -1;
       Exit;
     end ;
     if newValue < oldValue then newValue := - newValue ;
     Inc(result, newValue) ;
     oldValue := newValue
   end ;
 end;
 
procedure TForm1.btn1Click(Sender: TObject);
begin
ShowMessage('Данное число: '+IntToStr(RomanToInt(edt1.text)));
end;
 
end.
Показует ошыбку ShowMessage('Данное число: '+IntToStr(RomanToInt(edt1.text))); а точнее в (edt1.text). Что не правильно?
0
droider
Universal
Эксперт Pascal/Delphi
4405 / 2451 / 765
Регистрация: 04.10.2012
Сообщений: 8,911
30.11.2014, 14:23 7
Цитата Сообщение от Николайчик Посмотреть сообщение
Что не правильно?
то, что у Вас TEdit называется не "edt1", а скорее всего, по умолчанию - "Edit1", если Вы его не переименовывали как-то иначе.
0
newyork7776
350 / 343 / 279
Регистрация: 21.05.2013
Сообщений: 1,313
Завершенные тесты: 1
30.11.2014, 16:10 8
Delphi
1
2
3
4
5
6
procedure TForm1.btn1Click(Sender: TObject);
var str:string;
begin
str:=edt1.text;
ShowMessage('Данное число: '+IntToStr(RomanToInt(str)));
end;
попробуйте так,или вместо edt1 напишите свое название компонента
0
Николайчик
0 / 0 / 1
Регистрация: 23.11.2014
Сообщений: 136
30.11.2014, 16:36 9
Цитата Сообщение от newyork7776 Посмотреть сообщение
Pascal
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
var
  x: integer;
 
begin
  read(x);
  if x = 100
    then
      write('C')
    else
     begin
 
      case x div 10 of
       1: write('X');
       2: write('XX');
       3: write('XXX');
       4: write('XL');
       5: write('L');
       6: write('LX');
       7: write('LXX');
       8: write('LXXX');
       9: write('XC');
      end;
 
 
      case x mod 10 of
       1: write('I');
       2: write('II');
       3: write('III');
       4: write('IV');
       5: write('V');
       6: write('VI');
       7: write('VII');
       8: write('VIII');
       9: write('IX');
     end;
   end;
readln;
readln;
end.
Добавлено через 12 минут
вот delphi
Кликните здесь для просмотра всего текста
Delphi
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
57
58
59
60
61
62
63
64
65
66
67
68
69
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    function qwe(var str:string):string;
  end;
 
var Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var tmp:string;
begin
  tmp:=edit1.Text;
  Label1.Caption:=self.qwe(tmp);
end;
 
function TForm1.qwe(var str: string): string;
var x: integer;
    ans:string;
begin
  x:=strtoint(str);
  ans:='';
  if x = 100
    then
      ans:='C'
    else
     begin
 
      case x div 10 of
       1: ans:=ans+'X';
       2: ans:=ans+('XX');
       3: ans:=ans+('XXX');
       4: ans:=ans+('XL');
       5: ans:=ans+('L');
       6: ans:=ans+('LX');
       7: ans:=ans+('LXX');
       8: ans:=ans+('LXXX');
       9: ans:=ans+('XC');
      end;
 
 
      case x mod 10 of
       1: ans:=ans+('I');
       2: ans:=ans+('II');
       3: ans:=ans+('III');
       4: ans:=ans+('IV');
       5: ans:=ans+('V');
       6: ans:=ans+('VI');
       7: ans:=ans+('VII');
       8: ans:=ans+('VIII');
       9: ans:=ans+('IX');
     end;
   end;
  Result := ans;
end;
 
 
end.
А как вывести результат не в Label1 а в Edit2??
0
newyork7776
350 / 343 / 279
Регистрация: 21.05.2013
Сообщений: 1,313
Завершенные тесты: 1
30.11.2014, 16:55 10
Edit2.text:=....
0
droider
Universal
Эксперт Pascal/Delphi
4405 / 2451 / 765
Регистрация: 04.10.2012
Сообщений: 8,911
30.11.2014, 16:56 11
Цитата Сообщение от Николайчик Посмотреть сообщение
как вывести результат не в Label1 а в Edit2??
заменить соответственно
Delphi
1
2
...
Edit2.Text :=self.qwe(tmp);
Читайте основы.
0
30.11.2014, 16:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2014, 16:56

Если данное целое число оно является отрицательным, то прибавить к нему 5; в противном случае прибавить 10
Дано целое число. Если оно является отрицательным , то прибавить к нему 5; в...

Дано целое число N(>0) и строка S. Преобразовать строку S в строку длинны N следующим образом: если длинна строки S больше Т, то отбросить первые симв
Дано целое число N(&gt;0) и строка S. Преобразовать строку S в строку длинны N...

Если число является степенью числа 3, то вывести true, иначе false
У меня есть код паскаля uses crt; var n,k:integer; begin clrscr; repeat...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru