Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

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

10
v.a.l.i.d
416 / 381 / 10
Регистрация: 21.09.2012
Сообщений: 913
15.12.2012, 20:09 #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++;
}
1
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
15.12.2012, 20:18  [ТС] #3
Спасибо, но я забыл дописать что использовать можно только то что изучено в книге на данный момент
А все что изучено есть в коде.
Можно ли как нибудь проще?
pow еще не изучали.

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

Добавлено через 2 минуты
if else еще изучали
0
v.a.l.i.d
416 / 381 / 10
Регистрация: 21.09.2012
Сообщений: 913
15.12.2012, 20:23 #4
Количество цифр в двоичном числе можно и обычным способом находить, так же как и в десятичном. А если встретиться ноль в середине числа то ничего страшного тут не будет. Просто остаток при делении на 10 станет нулю
1
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
15.12.2012, 20:29  [ТС] #5
А если число например 00000101 и когда дело дойдет до 00000 то и остаток будет равен 0 и цела часть будет равно 0 хотя цифры еще есть. Что тогда делать?
За что тогда зацепиться?
0
v.a.l.i.d
416 / 381 / 10
Регистрация: 21.09.2012
Сообщений: 913
15.12.2012, 20:37 #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;                   
}

Да и вообще все эти нули они ничего не значат (отбрасываются)
2
Миниатюры
Вычисление 10-го эквивалент 2-го числа  
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
15.12.2012, 20:53  [ТС] #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-ую цифру справа.
0
Севак
любитель покушать
682 / 633 / 106
Регистрация: 25.09.2011
Сообщений: 1,313
15.12.2012, 21:00 #8
pow(x,y) - это функция возведения числа x в степень y
1
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
15.12.2012, 21:11  [ТС] #9
Подскажите пожалуйста тогда хотябы как подсчитать количество цифр двоичного числа не используя примочек всяких.
Например с помощью while деления или вычисления остатка от деления. Без pow.
Или это невозможно?
0
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
15.12.2012, 21:15 #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;
}
2
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
15.12.2012, 21:37  [ТС] #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й?
0
15.12.2012, 21:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2012, 21:37
Привет! Вот еще темы с ответами:

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

Считая последовательность 16-ричной записью натурального числа, вывести десятичный эквивалент данного числа - Python
Пользователь вводит некоторую последовательность,состоящую только цифр 0 – 9 и букв A – F. Считая ее шестнадцатеричной записью натурального...

Текстовый эквивалент числа - Visual Basic
Здравствуйте. Поделитесь, пожалуйста, кому не жалко функцией вывода текстового эквивалента числа :o . (например, 1100 как &quot;Одна тысяча...

текстовый эквивалент числа - MS Access
Здравствуйте. Поделитесь, пожалуйста, кому не жалко функцией вывода текстового эквивалента числа :-[. (например, 1100 как &quot;Одна тысяча...


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

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

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