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


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


Под "расстоянием" между двумя n-разрядными двоичными кодами понимают количество несовпадений в каждой из п позиций. Например:

01011010

00101110

-------------

=***=*== "расстояние"=4

Составить функцию rasst (ni,n2), аргументами которой являются два длинных положительных числа, рассматриваемые как 32-разрядные двоичные коды. Возвращаемое функцией значение должно совпадать с "расстоянием" между nl и п2.

Совет 1 (общий)

Наиболее рациональный алгоритм — воспользоваться логической операцией XOR, осуществляющей поразрядное сложение двоичных кодов по модулю 2, а затем подсчитать общее количество двоичных единиц в полученном результате. Менее эффективный по числу тактов способ состоит в сравнении одноименных разрядов каждого аргумента функции.

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

REM Определение расстояния между двоичными кодами

DECLARE FUNCTION NumToBin$(N&)

DECLARE FUNCTION SumBits!(N&)

CLS

INPUT "Введи первое число :",N1&

INPUT "Введи второе число :",N2&

PRINT "Двоичное представление этих чисел :"

PRINT NumToBin$(N1&) : ' Двоичное разложение N1

PRINT NumToBin$(N2&) : ' Двоичное разложение N2

PRINT "Расстояние между этими кодами = "; SumBits(N1& XOR N2&)

END

FUNCTION NumToBin$(N&)

REM Формирование в строке двоичного представления числа N

а$="": К=&Н1

IF N&=0 THEN NumToBin$="0": EXIT FUNCTION

FOR J=0 TO 30

IF N& AND К THEN s$="l"+S$ ELSE s$="0"+s$

K=K*2 : ' Сдвиг шкалы на 1 разряд влево

NEXT J

IF N&<0 THEN s$="l"+s$ : ' Учет единицу в знаковом разряде

NumToBin$=s$

END FUNCTION

FUNCTION SumBits (N&)

КЕМ Подсчет количества единиц в двоичном числе

J&=&H40000000

RESULT=0

IF N&<0 THEN RESULT=1

FOR K=31 TO 1 STEP -1

IF N& AND J& THEN RESULT=RESULT+1

J&=J&/2 NEXT К

SumBits=RESULT END FUNCTION

Программа 2_15.c

/* Определение расстояния между двоичными кодами */




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