0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 30

Перевод в различные системы счисления

12.05.2016, 23:01. Показов 3304. Ответов 24
Метки нет (Все метки)

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

Исходный код:
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
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
PROGRAM maxkur;
Const
a:string[36]='0123456789ABCDEFGHIJKLMNJPQRSTUVWXYZ';
Function StrToInt(const s:String): Integer;
var
Result, code:integer;
begin
 val(s,Result,code);
 if (code<>0)
 then
  Result:=0;
 StrToInt:=Result;
end;
function ToDec(var Result:string;cc:byte):integer;
var
i,n,sum:integer;
begin
sum:=0;
n:=length(Result);
for i:=1 to n do
 begin
 dec(n);
 sum:=sum+round((pos(Result[i],a)-1)*exp(ln(cc)*n));
 end;
 ToDec:=sum;
 end;
function Convert(numb:integer; const c: byte):string;
var
Result:string;
begin
Result:='';
repeat
 Result:=a[numb mod c +1]+Result;
 numb:=numb div c;
until (numb=0);
Convert:=Result;
end;
function ShowMenu():Byte;
var
Result:byte;
begin
repeat
writeln('В какую систему счисления переводить? ');
readln(Result);
until (Result in [2..16]);
ShowMenu:=Result;
end;
var
f:File of Char;
s:string;
temp:byte;
c:char;
begin
assign(f,'f.txt');
reset(f);
s:='';
while not (eof(f)) do
begin
read(f,c);
if (c in ['0'..'Z'])
then
temp:=ToDec;
s:=s+c
else
if (c=',')
then
begin
temp:=ShowMenu();
writeln(s,'=',Convert(StrToInt(s), temp));
s:='';
case temp of
7:writeln('Перевод в троичную систему счисления');
0:writeln('Перевод с обратным кодом');
1:writeln('Первод с дополнительным кодом');
end;
if (temp<>7)and(temp<>1)and(temp<>0) then
begin
Writeln('Операция не осуществлена');
halt;
end;
end
end;
temp:=ShowMenu();
writeln(s,'=',Convert(StrToInt(s),temp));
close(f);
end.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.05.2016, 23:01
Ответы с готовыми решениями:

Перевод в различные системы счисления
Довольно частенько спрашивают перевод из одной СС в другую и поэтому я решил выложить исходник по переводу.Думаю кому нибудь да...

Перевод в различные системы счисления
Доброго времени суток. Тут мне выдали пару задач которые нужно решить, но я немного отсталый в программирование. Помогите пожалуйста. А...

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

24
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
12.05.2016, 23:32
Цитата Сообщение от MaxKate Посмотреть сообщение
Если с переводом из одной сс в другую все более-менее ясно, то здесь я явно что-то напортачила
а, ну да, ну да... совсем не палитесь, "сударыня".
1
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 30
13.05.2016, 06:48  [ТС]
Дело в том, что Ваша программа мне очень помогла, и я взяла ее за основу, за что я Вам очень благодарна
Если Вас это раздражает, я могу все переделать, но проблема для меня так же останется открытой. Очень долго искала по дополнительному и обратному коду, но не пойму какую функцию и где использовать.
0
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
13.05.2016, 10:49
Лучший ответ Сообщение было отмечено MaxKate как решение

Решение

говнокод, конечно, но проверяйте.
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
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
const
    a: string[17] = '0123456789ABCDEF-';
function StrToInt(const s: String): LongInt;
var
    Result: LongInt;
    code: Integer;
begin
    Val(s, Result, code);
    if (code <> 0)
    then
        Result := 0;
    StrToInt := Result;
end;
function IntToStr(const i: LongInt): String;
var
    Result: String;
begin
    Str(i, Result);
    IntToStr := Result;
end;
function AnyToDec(s: String; const base: Byte): LongInt;
var
    Result: LongInt;
    i, n: Byte;
    flag: Boolean;
begin
    flag := (s[1] = '-');
    if (flag)
    then
        Delete(s, 1, 1);
    Result := 0;
    n := Length(s);
    for i := 1 to n do
    begin
        Dec(n);
        Inc(Result, Round((Pos(s[i], a) - 1) * Exp(Ln(base) * n)));
    end;
    if (flag)
    then
        Result := -Result;
    AnyToDec := Result;
end;
function DecToAny(numb: LongInt; const base: Byte): String;
var
    Result: String;
    flag: Boolean;
begin
    flag := (numb < 0);
    if (flag)
    then
        numb := Abs(numb);
    Result := '';
    repeat
        Result := a[numb mod base + 1] + Result;
        numb := numb div base;
    until (numb = 0);
    if (flag)
    then
        Result := '-' + Result;
    DecToAny := Result;
end;
procedure FullLength(var s: String);
begin
    while (Length(s) < 7) do
        s := '0' + s;
end;
function Direct(const s: String): String;
var
    Result: String;
begin
    Result := s;
    if (s[1] = '-')
    then
        Delete(Result, 1, 1);
    FullLength(Result);
    if (s[1] = '-')
    then
        Result := '1' + Result
    else
        Result := '0' + Result;
    Direct := Result;
end;
function Reverse(const s: String; const base: Byte): String;
var
    Result: String;
    i: Byte;
begin
    Result := s;
    if (s[1] = '-')
    then
        Delete(Result, 1, 1);
    FullLength(Result); Result := '0' + Result;
    if (s[1] = '-')
    then
        for i := 1 to Length(Result) do
            Result[i] := IntToStr(base - 1 - StrToInt(Result[i]))[1];
    Reverse := Result;
end;
function Additional(const s: String; const base: Byte): String;
var
    Result: String;
begin
    Result := Reverse(s, base);
    if (s[1] = '-')
    then
        Result := DecToAny(1 + AnyToDec(Result, base), base);
    Additional := Result;
end;
 
function ShowMenu(): Byte;
var
    Result: Byte;
begin
    repeat
        WriteLn('1. Прямое представление.');
        WriteLn('2. Обратное представление.');
        WriteLn('3. Дополнительное представление');
        ReadLn(Result);
    until (Result in [1..3]);
    ShowMenu := Result;
end;
var
    f: File Of Char;
    s, ans: String;
    c: Char;
begin
    Assign(f, 'f.txt'); ReSet(f);
    s := '';
    while Not (EoF(f)) do
    begin
        Read(f, c);
        if (Pos(c, a) > 0)
        then
        begin
            if ((c = '-') And (Length(s) = 0)) Or (c <> '-')
            then
                s := s + c;
        end
        else
            if (c = ',')
            then
            begin
                ans := DecToAny(AnyToDec(s, 16), 7);
                if (s[1] <> '-')
                then
                    WriteLn(s, '=', Direct(ans))
                else
                begin
                    case ShowMenu() of
                        1: WriteLn(s, '=', Direct(ans));
                        2: WriteLn(s, '=', Reverse(ans, 7));
                        3: WriteLn(s, '=', Additional(ans, 7));
                    end;
                end;
                s := '';
            end
    end;
    Close(f);
    ans := DecToAny(AnyToDec(s, 16), 7);
    if (s[1] <> '-')
    then
        WriteLn(s, '=', Direct(ans))
    else
    begin
        case ShowMenu() of
            1: WriteLn(s, '=', Direct(ans));
            2: WriteLn(s, '=', Reverse(ans, 7));
            3: WriteLn(s, '=', Additional(ans, 7));
        end;
    end;
