Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Help!!

20K
17 сентября 2006 года
tolyan_antispam
1 / / 17.09.2006
Помогите пожалуйста написать простую программку, которая переводит целое число из десятичной системы в двоичную и выводит двоичное число в виде OFF ON
Например: вводим 5 (в двоичной это 101), получаем ON OFF ON
8.9K
17 сентября 2006 года
Kap
77 / / 10.09.2006
Тебе на каком языке надо? :)
242
17 сентября 2006 года
Оlga
2.2K / / 04.02.2006
1) читаем правила постинга
2) говорим язык
3) идем в поиск и находим нужную прогу(и на С, и на Паскаль должна быть), только вывод думаю придеться подправить.
4) еще раз дадите такое название теме - закрою/сотру без предупреждения.
5) Удачи :)
3.0K
17 сентября 2006 года
Мerlin
267 / / 25.07.2006
Код:
#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;
}
242
17 сентября 2006 года
Оlga
2.2K / / 04.02.2006
а почему условие y > 1? 1 это тоже число ON (я так понимаю отрицателные числa не в счет)
3.0K
17 сентября 2006 года
Мerlin
267 / / 25.07.2006
y инициализируется 1-й, чтоб передние нули, которые в исходном числе находятся в конце, не пропали.
Напр. x = 32 = 100000, в обратном порядке = 000001 = 1.

Но из-за возможноcти получения отрицательного числа в y, лучше написать while(y!=1)
242
17 сентября 2006 года
Оlga
2.2K / / 04.02.2006
или я туплю, или вы не поняли вопрос.
если пользователь введет 1, тогда ваша прога ничего не расспечатает
 
Код:
// Vyvod  
  while(y!=1)
  {
    if(y&1)
      cout << "ON ";
    else
      cout << "OFF ";
    y>>=1;
  }
3.0K
17 сентября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=OlgaKr]или я туплю, или вы не поняли вопрос.
если пользователь введет 1, тогда ваша прога ничего не расспечатает
 
Код:
// Vyvod  
  while(y!=1)
  {
    if(y&1)
      cout << "ON ";
    else
      cout << "OFF ";
    y>>=1;
  }
[/QUOTE]
Пользователь вводит 1-у в [color=red]x[/color].
y инициализируется 1-ей.
Потом сдвиг влево и увеличение на 1.
Т.е. при x = 1, y перед выводом равен 3.
242
17 сентября 2006 года
Оlga
2.2K / / 04.02.2006
ну да =), я ступила.
3.0K
18 сентября 2006 года
Мerlin
267 / / 25.07.2006
Можно и проще:
Код:
#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;
}
242
19 сентября 2006 года
Оlga
2.2K / / 04.02.2006
так хорошо конечно.
а что бы еще упростить вместо контрольного бита можно использовать счетчик, тогда будет паралельно какое число введет пользователь: положительное или отрицательное.
3.0K
19 сентября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=OlgaKr]так хорошо конечно.
а что бы еще упростить вместо контрольного бита можно использовать счетчик, тогда будет паралельно какое число введет пользователь: положительное или отрицательное.[/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";
  }
...


Но на счет счетчика не совсем ясно, как его использовать.
242
19 сентября 2006 года
Оlga
2.2K / / 04.02.2006
Цитата:

Но на счет счетчика не совсем ясно, как его использовать.


очень просто, сделать счетчик по кол-ву 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;
}
3.0K
19 сентября 2006 года
Мerlin
267 / / 25.07.2006
Да, понял. Неплохо. Хоть есть 2 лишних операций, но всеравно неплохо. :)
242
19 сентября 2006 года
Оlga
2.2K / / 04.02.2006
да вроде речь о кaунтере шла, а что if-ов много, и поэтому менее эфективно это ясно. просто дополнение к коллекции.
кaунтер с таким же успехом можно использовать и в ваших решениях.
3.0K
19 сентября 2006 года
Мerlin
267 / / 25.07.2006
Вообще-то мелочи жизни. Но flag проверяется дважды. А так действительно нормально. Вроде самое простое решение.
242
19 сентября 2006 года
Оlga
2.2K / / 04.02.2006
дошло, студентические минусы :-)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог