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

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

Восстановить пароль Регистрация
 
Avicii
 Аватар для Avicii
2 / 2 / 0
Регистрация: 01.12.2012
Сообщений: 123
25.01.2013, 09:29     Перевод из десятичной системы счисления в восьмиричную с плавующей запятой #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>
#include<math.h>
#include<string.h>
using namespace std;
 
int main()
{float a,b;
int i,d,k,v;
int m[100],s[15];
cout<<"vvedite chislo v 10 sisteme schisliniya:";
cin>>a;
d=a;
i=0;
do
{
m[i]=fmod(d,8);
d=d/8;
i++;}
while(d>0); k=i;
cout<<"chislo v 8 sisteme schisleniya:";
for(i=k-1;i>=0;i--)
{cout<<m[i];}
cout<<".";
b=fmod(a,1);
i=0;
do
{s[i]=b*8;
cout<<s[i];
b=fmod(s[i],1);
i++;
}
while(b>0);
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2013, 09:29     Перевод из десятичной системы счисления в восьмиричную с плавующей запятой
Посмотрите здесь:

Рекурсия.Перевод с десятичной в двоичную, восьмиричную и шестнадцатиричную системы C++
C++ Перевод числа из десятичной системы счисления в двоичную
C++ Перевод натурального числа из десятичной системы счисления в систему счисления по основанию
Перевод числа N из десятичной системы счисления в восьмиричную C++
C++ Перевод числа из десятичной системы счисления в двоичную
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Asker
114 / 102 / 11
Регистрация: 18.12.2010
Сообщений: 378
25.01.2013, 13:07     Перевод из десятичной системы счисления в восьмиричную с плавующей запятой #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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <cmath>
#include <string>
#include <algorithm>
using namespace std;
 
int main()
{
double a;                                // само число
long long int a_int;                     // целая его часть
string int_s="", float_s="";             // буфер : строки содержат целую и дробную части 
                                         // в восьмеричной системе счисл.
cout << "vvedite chislo v 10 sisteme schisliniya : ";
cin >> a;
 
if (a<0) {cout << "-"; a=-a;}            // считаем по модулю
 
a_int=floor(a);                          // разбираемся с целой частью, выделяем ее и запоминаем
if (a_int)                               // если ненулевая
    while (a_int)
    {
        int_s += (char)(a_int%8+48);     // выводим в буфер цифру
        a_int >>= 3;                     // то же, что a_int/=8, только быстрее
    }
else int_s="0";                          // если нулевая, просто выводим ноль
 
                                         // теперь разбираемся с дробной частью
double a_float = a-(long long int)a;     // выделяем дробную часть
 
for (int k=0; k<8; k++)                  // 8 знаков перебираем
{
    a_float *= 8;                        // берем следующую цифру
    float_s += (char) floor(a_float)+48; // каждый раз выделяем целую часть и записываем в буфер
    a_float = (float) a_float-(long long int)a_float; // отсекаем целую часть
}
 
reverse(int_s.begin(), int_s.end());     // целая часть записана в обратном порядке! переворачиваем
 
cout << int_s << "." << float_s << endl; // выводим результат
 
system("pause");
return 0;
}
Добавлено через 2 минуты
Кстати, а вот интересно, кто-нибудь знает, есть ли какая-нибудь функция для перевода очень длинных чисел (длинная арифметика) в разные системы счисления?
Avicii
 Аватар для Avicii
2 / 2 / 0
Регистрация: 01.12.2012
Сообщений: 123
25.01.2013, 15:21  [ТС]     Перевод из десятичной системы счисления в восьмиричную с плавующей запятой #3
Не не понятно.
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
#include <iostream>
#include<math.h>
#include<string.h>
using namespace std;
 
int main()
{float a,b;
int i,d,k;
int m[100],s[15];
cout<<"vvedite chislo v 10 sisteme schisliniya:";
cin>>a;
d=a;
i=0;
do
{
m[i]=fmod(d,8);
d=d/8;
i++;}
while(d>0);
k=i;
cout<<"chislo v 8 sisteme schisleniya:";
for(i=k-1;i>=0;i--)
{cout<<m[i];}
cout<<".";
b=floor(a);
do
{s[i]=fmod(b*8,1);
cout<<s[i];
i++;}
while(b>0);
return 0;
}
я переделал чтобы работа шла с дробной частью,вроде все правильно,но ответ нули...
C++
1
2
3
4
5
6
7
8
b=floor(a);
do
{s[i]=fmod(b*8,1);
cout<<s[i];
i++;}
while(b>0);
return 0;
}
В чем ошибка?

Добавлено через 28 минут
Цитата Сообщение от Avicii Посмотреть сообщение
Не не понятно.
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
#include <iostream>
#include<math.h>
#include<string.h>
using namespace std;
 
