Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Перевод из двоичной системы в восьмеричную


Рекомендуемые сообщения

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

Program systemcoder;

Uses crt;

Var

a:string;

i:byte;

begin

ClrScr;

write('Введите число: ');

readln(a);

writeln;

for i:=1 to length(a) do

begin

if a='001' then write('1');

if a='010' then write('2');

if a='011' then write('3');

if a='100' then write('4');

if a='101' then write('5');

if a='110' then write('6');

if a='111' then write('7');

if a='1000' then write('8');

if a='1001' then write('9');

end;

writeln(a);

readkey; end.

Ссылка на комментарий
Поделиться на другие сайты

Держи:

Program Perevod;Vari,j,b:byte;c:word;sc:array [1..16] of byte;vs:array [1..16] of char; Begin For i:=1 to 16 do sc[i]:=0; i:=0; Repeat inc(i); sc[i]:=c mod b; c:=c div b Until c<1; For j:=1 to 16 do Case sc[j] of 0..9:vs[j]:=chr(sc[j]+48); 10..15:vs[j]:=chr(sc[j]+87) End; For j:=i downto 1 do write(vs[j]); Writeln; End.

Это фрагмент моей курсовой. Переводит из 10 в 2,8,16 системы счисления.

Ссылка на комментарий
Поделиться на другие сайты

Огромное спасибо за подсказку.Итак,вот что у меня получилось:

Прога переводит из 10в2в8:

Program Siste;

Uses Crt;

var

i:byte;

c,bin_d:string;

n1,n2:longint;

n:integer;

BcO:string; { В целое восьмеричное }

bin:string; { для перевода из 2 в 8}

begin

clrscr;

write ('Введите число n=');

readln(n1);

n2:=n1;

bin_d:='';

while n1>0 do

begin

str(n1 mod 2,c);

bin_d:=c+bin_d;

n1:=n1 div 2;

end;

BcO:='';

bin_d:='00'+bin_d;

writeln('Двоичная система ',bin_d);

for i:=1 to round(length(bin_d)/3) do

begin

bin:=copy(bin_d,1,3);

if bin='000' then BcO:=BcO+'0';

if bin='001' then BcO:=BcO+'1';

if bin='010' then BcO:=BcO+'2';

if bin='011' then BcO:=BcO+'3';

if bin='100' then BcO:=BcO+'4';

if bin='101' then BcO:=BcO+'5';

if bin='110' then BcO:=BcO+'6';

if bin='111' then BcO:=BcO+'7';

delete(bin_d,1,3);

end;

writeln('Восьмиричная система ',BcO);

readkey;

end.

Но прога не правильно переводит из 2-ой в восьмеричную,че не так??? И мне еще + к этому,сказали чтоб она могла работать с дробными числами, а тут я совсем спекся

Ссылка на комментарий
Поделиться на другие сайты

Vit16:

Что-то у тебя очень запутанное...

Для перевода записи целого числа из двоичной системы в восьмеричную просто дополняем строку нулями до длины, кратной трем, и переводим последовательно тройки двоичных цифр в восьмеричные цифры. Например, такой вариант программы (чтобы не писать 8 сравнений, как у тебя, я сделал цикл по массиву возможных комбинаций):

var

I:Integer; C:Char; Si,So:String; St:String[3];

const

S:array['0'..'7'] of String[3]=('000','001','010','011','100','101','110','111');

begin

ReadLn(Si);

while Length(Si) mod 3 <> 0 do Si:='0'+Si; { доп. строку влево до длины, кратной 3 }

So:='';

for I:=1 to Length(Si) div 3 do

begin

St:=Copy(Si,3*I-2,3); { 3*I-2 дает числа 1,4,7... - нач. позиции троек дв. цифр }

for C:='0' to '7' do if St=S[C] then So:=So+C

end;

Writeln(So);

end.

Для чисел с дробной частью можно сначала разделить строку на две части Si1 и Si2 - до запятой и после, преобразовать каждую (только для дробной части строка должна дополняться до кратного трем количества позиций вправо, а не влево, т.е. вместо while Length(Si1) mod 3 <> 0 do Si1:='0'+Si1; будет while Length(Si2) mod 3 <> 0 do Si2:=Si2+'0'; )

и собрать части и запятую вместе. Надеюсь, справишься.

P.S. Подправил комментарий - в нем было написано 3+I-2, а должно было быть и есть сейчас 3*I-2, как и было в программе.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

" Для чисел с дробной частью можно сначала разделить строку на две части Si1 и Si2 - до запятой и после, преобразовать каждую " так можно сделать а потом лутче всего делить до тех пор пока не появится зависимость. Если последовательность чисел начала повторятся то перевод правельный

Ссылка на комментарий
Поделиться на другие сайты

  • 15 лет спустя...

Я просто в шоке, почему тут всё так сложно   :)
Достаточно первое число сделать первым элементом массива, а остатки от деления записывать в следующие элементы. И так до тех пор, пока остаток не станет меньше основания системы счисления. И это верно не только для двоичных, а для всех позиционных систем счисления. Если есть дробная часть, то её переводить отдельно.
Алгоритм:
1)Делим нужное число на основание
2) Делим остаток 1 на основание..
3)Делим остаток 2 на основание..
....
N)Остаток N< основания - записываем число снизу вверх
Вот пример реализации на JS: https://tvoyapecarnya.ru/informaics/sistemy-ischisleniya/pozitsionnyesistemyschisleniya/dvoichnaya-sistema-ischisleniya/kak-perevodit-v-dvoichnuyu-sistemu
Чтобы перевести из любой сс в десятичную надо воспользоваться степенным рядом, либо таблицей тетрад и триад для 8 и 16й сс.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...