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

Калькулятор в двоичной системе - C++

Восстановить пароль Регистрация
 
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
30.05.2014, 19:49     Калькулятор в двоичной системе #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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstring>      
 
using namespace std;
 
int main()
{   
    char bvector1[100];
    char bvector2[100]; 
        cin >> bvector1 >> bvector2;
    int L1 = strlen(bvector1);
    for(int i = 0;i < L1; i++)
    {
        bvector1[i] -= '0';
    }
    int L2 = strlen(bvector2);
    for(int i = 0;i < L2; i++)
    {
        bvector2[i] -= '0';
    }
    int q;
    if (L1 > L2) {int q = L1 + 1;}
        else {q = L2 + 1;}
    char rezult[100];
    int i;
    char carry, sum; carry = 0;
    i = q;
    while (i >= 0)
    {
       sum = bvector1[i] + bvector2[i] + carry;
       rezult[i--] = sum & 1;
       carry = sum >> 1;
     }
    printf("\n");
    for (i = 0; i < q; i++)
    printf("%d",(int)rezult[i]);
    cout << "\n";
    system("Pause");
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grikukan
61 / 61 / 21
Регистрация: 23.09.2012
Сообщений: 212
30.05.2014, 20:14     Калькулятор в двоичной системе #2
ИМХО, проще все операции делать в десятичной системе, а потом просто конвертировать...
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
30.05.2014, 21:42  [ТС]     Калькулятор в двоичной системе #3
Цитата Сообщение от grikukan Посмотреть сообщение
ИМХО, проще все операции делать в десятичной системе, а потом просто конвертировать...
К сожалению так нельзя, по условию нужно напрямую.

Добавлено через 12 минут
Проблему решил:
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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstring>      
 
using namespace std;
 
int main()
{   
    char bvector1[100];
    char bvector2[100];char rezult[100];
        cin >> bvector1 >> bvector2;
    int L1 = strlen(bvector1);
    for(int i = 0; i < L1; i++)
    {
        bvector1[i] -= '0';
    }
    int L2 = strlen(bvector2);
    for(int i = 0; i < L2; i++)
    {
        bvector2[i] -= '0';
    }   
    int i;char carry, sum;
    i = L1 - 1;
    carry = 0;
    while (i >= 0)
    {
       sum = bvector1[i] + bvector2[i] + carry;
       rezult[i--] = sum & 1;
       carry = sum >> 1;
     }
    printf("\n");
    for (i = 0; i < L1; i++)
    printf("%d",(int)rezult[i]);
    cout << "\n";
    system("Pause");
}
Вопрос такой: как реализовать сложение чисел разных разрядов? Например 101010 и 1111. Если я ввожу 101010 и 001111, тогда работает, но как сделать автозаполнение или что-то типа этого?
Pjeroo
Землянин
 Аватар для Pjeroo
33 / 33 / 12
Регистрация: 15.01.2013
Сообщений: 313
30.05.2014, 23:11     Калькулятор в двоичной системе #4
niikiita, вариант сдвинуть значения массива вправо на разность длин "строк" и заполнить нулями слева не подойдет?
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
30.05.2014, 23:20  [ТС]     Калькулятор в двоичной системе #5
Цитата Сообщение от Pjeroo Посмотреть сообщение
niikiita, вариант сдвинуть значения массива вправо на разность длин "строк" и заполнить нулями слева не подойдет?
подойдет наверно, только я не представляю как это реализовать на практике
Pjeroo
Землянин
 Аватар для Pjeroo
33 / 33 / 12
Регистрация: 15.01.2013
Сообщений: 313
30.05.2014, 23:56     Калькулятор в двоичной системе #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
niikiita, ну хотя бы так, дальше додумаете.
C++
1
2
3
4
5
6
7
8
9
if (L1 != L2)
    {
        if (L1 > L2)
        {
            for (int i = 0; i < L2; i++)
                bvector2[L1-1] = bvector2[L2-1];
            memset(bvector2, 0, (L1-L2));
        }
    }
Добавлено через 6 минут
Прошу прощения, забыл поставить i.

C++
1
bvector2[L1-1-i] = bvector2[L2-1-i];
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
31.05.2014, 00:56  [ТС]     Калькулятор в двоичной системе #7
Цитата Сообщение от Pjeroo Посмотреть сообщение
if (L1 != L2)
* * {
* * * * if (L1 > L2)
* * * * {
* * * * * * for (int i = 0; i < L2; i++)
* * * * * * * * bvector2[L1-1] = bvector2[L2-1];
* * * * * * memset(bvector2, 0, (L1-L2));
* * * * }
* * }
Спасибо, отличная функция. Не могли бы вы посмотреть, почему не работает в случае если L2 > L1?
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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstring>      
 
using namespace std;
 
int main()
{   
    char bvector1[100];
    char bvector2[100];char rezult[100];
        cin >> bvector1 >> bvector2;
    int L1 = strlen(bvector1);
    for(int i = 0; i < L1; i++)
    {
        bvector1[i] -= '0';
    }
    int L2 = strlen(bvector2);
    for(int i = 0; i < L2; i++)
    {
        bvector2[i] -= '0';
    }   
                    if (L1 != L2)
                    {
                        if (L1 > L2)
                        {
                            for (int i = 0; i < L2; i++)
                                bvector2[L1-1-i] = bvector2[L2-1-i];
                            memset(bvector2, 0, (L1-L2));
                        }
                        if (L2 > L1)
                        {
                            for (int i = 0; i < L1; i++)
                                bvector1[L2-1-i] = bvector1[L1-1-i];
                            memset(bvector1, 0, (L2-L1));
                        }
                        
                    }
                    
    int i; char carry, sum; int q;
    if (L1 > L2)
        q = L1;
    else q = L2;
    i = q - 1;
    carry = 0;
 
    while (i >= 0)
    {
       sum = bvector1[i] + bvector2[i] + carry;
       rezult[i--] = sum & 1;
       carry = sum >> 1;
    }
    printf("\n");
    for (i = 0; i < L1; i++)
        printf("%d",(int)rezult[i]);
    cout << "\n";
    system("Pause");
}
Вроде все верно, но выдает почему-то неверный ответ.
Pjeroo
Землянин
 Аватар для Pjeroo
33 / 33 / 12
Регистрация: 15.01.2013
Сообщений: 313
31.05.2014, 01:27     Калькулятор в двоичной системе #8
C++
1
2
for (i = 0; i < q; i++)
        printf("%d",(int)rezult[i]);
Видимо Вы забыли поменять в выводе.
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
01.06.2014, 16:44  [ТС]     Калькулятор в двоичной системе #9
Цитата Сообщение от Pjeroo Посмотреть сообщение
2
for (i = 0; i < q; i++)
* * * * printf("%d",(int)rezult[i]);
Точно! Спасибо

Добавлено через 22 часа 55 минут
Цитата Сообщение от Pjeroo Посмотреть сообщение
Видимо Вы забыли поменять в выводе.
Проблемка возникла, при вводе например чисел 1111 и 1111, ответ выдает 1110, вместо 11110, т. е. теряет единицу. Как с этим бороться?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2014, 22:37     Калькулятор в двоичной системе
Еще ссылки по теме:

C++ Умножение в двоичной системе
Калькулятор в двоичной системе (схемотехника) C++

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

Или воспользуйтесь поиском по форуму:
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
08.06.2014, 22:37  [ТС]     Калькулятор в двоичной системе #10
Нужно чтобы еще весь массив сдвигался и туда забивался ноль?
Yandex
Объявления
08.06.2014, 22:37     Калькулятор в двоичной системе
Ответ Создать тему
Опции темы

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