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

Перевод дробных чисел из десятичной в двоичную систему счисления - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 72, средняя оценка - 4.97
sasiska
1 / 1 / 0
Регистрация: 16.05.2011
Сообщений: 25
16.05.2011, 14:44     Перевод дробных чисел из десятичной в двоичную систему счисления #1
для натуральных чисел все понятно, и предельно ясно. А как сделать для дробных чисел? Ведь перевод дроби надо умножать, а здесь делить с остатком, кто поможет?

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
#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
 
void main ()
{
  int r,a,i,w[32];  // Г‡Г*Г¤Г*ГҐГ¬ ïåðåìåГ*Г*ûå
 
  printf("vvedite chislo: "); // âûâîäèì ñîîáùåГ*ГЁГҐ "ГўГўГҐГ±ГІГЁ ÷èñëî"
  scanf("%d",&a); // Г§Г*ïèñîâГ*ГҐГ¬ Г*Г*ГІГіГ°Г*ëüГ*îå ÷èñëî Гў "Г*"
 
  memset(w,0,sizeof(w)); // îáГ*óëåГ*ГЁГҐ Г¬Г*Г±Г±ГЁГўГ*
 
  for(i=0;i<32;i++) //ðåГ*ëèçГ*öèè ГЁГІГҐГ°Г*öèè - ïîâòîðåГ*ГЁГї öèêëГ* äëÿ Г°Г*Г§Г*ûõ Г§Г*Г*Г·ГҐГ*ГЁГ© ïåðåìåГ*Г*îé i
    {
      w[i]=((a>>i)&1);
    }
  
  printf("result: ");
  for(i=31,r=0;i>=0;i--)
    { 
      if((w[i]==1)||(r==1))
    {
   
      printf("%d",w[i]);
      r=1;
    }
    }
 
  putchar('\n');
}
Добавлено через 12 минут
Или тут намек на то, что надо сделать 2 программы в 1 и потом просто вывести общий результат, а тогда как это сделать ОО?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
16.05.2011, 15:04     Перевод дробных чисел из десятичной в двоичную систему счисления #2
1. Достаточно разобрать пример для положительных чисел меньше 1
2. На входе у тебя строка символов "0.ххх...ххх" - с размером тоже надо конкретно определиться.
3. Делаешь из мантиссы целое натуральное число.
4. В цикле умножаешь на 2. Если был перенос в старший разряд (это всегда 1), то к результату надо добавить 1/счетчик степени. Увеличить счетчик степени на 1. Остаток числа (до цифры переноса) - это число для следующего умножения на 2.
Как-то так.
sasiska
1 / 1 / 0
Регистрация: 16.05.2011
Сообщений: 25
16.05.2011, 15:13  [ТС]     Перевод дробных чисел из десятичной в двоичную систему счисления #3
Нет, чилса не настолько огромные, я думаю float вполне хватит, там будет максимум 3-4 символов после запятой.
То есть делать 2 проги в одной, а потом вывести общий результат?
Тогда вопрос такой, а как заставить отличить дробную часть от целой, ну просто вводить отдельно дробную или отдельно целую не очень прилично
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
16.05.2011, 15:21     Перевод дробных чисел из десятичной в двоичную систему счисления #4
Дык вводить как раз - проще простого:
xxx.xxx
До точки - целая часть. После точки - дробная часть.
sasiska
1 / 1 / 0
Регистрация: 16.05.2011
Сообщений: 25
16.05.2011, 15:29  [ТС]     Перевод дробных чисел из десятичной в двоичную систему счисления #5
ValeryLaptev,
ой ой ой, голова уже сутра не варит, не выводить, а при вводе как определить, что до точки целая, после точки дробная, или реально сделать относительно коряво
"введите целую часть" "введите дробную часть" , и все через int потом каждое число отдельно посчитать и выдать общий резльтат через точку.
То есть заполнить 2 массива ответом и потом вывести их через точку ))))

а как там дробную часть переводить, можно поподробнее? Как переводить на бумажке я помню, но что то как записать это програмкой не очень понимаю
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
16.05.2011, 15:45     Перевод дробных чисел из десятичной в двоичную систему счисления #6
Для ввода числа достаточно одного стринга. А потом вырезать до точки и после точки.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
16.05.2011, 15:59     Перевод дробных чисел из десятичной в двоичную систему счисления #7
Цитата Сообщение от sasiska Посмотреть сообщение
а как там дробную часть переводить, можно поподробнее? Как переводить на бумажке я помню, но что то как записать это програмкой не очень понимаю
C++
1
2
3
4
5
6
double num; // исходное число
double intOfNum; // целая часть
double fracOfNum; // дробная часть
//...
intOfNum = floor(num);
fracOfNum = num - floor(num);
sasiska
1 / 1 / 0
Регистрация: 16.05.2011
Сообщений: 25
16.05.2011, 16:54  [ТС]     Перевод дробных чисел из десятичной в двоичную систему счисления #8
Народ, может есть у кого желание, просто так помочь мне написать прогу перевода дробной части?
Я уже 2 часа сижу, ошибку делаю в каждой строчке, чего то голова совсем не варит сейчас
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
16.05.2011, 16:58     Перевод дробных чисел из десятичной в двоичную систему счисления #9
результат куда выводить?
sasiska
1 / 1 / 0
Регистрация: 16.05.2011
Сообщений: 25
16.05.2011, 16:59  [ТС]     Перевод дробных чисел из десятичной в двоичную систему счисления #10
да все равно куда, просто можно отдельной прогой, я ее потом соеденю
ну прямо целое число там пишем, например 625, а он ответ нам 101
и все )))
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
16.05.2011, 17:34     Перевод дробных чисел из десятичной в двоичную систему счисления #11
Ну, что-то подобное
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
#include <iostream.h>
#include <math.h>
 
int main(int argc, char* argv[])
{
   double num, frac_num;
   unsigned int int_num;
   int sz;
 
   sz = sizeof(unsigned int)*8;
   cout << "Enter the number: ";
   cin >> num;
   int_num = num;
   frac_num = num - floor(num);
   for (int i = sz-1; i >= 0; i--)
   {
      cout << ((int_num>>i)&1);
   }
   cout << ',';
   for (int i = 0; i < 8; i++)
   {
      frac_num *= 2;
      cout << floor(frac_num);
      frac_num -= floor(frac_num);
   }
   cout << endl;
   system("pause");
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2011, 20:22     Перевод дробных чисел из десятичной в двоичную систему счисления
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
sasiska
1 / 1 / 0
Регистрация: 16.05.2011
Сообщений: 25
16.05.2011, 20:22  [ТС]     Перевод дробных чисел из десятичной в двоичную систему счисления #12
добавил ко всем std:: почему то не хотел без него работать, хотя библиотеку подключил
во, всем разобрался, все понял спасибо огромное

два последних вопроса: А как в этой прожке можно от лишних нулей избавиться, что бы только ответ был и все? Хотя и так то же неплохо
еще вопрос:
почему в 6.0 пишет такую штуку? и не запускается нигде кроме как в 2010
c:\program files\microsoft visual studio\vc98\include\eh.h(32) : fatal error C1189: #error : "eh.h is only for C++!"
Error executing cl.exe.
Yandex
Объявления
16.05.2011, 20:22     Перевод дробных чисел из десятичной в двоичную систему счисления
Ответ Создать тему
Опции темы

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