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

 
0
 
C++
ava
suse | 08.09.2009, 15:00
Определение максимальной группы единиц в двоичном числе
Помогите найти ошибку.

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int max_bits(float N);
void 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; }


Добавлено позднее:
Компилятор пишет:
Compiling KOLVOED.CPP:
Warning KOLVOED.CPP 27: Constant is long in function max_bits(long)
Warning KOLVOED.CPP 37: 's' is declared but never used in function max_bits(long)
Ответы (4)
ava
azesmcar | 08.09.2009, 14:03 #
Цитата (suse @  8.9.2009,  14:00 findReferencedText)
Помогите найти ошибку.


Цитата (suse @  8.9.2009,  14:00 findReferencedText)
Компилятор пишет:

Compiling KOLVOED.CPP:

Warning KOLVOED.CPP 27: Constant is long in function max_bits(long)

Warning KOLVOED.CPP 37: 's' is declared but never used in function max_bits(long)

Warning это предупреждение, ошибка - Error.
В чем проблема? Что именно не работает?
ava
suse | 08.09.2009, 14:05 #
При запуске пишет:
Linking kolvoed.exe:
Linker Warning: No module definition file specified: using defaults
Linker Error: Undefined symbol max_bits(float) in module KOLVOED.CPP
ava
azesmcar | 08.09.2009, 14:10 #
Цитата (suse @  8.9.2009,  14:00 findReferencedText)
int max_bits(float N);


Цитата (suse @  8.9.2009,  14:00 findReferencedText)
int max_bits(long N)

Это потому что объявлена функция с параметром типа float а определена с параметром типа long.

вот рабочий пример.

int max_bits(unsigned long num)
{
    int current = 0, max = 0;
    while (num != 0)
    {
        if ((num & 1) == 0)
        {
            if (current > max)
                max = current;
            current = 0;
        } else
            ++current;

        num >>= 1;
    }
    return max;
}
ava
suse | 08.09.2009, 14:23 #
Спасибо за помощь.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
  azesmcar   suse
advanced
Отправить