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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.72
morphling
-9 / 19 / 1
Регистрация: 26.06.2010
Сообщений: 181
#1

Сложение в двоичной системе счисления - C++

25.08.2011, 03:43. Просмотров 3541. Ответов 7
Метки нет (Все метки)

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
//---------------------------------------------------------------------------
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
//---------------------------------------------------------------------------
int pow(short n)
    {
      int rez = 1;
      if (n == 0)
         {
           return 1;
         }
      while(n)
        {
         rez*=2;
         n--;
        }
        return rez;
    }
int Dec(char *s)
     {
       int len;
       int dl = 0;
       int rez = 0;
       len = strlen(s);
       while (len)
         {
           len--;
 
           if (s[dl] == '1')
              {
                rez += pow(dl);
              }
 
           ++dl;
         }
       return rez;
     }
 
 
int main()
{
    int a, b;
    char s1[30];
    FILE *f;
    f  = fopen("C:\\input.txt","r");
       fscanf(f, "%d", &a);
       fscanf(f, "%d", &b);
       printf(" %d\n",a);
 
       printf(" %d\n",b);
 
    fclose(f);
       itoa(a, s1, 10);
       a = Dec(s1);
       itoa(b, s1, 10);
       b = Dec(s1);
       itoa(a+b, s1, 2);
    f = fopen("C:\\output.txt","w");
       fprintf(f,"%s\n",s1);
       printf("%s\n",s1);
    fclose(f);
    getch();
    return 0;
}
//---------------------------------------------------------------------------
посмотрите пожалуйста... помогите найти ошибку.......

Не по теме:

Результат по тестам:
1. Неверный ответ
2. Засчитано
3. Засчитано
4. Засчитано
5. Засчитано
6. Неверный ответ
7. Неверный ответ
8. Неверный ответ
9. Неверный ответ
10. Неверный ответ
11. Засчитано
12. Неверный ответ
13. Неверный ответ
14. Неверный ответ
15. Неверный ответ
16. Неверный ответ
17. Неверный ответ
18. Неверный ответ
19. Неверный ответ
20. Неверный ответ



Добавлено через 3 часа 38 минут

Не по теме:


а
у



Добавлено через 16 секунд

Не по теме:


а
у

1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2011, 03:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сложение в двоичной системе счисления (C++):

Сложение в двоичной системе счисления - C++
Добрый день! Помогите пожалуйста, не знаю как реализовать. Например n = 1010.1111 m = 1011.0101 . Я понимаю как сделать это на бумаге, но...

Сложение в двоичной системе счисления - C++
можете реализовать эту задачку? Сложение в двоичной системе счисления

Сложение чисел в двоичной системе счисления - C++
Напишите программу, реализующую сложение чисел в двоичной системе счисления с использованием контроля по модулю. Вопрос. что значит &quot;с...

Вычислить сумму двух длинных бинарных чисел, используя сложение чисел в двоичной системе счисления - C++
Задано положительное и отрицательное число в двоичной системе.Составить программу вычисления суммы этих чисел, используя сложения чисел в...

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
25.08.2011, 04:11 #2
А задание можно??
2
-=ЮрА=-
Заблокирован
Автор FAQ
25.08.2011, 14:45 #3
Как вариант Си реализация сложения в двоичной системе
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
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <math.h>
 
char * num2bin(char * bin, unsigned long lnum);
char * add_bin(char * binA, char * binB, char * binC);
unsigned long bin2num(char * bin);
 
int main()
{
    unsigned long a, b;
    char * binA = (char *)malloc(sizeof(char));
    char * binB = (char *)malloc(sizeof(char));
    char * binC = (char *)malloc(sizeof(char));
    do
    {
        printf("\tEnter numbers:\r\n");
        printf("a = ");scanf("%u",&a);
        printf("b = ");scanf("%u",&b);
        printf("\tNumbers in binary:\r\n");
        printf("a = %s\r\n",binA = num2bin(binA, a));
        printf("b = %s\r\n",binB = num2bin(binB, b));
        printf("\tc = a + b in binary\r\n");
        printf("c = %s\r\n",binC = add_bin(binA, binB, binC));
        printf("c in decimial : %u\r\n",bin2num(binC));
        printf("\rCheck result in decimial\r\n");
        printf("a + b = %u\r\n", a + b); 
        printf("[Y/N] Y - enter new numbers\r\n");
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
 
char * num2bin(char * bin, unsigned long lnum)
{
    int i = 0;
    if(bin != NULL)
    {
        do
        {
            bin[i] = '0';
            if(lnum%2)
                bin[i] = '1';
            lnum /= 2;
            if(0 < lnum)
                bin = (char *)realloc(bin,(1 + (i = i + 1))*sizeof(char));
        }
        while(0 < lnum);
        bin[i + 1] = '\0';
        bin = strrev(bin);
    }
    return &bin[0];
}
 
char * add_bin(char * binA, char * binB, char * binC)
{
    int i,j,n;
    if(
        binA != NULL && 
        binB != NULL && 
        binC != NULL
    )
    {
        n = strlen(binA);
        i = strlen(binB);
        if(i < n)
        {
            binB = (char *)realloc(binB,(n - i + 1)*sizeof(char));
            memcpy((void *)&binB[j = n - i],(void *)&binB[0],i);
            for(i = 0;i < j; i++)
                binB[i] = '0';
            binB[n] = '\0';
        }
        if(n < i)
        {
            binA = (char *)realloc(binA,(n - i + 1)*sizeof(char));
            memcpy((void *)&binA[j = n - i],(void *)&binA[0],i);
            for(i = 0;i < j; i++)
                binA[i] = '0';
            binA[n] = '\0';
        }
        binC = (char *)realloc(binC,(n + 1)*sizeof(char));
        for(i = 0,j = 0; i < n; i++)
        {
            if(binA[i] == '0')
            {
                if(binB[i] == '0')
                    binC[i + j] = '0';
                else
                    binC[i + j] = '1';
            }
            else
            {
                if(binB[i] == '0')
                    binC[i + j] = '1';
                else
                {
                    binC[i + j] = '0';
                    binC = (char *)realloc(binC, (1 + i + (j = j + 1))*sizeof(char));
                    binC[i + j] = '1';
                }
            }
        }
        binC[i + j] = '\0';
    }
    return &binC[0];
}
 
unsigned long bin2num(char * bin)
{
    int i,n;
    unsigned long num = 0;
    if(bin)
    {
        n = strlen(bin);
        for(i = n; 0 < i; i--)
        {
            if(bin[i - 1] == '1')
                num += pow(2,(n - i));
        }
    }
    return num;
}
PS:Программу тестировал мало, если будут баги пиши, но вроди считает норм(проверял XP-ным калькулятором)
0
Миниатюры
Сложение в двоичной системе счисления  
Digit@ll
Brainsbreaker
884 / 362 / 31
Регистрация: 01.02.2011
Сообщений: 1,584
26.08.2011, 17:53 #4
Баг на 9, должно быть 1001
0
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
26.08.2011, 20:14 #5
Просто складывай. Создавай массив. Знаком с битовыми операциями?
C++
1
2
3
4
5
6
7
8
i=0;
while (c)
{
 if (c&1) mas[i]=1;
 else mas[i]=0;
 i++;
 c>>=1;
}
Теперь полученный массив выводим в обратном порядке. Вот и всё.
0
-=ЮрА=-
Заблокирован
Автор FAQ
26.08.2011, 21:21 #6
Цитата Сообщение от Digit@ll Посмотреть сообщение
Баг на 9, должно быть 1001
- хорошо посмотрю, но на ввод
а = 9 b = 9 выдало
а = 1001
b = 1001
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.08.2011, 22:02 #7
morphling, может вам пригодится:
programm

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
void Print(char *a, int n)
{
   int i;
   for (i = n - 1; i >= 0 ; i--)
      printf("%d", a[i]);
   printf("\n");
}
 
void ToArray(unsigned long x, char *a, int *n)
{
   int i = 0;
   do
   {
      a[i++] = x & 1;
      x >>= 1;
   }
   while(x);
   *n = i;
}
 
void Sum(char *a, int *alen, char *b, int blen)
{
   char ost, buf;
   int i;
   i = ost = 0;
   while (i < *alen && i < blen)
   {
 
       buf = (a[i] + b[i] + ost) >> 1;
       a[i] = (a[i] + b[i] + ost) & 1;
       ost = buf;
       i++;
   }
   while (i < *alen)
   {
      buf = (a[i] + ost) >> 1;
      a[i] = (a[i] + ost) & 1;
      ost = buf;
      i++;
   }
   while (i < blen)
   {
      buf = (b[i] + ost) >> 1;
      a[i] = (b[i] + ost) & 1;
      ost = buf;
      i++;
   }
   if (ost)
      a[i++] = ost;
   *alen = i;
}
 
int main()
{
   unsigned long x = 123, y = 321;
   int alen = 0, blen = 0;
   char a[100], b[100];
   ToArray(x, a, &alen);
   ToArray(y, b, &blen);
   Sum(a, &alen, b, blen);
   Print(a, alen);
   return 0;
}


Добавлено через 2 минуты
Цитата Сообщение от AvengerAlive Посмотреть сообщение
Просто складывай. Создавай массив. Знаком с битовыми операциями?
C++
1
2
3
4
5
6
7
8
i=0;
while (c)
{
 if (c&1) mas[i]=1;
 else mas[i]=0;
 i++;
 c>>=1;
}
Теперь полученный массив выводим в обратном порядке. Вот и всё.
Можно проще написать (без if)
C++
1
mas[i] = c&1;
И в вашем цикле не учтено что c может быть 0, поэтому цикл do-while нужен
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,460
27.08.2011, 01:08 #8
morphling, ошибка в функции Dec (определил по возвращаемому значению), кстати, что она делает?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2011, 01:08
Привет! Вот еще темы с ответами:

Вычитание в двоичной системе счисления двух чисел - C++
Помогите написать код. Вычитание в двоичной системе счисления двух чисел. Надо сдать лабу(

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.08.2011, 01:08
Ответ Создать тему
Опции темы

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