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

Вычисление 10-го эквивалент 2-го числа - C++

Восстановить пароль Регистрация
 
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
15.12.2012, 19:50     Вычисление 10-го эквивалент 2-го числа #1
Доброго времени суток.
Выполняю задание написать программу переводящую число из 2-ой в 10-ую систему исчисления.
Но столкнулся с проблемой.
Ошибки компилятор не выдает.

Кликните здесь для просмотра всего текста
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
//Вычисление 10-го эквивалент 2-го числа.
// Использовать операции деления и вычисления, что бы "отрывать" разряды
//двоичного числа по 1-му с права на лево.
 
#include <iostream>
using namespace std;
 
int main()
{
   int binaryNumber;//Двоичное число.
   int a, b, c, d;//Переменные.
   int decimalNumber;//Двоичное число.
   
   cout << "Please enter binary number: ";
   cin >> binaryNumber;
   
   a = 10;
   b =1;
   c = 1;
   d = 1;
   decimalNumber = 0;
   
   //
   
   while( d != 0 )
   {
      d = (( binaryNumber % a ) * b ) * c;
      decimalNumber += d;
      
      a *= 10;
      b *= 10;
      c *= 2;
      }
   cout << "Decimal number: " << decimalNumber << endl;
   
   system("PAUSE");
   return 0;
   }


Никаких ошибок компилятор не выбивает, просто выводит непонятные цифры.
Например при вводе 1101 выводит 677729573, а должно 13.


Добавлено через 5 минут
Блин я while поставил до 0. Подумал что ноль только выйдет когда количество 0-ей в int a; превысит
на 1-ин количество 1-иц и 0-ей в введенном двоичном числе.
А тут наверное надо сначало посчитать количество 0-й и 1-ц в двоичном числе а потом уже делать while со счетчиком.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
15.12.2012, 20:09     Вычисление 10-го эквивалент 2-го числа #2
Можно вот по такому алгоритму перевести двоичное в десятичное. В вашей программе я что то не разобрался)
C++
1
2
3
4
5
6
7
8
int decimalNumber = 0;
int i = 0;
while (binaryNumber != 0)
{
    decimalNumber += binaryNumber%10 * pow(2.0, i);
    binaryNumber /= 10;
    i++;
}
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
15.12.2012, 20:18  [ТС]     Вычисление 10-го эквивалент 2-го числа #3
Спасибо, но я забыл дописать что использовать можно только то что изучено в книге на данный момент
А все что изучено есть в коде.
Можно ли как нибудь проще?
pow еще не изучали.

И еще вопрос можно ли простым методом посчитать количество цифр в двоичном числе.
Я обычно использовал остаток от деления, но тут 0 может возникнуть не только в конце но и в середине числа
Поэтому подсчет числа кончиться на первом же 0

Добавлено через 2 минуты
if else еще изучали
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
15.12.2012, 20:23     Вычисление 10-го эквивалент 2-го числа #4
Количество цифр в двоичном числе можно и обычным способом находить, так же как и в десятичном. А если встретиться ноль в середине числа то ничего страшного тут не будет. Просто остаток при делении на 10 станет нулю
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
15.12.2012, 20:29  [ТС]     Вычисление 10-го эквивалент 2-го числа #5
А если число например 00000101 и когда дело дойдет до 00000 то и остаток будет равен 0 и цела часть будет равно 0 хотя цифры еще есть. Что тогда делать?
За что тогда зацепиться?
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
15.12.2012, 20:37     Вычисление 10-го эквивалент 2-го числа #6
Вот я свою программку положил и скрин как работает если в начале двоичного числа будут нули. Все правильно считает
Кликните здесь для просмотра всего текста
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
#include "stdafx.h"
#include "windows.h"
#include "iostream"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    int binary_number;          // двоичное число
    int binary_number_copy;     // копия двоичное число.
    int decimal_number = 0;     // десятичное число
 
    cout << "Введите двоичное число: ";
    cin >> binary_number;
    binary_number_copy = binary_number;
 
    binary_number_copy = binary_number;
 
    int i = 0;
    while (binary_number_copy != 0)
    {
        decimal_number += binary_number_copy%10 * pow(2.0, i);
        binary_number_copy /= 10;
        i++;
    }
 
    cout << binary_number << " = " << decimal_number << endl;
 
    cout << endl;               
    system("pause");            
    return 0;                   
}

Да и вообще все эти нули они ничего не значат (отбрасываются)
Миниатюры
Вычисление 10-го эквивалент 2-го числа  
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
15.12.2012, 20:53  [ТС]     Вычисление 10-го эквивалент 2-го числа #7
Вот это еще не изучал
C++
1
pow(2.0, i)
А использовать можно только то что уже изучено по книге.
Может из за этого и посчитать не могу.
Давайте я вам напишу то как задумал сделать, а вы скажете в чем ошибка.

На данный момент я знаю два простых способа вычислить количество цифр в числе.
Делить на 10 пока остаток или целое не будет равно 0.
Но таким способов нельзя вычислить количество цифр двоичного числа.
Потому что если встретиться число типа 00000001 то возникнет ситуация когда целая часть будет равна 0,
а если считать по остатку и умножать потом то он наткнется на ближайший ноль.
Верно?
Может эту проблему и решает тот pow:
C++
1
pow(2.0, i)
который я не понимаю

Примеры:

001/10 - целая часть равна 0.
001%10-остаток равен 1, но при повторном делении//Тут считаем 1-вую цифру справа.
( 001 % 100 ) / 10 - остаток равен 0.//Тут считаем 2-ую цифру справа.
Севак
любитель покушать
 Аватар для Севак
674 / 625 / 106
Регистрация: 25.09.2011
Сообщений: 1,313
15.12.2012, 21:00     Вычисление 10-го эквивалент 2-го числа #8
pow(x,y) - это функция возведения числа x в степень y
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
15.12.2012, 21:11  [ТС]     Вычисление 10-го эквивалент 2-го числа #9
Подскажите пожалуйста тогда хотябы как подсчитать количество цифр двоичного числа не используя примочек всяких.
Например с помощью while деления или вычисления остатка от деления. Без pow.
Или это невозможно?
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
15.12.2012, 21:15     Вычисление 10-го эквивалент 2-го числа #10
Вариант без pow

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
#include <iostream>
 
int dec_to_bin(int value)
{ 
    int res = 0, k = 1;
    
    while(value)
    {
        res += (value % 10) * k; 
        k *= 2;
        value /= 10;
    }    
    
    return res;  
}
 
 
int main()
{
    int number;
    
    std::cout << "Enter number: ";
    std::cin >> number;
    
    std::cout << "Binary = " << dec_to_bin(number) << "\n";
       
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2012, 21:37     Вычисление 10-го эквивалент 2-го числа
Еще ссылки по теме:

Для вводимого целого положительного числа определите его двоичный эквивалент C++
Вывести словестный эквивалент числа C++
C++ To_string эквивалент

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

Или воспользуйтесь поиском по форуму:
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
15.12.2012, 21:37  [ТС]     Вычисление 10-го эквивалент 2-го числа #11
Schizorb
Блиииин крутоо.
То есть вы занесли число в условие и пока он не пропадет оно выполняется?
Объясните если не понял я очень хочу понять.
Буду искренне благодарен.

Добавлено через 10 минут
Цитата Сообщение от Schizorb Посмотреть сообщение
Вариант без pow

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
#include <iostream>
 
int dec_to_bin(int value)
{ 
    int res = 0, k = 1;
    
    while(value)
    {
        res += (value % 10) * k; 
        k *= 2;
        value /= 10;
    }    
    
    return res;  
}
 
 
int main()
{
    int number;
    
    std::cout << "Enter number: ";
    std::cin >> number;
    
    std::cout << "Binary = " << dec_to_bin(number) << "\n";
       
    return 0;
}
Цикл while(value) завершается тогда когда при дилении в целом числе уже нули не из самого двоичного числа?Тоесть добавленные самой 10й?
Yandex
Объявления
15.12.2012, 21:37     Вычисление 10-го эквивалент 2-го числа
Ответ Создать тему
Опции темы

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