Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.59
green_apple
2 / 2 / 0
Регистрация: 24.06.2012
Сообщений: 64
#1

Разработать алгоритм перевода двоичных чисел в десятичные числа - C++

02.07.2012, 23:43. Просмотров 3075. Ответов 8
Метки нет (Все метки)

разработать алгоритм перевода двоичных чисел в десятичные числа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2012, 23:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Разработать алгоритм перевода двоичных чисел в десятичные числа (C++):

Дан массив упорядоченных по возрастанию целых чисел. разработать алгоритм бинарного поиска заданного числа, результат номер искомого числа или 0 если
помогите решить задачу: Дан массив упорядоченных по возрастанию целых чисел....

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

Разработать алгоритм перевода заданных английских слов на русский язык
Разработать алгоритм перевода в тексте заданных английских слов на русский...

Перевод дробных двоичных в десятичные
Доброго времени суток. У меня есть задание, сделать программу которая переводит...

Алгоритм перевода чисел
Помогите пожалуйста! Надо мне написать алгоритм перевода из десятичного числа в...

Алгоритм перевода чисел
Парни,напишите пожалуйста програмный алгоритм перевода чисел из 10 ричной...

8
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
03.07.2012, 00:27 #2
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
#include <cstdio>
 
bool bin2dec (const char* bin, unsigned& dec) {
  if (!bin) return false;
  unsigned bin_pow = 1;
  char sym; 
  dec = 0;
  for ( ; (sym = *bin) != '\0' ; ++bin) {
    bin_pow *= 2;
    switch (sym) {
      case '0': break;
      case '1': dec += bin_pow; break;
      default:  return false;
    }
  }
  return true;
}
 
int main() {
  unsigned res = 0;
  if (bin2dec("11010", res)) {
     printf ("%d\n", res);
  }
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
03.07.2012, 09:48 #3

Не по теме:

alex_x_x, предположу что на линуксе или на чём разрабатывался код выше идёт порядок байт отличен от NT-ного.
http://codepad.org/nKq1eflh
"11010" == 26 а не 22 как подано в коде выше



green_apple, вот код для NT
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main()
{
    char bin[256] = {0};
    cout<<"bin : ";
    cin>>bin;
    int len = strlen(bin);//ГіГ§Г*Г*ВёГ¬ äèëГ*Г*Гі ñòðîêè
    int pwr = 1;
    int dec = 0;
    for(int i = 0; i < len; i++)
    {
        dec += pwr*(bin[(len - 1) - i] - '0');
        pwr *= 2;
    }
    cout<<"dec : "<<dec<<endl;
    system("pause");
    return 0;
}
1
Миниатюры
Разработать алгоритм перевода двоичных чисел в десятичные числа  
alex_x_x
03.07.2012, 11:54
  #4

Не по теме:

-=ЮрА=-, да нет, естесственно форма в линуксе точно такая же)
совсем по-детски лоханулся=)

1
-=ЮрА=-
Заблокирован
Автор FAQ
03.07.2012, 15:00 #5
green_apple,
s=0
цикл 0-n
s=s+Ai*2^i
a0*2^0+a1*2^1+a3*2^3+.....
s=an
цикл
s=s*2+a(n-1)
У меня в программе тоже самое, только вместо 2^n у меня идёт
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
pwr
а само значение бита равно
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
(bin[(len - 1) - i] - '0');
Смотри если bin[(len - 1) - i] == '1' то int('1') = 49 если же ноль то int('0') == 48 получается
либо 49 - int('0') либо 48 - int('0') что соответсвует 1 или 0 в int
Вобщем у меня абсолютно твоя же логика просто pwr можно заменить на pow(2,i) а разницу char-ов как
C++
1
2
if(bin[(len - 1) - i] == '1') 
   dec += 1*pow(2,i);
1
-=ЮрА=-
Заблокирован
Автор FAQ
10.07.2012, 23:54 #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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
using namespace std;
 
//функция переводит двоичное число заданное строкой str в 
//десятичное, флаг ipart указывает : 
//ИСТИНА - передана строка с целой частью
//ЛОЖЬ   - передана строка с дробной частью
double bin2dec(char * str, bool ipart);
 
int main()
{
    char ipart[256] = {0};//Будет содержать целую часть числа
    char fpart[256] = {0};//Будет содержать дробную часть числа
    cout<<"Enter binary : ";cin>>ipart;
    char * ptr = strchr(ipart,'.');//Ищем разделитель дробной части в числе
    if(ptr != NULL)
    {
        ipart[strlen(ipart) - strlen(ptr)] = '\0';//Обрезаем строку по запятую
        strcpy(fpart, ptr + 1);//Сдвигаемся в строке исключая из неё запятую
    }
    //Десятичное число
    double val = 0;
    val += bin2dec(ipart, true);//Преобразуем целую часть в десятичное
    val += bin2dec(fpart, false);//Если есть преобразуем дробную часть в десятичное
    cout<<"Decimal value : "<<val<<endl;
    system("pause");
    return 0;
}
 
double bin2dec(char * str, bool ipart)
{
    int i;
    int bit    = 0;//Значение бита
    int sLen   = 0;
    int pwr    = 1;
    double val = 0;
    if(str != NULL)//Если строка не пуста
    {
        sLen = strlen(str);//Узнаём разрядность числа
        for(i = 0; i < sLen; i++)
        {
            bit = 0;
            if(str[(sLen - 1) - i] == '1')
                bit = 1;
            if(ipart)
                val += bit*pwr;
            else
            if(bit == 1)//Исключаем деление на ноль
                val += 1.0/(bit*pwr);
            pwr = pwr*2;
        }
    }
    return val;
}
0
Миниатюры
Разработать алгоритм перевода двоичных чисел в десятичные числа  
Ksan
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
11.07.2012, 00:11 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
unsigned int B2D(char *bin)
{
        unsigned int val = 0;
        
        for(unsigned char i=0; i<strlen(bin); ++i)
        {
                val <<= 1;
                if(bin[i] == '1'){ val |= 0x1; continue; }
                if(bin[i] == '0') continue;
                return 0;
        }
        
        return val;
}
0
softmob
1249 / 699 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
11.07.2012, 01:09 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cstring>
using namespace std;
 
unsigned long long operator "" _b(const char* str)
{
   unsigned long long res = 0;   
   size_t size = strlen(str);
   for (size_t i = 0; i != size; ++i)
      res |= (str[i] - '0') << (size - i - 1);
   return res;
}
 
int main(void)
{
   cout << 1110011_b << endl;
   return 0;
}
http://liveworkspace.org/code/9363c2359cd5ee7620cbc978b696035d
1
David Sylva
1293 / 955 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.07.2012, 19:52 #9
Можно перевести используя метод Горнера
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
#include <iostream>
using namespace std;
 
int main()
{   
    int number = 1011011; // исходное двоичное число
    int st = 1;  
    int count = 0; // счётчик количества цифр 
    int dec = 0;   // десятичное
    int cop_number = number; // приравниваем число другой переменной чтобы узнать количество цифр
 
    while(cop_number) // считаем цифры
    { 
        cop_number /= 10; 
        count++; 
    }  
    for ( int i = 1; i < count; i++) 
        st = st * 10; // возводим в степень количества чисел
 
    while(number) // используем метод Горнера
    { 
        dec = dec * 2 + (number / st); // суммируем цифры слева направо, 
        //умножая ранее полученный результат 
        // на основу системы
        number = number % st; // следующая цифра
        st = st / 10;
    }
 
    cout << "Dec " <<  dec << endl;
}
0
11.07.2012, 19:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2012, 19:52
Привет! Вот еще темы с решениями:

Реализовать алгоритм умножения двоичных чисел со сдвигом суммы частичного произведения вправо
Создать алгоритм умножения чисел с анализом двухразрядных множителей со сдвигом...

Алгоритм перевода шестнадцатеричного числа в десятичный код
помогите написать программу &quot;алгоритм перевода шестнадцатиличного числа в...

Разработать программу перевода вещественных чисел из десятичной системы счисления в двоичную
Помогите пожалуйста написать программу.Разработать программу перевода...

рекурсивна функция перевода двоичных цифр в десятичное
Написать рекурсивную функцию перевода двоичных цифр в эквивалентное десятичное...


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

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

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