Форум программистов, компьютерный форум CyberForum.ru

Разложить число на сумму степеней двойки - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Проверить упорядочены ли элементы вектора. Если нет, то упорядочить в порядке убывания методом стандартного обмена http://www.cyberforum.ru/cpp-beginners/thread658844.html
Дан вектор размерности N. Проверить упорядочены ли элементы вектора. Если нет, то упорядочить в порядке убывания методом стандартного обмена.
C++ Если элементы, расположенные правее минимального, упорядочены в порядке возрастания, то найти произведение элементов, расположенных перед максимальным Дан вектор размерности N. Если элементы, расположенные правее минимального, упорядочены в порядке возрастания, то найти произведение элементов, расположенных перед максимальным. http://www.cyberforum.ru/cpp-beginners/thread658843.html
C++ Все элементы, кроме первого, заменить средним арифметическим всех предыдущих
Все элементы, кроме первого, заменить средним арифметическим всех предыдущих.
Найти произведение элементов, расположенных правее первого элемента равного первого элемента равного k C++
Дан вектор размерности N. Найти произведение элементов, расположенных правее первого элемента равного первого элемента равного k.
C++ Переписать одномерный массив в двумерный http://www.cyberforum.ru/cpp-beginners/thread658834.html
Не пойму как реализовать задачу. Помогите с кодом :) Хотя-бы для первой части задачи Переписать исходный одномерный массив с количеством элементов, соответствующим принятому простому числу, в двумерный массив. В полученном массиве определить два максимальных элемента.
C++ Формирование массива по заданному правилу Дан массив A размера N (одномерный). Сформировать новый массив B того же размера по следующему правилу: элемент BK равен сумме элементов массива A с номерами от K до N подробнее

Показать сообщение отдельно
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
12.11.2012, 13:51  [ТС]     Разложить число на сумму степеней двойки
Цитата Сообщение от ValeryS Посмотреть сообщение
слушайте а нахрена здесь цикл и switch ???
один пользователь может иметь несколько прав
просто набор if
C++
1
2
3
4
5
6
7
8
9
10
11
12
if(dostup&2) 
 Memo1->Lines->Add("создание объекта");
if(dostup& 4) 
  Memo1->Lines->Add("создание субъекта");
if(dostup& 8) 
 Memo1->Lines->Add("удаление объекта"); 
if(dostup& 16) 
 Memo1->Lines->Add("удаление субъекта");
if(dostup& 32)
 Memo1->Lines->Add("внесение прав");
if(dostup& 64)
 Memo1->Lines->Add("удаление прав");
C++
1
2
3
4
5
6
7
8
9
void Matrix::Command(int right)
{
    if(right & ADD_OBJ) cout<<"1 - создать объект\t";
    if(right & ADD_SUB) cout<<"2 - создать субъект\t";
    if(right & DEL_OBJ) cout<<"3 - удалить объект\n";
    if(right & DEL_SUB) cout<<"4 - удалить субъект\t";
    if(right & ADD_RIGHT) cout<<"5 - добавить право\t";
    if(right & DEL_RIGHT) cout<<"6 - удалить право\n";
}
сделал под консоль, передаю в метод права. передаю 14 (2+4+8, т.е. должен вывести первые три), выводит все равно все шесть.
ADD_OBJ ADD_SUB и тд объявлены как
C++
1
2
#define ADD_OBJ 2 
#define ADD_OBJ 4
Добавлено через 8 минут
Цитата Сообщение от SatanaXIII Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<math> 
 
int dostup = 126;
for(int i=6; i>=1; i--)
  {
  Memo1->Lines->Add(pow(2,i));
  if(dostup>=pow(2,i))
    {
    dostup -= pow(2,i);
 
    switch((int)pow(2,i))
      {
      case 2  : Memo1->Lines->Add("создание объекта"); break;
      case 4  : Memo1->Lines->Add("создание субъекта"); break;
      case 8  : Memo1->Lines->Add("удаление объекта"); break;
      case 16 : Memo1->Lines->Add("удаление субъекта"); break;
      case 32 : Memo1->Lines->Add("внесение прав"); break;
      case 64 : Memo1->Lines->Add("удаление прав"); break;
      }
 
    }
  }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Matrix::Command(int right)
{
    //int right = 126;
    for(int i=6; i>=1; i--)
    {
        //Memo1->Lines->Add(pow(2,i));
        if(right>=pow(2.,(int)i))
        {
            right -= pow(2.,(int)i);
    switch((int)pow(2.,i))
      {
          case 2  : cout<<"создание объекта\t"; break;
          case 4  : cout<<"создание субъекта\t"; break;
          case 8  : cout<<"удаление объекта\n"; break;
          case 16 : cout<<"удаление субъекта\t"; break;
          case 32 : cout<<"внесение прав\t"; break;
          case 64 : cout<<"удаление прав\n"; break;
      }
    }
  }
}
то же не работает (( блин, помогите!

Добавлено через 14 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int x;
int i;
size_t s=sizeof(x)*CHAR_BIT;
int mask;
cin>>x;
cout<<endl<<x<<"=";
mask=(1<<s-1);
if (x&mask)
{
 cout<<"2^"<<s;
}
for (i=s-2, mask>>=1; i>=0; --i, mask>>=1)
{
 if (x&mask)
 {
  cout<<"+2^"<<i;
 }
}
if (x==0)
{
 cout<<0; 
}
cout<<endl;
на выходе выдает не правильно:
Код
12

12=+2^3+2^2+2^1+2^0
8+4+2+1 не равно 15..
к сожалению я совсем не понимаю значения битовых сдвигов и т.д. и не могу даже понять в чем ошибка Вашего алгоритма
 
Текущее время: 08:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru