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

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

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

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

25.08.2011, 03:43. Просмотров 3502. Ответов 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 секунд

Не по теме:


а
у

Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2011, 03:43     Сложение в двоичной системе счисления
Посмотрите здесь:
C++ Сложение в двоичной системе счисления
Сложение в двоичной системе счисления C++
C++ Сложение чисел в двоичной системе счисления
C++ Вычислить сумму двух длинных бинарных чисел, используя сложение чисел в двоичной системе счисления
C++ Вычитание в двоичной системе счисления
Вычитание чисел в двоичной системе счисления C++
Умножение двух чисел в двоичной системе счисления C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
25.08.2011, 04:11     Сложение в двоичной системе счисления #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-ным калькулятором)
Миниатюры
Сложение в двоичной системе счисления  
Digit@ll
Brainsbreaker
881 / 359 / 30
Регистрация: 01.02.2011
Сообщений: 1,572
26.08.2011, 17:53     Сложение в двоичной системе счисления #4
Баг на 9, должно быть 1001
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;
}
Теперь полученный массив выводим в обратном порядке. Вот и всё.
-=ЮрА=-
Заблокирован
Автор FAQ
26.08.2011, 21:21     Сложение в двоичной системе счисления #6
Цитата Сообщение от Digit@ll Посмотреть сообщение
Баг на 9, должно быть 1001
- хорошо посмотрю, но на ввод
а = 9 b = 9 выдало
а = 1001
b = 1001
Thinker
Эксперт C++
4225 / 2199 / 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 нужен
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2011, 01:08     Сложение в двоичной системе счисления
Еще ссылки по теме:
Задан массив чисел в двоичной системе счисления C++
C++ Оформить вывод числа в двоичной системе счисления
Вычитание в двоичной системе счисления двух чисел C++
C++ Проверить правильность ввода числа в двоичной системе счисления

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
27.08.2011, 01:08     Сложение в двоичной системе счисления #8
morphling, ошибка в функции Dec (определил по возвращаемому значению), кстати, что она делает?
Yandex
Объявления
27.08.2011, 01:08     Сложение в двоичной системе счисления
Ответ Создать тему
Опции темы

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