Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 22.12.2018
Сообщений: 5
1

Перевод чисел из одной СС в другую

19.02.2019, 07:15. Показов 777. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, написала программу для перевода чисел между системами счислений, но не не знаю как сделать так, чтобы программа не переводила числа, в которых есть цифры больше чем само основание системы. Понимаю, что нужно делать через for, но не получается. Помогите, пожалуйста.

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
var
  Form1: TForm1;
  i: integer;
  negative: boolean;
  s, s1, s2: string;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure int1(s: string);
var
  base1, base2, x, p, n, d, j, g: integer;
  s1: string;
begin
  x:=0;
  p:=0;
  n:=1;
  d:=0;
  s1:='';
  if (Form1.Edit1.Text<>'') and (Form1.Edit2.Text<>'') and (Form1.Edit4.Text<>'') and (Form1.Edit2.Text<>Form1.Edit4.Text) and (strtoint(Form1.Edit2.Text)<=16) and (strtoint(Form1.Edit2.Text)>=2) and (strtoint(Form1.Edit4.Text)<=16) and (strtoint(Form1.Edit4.Text)>=2) then
    begin
      base1:=strtoint(Form1.Edit2.Text);
      base2:=strtoint(Form1.Edit4.Text);
      if base1<>10 then
      for j:=length(s) downto 1 do
      begin
        if (s[j] in ['A'..'F']) then
          begin
            if s[j]='A' then
              g:=10;
            if s[j]='B' then
              g:=11;
            if s[j]='C' then
              g:=12;
            if s[j]='D' then
              g:=13;
            if s[j]='E' then
              g:=14;
            if s[j]='F' then
              g:=15;
          end
        else
          g:=strtoint(s[j]);
          x:=x+g*trunc(power(base1, p));
          inc(p);
      end
      else
        x:=strtoint(s);
    end;
  if (base2<>10) and (Form1.Edit2.Text<>Form1.Edit4.Text) and (strtoint(Form1.Edit2.Text)<=16) and (strtoint(Form1.Edit2.Text)>=2) and (strtoint(Form1.Edit4.Text)<=16) and (strtoint(Form1.Edit4.Text)>=2) then
  begin
    repeat
    d:=x mod base2;
    x:=x div base2;
    if d<10 then
      s1:=inttostr(d)+s1
    else
    begin
      if d=10 then
      s1:='A'+s1;
      if d=11 then
      s1:='B'+s1;
      if d=12 then
      s1:='C'+s1;
      if d=13 then
      s1:='D'+s1;
      if d=14 then
      s1:='E'+s1;
      if d=15 then
      s1:='F'+s1;
    end;
    until x < base2;
    if (x<>0) and (x<=9) then
    s1:=inttostr(x)+s1
    else if (x<>0) then
    begin
      if x=10 then
      s1:='A'+s1;
      if x=11 then
      s1:='B'+s1;
      if x=12 then
      s1:='C'+s1;
      if x=13 then
      s1:='D'+s1;
      if x=14 then
      s1:='E'+s1;
      if x=15 then
      s1:='F'+s1;
    end;
  end
  else
    s1:=inttostr(x);
  if Form1.Edit2.Text=Form1.Edit4.Text then
    Form1.Edit3.Text:=Form1.Edit1.Text
  else
    Form1.Edit3.Text:=s1;
end;
 
procedure fraction(s: string);
var
  x: real;
  s1: string;
  base1, base2, i: integer;
begin
  i:=1;
  base1:=strtoint(Form1.Edit2.Text);
  base2:=strtoint(Form1.Edit4.Text);
  if base1=10 then
   begin
    x:=strtofloat(s)/power(10, length(s));
    while (x<>0) and (i<10) do
    begin
     x:=x*base2;
     case trunc(x) of
      0..9: s1:=s1+floattostr(int(x));
      10: s1:=s1+'A';
      11: s1:=s1+'B';
      12: s1:=s1+'C';
      13: s1:=s1+'D';
      14: s1:=s1+'E';
      15: s1:=s1+'F';
     end;
     x:=x-int(x);
     inc(i);
    end;
   end
   else
    begin
     for i:=1 to length(s) do
      case s[i] of
       '1'..'9': x:=x+strtoint(s[i])*power(base1, -1*i);
       'A': x:=x+10*power(base1, -1*i);
       'B': x:=x+11*power(base1, -1*i);
       'C': x:=x+12*power(base1, -1*i);
       'D': x:=x+13*power(base1, -1*i);
       'E': x:=x+14*power(base1, -1*i);
       'F': x:=x+15*power(base1, -1*i);
      end;
      if base2<>10 then
      while (x<>0) and (i<10) do
      begin
       x:=x*base2;
       case trunc(x) of
        1..9: s1:=s1+floattostr(int(x));
        10: s1:=s1+'A';
        11: s1:=s1+'B';
        12: s1:=s1+'C';
        13: s1:=s1+'D';
        14: s1:=s1+'E';
        15: s1:=s1+'F';
       end;
       x:=x-int(x);
       inc(i);
      end
      else
       s1:=floattostr(round(x*power(10, length(s))));
    end;
    Form1.Edit3.Text:=Form1.Edit3.Text+'.'+s1;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 negative:=False;
 s2:=Edit1.Text;
 if s2[1]='-' then
 begin
  negative:=True;
  s2:=copy(s2, 2, length(s2)-1);
 end;
 for i:=1 to length(s2)-1 do
  if s2[i]='.' then
   begin
    s:=copy(s2, 1, i-1);
    int1(s);
    s:=copy(s2, i+1, length(s2)-i);
    fraction(s);
    if negative=true then
    Edit3.Text:='-'+Edit3.Text;
    exit;
   end;
   s:=s2;
   int1(s);
   if negative=true then
   Edit3.Text:='-'+Edit3.Text;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  UpDown1.Associate:=Edit2;
  UpDown2.Associate:=Edit4;
  Edit2.Text:='10';
  Edit4.Text:='2';
end;
end.
Миниатюры
Перевод чисел из одной СС в другую  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2019, 07:15
Ответы с готовыми решениями:

Перевод чисел из одной с/с в другую
Нужна помощь!!! Разработка в среде Turbo Pascal программы, реализующей перевод из одной системы...

Перевод чисел из одной сс в другую
Здравствуйте, помогите пожалуйста перевести код функции переводящий число из десятичной сс в...

Перевод чисел из одной системы в другую
Есть задание: создать программу переводящую число из одной системы счисления в другую. Исходное...

Перевод целых чисел из одной сс в другую
аааа помогите пожалуйса)))задачу на Pascal:Превод целых чисел из 4-&gt;10-&gt;2-8

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
19.02.2019, 11:03 2
Все проще:
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
implementation
uses strutils;
 
{$R *.lfm}
 
function Check(s : string; base : Integer) : Boolean;
const
  a : string = '0123456789ABCDEF';
var
  ch : char;
begin
  Result := True;
  for ch in s do Result := Result and (Pos(ch, a) in [1 .. base + 1]);
end;
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var
  n, base_from, base_to : Integer;
  sign : boolean;
  st : string;
begin
  base_from := StrToInt(Edit2.Text); // Edit2 - из какой СС переводим
  base_to := StrToInt(Edit3.Text); // Edit3 - в какую СС переводим
 
  sign := Edit1.Text[1] = '-';
  st := Copy(Edit1.Text, 1 + Ord(sign), Length(Edit1.Text) - Ord(sign)); // Edit1 - то значение, которое надо перевести в другую СС
  if Check(st, base_from) then
  begin
    n := Numb2Dec(st, base_from);
    Edit4.Text := IfThen(sign, '-', '') + Dec2Numb(n, 0, base_to);
  end
  else ShowMessage('Ошибка');
end;
Это все, никаких диких возведений в степень или case-ов не нужно.
0
0 / 0 / 0
Регистрация: 22.12.2018
Сообщений: 5
19.02.2019, 12:49  [ТС] 3
Спасибо большое. Но раньше можно было переводить и вещественные числа, как это здесь осуществить?
0
19.02.2019, 12:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2019, 12:49
Помогаю со студенческими работами здесь

ПЕРЕВОД дробных чисел из одной системы счисления в другую. СПОСОБЫ ВНУТРЕННЕГО представления чисел с фиксированной точк
2) Создать блок-схему алгоритма программы перевода правильных дробей из одной системы счисления в...

Перевод чисел из одной системы счисления в другую
Дорогие форумчане, объясните пожалуйста мне значение каждой строчки: var Form1: TForm1; ...

Перевод чисел из одной системы счислений в другую
Помогите перевести из двоичной в десятичную число 110,01е10. В задании написано что это число есть...

Перевод чисел из одной системы счисления в другую
D4h 70h Помогите перевести данные числа из шестнадцатеричной в двоичную, десятичную со...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru