Другие языки программирования и технологии

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

! Объясните мне пожалуйста как написать ту часть программы, где нужно перевести число из 10-ой системы счисления в 2, 8 и 10 СС. Просто объясните. Вот не понимаю и всё. Мне объясняли. Но я не понимаю. Задание: с клавиатуры вводится целое число в одной из следующих систем счисления: двоичная, восьмеричная, десятичная. Отдельно соответствующей буквой (b, o, d) вводится обозначение исходной системы. В результате работы программа должна вывести значение введенного числа во всех перечисленных системах счисления. Пример: Введите число: 17 d Двоичное число:10001 b Восьмеричное число:21 o Десятичное число:17 d Замечание: Массивы и строки в реализации использовать запрещается. Задача должна быть решена чисто вычислительным алгоритмом. Блин. Даже уже начинаю жалеть что пошла на это программирование. Это интересно, но всё это никак не хочется мне даваться. Такое ощущение либо это я не настолько хорошо стараюсь, либо это я настолько тупа.
Вот программа. Сохрани файл в досовской кодировке, иначе русские буквы будут отображаться крякозябрами
program program1;
var d,b,w:longint;o:char;
function DecToBin(x:longint):longint;
var dd,c,r:longint;
begin
r:=0;
dd:=x;
c:=1;
while dd>1 do
begin
r:=dd mod 2*c+r;
c:=c*10;
dd:=dd div 2;
end;
r:=dd*c+r;
DecToBin:=r;
end;
function DecToOct(x:longint):longint;
var dd,c,r:longint;
begin
r:=0;
dd:=x;
c:=1;
while dd>1 do
begin
r:=dd mod 8*c+r;
c:=c*10;
dd:=dd div 8;
end;
r:=dd*c+r;
DecToOct:=r;
end;
function OctToDec(x:longint):longint;
var dd,c,r:longint;
begin
dd:=x;
r:=0;
c:=1;
while dd>0 do
begin
r:=r+dd mod 10*c;
dd:=dd div 10;
c:=c*8;
end;
OctToDec:=r;
end;
function BinToDec(x:longint):longint;
var dd,c,r:longint;
begin
dd:=x;
r:=0;
c:=1;
while dd>0 do
begin
r:=r+dd mod 10*c;
dd:=dd div 10;
c:=c*2;
end;
BinToDec:=r;
end;
begin
write('Введите число ');
readln(d);
write('Введите основание системы счисления ');
readln(o);
if (UpCase(o)<>'D') and (UpCase(o)<>'O') and (UpCase(o)<>'B') then
begin
writeln('Неверное основание');
halt;
end;
if UpCase(o)='D' then
begin
b:=DecToBin(d);
w:=DecToOct(d);
end;
if UpCase(o)='O' then
begin
w:=d;
d:=OctToDec(w);
b:=DecToBin(d);
end;
if UpCase(o)='B' then
begin
b:=d;
d:=BinToDec(b);
w:=DecToOct(d);
end;
writeln('Двоичное число ',b,' b');
writeln('Восьмеричное число ',w,' o');
writeln('Десятичное число ',d,' d');
end.
Костя Козлов
Костя Козлов
8 321
Лучший ответ
стучи в агент, объясню все непонятки
для перевода числа в другую с/с нужно разложить его на сумму из чисел которые являются степенными формами степени счисления например 64 в 10 c/c = 2 в 6 степени =1000000 в 2c/c
делите (в цикле) число на основание системы счисленияс помощью "mod", пока число не обнулится, и прописывете варинты, например в 16 так примерно
while (a<>0) do begin
b:= a mod 16;
a:=a div 16;
case b of
10: write('A);
11: write('B');
12:write ('C');
13:write('D');
14: write('E');
15:write('F');
else write(b);
end;
Gennadiy Kruk
Gennadiy Kruk
680

Похожие вопросы