Другие языки программирования и технологии
аскаль. Написать программу которая переводит число из одной системы счисления в другую
! Объясните мне пожалуйста как написать ту часть программы, где нужно перевести число из 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.
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.
стучи в агент, объясню все непонятки
для перевода числа в другую с/с нужно разложить его на сумму из чисел которые являются степенными формами степени счисления например 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;
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;
Похожие вопросы
- Если парень в 11 классе смог написать программу по переводу чисел из одной системы счисления в другую, то ему смело
- Программа C++ Напишите программу которая переводит из десятичной в двоичную систему счисления (C++)
- Составьте программу на языке Паскаль! Нужна программа по переводу чисел из десятичной системы счисления в любую другую.
- Зачем нужно переводить число из одной системы счисления в другую?
- Дана величина A выражающая обьём информации в битах. Я написал программу которая переводит A в биты,Кб,Мб,Гб. проверьте.
- Напишите программу, которая выводит запись переданного ей числа в римской системе счисления. Используйте процедуру. С++
- Помогите перевести числа в разные системы счисления. HELP!!!
- помогите понять-программа, которая переводит новую написанную программу на языке, понятном прогр
- Как перевести число из 16ричной системы счисления в двоичную?
- Алгоритмы перевода чисел из одной системы счисления в другую, арифметика в различных системах счисления