int main()
{float a,b;
int i,d,k;
int m[100],s[15];
cout<<"vvedite chislo v 10 sisteme schisliniya:";
cin>>a;
d=a;
i=0;
do
{
m[i]=fmod(d,8);
d=d/8;
i++;}
while(d>0);
k=i;
cout<<"chislo v 8 sisteme schisleniya:";
for(i=k-1;i>=0;i--)
{cout<<m[i];}
cout<<".";
b=floor(a);
do
{s[i]=fmod(b*8,1);
cout<<s[i];
i++;}
while(b>0);
return 0;
}
я переделал чтобы работа шла с дробной частью,вроде все правильно,но ответ нули...
C++
1
2
3
4
5
6
7
8
b=floor(a);
do
{s[i]=fmod(b*8,1);
cout<<s[i];
i++;}
while(b>0);
return 0;
}
В чем ошибка?
Попутал
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>
#include<math.h>
#include<string.h>
using namespace std;
 
int main()
{float a,b,v;
int i,d,k,j;
int m[100],s[15];
cout<<"vvedite chislo v 10 sisteme schisliniya:";
cin>>a;
d=a;
i=0;
do
{
m[i]=fmod(d,8);
d=d/8;
i++;}
while(d>0);
k=i;
cout<<"chislo v 8 sisteme schisleniya:";
for(i=k-1;i>=0;i--)
{cout<<m[i];}
cout<<".";
b=fmod(a,1);
for (i=0;i<8;i++)
{v=b*8;
s[i]=floor(v);
cout<<s[i];
b=fmod(s[i],1);
}
 
return 0;
}
Добавлено через 21 минуту
Вот только всеравно не работаетв,выводить только 1 цифру после запятой
iifat
2179 / 1332 / 96
Регистрация: 05.06.2011
Сообщений: 3,690
25.01.2013, 15:32     Перевод из десятичной системы счисления в восьмиричную с плавующей запятой #4
Цитата Сообщение от Avicii Посмотреть сообщение
C++
1
b=floor(a);
Подозреваю, вот тут она и есть. Надо
C++
1
b=a-floor(a);
(хотя и это верно только для полоожительных).
Avicii
 Аватар для Avicii
2 / 2 / 0
Регистрация: 01.12.2012
Сообщений: 123
30.01.2013, 11:20  [ТС]     Перевод из десятичной системы счисления в восьмиричную с плавующей запятой #5
Цитата Сообщение от iifat Посмотреть сообщение
Подозреваю, вот тут она и есть. Надо
C++
1
b=a-floor(a);
(хотя и это верно только для полоожительных).
После пару часов всетаки сдела...
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>
#include<math.h>
#include<string.h>
using namespace std;
 
int main()
{double a,b,g;
int i,d,k,v;
int m[100],s[15];
cout<<"vvedite chislo v 10 sisteme schisliniya:";
cin>>a;
d=a;
i=0;
do
{
m[i]=fmod(d,8);
d=d/8;
i++;}
while(d>0); k=i;
cout<<"chislo v 8 sisteme schisleniya:";
for(i=k-1;i>=0;i--)
{cout<<m[i];}
cout<<".";
b=fmod(a,1);
i=0;
while (b>0)
{g=b*8;
s[i]=floor(g);
cout<<s[i];
b=fmod(g,1);
i++;
}
return 0;
}
Вопрос есть: Почему если менять double на float то значения уже другие?
iifat
2179 / 1332 / 96
Регистрация: 05.06.2011
Сообщений: 3,690
30.01.2013, 14:40     Перевод из десятичной системы счисления в восьмиричную с плавующей запятой #6
Цитата Сообщение от Avicii Посмотреть сообщение
Почему если менять double на float то значения уже другие?
Насколько другие? Точность вычислений влияет, возможно.
Цитата Сообщение от Avicii Посмотреть сообщение
C++
26
while (b>0)
Ты так в бесконечный цикл войдёшь, например, с дробью 0.2. Кое-нить ограничение на количество цифр предусмотри.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2013, 21:31     Перевод из десятичной системы счисления в восьмиричную с плавующей запятой
Еще ссылки по теме:

C++ Перевод чисел из десятичной системы счисления в 2, 8 и 16
C++ Перевод числа из десятичной системы счисления в шестнадцатеричную
Перевод из десятичной системы счисления в двоичную в массиве C++

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

Или воспользуйтесь поиском по форуму:
Avicii
 Аватар для Avicii
2 / 2 / 0
Регистрация: 01.12.2012
Сообщений: 123
31.01.2013, 21:31  [ТС]     Перевод из десятичной системы счисления в восьмиричную с плавующей запятой #7
Цитата Сообщение от iifat Посмотреть сообщение
Насколько другие? Точность вычислений влияет, возможно.

Ты так в бесконечный цикл войдёшь, например, с дробью 0.2. Кое-нить ограничение на количество цифр предусмотри.
Предусмотрю,спасибо)
Yandex
Объявления
31.01.2013, 21:31     Перевод из десятичной системы счисления в восьмиричную с плавующей запятой
Ответ Создать тему
Опции темы

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