Практика программирования (Бейсик, Си, Паскаль)


Задачи,советы и ответы - часть 3


Совет 2 (Си)

Предлагается воспользоваться библиотечной функцией Itoa, преобразующей свой первый аргумент из машинного представления числа в строку, заданную вторым аргументом. Третий аргумент этой функции определяет основание системы счисления, в которую конвертируется исходное число. Вообще говоря, восьмеричный и шестнадцатеричный эквиваленты числа проще вывести, используя спецификатор формата %о и %х. Для вывода двоичного представления числа можно было бы организовать цикл со сдвигом числа на один разряд влево (N = N « 1;), пробой старшей цифры (N & 0x8000) и выводом соответствующего символа в зависимости от результата сравнения.

Совет 3 (Паскаль)

В этом языке отсутствуют какие-либо системные функции или процедуры, отмеченные выше. Поэтому единственным средством будет лобовое преобразование путем последовательного деления исходного числа на основание соответствующей системы и запоминание получающихся остатков в некотором массиве. Так как длинное число занимает в памяти ЭВМ 4 байта, максимальный размер массива для хранения цифр числа в соответствующем представлении не должен превышать 32 элемента. Небольшие проблемы могут возникнуть при выводе шестнадцатеричных цифр от А до F. Из них придется вычитать 10 и добавлять полученную разницу к коду буквы А.

Программа 2_03.bas

REM Перевод числа в системы с основаниями 2, 8 и 16

CLS

INPUT "Введите положительное число : ",N&

А$=ОСТ$(N&)

PRINT "В двоичном представлении ";N&;"= ";

FOR k=l TO LEN(A$)

B$=MID$(A$,k,1) : ' Выделение очередной восьмеричной цифры

SELECT CASE B$

CASE "О": IF k=l THEN PRINT ""; ELSE PRINT "000";

CASE "1": IF k=l THEN PRINT "1"; ELSE PRINT "001";

CASE "2": IF k=l THEN PRINT "10"; ELSE PRINT "010";

CASE "3": IF k=l THEN PRINT "11"; ELSE PRINT "01l";

CASE "4": PRINT "100";

CASE "5": PRINT "101";




- Начало -  - Назад -  - Вперед -