Консультация № 189442
19.05.2016, 17:24
0.00 руб.
0 2 1
Здравствуйте! Прошу помощи в следующем вопросе:

Ошибка начинается уже на этапе перевода числа в двоичную систему...

Приложение:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <math.h>

/**Целое положительное число m записывается в двоичной системи счисления, и разряды
в этой записи переставляются в обратном порядке. Получившееся двоичное число
переводится в десятичную систему счисления, и принимается за значение
функции F(m). Например, m=41, F(m)=37. Написать и протестировать функцию,
вычисляющую значение F(m) для натурального m. */

int F(int *m);

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

int m;
printf("Введите целое положительное число m:");
scanf("%d", &m);

if(m<0)
{
printf("Неверное значение.");
return 0;
}

p=F(m);
printf("\n");

printf("Новое значение для m:", p);

return 0;
}

int F(int *m)

{

int p=1, b, i=0;

while(m!=0)
{
b=m%2;
m=m/2;

if(b==1)
{
p=p*10+1;
}
else
{
p=p*10+0;
}
i++;
}

return 0;

}

Обсуждение

давно
Академик
20764
1861
19.05.2016, 17:32
общий
Не касаясь того, что ваше число уже храниться в двоичном коде - вы ждёте указатель, а передаёте число. Формально это допустимо, хотя и глупо, но нормальный компилятор должен вас в этом месте "носом повозить"
давно
Посетитель
7438
7205
21.05.2016, 00:14
общий
это ответ
Здравствуйте, Usagisan!
Я бы сделал так:
Код:

int p(int m)
{
int n=0;
while(m)
{
n = (n<<1)|(m&1);
m>>=1;
}
return n;
}
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа