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

Обрезается число - C++

Восстановить пароль Регистрация
 
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
11.03.2013, 12:57     Обрезается число #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
#include "stdafx.h"
#include <string.h>
#include <conio.h>
#include <iostream>
#include <locale.h>
#include <cmath>
#include <conio.h>
 
using namespace std;
 
class Chislo
{
private:
        double value;  
    public:
        Chislo() 
        {
            value = 0;
        }
        void set(double _value)                 //инициализируем поле
        {
            value = _value;
        }
        double getNumber()                      //получить значение
        {
            return value;
        }
        int tselN()                             //Количество цифр в целой части числа
        {
            int chislo = (int)value, i = 1;
            while(chislo / 10 != 0)
            {
                ++i;
                chislo /= 10;
            }
 
            return i;
        }
        int drobN()                             //количество чисел в дробной части числа
        {
            double fractpart, intpart;
            fractpart = modf (value , &intpart);
 
            char buff [100];
            int kol = 0, size = 0, i = 0, kol1;
            bool flag = false;
            if(fractpart != 0)                  //если после запятой есть цифры
            {
                sprintf(buff, "%f", fractpart);     //double -> char
                size = strlen(buff);
                for(i = 0; i < size; i++)       //считаем от конца до первой
                {                               //цифры отличной от нуля
                    if(buff[i] == ',')
                    {
                        for(int j = size - 2; j > i; --j)       //считаем от цифры до запятой
                        {
                            if(buff[j] == '0')
                                ++kol;
                            else
                            {
                                flag = true;
                                break;
                            }
                        }
                    }
                    if(flag == true)
                    {
                        ++i;
                        break;
                    }
                }
                kol1 = size - 1 - i - kol;          //кол-во эл-ов после запятой
                kol = kol1; 
            }
            else                                //иначе после запятой только нули
                kol = 0;
            return kol;                     //возвращаем кол-во цифр после запятой
        }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");
    int Kol_el;
    cout << "Введите размер массива: ";
        cin >> Kol_el;
    double value;
    Chislo Universal;
    Chislo *pChislo = new Chislo[Kol_el];           //выделяем память
    //инициализация массива
    for (int i = 0; i < Kol_el; i++)
    {
        cout << "Введите элемент массива [" << i << "]: ";
            cin >> value;
            pChislo[i].set(value);
    }
    cout << "\n";
    //Вывод на экран
    for(int i = 0; i < Kol_el; i++)
    {
        cout << "Число x[" << i << "]: " << pChislo[i].getNumber() 
            << "\nКоличество чисел в целой части числа: " << pChislo[i].tselN()
            <<"\nКоличество цифр в дробной части числа: " << pChislo[i].drobN() << "\n";
        cout << "\n";
    }
    delete []pChislo;           //освобождаем память
    _getch();
    return 0;
}
Условие задачи:
Кликните здесь для просмотра всего текста

Описать класс, включающий заданные поля и функции. Разработать программу, которая создает массив объектов (размерность массива n вводится с клавиатуры) и выполняет требуемые действия.
Класс - вещественное число, записанное с точкой. Параметры - его значение (вещественный тип) и запись (строковое представление числа). Статус доступа всех полей private. Класс включает: конструктор и функции, определяющие количество цифр в дробной и целой частях числа. Определить сумму введенных чисел и отношение количества цифр в целой и дробной частях всех чисел.


Я допустим ввожу число 101.1001 , а выводит 101.1 . В чем у меня проблема? С числами без нуля в дробной части все нормально

Добавлено через 5 минут
Очистка буфера flushall() не помогает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2013, 12:57     Обрезается число
Посмотрите здесь:

Дано действитёльное число х. Получить целую часть *) числа х; затем — число х, округленное до ближайшего целого; затем — число х без дробных цифр. C++
C++ Запись в реестр обрезается
C++ Дано натуральное число n, действительное число х. Вычислить sinx+sinx2+...+sinxn
Дано 2-ух-значное число. Сделать так, чтоб программа преобразовала это число в новое число кол-во десятков C++
Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число удвоится. Найти это число C++
C++ Заменить данное натуральное число на число, которое получается из исходного записью его цифр в обратном порядке. Например, дано число 156, нужно получ
C++ Не получается исправить ошибку (Вводится диапазон, где 1-ое число-начало диапазона, 2-ое число приращени, 3-е число конец диапазона)
Введенное число делить на второе введенное число пока первое число не станет равным нулю C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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