Консультация № 137684
20.05.2008, 23:56
0.00 руб.
0 2 2
Вводится число от 1 до 15. Вывести данное число, записанное в двоичной системе счисления (1, 10, 11, 100, 101, …., 1111);

использовать Pascal turbo 7.0

Обсуждение

Неизвестный
21.05.2008, 00:51
общий
это ответ
Здравствуйте, Бесчастнов егор Алекандрович!
Перевод числа в двоичную систему счисления (как и в любую другую, впрочем) производится постепенным делением на основание системы, т.е. на 2. Число формируется из остатков от этого деления в обратном порядке. Подробнее о системах счисления можно почитать в <a href=http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F>Википедии</a>.
Программно реализуем так: сохраняем остаток от деления введённого числа на два в строку, после чего обрезаем число на сохранённый разряд (целочисленно делим на 2). Когда число обнулится, мы можем либо инвертировать строку, чтобы получить двоичное представление, либо, если необходимо получить число в виде числа, с конца перевести его в число. Это возможно не всегда, поскольку полученное двоичное число может не поместиться в стандартный тип, но в данной задаче размерность строго ограничена, поэьтому привожу такой вариант. Решение в приложении.
Удачи!

Приложение:
Var a, b, h, i: integer;s: string [4]; {Строка для двоичного представления числа}begin read (a); {Считываем число} if (a<0) or (a>15) then {Если не удовлетворяет условию} begin writeln (‘Bad info‘); {Сообщаем об ошибке} halt(1); {Выходим} end; b:=0; s:= ‘‘; {Обнуляем} while (a<>0) do {Пока число не равно 0} begin h:= a mod 2; {Получаем остаток от деления на 2} a:= a div 2; {Обрезаем число на сохранённый разряд} s:= s+chr(h+48); {Дописываем в строку символьное представление цифры (цифра+48, т.к. код нуля в ascii = 48)} end; for i:=length(s) downto 1 do {В обратном порядке формируем из строки число} b:=b*10+(ord(s[i])-48); writeln (b); {Выводим его на экран} readln; {Ждём реакции}end.
Неизвестный
21.05.2008, 19:30
общий
это ответ

<i>Здравствуйте, <b>Бесчастнов егор Алекандрович</b>!</i>

В приложении находится пример вывода десятичного числа в двоичной системе счисления.

Как Вы знаете, компьютер хранит числа в двоичной системе счисления. Именно на этом факте и основан пример.

Функция <b>shr</b> выполняет сдвиг двоичного числа на указанное число разрядов вправо, выкидывая сдвинутые разряды и заполняя нулями указанное количество старших разрядов.

Пример сдвига:
1011 -> (shr 1) -> 0101

Сдвиг числа на единицу вправо (shr 1) соответствует делению этого числа на 2 (div 2).

Функция <b>and</b> выполняет побитовую логическую операцию И. Т.о., (and 1) дает, как результат, младший разряд числа.

Пример:
1011 -> (and 1) -> 0001
1010 -> (and 1) -> 0000

Операция И в данном случае (and 1) равна остатку от деления числа на 2 (mod 2).

<em>Успехов!</em>

Приложение:
program q137684;uses Crt;{Вывод числа в двоичной форме}procedure showBin(const A: Integer);begin {Если А = 0, то больше нечего выводить} if (A <> 0) then begin {Выводим следующие по старшинству разряды} showBin(A shr 1); {Выводим текущий разряд} write(A and 1); end;end;var A: Byte;begin {Очистка экрана} ClrScr; {Вводим число в десятичной форме} repeat write (‘A [1..15] = ‘); readln(A); until ((A > 0) and (A < 16)); {Выводим число в двоичной форме} write(‘bin: ‘); showBin(A); {Даем пользователю возможность насладиться результатом} writeln; write(‘Press any key...‘); readln;end.
Форма ответа