end.
1
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 30
13.05.2016, 21:49  [ТС]
Спасибо огромное, Вы не представляете, как помогли !
0
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 30
16.05.2016, 15:17  [ТС]
JokeR.BY, Здравствуйте, еще раз извиняюсь за беспокойство. Второй день ломаю голову, что же не так с программой, которую вы прислали. Перепробовала уже исправить практически все, но только хуже сделала. Очень нужна ваша помощь, если это возможно
0
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
16.05.2016, 15:53
MaxKate, а что с ней не так?
1
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 30
16.05.2016, 15:58  [ТС]
JokeR.BY, Компиляция проходит без ошибок, но при запуске не появляется ни меню, ни чего-либо еще, в консоль выводит значения чисел в 7-ой системе с приписанными нулями
0
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
16.05.2016, 16:01
MaxKate, недвусмысленный намёк: прямое, обратное и дополнительное представление будет идентично для положительных чисел. следовательно, смысла "вопрошать" нет.
1
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 30
16.05.2016, 16:15  [ТС]
JokeR.BY, Извините за беспокойство, пожалуйста, и спасибо огромное за помощь! Возникло маленькое недопонимание.В голове почему-то сидело, что дополнительный и обратный код реализуются только в двоичной системе счисления
0
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 30
20.05.2016, 13:56  [ТС]
JokeR.BY, извините, не совсем понимаю, как в данном случае задать диапазон и сделать так, чтобы программа переводила в обратный и дополнительный код не 7-ые, а 16-ые числа
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,157
Записей в блоге: 1
20.05.2016, 15:59
Хинт:
для перевода из 16-ричной системы в числовое представление можно использовать Val, указав перед строковым представлением '$'.
Pascal
1
2
3
4
5
6
7
var n, e: Integer;
begin
  Val('$BEAF',n,e);
  if e=0
  then WriteLn(n)
  else WriteLn('Ошибка');
end.
0
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 30
25.05.2016, 22:45  [ТС]
JokeR.BY, скажите, пожалуйста, я совсем запуталась, как новичку очень тяжело сразу "рассекать" в таких громоздких задачах, вот преобразовывала я код, преобразовывала, и что-то совсем все плохо стало. Очень нужно так же диапазон, но только он должен быть сделан так, чтобы выводить не для каждого элемента из диапазона, а сразу строку со всеми переведенными числами из диапазона (например, 12=123 14=1234 1=1)
при этом сохранить результат нужно в другой чистый файл
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
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
198
program maxkur;
const
a:string[17]='0123456789ABCDEF-';
function StrToInt(const s:String):longint;
var
Result:longint;
code:integer;
begin
val(s,Result,code);
if (code<>0)
then
Result:=0;
StrToInt:=Result;
end;
function IntToStr(const i:longint):String;
var
Result:string;
begin
Str(i,Result);
IntToStr:=Result;
end;
function AnyToDec(s:string; const base:byte):longint;
var
Result:longint;
i,n:byte;
flag:boolean;
begin
flag:=(s[1]='-');
if (flag)
then
delete(s,1,1);
Result:=0;
n:=length(s);
for i:=1 to n do
begin
dec(n);
inc(Result,Round((Pos(s[i],a)-1)*exp(ln(base)*n)));
end;
if(flag)
then
Result:=-Result;
AnyToDec:=Result;
end;
function DecToAny(numb:longint; const base:byte):string;
var
Result:string;
flag:boolean;
begin
flag:=(numb<0);
if(flag)
then
numb:=abs(numb);
Result:='';
repeat
Result:=a[numb mod base +1]+Result;
numb:=numb div base;
until(numb=0);
if(flag)
then
Result:='-'+Result;
DecToAny:=Result;
end;
procedure FullLength(var s:string);
begin
while(length(s)<7) do
s:='0'+s;
end;
function Direct(const s:string):string;
var
Result:string;
begin
Result:=s;
if(s[1]='-')
then
delete(Result,1,1);
FullLength(Result);
if(s[1]='-')
then
Result:='1'+Result
else
Result:='0'+Result;
Direct:=Result;
end;
function Reverse(const s:string; const base:byte):string;
var
Result:string;
i:byte;
begin
Result:=s;
if(s[1]='-')
then
delete(Result,1,1);
FullLength(Result);
Result:='0'+Result;
if(s[1]='-')
then
for i:=1 to length(Result) do
Result[i]:=IntToStr(base-1-StrToInt(Result[i]))[1];
Reverse:=Result;
end;
function Additional(const s:String; const base:byte):string;
var
Result:string;
begin
Result:=Reverse(s,base);
if(s[1]='-')
then
Result:=DecToAny(1+AnyToDec(Result,base),base);
Additional:=Result;
end;
function ShowMenu():Byte;
var
Result:Byte;
begin
repeat
writeln('1.ЏаאַҐ ЇаҐ¤бв*ў«Ґ*ЁҐ.');
writeln('2.ЋЎа*в*®Ґ ЇаҐ¤бв*ў«Ґ*ЁҐ.');
writeln('3.„®Ї®«*ЁвҐ«м*®Ґ ЇаҐ¤бв*ў«Ґ*ЁҐ');
writeln('4.‚л室 Ё§ Їа®Ја*¬¬л');
readln(Result);
until(Result in [1..4]);
ShowMenu:=Result;
if result=4 then
begin
writeln ('Џа®Ја*¬¬* §*ўҐаиҐ**');
halt;
end;
end;
var
f:file of char;
s,ans:string;
c:char;
diap1,diap2,h:longint;
begin
assign(f,'f.txt');
ReSet(f);
s:='';
writeln('‚ўҐ¤ЁвҐ *Ё¦*ҐҐ §**зҐ*ЁҐ ¤Ё*Ї*§®**');
read (diap1);
writeln('‚ўҐ¤ЁвҐ ўҐае*ҐҐ §**зҐ*ЁҐ ¤Ё*Ї*§®**');
read(diap2);
while not (eof(f)) do
begin
read(f,c);
h:=strtoint(c);
if (h>=diap1)and(h<=diap2) then
begin
for h:=diap1 to diap2 do
begin
if(Pos(c,a)>0)
then
begin
if((c='-')and(length(s)=0))or(c<>'-')
then
s:=s+c;
end
else
if(c='.')
then
begin
WRITELN('ЋиЁЎЄ*, *ҐЄ®а४в*л© бЁ¬ў®«');
halt;
end
ELSE
if(c=',')
then
begin
ans:=DecToAny(AnyToDec(s,16),7);
if(s[1]<>'-')
then
writeln(s,'=',Direct(ans))
else
begin
case ShowMenu()of
1:writeln(s,'=',Direct(ans));
2:writeln(s,'=',Reverse(ans,7));
3:writeln(s,'=',Additional(ans,7));
end;
end;
end;
s:='';
end;
ans:=DecToAny(AnyToDec(s,16),7);
if(s[1]<>'-')
then
Writeln(s,'=',Direct(ans))
else
begin
case ShowMenu() of
1:writeln(s,'=',Direct(ans));
2:writeln(s,'=',Reverse(ans,7));
3:writeln(s,'=',Additional(ans,7));
end;
end;
end;
end;
close(f);
end.
Добавлено через 2 часа 22 минуты
JokeR.BY, попробовала сделать, чтобы в обратный и дополнительный код переводились числа в 16-ричной системе счисления (как оказалось, именно это и нужно)
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
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
program maxkur;
const
a:string[17]='0123456789ABCDEF-';
function StrToInt(const s:String):longint;
var
Result:longint;
code:integer;
begin
val(s,Result,code);
if (code<>0)
then
Result:=0;
StrToInt:=Result;
end;
function IntToStr(const i:longint):String;
var
Result:string;
begin
Str(i,Result);
IntToStr:=Result;
end;
function AnyToDec(s:string; const base:byte):longint;
var
Result:longint;
i,n:byte;
flag:boolean;
begin
flag:=(s[1]='-');
if (flag)
then
delete(s,1,1);
Result:=0;
n:=length(s);
for i:=1 to n do
begin
dec(n);
inc(Result,Round((Pos(s[i],a)-1)*exp(ln(base)*n)));
end;
if(flag)
then
Result:=-Result;
AnyToDec:=Result;
end;
function DecToAny(numb:longint; const base:byte):string;
var
Result:string;
flag:boolean;
begin
flag:=(numb<0);
if(flag)
then
numb:=abs(numb);
Result:='';
repeat
Result:=a[numb mod base +1]+Result;
numb:=numb div base;
until(numb=0);
if(flag)
then
Result:='-'+Result;
DecToAny:=Result;
end;
procedure FullLength(var s:string);
begin
while(length(s)<7) do
s:='0'+s;
end;
function Direct(const s:string):string;
var
Result:string;
begin
Result:=s;
if(s[1]='-')
then
delete(Result,1,1);
FullLength(Result);
if(s[1]='-')
then
Result:='1'+Result
else
Result:='0'+Result;
Direct:=Result;
end;
function Reverse(const s:string; const base:byte):string;
var
Result:string;
i:byte;
begin
Result:=s;
if(s[1]='-')
then
delete(Result,1,1);
FullLength(Result);
Result:='0'+Result;
if(s[1]='-')
then
for i:=1 to length(Result) do
Result[i]:=IntToStr(base-1-StrToInt(Result[i]))[1];
Reverse:=Result;
end;
function Additional(const s:String; const base:byte):string;
var
Result:string;
begin
Result:=Reverse(s,base);
if(s[1]='-')
then
Result:=DecToAny(1+AnyToDec(Result,base),base);
Additional:=Result;
end;
function ShowMenu():Byte;
var
Result:Byte;
begin
repeat
writeln('1.ЏаאַҐ ЇаҐ¤бв*ў«Ґ*ЁҐ.');
writeln('2.ЋЎа*в*®Ґ ЇаҐ¤бв*ў«Ґ*ЁҐ.');
writeln('3.„®Ї®«*ЁвҐ«м*®Ґ ЇаҐ¤бв*ў«Ґ*ЁҐ');
writeln('4.‚л室 Ё§ Їа®Ја*¬¬л');
readln(Result);
until(Result in [1..4]);
ShowMenu:=Result;
if result=4 then
begin
writeln ('Џа®Ја*¬¬* §*ўҐаиҐ**');
halt;
end;
end;
var
f:file of char;
s,ans:string;
nas,z:integer;
c:char;
begin
assign(f,'f.txt'); ReSet(f);
s:='';
while not (eof(f)) do
begin
read(f,c);
if(Pos(c,a)>0)
then
begin
if((c='-')and(length(s)=0))or(c<>'-')
then
s:=s+c;
end
else
 
if(c='.')
then
begin
WRITELN('ЋиЁЎЄ*, *ҐЄ®а४в*л© бЁ¬ў®«');
close(f);
halt;
end
ELSE
if(c=',')
then
begin
ans:=DecToAny(AnyToDec(s,16),7);
z:=val(s,nas);
case ShowMenu()of
1:writeln(s,'=',Direct(ans));
2:writeln(s,'=',Reverse(z));
3:writeln(s,'=',Additional(z));
end;
end;
s:='';
end;
close(f);
end.
Добавлено через 5 часов 17 минут
JokeR.BY, если Вам не сложно, помогите, пожалуйста, в последний раз
Цитата Сообщение от MaxKate Посмотреть сообщение
Очень нужно так же диапазон, но только он должен быть сделан так, чтобы выводить не для каждого элемента из диапазона, а сразу строку со всеми переведенными числами из диапазона (например, 12=123 14=1234 1=1)
при этом сохранить результат нужно в другой чистый файл
Цитата Сообщение от MaxKate Посмотреть сообщение
чтобы в обратный и дополнительный код переводились числа в 16-ричной системе счисления (как оказалось, именно это и нужно)
0
25.05.2016, 23:26

Не по теме:

чутка позже. пишу жене лабы по плюсам :umnik:

0
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 30
25.05.2016, 23:53  [ТС]
JokeR.BY, спасииибо!)
0
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 30
27.05.2016, 08:19  [ТС]
JokeR.BY, извините,пожалуйста, за навязчивость
я только хотела уточнить, как переделать, чтобы перевод в обратный и дополнительный код осуществлялся для 16-ой системы, а не для 7-ой?
Понимаю, что вы очень заняты, но очень нужна помощь(
0
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
27.05.2016, 15:54
MaxKate, там у функции DecToAny два параметра: само число, которое будем переводить, и база (т.е. в какую СС переводим). вот на вызове этих функций поменять 7-ку на 16.
1
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 30
27.05.2016, 22:25  [ТС]
JokeR.BY, я исправила, но что-то не то
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
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
program maxkur;
const
a:string[17]='0123456789ABCDEF-';
function StrToInt(const s:String):longint;
var
Result:longint;
code:integer;
begin
val(s,Result,code);
if (code<>0)
then
Result:=0;
StrToInt:=Result;
end;
function IntToStr(const i:longint):String;
var
Result:string;
begin
Str(i,Result);
IntToStr:=Result;
end;
function AnyToDec(s:string; const base:byte):longint;
var
Result:longint;
i,n:byte;
flag:boolean;
begin
flag:=(s[1]='-');
if (flag)
then
delete(s,1,1);
Result:=0;
n:=length(s);
for i:=1 to n do
begin
dec(n);
inc(Result,Round((Pos(s[i],a)-1)*exp(ln(base)*n)));
end;
if(flag)
then
Result:=-Result;
AnyToDec:=Result;
end;
function DecToAny(numb:longint; const base:byte):string;
var
Result:string;
flag:boolean;
begin
flag:=(numb<0);
if(flag)
then
numb:=abs(numb);
Result:='';
repeat
Result:=a[numb mod base +1]+Result;
numb:=numb div base;
until(numb=0);
if(flag)
then
Result:='-'+Result;
DecToAny:=Result;
end;
procedure FullLength(var s:string);
begin
while(length(s)<7) do
s:='0'+s;
end;
function Direct(const s:string):string;
var
Result:string;
begin
Result:=s;
if(s[1]='-')
then
delete(Result,1,1);
FullLength(Result);
if(s[1]='-')
then
Result:='1'+Result
else
Result:='0'+Result;
Direct:=Result;
end;
function Reverse(const s:string; const base:byte):string;
var
Result:string;
i:byte;
begin
Result:=s;
if(s[1]='-')
then
delete(Result,1,1);
FullLength(Result);
Result:='0'+Result;
if(s[1]='-')
then
for i:=1 to length(Result) do
Result[i]:=IntToStr(base-1-StrToInt(Result[i]))[1];
Reverse:=Result;
end;
function Additional(const s:String; const base:byte):string;
var
Result:string;
begin
Result:=Reverse(s,base);
if(s[1]='-')
then
Result:=DecToAny(1+AnyToDec(Result,base),base);
Additional:=Result;
end;
 
var
f:file of char;
b:text;
s,ans,nas,z:string;
m,k,numb:integer;
c:char;
base:byte;
begin
 
 
 
 Write('Ќ*з*«м*®Ґ §**зҐ*ЁҐ ¤Ё*Ї*§®** m=');
 ReadLn(m);
    repeat
        Write('Љ®*Ґз*®Ґ §**票Ґ ¤Ё*Ї*§®** k (>=', m, ')=');
        ReadLn(k);
    until (k >= m);
    repeat
    writeln('‚ Є*Єго бЁб⥬г бзЁб«Ґ*Ёп *Ґ®Ўе®¤Ё¬® Їа®Ё§ўҐбвЁ ЇҐаҐў®¤?');
        WriteLn('1. ЏҐаҐў®¤ ў ᥬҐаЁз*го бЁб⥬г бзЁб«Ґ*Ёп');
        WriteLn('2. ‡*ЇЁбм зЁб«* ў ¤®Ї®«*ЁвҐ«м*®¬ Є®¤Ґ');
        WriteLn('3. ‡*ЇЁбм зЁб«* ў ®Ўа*в*®¬ Є®¤Ґ ');
        Writeln('4. ‚л室 Ё§ Їа®Ја*¬¬л');
        ReadLn(base);
    until (base in [1..4]);
    if base=4 then
    begin
    writeln('Џа®Ја*¬¬* §*ўҐаиҐ**. ‘Ї*бЁЎ® §* ў*Ё¬**ЁҐ!');
    Halt;
    end;
    ans:=DecToAny(AnyToDec(s,16),7);
    nas:=DecToAny(AnyToDec(s,16),16);
    case base of
       1:z:=Direct(ans);
       2:z:=Reverse(nas,16);
       3:z:=Additional(nas,16);
    end;
    Assign(f, 'f.txt');
    assign(b, 'b.txt');
    ReSet(f);
    rewrite(b);
    s := '';
    while Not (EoF(f)) do
    begin
        if(Pos(c,a)>0)
        then
        begin
        if(c='-')or(c<>'-')
        then
        s:=s+c;
        end
        else
            if (c = ',')
            then
            begin
                numb := StrToInt(s);
                if ((numb >= m) And (numb <= k))
                then
                begin
                write(b,numb);
                write(b,'=');
                writeln(numb,'=',z);
                write(b,z);
                write(b,' ');
                end;
 
                s := '';
            end
            else
            if (c in ['G'..'Z']) or (c='.') then
            begin
                WriteLn('ЋиЁЎЄ*! ‚бваҐзҐ* §*ЇаҐйҐ**л© бЁ¬ў®«');
                s := '';
 
            end;
            if m>k then
            begin
            writeln('„Ё*Ї*§®* §*¤** *ҐЄ®а४в*®! Џ®Їа®Ўг©вҐ б*®ў*.');
            Halt;
            end;
    end;
    Close(f);
    close(b);
 
end.
0
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
28.05.2016, 00:44
MaxKate, а зачем вам вообще перевод в другие СС делать? у вас же число изначально в 16СС считываете число, проверяете на знак, если отрицательное - выводите запрос в каком виде выводить. усё.
1
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 30
28.05.2016, 15:23  [ТС]
JokeR.BY, дело в том, что мне запрос нужно делать для всех чисел сразу, а там уже, если пользователь выбрал перевод в семеричную систему, то перевод в нее
если выбрал перевод в дополнительный код, то в дополнительном коде записывается число в 16 сс, то же самое для обратного кода
я вот пыталась, но что-то не то вообще получается
Помогите, пожалуйста, последний раз, очень Вас прошу=(
Мне в этой программе так же нужен диапазон, как и предыдущей (вроде я его правильно написала в последней версии), запись в файл (аналогично), но во что-то с переводом и меню не то
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.05.2016, 15:23
Помогаю со студенческими работами здесь

Перевод чисел в различные системы счисления
Составьте, пожалуйста, программу, которая переводит натуральное число (не более 10^9) в систему счисления, основание которой (от 2 до 9)...

Перевод любого числа из 16 системы счисления в 2 систему счисления.
Здравствуйте,помогите решить задачку в Pascal !!! Для перевода любого числа из 16 системы счисления в 2 систему счисления. ...

Не работает программа перевода в различные системы счисления
Добрый день, не получается программа. Заранее спасибо. Извиняюсь за такой ввод программы, я новичок на форуме и не совсем освоилась. ...

Перевод из системы счисления 8 в 16
дано число в 8-ной системе счисления, нужно перевести его в 16-ную.

Перевод из системы счисления 16 в 10
Напишите программу, которая бы вводила,выводила шестнадцатиричные числа и переводила их в десятичную систему счисления))) помогите...


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

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

Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru