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


         

n Максимальное число подряд стоящих


#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. Расстояние между двоичными кодами

Содержание  Назад  Вперед