Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2013, 02:53   #1
comcor2013
 
Регистрация: 03.03.2013
Сообщений: 5
По умолчанию Классы. Как посчитать количество цифр в дробной части числа

Код:
#include "stdafx.h"
#include <string.h>
#include <conio.h>
#include <iostream>
#include <locale.h>
#include <cmath>
using namespace std;
 
class Chislo
{
    double znach; //Значение
    char zapis[32]; //Запись числа
public:
    Chislo() // Конструктор без параметров создает "пустой" объект
    {
        znach=zapis[0]=0;
    }
    void set(double zn, char zp[]) // Функция для инициализации полей для созданного "пустого" объекта
    {
        znach=zn;
        strcpy(zapis, zp);
    }
    double getNumber() 
    {
        return znach;
    }
    Chislo(double zn, char zp[]) //Конструктор для инициализации полей
    {
        znach=zn;
        strcpy(zapis, zp);
    }
    int tselN() //Количество цифр в целой части числа
    {
        int x = (int)znach, i = 1;
        while(x / 10 != 0)
        {
            ++i;
            x /= 10;
        }
        return i;
    }
    int drobN() //количество чисел в дробной части числа
    {
		int a = 0;
         int k = 10;
         double t = znach - (double)((int)znach);
         while (true)
         {
             t *= 10.0;
             if (!((int)t % 10))
             {
                 break;
             }
          a++;
         }
		 return a;
	}
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");
    int n;
    cout << "Введите размер массива: n=";
    cin >> n;
    cout << '\n';
    double x;
    char Str[32];
    Chislo *pChislo;
    pChislo = new Chislo[n];
    for (int i=0; i<n; i++)
    {
      cout<<"Введите число x["<<i << "]: ";
        cin >> x;
      pChislo[i]=Chislo(x,Str);
    }
    cout << '\n';
    //Вывод на экран
    for(int i=0;i<n;i++)
    {
        cout << "Число x[" << i << "]: " << pChislo[i].getNumber() 
            << "\nКоличество чисел в целой части числа: " << pChislo[i].tselN()
            <<"\nКоличество цифр в дробной части числа: " << pChislo[i].drobN() << "\n";
        cout << "\n";
    }
    _getch();
    return 0;
}
Ввожу, допустим, число 102.1001 , а он считает только 1 после точки, а другие цифры нет. В чем у меня ошибка?
comcor2013 вне форума Ответить с цитированием
Старый 11.03.2013, 09:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мне кажется проще превратить число в строку функцией itoa() или sscanf() и уже считать с конца строки до точки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция, определяющия количество цифр в дробной и целой частях числа comcor2013 Общие вопросы C/C++ 6 04.03.2013 19:02
задача - найти произведение первой цифры целой части и третей цифры дробной части вещественного числа. LAZARUS maks22 Lazarus, Free Pascal, CodeTyphon 2 30.01.2012 19:53
Определение первой цифры дробной части числа Intersap Помощь студентам 2 19.09.2011 00:07