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

как сделать чтобы программа считала нормально - C++

Восстановить пароль Регистрация
 
Denimen
0 / 0 / 0
Регистрация: 30.06.2012
Сообщений: 26
21.09.2012, 00:07     как сделать чтобы программа считала нормально #1
Поидее должны выполняться операции с двоичными числами, а компилятор воспринимает числа как десятичные, уже неделю немогу ничто придумать, помогите пожалуйста
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include "stdafx.h"
#include "cstdlib"
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <fstream>
using namespace std;
 
class BitString
{
private:
    unsigned long part1;
    unsigned long part2;
public:
    void zapolnenie(); // добавление новой записи
    void and(); // Побитовое И
    void or(); // Побитовое ИЛИ
    void xor(); // Сложение по модулю два
    void not(); // Побитовое отрицание
    void shiftLeft(); // сдвиг влево
    void shiftRight(); // сдвиг вправо
};
void BitString::zapolnenie()
{
    cout<<"Введите первое число в двоичной системе: ";
    cin>>part1;
    cout<<"Введите второе число в двоичной системе: ";
    cin>>part2;
    cout<<"Данные внесены!!!";
}
void BitString::and()
{
    unsigned long part3;
    part3=part1&part2;
    cout<<"Побитовое И равно: "<<part3;
}
void BitString::or()
{
    unsigned long part3;
    part3=part1|part2;
    cout<<"Побитовое ИЛИ равно: "<<part3;
}
void BitString::xor()
{
    unsigned long part3;
    part3=part1^part2;
    cout<<"Сложение по модулю два равно: "<<part3;
}
void BitString::not()
{
    unsigned long part3;
    unsigned long part4;
    part3=~part1;
    part4=~part2;
    cout<<"Побитовое отрицание первого числа равно: "<<part3<<endl;
    cout<<"Побитовое отрицание второго числа равно: "<<part4<<endl;
}
void BitString::shiftLeft()
{
    unsigned long part3;
    unsigned long part4;
    part3=part1<<1;
    part4=part2<<1;
    cout<<"Cдвиг влево первого числа равно: "<<part3<<endl;
    cout<<"Cдвиг влево второго числа равно: "<<part4<<endl;
}
void BitString::shiftRight()
{
    unsigned long part3;
    unsigned long part4;
    part3=part1>>1;
    part4=part2>>1;
    cout<<"Cдвиг вправо первого числа равно: "<<part3<<endl;
    cout<<"Cдвиг вправо второго числа равно: "<<part4<<endl;
}
 
int main()
{
setlocale(0, "");
BitString ac;
int m=0;
while(m!=10)
    {
    cout<<"1-Внести данные"<<endl;
    cout<<"2-Выполнить побитовое И"<<endl;
    cout<<"3-Выполнить побитовое ИЛИ"<<endl;
    cout<<"4-Выполнить сложение по модулю два"<<endl;
    cout<<"5-Выполнить побитовое отрицание"<<endl;
    cout<<"6-Выполнить сдвиг влево"<<endl;
    cout<<"7-Выполнить сдвиг вправо"<<endl;
    cin>>m;
    switch (m)
        {
        case 1: 
            system("cls");
            ac.zapolnenie();
            _getch();
            system("cls");
        break;
        case 2: 
            system("cls");
            ac.and();
            _getch();
            system("cls");
        break;
        case 3: 
            system("cls");
            ac.or();
            _getch();
            system("cls");
        break;
        case 4: 
            system("cls");
            ac.xor();
            _getch();
            system("cls");
        break;
        case 5: 
            system("cls");
            ac.not();
            _getch();
            system("cls");
        break;
        case 6: 
            system("cls");
            ac.shiftLeft();
            _getch();
            system("cls");
        break;
        case 7: 
            system("cls");
            ac.shiftRight();
            _getch();
            system("cls");
        break;
        default: cout<<"Вводите зачения от 1 до 7";
            _getch();
            system("cls");
    }
  }
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2012, 00:07     как сделать чтобы программа считала нормально
Посмотрите здесь:

Как сделать, чтобы программа быстрее работала? C++
C++ Как измерить, сколько времени считала программа?
Как сделать чтобы программа не закрывалась. C++
C++ как сделать чтобы программа не переполняла буфер
C++ как сделать цикл, чтобы после моего действия, которое делает программа, она предлагала мне сделать его еще раз?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fler
207 / 209 / 9
Регистрация: 20.12.2011
Сообщений: 635
21.09.2012, 00:14     как сделать чтобы программа считала нормально #2
они и выполняются с двоичными представлениями тех десятичных чисел из 0 и 1, которые вы ввели
разбейте числа на цифры в массивы и работайте с ними
сдвиги, инверсию, конъюнкцию и дизъюнкцию придётся реализовывать самому, а не пользоваться готовыми операторами
KeyGen
 Аватар для KeyGen
333 / 289 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
21.09.2012, 10:25     как сделать чтобы программа считала нормально #3
Может это поможет: Dec to bin
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
21.09.2012, 10:32     как сделать чтобы программа считала нормально #4
Цитата Сообщение от KeyGen Посмотреть сообщение
Может это поможет: Dec to bin
Не, он хочет, чтобы ввел, скажем 101011, и его программа подхватила это как двоичное число, а не как десятичное. В прошлый раз ему ответили - пиши свои функции обработки. Видимо, не поверил)
Чуть позже напишу, если меня не опередят)
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
21.09.2012, 10:45     как сделать чтобы программа считала нормально #5
Цитата Сообщение от I.M. Посмотреть сообщение
Не, он хочет, чтобы ввел, скажем 101011, и его программа подхватила это как двоичное число, а не как десятичное
Ну С++ же умный, мог бы сам догадаться

Можно воспользоваться std::bitset - читать ввод в строку, потом создать объект std::bitset, потом воспользоваться std::bitset::to_ulong().

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include <bitset>
 
int main ()
{
  std::string num;
  std::cin >> num;
 
  std::bitset<128> bits(num); // 128 - с запасом
 
  int decNum = bits.to_ulong();
 
  std::cout << "Your number: " << decNum << std::endl;
 
  return 0;
}
Yandex
Объявления
21.09.2012, 10:45     как сделать чтобы программа считала нормально
Ответ Создать тему
Опции темы

Текущее время: 04:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru