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

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

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

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

25.08.2011, 03:43. Просмотров 3217. Ответов 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
 Аватар для Digit@ll
868 / 346 / 27
Регистрация: 01.02.2011
Сообщений: 1,496
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++
 Аватар для Thinker
4218 / 2192 / 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
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,304
27.08.2011, 01:08     Сложение в двоичной системе счисления #8
morphling, ошибка в функции Dec (определил по возвращаемому значению), кстати, что она делает?
Yandex
Объявления
27.08.2011, 01:08     Сложение в двоичной системе счисления
Ответ Создать тему
Опции темы

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