#include <iostream.h>
#include <conio.h>
int main()
{
int x;
cout << "Vvedite csiszlo(>0) : ";
cin >> x;
int y = 1;
// Peresztavka bitov v obratnom porjadke
while(x>0)
{
y<<=1;
if(x&1)y++;
x>>=1;
}
// Vyvod
while(y!=1)
{
if(y&1)
cout << "ON ";
else
cout << "OFF ";
y>>=1;
}
cout << endl;
getch();
return 0;
}
Help!!
Например: вводим 5 (в двоичной это 101), получаем ON OFF ON
Тебе на каком языке надо? :)
читаем правила постинга
2) говорим язык
3) идем в поиск и находим нужную прогу(и на С, и на Паскаль должна быть), только вывод думаю придеться подправить.
4) еще раз дадите такое название теме - закрою/сотру без предупреждения.
5) Удачи :)
1)
2) говорим язык
3) идем в поиск и находим нужную прогу(и на С, и на Паскаль должна быть), только вывод думаю придеться подправить.
4) еще раз дадите такое название теме - закрою/сотру без предупреждения.
5) Удачи :)
а почему условие y > 1? 1 это тоже число ON (я так понимаю отрицателные числa не в счет)
Напр. x = 32 = 100000, в обратном порядке = 000001 = 1.
Но из-за возможноcти получения отрицательного числа в y, лучше написать while(y!=1)
если пользователь введет 1, тогда ваша прога ничего не расспечатает
Код:
// Vyvod
while(y!=1)
{
if(y&1)
cout << "ON ";
else
cout << "OFF ";
y>>=1;
}
while(y!=1)
{
if(y&1)
cout << "ON ";
else
cout << "OFF ";
y>>=1;
}
если пользователь введет 1, тогда ваша прога ничего не расспечатает
Код:
// Vyvod
while(y!=1)
{
if(y&1)
cout << "ON ";
else
cout << "OFF ";
y>>=1;
}
while(y!=1)
{
if(y&1)
cout << "ON ";
else
cout << "OFF ";
y>>=1;
}
Пользователь вводит 1-у в [color=red]x[/color].
y инициализируется 1-ей.
Потом сдвиг влево и увеличение на 1.
Т.е. при x = 1, y перед выводом равен 3.
ну да =), я ступила.
Код:
#include <iostream.h>
#include <conio.h>
int main()
{
int x;
cout << "Vvedite csiszlo[>0] : ";
cin >> x;
x = (x<<1) + 1;
while(x>0)x<<=1;
for(;x!=0x80000000;x<<=1)cout << (x&0x80000000 ? "ON " : "OFF ");
cout << endl << endl << "Nazsmite ljubuju klavisu..." << endl;
getch();
return 0;
}
#include <conio.h>
int main()
{
int x;
cout << "Vvedite csiszlo[>0] : ";
cin >> x;
x = (x<<1) + 1;
while(x>0)x<<=1;
for(;x!=0x80000000;x<<=1)cout << (x&0x80000000 ? "ON " : "OFF ");
cout << endl << endl << "Nazsmite ljubuju klavisu..." << endl;
getch();
return 0;
}
а что бы еще упростить вместо контрольного бита можно использовать счетчик, тогда будет паралельно какое число введет пользователь: положительное или отрицательное.
а что бы еще упростить вместо контрольного бита можно использовать счетчик, тогда будет паралельно какое число введет пользователь: положительное или отрицательное.[/QUOTE]Чтоб, обрабатывались и отрицательные числа, можно написать
Код:
#include <iostream.h>
#include <conio.h>
int main()
{
int x;
cout << "Vvedite csiszlo : ";
cin >> x;
if(x<0)
{
cout << "MINUS ";
x = x&0x7FFFFFFF;
}
else if(x==0)
{
cout << "ZERO";
}
...
#include <conio.h>
int main()
{
int x;
cout << "Vvedite csiszlo : ";
cin >> x;
if(x<0)
{
cout << "MINUS ";
x = x&0x7FFFFFFF;
}
else if(x==0)
{
cout << "ZERO";
}
...
Но на счет счетчика не совсем ясно, как его использовать.
Цитата:
Но на счет счетчика не совсем ясно, как его использовать.
очень просто, сделать счетчик по кол-ву bits в переменной, и вести контроль исследования битов не по расположению контрольного бита, а по значению счетчика(может я выражаюсь неправильно, потому и непонятно). а все остальное можно без изменений. Например, вариант решения с использованием счетчика:
Код:
#include <iostream.h>
int main()
{
int val;
bool flag = false;
cout << "Enter a positive number: ";
cin >> val;
for(int i = 0 ; i < 32; i++, val <<= 1)
if(flag) cout << (val & 0x80000000 ? "ON " : "OFF ");
else if( val & 0x80000000 )
{
cout << "ON ";
flag = true;
}
cout << endl;
return 0;
}
int main()
{
int val;
bool flag = false;
cout << "Enter a positive number: ";
cin >> val;
for(int i = 0 ; i < 32; i++, val <<= 1)
if(flag) cout << (val & 0x80000000 ? "ON " : "OFF ");
else if( val & 0x80000000 )
{
cout << "ON ";
flag = true;
}
cout << endl;
return 0;
}
Да, понял. Неплохо. Хоть есть 2 лишних операций, но всеравно неплохо. :)
кaунтер с таким же успехом можно использовать и в ваших решениях.
Вообще-то мелочи жизни. Но flag проверяется дважды. А так действительно нормально. Вроде самое простое решение.
дошло, студентические минусы :-)