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


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


#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

int max_bits(long N);

main ()

{

long M;

char str[33];

clrscr () ;

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

scanf("%ld",&M);

printf("Двоичное представление этого числа :");

ltoa(M,str,2);

printf("\n%32s",str);

printf("\n Максимальное число подряд стоящих единиц = %d",

max_bits(M));

getch(); }

int max_bits(long N)

/* Перевод числа N в двоичное символьное представление

Поиск самой длинной группы единиц (max_bits = длина) */

{

int k_bits=0,max=0;

char s[33];

if(N==0) return 0;

while (N) /* Формирование двоичного числа в строке s$ */

{

if(N & 0x80000000) /* если очередной разряд равен 1 */

{

/* подсчет подряд идущих единиц */

k_bits++;

if(k_bits>max) max=k_bits; /* запоминание максимума */

}

else

k_bits=0; /* сброс счетчика, если очередной разряд = 0 */

N=N << 1 ; /* сдвиг на 1 разряд влево */

}

return max; }

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

program MaxBits;

{ Определение максимальной группы единиц в двоичном числе }

uses Crt;

var

M:longint;

str:string[33];

function max_bits(N:longint)rshortint;

{ Перевод числа N в двоичное символьное представление

Поиск самой длинной группы единиц (max_bits = длина) }

var

k bits, max:byte;

begin

k_bits:=0;

max:=0;

if N=0 then

begin

max_bits:=0;

exit;

end;

while N<>0 do { Формирование двоичного числа в строке s$ }

begin

if (N and $00000001)00 then { если разряд равен 1 }

begin

str:='l'+str;

inc(k_bits); { подсчет подряд идущих единиц }

if k_bits>max then max:=k_bits end else begin

str:='0'+str;

k_bits:=0; { сброс счетчика, если очередной разряд = 0 }

end;

N:= N shr 1; { сдвиг на 1 разряд вправо }

end;

max_bits:=max; end;

begin clrscr;

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

readln(M);

writeln('Максимальное число подряд стоящих единиц = ',max_bits(M));

readln;

end.

Задание 2.15. Расстояние между двоичными кодами




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