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

Перевод вещественных из системы в систему, сравнение вещественных - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Двумерный массив http://www.cyberforum.ru/cpp-beginners/thread303482.html
Пожалуйста, помогите решить задание :wall: В двумерном массиве записаны слова, является последовательностью цифр, завершаются 0. Необходимо распечатать слова через запятую, взяв печатный строчку в скобки. Длина печатного строки 60 символов. Распечатка слова оформить в виде функции. Насколько я понимаю, это должно выглядеть так: входные данные - 123023402303450 ...
C++ Использывание основных операторов С++ 1.Дана последовательность из n целых чисел. Найти сумму элементов с четными номерами из этой последовательности. 2.Дана последовательность из n целых чисел. Найти количество четных элементов этой последовательности. 3.Дана последовательность целых чисел, за которой следует 0. Найти минимальный элемент в этой последовательности. http://www.cyberforum.ru/cpp-beginners/thread303459.html
C++ очень надо написать алгоритмы решения дифуров на с++ помогите!!
реализовать алгоритмы решения таких диф. уравнений: Диф. уравнение первого порядка; Однородное диф. уравнение; Линейное диф. уравнение; Линейное неоднородное диф. уравнение; Официальный язык форума - русский.
C++ Выполнение программы простой структуры
1. Для задачи 1 определить тип заданных выражений и найти их значения. 2. Составить систему тестов и вычислить полученное выражение для нескольких значений Х, определить при каких Х выражение не может быть вычислено. 3. Для задачи 2 записать выражение, зависящее от координат точки X1 и Y1 и принимающее значение TRUE, если точка принадлежит заштрихованной области, и FALSE, если не ...
C++ Динамические структуры данных. Дек http://www.cyberforum.ru/cpp-beginners/thread303443.html
Ребята помогите, горит степуха! Динамически разработать и реализовать на языке С следующие функции работой с Деком: 1. Создание пустого Дека. 2. Добавление элемента в Дек.(в начало- в конец) 3. Удаление элемента из Дека.(из начала- из конца) 4. Вывод Дека на экран монитора. Помогите плиз! Всем заранее спасибо!! Добавлено через 2 часа 50 минут Помогите кто нибууудь!
C++ копирование господа програмисты как скопировать информацию из одного .txt в другой? Если можно посмотреть не большой,примитивный исходник. Заранее всем большое спасибо!!! подробнее

Показать сообщение отдельно
ZaLiZo
0 / 0 / 0
Регистрация: 24.05.2011
Сообщений: 3

Перевод вещественных из системы в систему, сравнение вещественных - C++

24.05.2011, 10:47. Просмотров 824. Ответов 4
Метки (Все метки)

Есть задача: задаются в восьмеричной системе число а, число b, число h, нужно отобразить все числа от a до b с шагом h в восьмеричном и двоичном виде. Задача осложняется тем, что число дробное, т.е. вещественное с модулем меньше 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <math.h>
 
int fractoint(double x)
{
    double r=x;
    int p;
    while (r-(int)r>0.0)
    {
        r*=10;
    }
    p=(int)r;
    return p;
}
 
int octtodec(int x)
{
    int dec=0, k=0, n=x;
    while (n!=0)
    {
        dec+=(n%10)*pow(8, (float)k);
        k++;
        n/=10;
    }
    return dec;
}
 
int dectooct(int x)
{
    int dec=0, k=0, n=x;
    while (n!=0)
    {
        dec+=(n%8)*pow(10, (float)k);
        k++;
        n/=8;
    }
    return dec;
}
 
int dectobin(int x)
{
    int dec=0, k=0, n=x;
    while (n!=0)
    {
        dec+=(n%2)*pow(10, (float)k);
        k++;
        n/=2;
    }
    return dec;
}
 
int zeroscount(double x)
{
    int n=0;
    float z=x;
    bool digenc=true;
    while (digenc)
    {
        z*=10;
        if ((int)z==0)
        {
            n++;
        }
        if((int)z!=0)
        {
            digenc=false;
        }
    }
    return n;
}
 
void main()
{
    float a, b, h, xd, ad, bd, hd;
    cout<<"a = ";
    cin>>a;
    if (abs(a)>=1) {cout<<"slishkom bolshoe chislo"; return;}
    cout<<"b = ";
    cin>>b;
    if (abs(b)>=1) {cout<<"slishkom bolshoe chislo"; return;}
    cout<<"shag h = ";
    cin>>h;
    if (abs(h)>=1) {cout<<"slishkom bolshoe chislo"; return;}
 
    char strnda[12]="0.", strndb[12]="0.", strndh[12]="0.", strnpd[10];
    int xdd, hdd, bdd;
    for (int i=0; i<zeroscount(a); i++) strcat(strnda, "0");
    for (int i=0; i<zeroscount(b); i++) strcat(strndb, "0");
    for (int i=0; i<zeroscount(h); i++) strcat(strndh, "0");
    strcat(strnda, itoa(octtodec(fractoint(a)), strnpd, 10));
    strcat(strndb, itoa(octtodec(fractoint(b)), strnpd, 10));
    strcat(strndh, itoa(octtodec(fractoint(h)), strnpd, 10));
    ad=atof(strnda);
    bd=atof(strndb);
    hd=atof(strndh);
    xd=ad;
 
 
    int n=0;
 
    while (xd<bd)
    {
        cout<<n<<endl;
        char strng[12]="0.", strnb[32]="0.", strnp[30];
        for (int i=0; i<zeroscount(xd); i++) {strcat(strng, "0"); strcat(strnb,"0");};
        strcat(strng, itoa(dectooct(fractoint(xd)), strnp, 10));
        cout<<strng<<endl;
        strcat(strnb, itoa(dectobin(fractoint(xd)), strnp, 10));
        cout<<strnb<<endl;
        n++;
        xd+=hd;
    }
 
    cin.get();
    cin.get();
}
где fractoint извлекает из числа дробную часть в инт (причем r-(int)r - слабое место программы вообще, часто падает), три функции переводят числа из системы в систему, zeroscount считает количество нулей между точкой и числом отличным от нуля, потому что при выводе дробного хвоста в инт нули спереди теряются.
Дальше, собственно, сама программа:
Ввожу a, b, h, перевожу их в десятичный вид через строки (так компактнее показалось и нули не теряю), получаю соответственно ad, bd, hd, xd. Десятичный вид мне нужен чтобы правильно шаг считать.
А вот дальше - затык. Естественно такое сравнение вещественных ничего не дает, в цикл, соответственно, не заходит. Пытался преобразовать ad, bd, hd, xd в целые (извлечь дробную часть, в смысле), но тут прога ломается на fractoint. В общем что делать чтобы оно хотя бы заработало и хотя бы приблизительно считало?
Пишу под 2009 билдер.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru