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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
#1

Умножение в двоичной системе - C++

31.05.2014, 21:47. Просмотров 1234. Ответов 21
Метки нет (Все метки)

Добрый вечер. Помогите с реализацией умножения в двоичной системе. Дано два массива, например 1111 и 1111. Как написать цикл умножения друг на друга?

Добавлено через 56 минут
Я так понимаю нужно как-то создавать массивы, равные кол-ву элементов массива, и складывать их, но как реализовать на практике - хоть убейте не понимаю

Добавлено через 27 минут
Ну помогите пожалуйста, мне нужен только небольшой цикл в качестве примера
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2014, 21:47     Умножение в двоичной системе
Посмотрите здесь:

Умножение двух чисел в двоичной системе счисления - C++
Всем доброго времени суток! Мучаю эту программу уже который день, но правильно она складывать числа в двоичной системе счисления...

Калькулятор в двоичной системе - C++
Сложение в двоичной системе. Подскажите почему не верные ответы выдает? #include "stdafx.h" #include <iostream> #include <string> ...

Вычитание в двоичной системе счисления - C++
Нужно провести вычитание напрямую, без преобразования в десятичную систему счисления. Пользовался поиском, но не нашел данный алгоритм,...

Представление float в двоичной системе - C++
Смысл: требуется написать программу, показывающую двоичную структуру float. Запускаем: вводится первое число с плавающей запятой,...

Калькулятор в двоичной системе (схемотехника) - C++
Помогите написать код для программы proteus isis Калькулятор в двоичной системе предмет схемотехника(ниже прикладываю фото схемы)и...

Сдвинуть число в двоичной системе на k позиций - C++
Нужно сдвинуть число в двоичной системе на k позиций, но проблема в том, что k может быть какое угодно большое. Можно ли стандартной...

Вывод десятичных чисел в двоичной системе - C++
Заданы два числа <=16. Найти их сумму и с помощью битовых операций записать оба слагаемых и их сумму одно за другим в ячейку памяти...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.06.2014, 06:11     Умножение в двоичной системе #16
Denis123456789, момент с разделителем в get я действительно не учел, но вот вычитать единицу вручную не надо. get считывает n-1 символ максимум.
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
01.06.2014, 17:05  [ТС]     Умножение в двоичной системе #17
Цитата Сообщение от Denis123456789 Посмотреть сообщение
метод get (char buf[],int n,char razd='\n') читает n символов из входного потока и помещает их в массив buf, чтение приостанавливается преждевременно, если очередной символ входного потока равен razd, при этом символ разделителя остается во входном потоке. В итоге вы вводите первое число и нажимаете enter, первый оператор get считывает все до символа '\n', а второй сразу встречает '\n' и прекращает считывание, при этом во втором буфере оказывается только символ конца строки, который автоматически вставляется в буфер методом get, поэтому, кстати, надо считывать sizeof()-1 символ, чтобы для него было место в буфере.
А вот метод getline работает так же как get, но если встречает символ разделителя удаляет его из входного потока.
Т. е. допусти я ввожу число 101010. Этот cin.getline(bvector1, sizeof(bvector1)); сделает из массива со 100 элементами массив с 6 элементами?

И еще такой вопрос, если я захочу переделать этот код в умножение например в восьмеричной системе, что нужно переделать?
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
01.06.2014, 18:06     Умножение в двоичной системе #18
Цитата Сообщение от niikiita Посмотреть сообщение
Т. е. допусти я ввожу число 101010. Этот cin.getline(bvector1, sizeof(bvector1)); сделает из массива со 100 элементами массив с 6 элементами?
нет массив будет из 100 элементов в любом случае, но полезная информация будет находится только в первых шести, седьмым будет '\0', который будет отделять используемую информацию, от остальной части массива.
Цитата Сообщение от niikiita Посмотреть сообщение
И еще такой вопрос, если я захочу переделать этот код в умножение например в восьмеричной системе, что нужно переделать?
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 <string>
#include <cstring>      
 
using namespace std;
 
int main()
{
    int osnovanie = 8;
    char bvector1[100]; char bvector2[100]; int rezult[100];
    cin.getline(bvector1, sizeof(bvector1)-1);
    cin.getline(bvector2, sizeof(bvector2)-1);
 
 
    int L1 = strlen(bvector1);
 
    int L2 = strlen(bvector2);
 
    for (int i = 0; i < L1 + L2; i++) rezult[i] = 0;
    for (int i = L2 - 1; i >= 0; i--)
    {
 
        for (int j = L1 - 1; j >= 0; j--)
        {
            
                rezult[j + i + 1] += (bvector1[j] - '0') * (bvector2[i] - '0');
                if (rezult[j + i + 1] > osnovanie-1) {              
                    rezult[i + j] += rezult[j + i + 1]/osnovanie;
                    rezult[j + i + 1] %= osnovanie;
                }
            }
        }
    for (int i = 0; i < L1 + L2; i++) cout << (int)rezult[i];
    system("Pause");
    return 0;
}
ну вот сделал вроде для произвольной с основанием osnovanie, но только, если основание больше 10, то надо в массив результата символы цифр больше 9 в виде букв прописывать
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
04.06.2014, 23:04  [ТС]     Умножение в двоичной системе #19
Цитата Сообщение от Denis123456789 Посмотреть сообщение
нет массив будет из 100 элементов в любом случае, но полезная информация будет находится только в первых шести, седьмым будет '\0', который будет отделять используемую информацию, от остальной части массива.
А каким образом это поможет от переполнения буфера?
Цитата Сообщение от Denis123456789 Посмотреть сообщение
надо в массив результата символы цифр больше 9 в виде букв прописывать
Как это сделать? чувствую себя попрошайкой, но у меня не получается сделать
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
06.06.2014, 03:10     Умножение в двоичной системе #20
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 <string>
#include <cstring>      
 
using namespace std;
 
int main()
{
    int osnovanie = 16;
    char bvector1[100]; char bvector2[100]; unsigned char rezult[100];
    cin.getline(bvector1, sizeof(bvector1)-1);
    cin.getline(bvector2, sizeof(bvector2)-1);
 
 
    int L1 = strlen(bvector1);
 
    int L2 = strlen(bvector2);
 
    for (int i = 0; i < L1 + L2; i++) rezult[i] = 0;
    for (int i = L2 - 1; i >= 0; i--)
    {
 
        for (int j = L1 - 1; j >= 0; j--)
        {
            
            rezult[j + i + 1] += ((bvector1[j] >= 'A' && bvector1[j] <= 'Z') ? 10 +  bvector1[j]-'A' : (bvector1[j] - '0')) * ((bvector2[i] >= 'A' && bvector2[i] <= 'Z') ? 10 +  bvector2[i]-'A' : (bvector2[i] - '0'));
            if (rezult[j + i + 1] > osnovanie - 1) {
                rezult[i + j] += rezult[j + i + 1] / osnovanie;
                rezult[j + i + 1] %= osnovanie;
            }
            
        }
        if (rezult[L1 + i ] > 9)
            rezult[L1 + i ] = 'A' + rezult[L1 + i ] - 10;
        else rezult[L1 + i ] += '0';
    }
    rezult[L1 + L2] = '\0';
    for (int i = 0; i < L1 ; i++)
    {
        if (rezult[i] > 9)
            rezult[i] = 'A' + rezult[i] - 10;
        else rezult[i] += '0';
    }
    cout << rezult;
    system("Pause");
    return 0;
}
ну как-то так, вроде работает

Добавлено через 7 минут
Цитата Сообщение от niikiita Посмотреть сообщение
А каким образом это поможет от переполнения буфера?
ну если ввести 200 символов конструкция cin.getline() считает только 99, а остальные оставит в потоке, а оператор >>так и будет считывать пока не встретит символ окончания ввода
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
08.06.2014, 23:10  [ТС]     Умножение в двоичной системе #21
Цитата Сообщение от Denis123456789 Посмотреть сообщение
у как-то так, вроде работает
Что значит "? 10"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2014, 00:03     Умножение в двоичной системе
Еще ссылки по теме:

Обьяснить представление числа в двоичной системе - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;iomanip&gt; #include &lt;windows.h&gt; #include...

Вычитание чисел в двоичной системе счисления - C++
Это не подходит http://www.cyberforum.ru/cpp-beginners/thread584648.html#post3072102. Помогите написать код на с++ . А то скоро конец...

Оформить вывод числа в двоичной системе счисления - C++
Уважаемые программисты! Помогите правильно оформить вывод числа в двоичной системе счисления, необходимо сделать это именно с помощью...

Задан массив чисел в двоичной системе счисления - C++
Задан массив чисел в двоичной системе счисления .Упорядочить элементы массива по убыванию . Определить сумму чисел.

Считать число из дока сразу в двоичной системе - C++
Есть способ считать из файла цифру 199 сразу в массив(без деления), где каждый элемент массива 1 или 0?


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

Или воспользуйтесь поиском по форуму:
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
09.06.2014, 00:03     Умножение в двоичной системе #22
Что значит "? 10"
это условный тернарный оператор условие?значение1:значение2, например
a>b?a:b, если условие истинно (a>b), то возвращает значение1(a), если ложно-значение2(b)
Yandex
Объявления
09.06.2014, 00:03     Умножение в двоичной системе
Ответ Создать тему
Опции темы

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