Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Очень нужна помощь! помогите решить задачку по с++

Ответить
Настройки темы
C/C++ - [решено] Очень нужна помощь! помогите решить задачку по с++

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем доброго времени суток! Помогите пожалуйста написать программу С++, введя с клавиатуры целое число типа int и вывести его двоичное представление на экран затем выполняет преобразование, и после вывести на экран двоичное представление результата преобразования. затем сделать следующее:
Условие программы:
Назовем симметричным байт, в котором нулевой бит имеет такое же значение, что и седьмой, а первый – такое же, что и шестой. Изменить порядок следования симметричных байтов в числе на обратный.
И если сможете, сделайте так чтобы преобразование осуществлялось с помощью битовых операций. Использование массивов для представления битов числа нежелательно.
Буду очень признателен если поможете)

Т.е. программа должна преобразовать введенное с клавиатуры число в десятичной системе, затем преобразовывает его в двоичную, а в итоге вывести на экран шестнадцатиричный код введенного десятичного числа с клавиатуры, и затем с помощью сдвигов поучить следующее → (как пример) 0xDEADBEEF → 0xDEEFBEAD. Если перевести число DEADBEEF в десятичный код результат будет 3 735 928 559) и уже сдвиги делать для этого числа DEADBEEF.

1) я должен ввести число с клавиатуры 3 735 928 559, затем оно появляется на экране;
2) преобразовать это числа в двоичный и шестнадцатиричный код и также вывести их на экран;
3) нужно сделать чтобы это число 0xDEADBEEF (после всех сдвигов по условию) вывело на экран 0xDEADBEEF → 0xDEEFBEAD.

Заранее большущее спасибо!

Отправлено: 22:08, 02-12-2011

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Ivan767, а можно спросить?
Как так получилось из
Цитата Ivan767:
0xDEADBEEF → 0xDEEFBEAD »
Единственный симметричный байт(и тот не байт) - это DB. Все остальное не симметрично!
Симметричный байты в приведенном примере 3 735 928 559 отсутствуют.
Что надо сделать понятно где-то наполовину.
Способ преобразования полностью на нашей совести?

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 23:08, 02-12-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


lxa85, программу уже помогли написать, она ниже. теперь бы ее как нибудь по проще сделать нужно бы. посмотри пожалуйста может что сможешь сделать.

читать дальше »
Код: Выделить весь код
#include <iostream>
#include <conio.h>
#include <vector>
using namespace std;

void ShowHex(unsigned int dec) {
    vector<char> hex;
    char hex_num[16] = {'0', '1', '2', '3', '4', '5', '6', '7',
                        '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
                       };

    while (dec/16 != 0) {
       hex.push_back(hex_num[dec%16]);
       dec = dec/16;
    }
    hex.push_back(hex_num[dec%16]);
    for (int i = hex.size()-1; i >= 0; i--) {
       cout << hex.at(i);
    }
}

unsigned char* GenerateBytes(unsigned int dec) {
   unsigned char *x = new unsigned char[4];
   x[0] = dec >> 24;
   x[1] = dec >> 16;
   x[2] = dec >> 8;
   x[3] = dec;
   return x;
}

bool CheckByte(unsigned char byte) {
    //195 = 11000011
    //66 = 01000010
    //129 = 10000001
    if (  (byte & 195 == 0) || (byte & 195 == 66) ||
          (byte & 195 == 129) || (byte & 195 == 195) ) {
        return true;
    }
    else
        return false;
}

int Castling(unsigned int dec) {
    unsigned char *bytes = GenerateBytes(dec);
    int number, number_byte[4];
    int count_symmetric = 4;
    for (int i = 0; i < 4; i++) {
       if (CheckByte(bytes[i]) == false) {
          number_byte[i] = int(bytes[i]) << 8*(3-i);
          count_symmetric--;
       }

    }

    //перестановка симметричных байтов
    if (count_symmetric == 1) {
       for (int i = 0; i < 4; i++) {
          if (CheckByte(bytes[i]) == true) {
             number_byte[i] = int(bytes[i]) << 8*(3-i);
          }
          break;
       }
    }
    else if (count_symmetric == 2 || count_symmetric == 3) {
       for (int i = 0; i < 4; i++) {
          if (CheckByte(bytes[i]) == true) {
             for (int j = 3; j > 0; j--) {
                if (CheckByte(bytes[j]) == true) {
                   number_byte[i] = int(bytes[j]) << 8*(3-i);
                   number_byte[j] = int(bytes[i]) << 8*(3-j);
                   break;
                }
             }
             break;
          }
       }
    }
    else if (count_symmetric == 4) {
       for (int i = 0; i < 4; i++) {
          number_byte[i] = int(bytes[3-i]) << 8*(3-i);
       }
    }

    number = number_byte[0] | number_byte[1] | number_byte[2] | number_byte[3];
    return number;
}
//---------------------------------------------------------------------------

int main()
{
unsigned int x, x_end;
cin >> x;

ShowHex(x);
cout << endl;
x_end = Castling(x);
ShowHex(x_end);
getch();
    return 0;
}

Отправлено: 15:37, 03-12-2011 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Очень нужна помощь! помогите решить задачку по с++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Помогите решить задачку в Excel!! v-b Программирование и базы данных 7 04-04-2013 18:12
System/Project - Помогите грамотно решить задачку! 3711Vitaly Сетевое оборудование 6 22-11-2011 11:31
VBA - помогите решить задачку VBA vivat Программирование и базы данных 1 25-11-2010 11:52
Разное - нужна помощь по Паскалю(Помогите решить задачи) Allkz Программирование и базы данных 7 20-05-2010 10:06
VBA - помогите решить задачку Vba + Excel hellp123 Программирование и базы данных 3 14-03-2009 01:15




 
Переход