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

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

Войти
Регистрация
Восстановить пароль
 
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
#1

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

15.12.2012, 19:50. Просмотров 624. Ответов 10
Метки нет (Все метки)

Доброго времени суток.
Выполняю задание написать программу переводящую число из 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 со счетчиком.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2012, 19:50     Вычисление 10-го эквивалент 2-го числа
Посмотрите здесь:

Эквивалент числа - C++
Хотелось бы понять поподробнее что тут происходит. В смысле сам процесс чуть ли не по строкам. (number - введенное ранее число). //...

Словесный эквивалент числа - C++
Ребят, помогите с написанием программы на С++ словесный эквивалент числа. Типа вводим 100 - программа выдает сто, 1500 - одна тысяча...

Словесный эквивалент числа - C++
Помогите написать программу на visual C++ : словесный эквивалент числа

Вывести словестный эквивалент числа - C++
Дано целое число в диапазоне от 1 до 5. Вывести строку – словесное описание соответствующей оценки (1 – «плохо», 2 – «неудовлетворительно»,...

Для вводимого целого положительного числа определите его двоичный эквивалент - C++
Профессионалы помоги пожалуйста!) Скинули лабораторные нужно коменты к строчкам чтобы знать, что ответить на вопрос &quot;что тут?&quot; ...

Для вводимого целого положительного числа определите его двоичный эквивалент - C++
Для вводимого целого положительного числа определите его двоичный эквивалент, используя алгоритм перевода числа в другую систему счисления...

Нужно написать программу перевода двоичных цифр в их шестнадцатиричный эквивалент (перевод числа оформить в виде функции) - C++
как написать эту программу в C++

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
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
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-ую цифру справа.
Севак
любитель покушать
681 / 632 / 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
509 / 461 / 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-го числа
Еще ссылки по теме:

Эквивалент ListArray в C++ - C++
У меня имеется метод в который постепенно(при вызове) попадают данные(2 байта), эти 2 байта почему то не хотят сохраняться в простой массив...

To_string эквивалент - C++
http://www.cplusplus.com/reference/string/to_string/ это из С++ 11. У меня вс 2010, очевидно стандарт ниже. Из этого кода: ...

Не работает программа (эквивалент калькулятора) - C++
Всем доброго времени суток) Не могу понять почему программа не работает, если кто знает скажите, заранее спасибо)) #include...

Эквивалент библиотеки tchar.h в Borland 3.1 - C++
Какая библиотека эквивалентна библиотеке tchar.h в Borland 3.1?

Вычисление числа ПИ - C++
Помогите разобраться с заданием на языке C. http://dencom.nsknet.ru/_mod_files/ce_images/2009.png


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

Или воспользуйтесь поиском по форуму:
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-го числа
Ответ Создать тему
Опции темы

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