Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 49
1

Перевод из двоичной системы счисления в десятичную

20.01.2015, 13:16. Показов 1683. Ответов 8
Метки нет (Все метки)

Программа не работает для отрицательных чисел. Помогите найти ошибку.
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <math.h>
#include <locale.h>
using namespace std;
 
int mod(int a, int e)//остаток от деления
{
    int t;
    t = 0;
    while (a >= e)
    {
        a = a - e;
        t = t + 1;
    }
 
 
    return a;
}
 
 
int q(int* A)//нормализация
{
    int i;
    int h;
    int c;
    int D[30];
    int x;
    int m;
    int l;
    int j;
    int T[30];
    int s;
    int g;
    int t;
    setlocale(LC_ALL, "Russian");
    l = sizeof(T);
    s = sizeof(int);
    j = l / s;
    i = 0;
    h = 1;
    c = 0;
    while (i <= 1)
    {
        i = 8 * h;
        h = h + 1;
    }
    c = i - j;
    x = 0;
    i = 0;
    while (j + c - 1 >= i)
    {
        while (i <= c - 2)
        {
            A[i] = 0;
            i = i + 1;
        }
        while (x <= j)
        {
            A[i] = T[x];
            x = x + 1;
            i = i + 1;
        }
    }
    return 0;
}
 
int v(int* S)//инверсия
{
    int i;
    int m;
    int k;
    int g;
    setlocale(LC_ALL, "Russian");
    i = 0;
    k = q(S);
    g = k + 1;
    while (i <= g)
    {
        if (S[i] > 0)
        {
            S[i] = 0;
        }
        else
        {
            S[i] = 1;
        }
        i = i + 1;
    }
 
    return k;
}
 
int pl(int* O)//плюс 1
{
    int j;
    int i;
    int m;
    int t;
    i = 0;
    setlocale(LC_ALL, "Russian");
    j = v(O);
    t = j + 1;
    while (O[t]>0)
    {
        O[t] = 0;
        t = t - 1;
    }
    O[t] = 1;
 
    return j;
}
 
int main()//проверка
{
    int i;
    int j;
    int a;
    int D[30];
    int r;
    int t;
    int b[10];
    int k;
    int e;
    int l;
    int q;
    setlocale(LC_ALL, "Russian");
    r = 0;
    i = 0;
    a = 0;
    q = 0;
    int p;
    cout << "Введите двоичное число: " << "\n";
    cin >> t;
    while (t > 0)
    {
        l = t % 10;
        t = t / 10;
        b[r] = l;
        r = r + 1;
    }
    cout << "Массив из введенного числа: " << "\n";
    for (j = r - 1; j >= 0; j--)
    {
        cout << " " << b[j]<<endl;
    }
    r = r - 1;
    cout<<"Длина массива: "<<r<<"\n";
    if (mod(r, 8) == 0 && b[0] == 1)
    {
        pl(b);
        do
            {
                q = b[r] * pow(2.0, i) + q;
                r = r - 1;
                i = i + 1;
            } while (r >= 0);
        q = q*(-1);
            
    }
    else
    {
        do
        {
            q = b[r] * pow(2.0, i) + q;
            i = i + 1;
            r = r - 1;
            
        }
        while (r >= 0);
        
    }
    cout << "Результат перевода: " << q*2 << "\n";
    system("pause");
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2015, 13:16
Ответы с готовыми решениями:

Перевод из двоичной системы счисления в десятичную
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;cstring&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;...

Перевод из двоичной системы счисления в десятичную
Почему самописная функция long long int From2to10(string s) { long long int r = 0; int i, j...

Перевод из двоичной системы счисления в десятичную
как создать код который переводит с двоичной системы в десятичную без использования DEC и прочего?

Перевод из двоичной системы счисления в десятичную
Как перевести число из двоичной системы счисления в десятичную?

8
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
20.01.2015, 13:49 2
boponodina, я всегда знала, что далека от программирования... Но вот в упор не понимаю - зачем столько переменных?..
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 49
20.01.2015, 14:12  [ТС] 3
Не суть важно сколько переменных не использовано(даже если они указаны). Я не могу найти ошибку, чтобы заставить программу работать с отрицательными двоичными числами(перевод в отрицательные десятичные)
Цитата Сообщение от Тамика Посмотреть сообщение
boponodina, я всегда знала, что далека от программирования... Но вот в упор не понимаю - зачем столько переменных?..
0
2723 / 1887 / 559
Регистрация: 05.06.2014
Сообщений: 5,499
20.01.2015, 14:52 4
Цитата Сообщение от boponodina Посмотреть сообщение
Программа не работает для отрицательных чисел. Помогите найти ошибку.
И что по вашему произойдет в while (t > 0) если t отрицательно? Что-то сверх этого вам вряд ли кто подскажет, так как код вызывает мысль "что это такое и зачем оно было нужно?".

Добавлено через 6 минут
PS
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//чтение
char str[100];
cin>>str;
char*pos=str;
 
//парсинг
bool negative=*pos=='-';
if(negative)
    ++pos;
unsigned long N=0;
for(;*pos;++pos)
    N=N*2+*pos-'0';
 
//результат
if(negative)
    cout<<"-";
cout<<N;
1
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 49
20.01.2015, 16:05  [ТС] 5
Спасибо за предоставленный вариант программы через строки, но к сожалению проблема не решена: вместо 11110010 = -14 выдает 242.

Добавлено через 4 минуты
Цитата Сообщение от Renji Посмотреть сообщение
И что по вашему произойдет в while (t > 0) если t отрицательно?
знака минус в двоичной системе счисления нет.
А в данном цикле происходит поэлементная запись числа в массив.
0
2723 / 1887 / 559
Регистрация: 05.06.2014
Сообщений: 5,499
20.01.2015, 16:09 6
Цитата Сообщение от boponodina Посмотреть сообщение
Спасибо за предоставленный вариант программы через строки, но к сожалению проблема не решена: вместо 11110010 = -14 выдает 242.
Это не "двоичная система", а "битовое представление 8 битового целого со знаком".
Цитата Сообщение от boponodina Посмотреть сообщение
знака минус в двоичной системе счисления нет.
В двоичной системе придуманной лично вами - может и нет. В общепринятой двоичной, троичной и вообще сколько_хочешь_ричной все есть.
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 49
20.01.2015, 18:15  [ТС] 7
Цитата Сообщение от Renji Посмотреть сообщение
В двоичной системе придуманной лично вами - может и нет. В общепринятой двоичной, троичной и вообще сколько_хочешь_ричной все есть.
Скорее всего я не так понимаю двоичную систему.

Я пока плохо в с++ разбираюсь. Помогите пожалуйста решить проблему с отрицательными числами(не выводит десятичное отрицательное число)
0
2723 / 1887 / 559
Регистрация: 05.06.2014
Сообщений: 5,499
20.01.2015, 18:19 8
cout<<N; cout<<(N<128?N:N-256);
0
Заблокирован
20.01.2015, 19:41 9
C++
1
2
3
string input = "10000011";
    std::bitset<8> bit(input.substr(1, input.length() - 1));
    cout << (((input[0] - '0') ? -1 : 1) * (signed long) bit.to_ulong());
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2015, 19:41

Перевод из двоичной системы счисления в десятичную
Я создал программу, но вот она выдает размерность введенного массива, вместо десятичного числа....

Перевод из двоичной системы счисления в десятичную
Помогите пожалуйста перевести число из 2-ой сс в 10 сс. Буду очень благодарен:)

Перевод числа из двоичной системы счисления в десятичную
написать программу, которая переводит число из двоичной системы счисления в десятичную

Рекурсивный перевод из двоичной системы счисления в десятичную
Вот мой код: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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