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


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


#include <stdlib.h>

int rasst(long nl, long n2);

char s [ 4 0];

main() {

long M1,M2;

printf("\n Введите два целых числа : ");

scanf("%ld %ld",&Ml,&M2);

printf("\nMl =%32s",ltoa(Ml,s,2)); /* Двоичное разложение N1*/

printf("\nM2 =%32s",ltoa(M2,s,2)); /* Двоичное разложение N2*/

printf("\nXOR=%32s",ltoa(MlAM2,s,2));

printf("\nРасстояние между этим кодами = %5d",rasst(M1,M2));

getch();

}

int rasst(long nl,long n2)

{

int Result=0,k;

long j=0x00000001;

for(k=0; k <32; k++)

{

/* Сравнение одноименных двоичных разрядов */

if((j & nl)!=(j & n2)) Result++;

j=j « 1; /* сдвиг шкалы на разряд влево */

}

return Result; }

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

program distance;

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

var

Ml,M2:longint;

function rasst(nl,n2:longint):byte;

const

Result:byte=0 ;

j:longint=$00000001;

var

k:byte;

n3:longint;

begin

n3:=nl xor n2;

for k:=0 to 31 do { цикл подсчета единиц в двоичном числе }

begin

if (j and n3)<>0 then inc(Result);

j:=j shl 1;

{ сдвиг шкалы на разряд влево }

end;

rasst:=Result; end; begin

write('Введите два целых числа : ');

readln(Ml,M2);

writeln('Расстояние между этим кодами = ',rasst(Ml,M2));

readln; end.

Задание 2.16. Чтение числа справа налево

Составить функцию invert (n), аргументом которой является длинное целое число. Возвращаемое значение должно быть равно числу, полученному из n перестановкой цифр в обратном порядке. Знак числа при этом сохраняется на прежнем месте. Например:

invert(314159) =951413

invert(-2718) = -8172

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

Очевидно, что самый простой алгоритм состоит в том, чтобы последовательно находить десятичные цифры, начиная с младшей, и тут же использовать их для вычисления перевернутого числа. Нужно только не забыть отделить от числа его знак, иначе каждый остаток от деления на 10 будет наследовать знак исходного числа.

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




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