Vit16 Опубликовано 10 января, 2006 Жалоба Поделиться Опубликовано 10 января, 2006 Здравствуйте, не могу составить программу для перевода из двоичной системы в восьмеричную.Помогите чем можите, плиззз или ссылочку дайте. А вот что я накуролесил: 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. Ссылка на комментарий Поделиться на другие сайты Поделиться
Darth Emil Опубликовано 10 января, 2006 Жалоба Поделиться Опубликовано 10 января, 2006 Держи: 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 системы счисления. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vit16 Опубликовано 12 января, 2006 Автор Жалоба Поделиться Опубликовано 12 января, 2006 Огромное спасибо за подсказку.Итак,вот что у меня получилось: Прога переводит из 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-ой в восьмеричную,че не так??? И мне еще + к этому,сказали чтоб она могла работать с дробными числами, а тут я совсем спекся Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 12 января, 2006 Жалоба Поделиться Опубликовано 12 января, 2006 (изменено) 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, как и было в программе. Изменено 12 января, 2006 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Delphi Опубликовано 26 января, 2006 Жалоба Поделиться Опубликовано 26 января, 2006 " Для чисел с дробной частью можно сначала разделить строку на две части Si1 и Si2 - до запятой и после, преобразовать каждую " так можно сделать а потом лутче всего делить до тех пор пока не появится зависимость. Если последовательность чисел начала повторятся то перевод правельный Ссылка на комментарий Поделиться на другие сайты Поделиться
xskif Опубликовано 24 мая, 2021 Жалоба Поделиться Опубликовано 24 мая, 2021 Я просто в шоке, почему тут всё так сложно Достаточно первое число сделать первым элементом массива, а остатки от деления записывать в следующие элементы. И так до тех пор, пока остаток не станет меньше основания системы счисления. И это верно не только для двоичных, а для всех позиционных систем счисления. Если есть дробная часть, то её переводить отдельно. Алгоритм: 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й сс. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти