Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/140: Рейтинг темы: голосов - 140, средняя оценка - 4.75
5 / 5 / 4
Регистрация: 13.11.2015
Сообщений: 129

Сложение двоичных чисел

08.04.2017, 03:54. Показов 28408. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравсвуйте!

Даны два массива:
C++
1
2
int a[] = {1, 0, 0, 1}; // двоичное число 1001
int b[] = {0, 1, 1, 1}; // двоичное число 0111
Нужно написать код сложения этих чисел. Ответ нужно также записать в массив таким же образом.
Без использования знака ">>". Заранее спасибо)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.04.2017, 03:54
Ответы с готовыми решениями:

Сложение двоичных чисел
Ввести два действительных двоичных числа, представленных как символьные строки, и найти их сумму. Помогите, может кто сталкивался с...

Сложение двоичных чисел, представленных в bitset
Здравствуйте! Мне необходимо узнать, как можно реализовать сложение двоичных чисел, представленных в виде bitset (хотя бы инкремент)....

Сложение 2-х целых двоичных чисел, хранящихся в массивах A и B
Задачка из Кормена. Результат записать в массив С. Написал, что-то вроде: int main() { int i,q=0; for(i=n-1;i>=0;i--) { ...

11
 Аватар для Hitoku
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
08.04.2017, 04:14
Сложение 2-х целых двоичных чисел, хранящихся в массивах A и B
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
08.04.2017, 08:06
Лучший ответ Сообщение было отмечено ONEJI как решение

Решение

На C. Переделать на C++ нетрудно.

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 <stdio.h>
#include <stdlib.h>
#include <malloc.h>
 
int * add_bin(int *A1, int *A2, int n)
{
   int i,k,p;
   int *R=(int *) calloc(n+1,sizeof(int));
   p=0;
   for (i=n-1; i>=0; i--)
   {
       k=A1[i]+A2[i]+p;
       R[i+1]=k%2;
       p=k/2;
   }
   if (p>0) R[0]=p;
   return R;
}   
       
int main(int argc, char *argv[])
{
 
  int A1[4]={1,0,0,1}; // 9
  int A2[4]={1,1,0,1}; // 13
  int i;
  int *R;
  
  R=add_bin(A1,A2,4);
  
  for (i=0; i<5; i++) printf("%d",R[i]);
  printf("\n");
 
  free(R);
  system("PAUSE");  
  return 0;
}
1
5 / 5 / 4
Регистрация: 13.11.2015
Сообщений: 129
08.04.2017, 12:27  [ТС]
Catstail, А если размер массивов разный то как тогда изменится программа? Например у А размер 4, а у B 5.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
08.04.2017, 17:19
Тогда размер R нужно брать = max(разм_А, разм_B)+1
0
5 / 5 / 4
Регистрация: 13.11.2015
Сообщений: 129
11.04.2017, 11:53  [ТС]
Catstail, программа работает не корректно. При установлении размера R в качестве max(разм_А, разм_B) + 1 если размер А = 5, а размер В = 4 элемент B[4] устанавливается как рандомное число из буфера. Помогите исправить.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
11.04.2017, 12:07
ONEJI, выложи код, посмотрю
0
5 / 5 / 4
Регистрация: 13.11.2015
Сообщений: 129
11.04.2017, 12:19  [ТС]
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 <vector>
 
using namespace std;
 
vector<int> add_bin(vector<int> &A, vector<int> &B)
{
    int i, k, p;
    int arrSize = max(A.size(), B.size());
    vector<int> R(arrSize + 1);
    p = 0;
 
    for (i = arrSize - 1; i >= 0; i--)
    {
        cout<<"A["<<i<<"]: "<<A[i]<<" ";
        cout<<"B["<<i<<"]: "<<B[i]<<endl;
        k = A[i] + B[i] + p;
        R[i + 1] = k%2;
        p = k / 2;
    }
    if (p > 0) R[0] = p;
    return R;
}
 
int main()
{
    vector<int> A, B, R;
 
    A.push_back(1);
    A.push_back(0);
    A.push_back(0);
    A.push_back(1);
    A.push_back(1);
 
    B.push_back(1);
    B.push_back(1);
    B.push_back(0);
    B.push_back(1);
    /* *********** */
 
    R = add_bin(A, B);
 
    for (int i=0; i<R.size(); i++)
        cout<<R[i];
 
    return 0;
}
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
11.04.2017, 15:23
Цитата Сообщение от ONEJI Посмотреть сообщение
Catstail, программа работает не корректно.
- это - не моя программа.
0
5 / 5 / 4
Регистрация: 13.11.2015
Сообщений: 129
11.04.2017, 15:37  [ТС]
Catstail, здесь ваш код переведеный на С++ и вместо массивов использовались вектора и все. Ваш скинуть?
0
5 / 5 / 4
Регистрация: 13.11.2015
Сообщений: 129
11.04.2017, 16:31  [ТС]
Олег Клапан, чего?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
11.04.2017, 18:45
Лучший ответ Сообщение было отмечено ONEJI как решение

Решение

ONEJI, вот код на C++ (но без векторов):

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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int max(int a, int b)
{
    return (a>b)?a:b;
}    
 
int * add_bin(int *A1, int *A2, int n1, int n2)
{
   int i,i1,i2,k,p,nn;
   int *R;
 
   nn=max(n1,n2);
   
   R=new int[nn+1];
   for (i=0; i<nn+1; i++) R[i]=0;
   
   p=0;
   i1=n1-1;
   i2=n2-1;
   
   for (i=nn-1; i>=0; i--)
   {
       k=0;
       if (i1>=0) k+=A1[i1];
       if (i2>=0) k+=A2[i2];
       k+=p;
       R[i+1]=k%2;
       p=k/2;
       i1--;
       i2--;
   }
   if (p>0) R[0]=p;
   return R;
}   
       
int main(int argc, char *argv[])
{
 
  int A1[5]={1,1,0,0,1}; 
  int A2[4]={1,1,0,1}; 
  int i;
  int *R;
  
  R=add_bin(A1,A2,5,4);
  
  for (i=0; i<6; i++) cout << R[i];
  cout << endl;
 
  delete R;
  system("PAUSE");  
  return 0;
  
}
Добавлено через 1 час 53 минуты
В 53-й строке ошибка:

C++
1
 delete [] R;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.04.2017, 18:45
Помогаю со студенческими работами здесь

Деление двоичных чисел
Пожалуйста помогите!! Даны два двоичных числа, они записанны в строки, и это важное условие(без перевода числа в целое)... Необходимо...

Умножение двоичных чисел
ребятушки вопрос жизни и смерти. оооочень нужен код умножающий двоичные числа с пояснениями. помогите пожалуйста =(

Массив двоичных чисел
Подскажите, пожалуйста, как на С задать массив двоичных чисел (двоичный вектор) длиной 64 бит, а затем поделить его на равные левую и...

Вычитание двоичных чисел
Необходимо считать с текстового файла 2 двоичных числа, ограниченных 16 разрядом, выполнить вычитание в дополнительном коде, перевести в...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru