0 / 0 / 0
Регистрация: 03.11.2015
Сообщений: 10
1

Составить программу, обеспечивающую циклический сдвиг

03.11.2015, 18:09. Показов 1130. Ответов 9
Метки нет (Все метки)

Составить программу, обеспечивающую циклический сдвиг двоичного кода целого числа x на k разрядов влево. Распечатать значения x до и после операции сдвига в двоичном представлении.

Очень сильно прошу помочь в этом задании. Так как препод поназодавал куча заданий. У меня еще 2 программки вот доделываю, но с этим заданием боюсь не успею разобраться. Пойму если откажитесь, но не хочется сдавать работу с одним не сделанным заданием.

Добавлено через 37 минут
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2015, 18:09
Ответы с готовыми решениями:

Составить программу, хранящую телефонный справочник и обеспечивающую выдачу телефона по фамилии
Составить программу, хранящую телефонный справочник и обеспечивающую выдачу телефона по фамилии....

Составить программу, обеспечивающую ввод и сохранение на диске информации о заброшенных мячах в игре баскетбол
Ребят, помогите пожалуйста с решением этой задачи, весь мозг сломала. Составить программу,...

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

Необходимо составить программу обеспечивающую сдвиг содержимого выходного устройства .Микропроцессор КР580ВМ80А. Спасибо
В выходное устройство записано число 08. составьте программу , обеспечивающую сдвиг содержимого...

9
33 / 33 / 21
Регистрация: 26.10.2015
Сообщений: 94
03.11.2015, 19:46 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <iomanip>
#include <cmath>
 
using namespace std;
 
void printbin(int num)
{
    unsigned short mask = pow(2,15);
    for(int i = 0; i < 16; i++)
    {
        if(num & mask)
            cout << 1;
        else cout << 0;
        if(!((i + 1)%8)) cout << "  ";
        mask = mask >> 1;
    }
    cout << endl;
}
 
int main(int argc, char** argv)
{
    unsigned short x, k;
    cout << "Enter X: ";
    cin >> x;
    cout << "Enter k: ";
    cin >> k;
    cout << "Before shift:\n";
    cout << "X = " << setw(10) << left << x;
    printbin(x);
    x <<= k;
    cout << "After shift:\n";
    cout << "X = " << setw(10) << left << x;
    printbin(x);
    return 0;
}
1
Evg
Эксперт CАвтор FAQ
21204 / 8220 / 633
Регистрация: 30.03.2009
Сообщений: 22,542
Записей в блоге: 30
04.11.2015, 13:45 3
Andreas_Kara, ты точно знаешь, что такое циклический сдвиг?

Циклический сдвиг битов
1
33 / 33 / 21
Регистрация: 26.10.2015
Сообщений: 94
04.11.2015, 16:26 4
Лучший ответ Сообщение было отмечено Анастасия__23 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <iomanip>
#include <cmath>
#include <climits>
 
using namespace std;
 
void printbin(unsigned short num)
{
    unsigned short mask = (USHRT_MAX + 1) / 2;
    for(int i = 0; i < 16; i++)
    {
        if(num & mask)
            cout << 1;
        else cout << 0;
        if(!((i + 1)%8)) cout << "  ";
        mask = mask >> 1;
    }
    cout << endl;
}
 
void shift(unsigned short& x, unsigned short k)
{
    int sze = sizeof(unsigned short) * 8;
    unsigned short mask = pow(2, sze) - pow(2, sze - k);
    mask &= x;
    x <<= k;
    mask >>= (sze - k);
    x |= mask;
}
 
int main(int argc, char** argv)
{
    unsigned short x, k;
    cout << "Enter X: ";
    cin >> x;
    cout << "Enter k: ";
    cin >> k;
    cout << "Before shift:\n";
    cout << "X = " << setw(10) << left << x;
    printbin(x);
    shift(x, k);
    cout << "After shift:\n";
    cout << "X = " << setw(10) << left << x;
    printbin(x);
    return 0;
}
Добавлено через 17 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <iomanip>
#include <cmath>
#include <climits>
 
using namespace std;
 
typedef unsigned short type;
 
void printbin(type num)
{
    type sze = sizeof(type) * 8;
    for(int i = 1; i <= sze; i++)
    {
        if(num & (1 << (sze - i)))
            cout << 1;
        else cout << 0;
        if(!(i%8)) cout << "  ";
    }
    cout << endl;
}
 
void shift(type& x, type k)
{
    type sze = sizeof(type) * 8;
    type mask = pow(2, sze) - pow(2, sze - k);
    mask &= x;
    x <<= k;
    mask >>= (sze - k);
    x |= mask;
}
 
int main(int argc, char** argv)
{
    type x, k;
    cout << "Enter X: ";
    cin >> x;
    cout << "Enter k: ";
    cin >> k;
    cout << "Before shift:\n";
    cout << "X = " << setw(10) << left << x;
    printbin(x);
    shift(x, k);
    cout << "After shift:\n";
    cout << "X = " << setw(10) << left << x;
    printbin(x);
    return 0;
}
1
0 / 0 / 0
Регистрация: 03.11.2015
Сообщений: 10
04.11.2015, 18:18  [ТС] 5
Не поняла почему выдает ошибку на этой строчке.
C++
1
type mask = pow(2, sze) - pow(2, sze - k);
25 cpp call of overloaded `pow(int, type&)' is ambiguous
0
33 / 33 / 21
Регистрация: 26.10.2015
Сообщений: 94
04.11.2015, 20:15 6
Лучший ответ Сообщение было отмечено Анастасия__23 как решение

Решение

Анастасия__23, поменяй на эту строку
C++
1
type mask = (1 << sze) - (1 << (sze - k));
1
0 / 0 / 0
Регистрация: 03.11.2015
Сообщений: 10
05.11.2015, 13:14  [ТС] 7
Andreas_Kara, Ага спасибо сейчас попробую.

Добавлено через 16 часов 57 минут
Andreas_Kara, Спасибо за помощь, успела сделать все задания и разобралась с этим почти, единственное что я не поняла программа закрывается после завершения, ставя на паузу не помогает.
0
33 / 33 / 21
Регистрация: 26.10.2015
Сообщений: 94
05.11.2015, 18:31 8
Анастасия__23,
C++
1
#include <windows.h>
C++
1
system("pause");
0
Jesus loves me
Эксперт С++
5196 / 3168 / 357
Регистрация: 12.12.2009
Сообщений: 8,007
Записей в блоге: 2
05.11.2015, 18:34 9
Andreas_Kara, system это <cstdlib>, не <windows.h>
1
0 / 0 / 0
Регистрация: 03.11.2015
Сообщений: 10
06.11.2015, 12:22  [ТС] 10
Все равно не помогает. После того как вводишь числа х и к, программа закрывается.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2015, 12:22

Переделать программу из Си++ в Си (циклический сдвиг массива)
Вот сама программа: #include &lt;iostream&gt; using namespace std; void cyclic_shift_r(double...

Программу которая должна выполнять циклический сдвиг
Написать программу которая должна выполнять циклический сдвиг в права вправо на заданное с...

Составить программу, обеспечивающую ввод данных и поиск по любому критерию
Составить программу, которая обеспечивает ввод данных, вывод данных, поиск по любому критерию....

Логический сдвиг влево,логический сдвиг вправо,алгоритм обмена двух переменных,циклический сдвиг
Битовые сдвиги.FW4,msstudio 13,на C# 1)Реализовать быстрое умножение на 2(логический сдвиг влево)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.