Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 353, средняя оценка - 4.87
I_like_C++
29 / 29 / 9
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
#1

Выделение дробной части из числа - C++

12.09.2010, 15:20. Просмотров 61245. Ответов 18
Метки нет (Все метки)

Дано число, например, х=124,556
нужно найти его целую и дробную части, чтобы получилось так:
int a(целая),b(дробная)
а=124
b=556

С целой частью проблем нет, а вот как получить дробную часть я не знаю
Помогите, пожалуйста
http://www.cyberforum.ru/cpp-beginners/thread2113085.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2010, 15:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выделение дробной части из числа (C++):

Определить равна ли сумма k цифр дробной части заданного вещественного числа сумме цифр целой части
Помогите доделать задание, исправьте пожалуйста код!!! Срочно! Задание:...

Определения, равна сумма цифр целой части вещественного числа сумме такого же количества цифр в дробной части
Нада написать 2 программки 1. Определения, равна сумма цифр целой части...

Классы. Вывести значение числа цифр в дробной части числа
#include "stdafx.h" #include <locale.h> #include <conio.h> #include...

Вывести старшую цифру дробной части и младшую цифру целой части числа
Искал у вас, не нашел. Я новичок в этом деле, если вам не трудно напишите...

Отделение дробной части от числа
у меня такое задание: Функци принимает в себя дробное число и возвращает только...

18
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
12.09.2010, 15:33 #2
Лучший ответ Сообщение было отмечено как решение

Решение

C++
1
2
#include <cmath>
float modf(float num, float *i)
Функция modf() раскладывает число num на целую и дробную части. Функция возвращает дробную часть, а целая часть сохраняется в переменной, на которую ссылается указатель i.
6
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
12.09.2010, 15:35 #3
I_like_C++, прежде всего нужно с точностью определиться, с которой эта самая дробная часть вычисляется
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <math.h>
 
int main(void){
    double dbl = 123.456789;
    int precision = 3; // количество знаков после запятой
    int whole = (int)dbl;
    int fractional = (int)( ( dbl - floor(dbl) ) * pow(10, precision) );
    printf("Double: %f\nWhole: %d\nFractional: %d\n", dbl, whole, fractional);
    printf("Precision: %d digits after point.\n", precision);
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Mayonez Посмотреть сообщение
Функция modf()
спасибо, буду знать...
1
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
12.09.2010, 15:54 #4
easybudda, что будет с отрицательными числами? modf спас бы в такой ситуации
1
I_like_C++
29 / 29 / 9
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
12.09.2010, 16:04  [ТС] #5
можешь все это записать в коде?
у меня какая- то ошибка типа этой "error C2100: illegal indirection"
и мне желательно не float , a double

и как указатель на число поставить?))
0
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
12.09.2010, 16:05 #6
и еще, если количество цифр в дробной части меньше точности, то получается что-то несуразное.
0
NightmareZ
1422 / 611 / 57
Регистрация: 31.03.2009
Сообщений: 1,978
12.09.2010, 16:08 #7
Цитата Сообщение от I_like_C++ Посмотреть сообщение
Дано число, например, х=124,556
нужно найти его целую и дробную части, чтобы получилось так:
int a(целая),b(дробная)
а=124
b=556

С целой частью проблем нет, а вот как получить дробную часть я не знаю
Помогите, пожалуйста
А какое значение в b ты хочешь получить, если дробь бесконечная периодическая, типа 3.(3)?
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
12.09.2010, 17:01 #8
Цитата Сообщение от fasked Посмотреть сообщение
и еще, если количество цифр в дробной части меньше точности, то получается что-то несуразное.
0 на 1000 умножится, что ещё будет? (ну, если числа положительные, про отрицательные я не подумал). А, понял, о чём Вы: смущает, что от числа 2,1 дробная часть 100 получится? Да не, сто тысячных, всё правильно...
0
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
12.09.2010, 17:19 #9
Цитата Сообщение от easybudda Посмотреть сообщение
А, понял, о чём Вы: смущает, что от числа 2,1 дробная часть 100 получится? Да не, сто тысячных, всё правильно...
ну понятное дело, что это одно и тоже, так что именно смущает
0
TheMachinist
244 / 176 / 47
Регистрация: 14.06.2010
Сообщений: 422
12.09.2010, 17:30 #10
Извините если не в кассу :



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
#include <iostream>
using namespace std;
 
class Decompose
{
    int whole; 
    double frac;
 
public:
    void GetParts(double n)
    {
        whole = (int) n;
        double frac = n - whole;
        cout << whole << endl;
        cout << frac << endl;
    }
};
 
int main()
{
    Decompose obj;
double f;
 
obj.GetParts(10.125);
 
system("pause");
}
3
NightmareZ
1422 / 611 / 57
Регистрация: 31.03.2009
Сообщений: 1,978
12.09.2010, 17:41 #11
Цитата Сообщение от NikolaWhite Посмотреть сообщение
Извините если не в кассу:

Да, класс тут очень в тему *ирония*

Почему не шаблонный? Где реализация паттерна MVC? Непорядок же....
0
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
12.09.2010, 22:34 #12
Цитата Сообщение от NikolaWhite Посмотреть сообщение
Извините если не в кассу :
а сама идея правильная
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
int main()
{
   double c, b;
   int a;
   std::cin>>c;
   a=(int)c;
   b=c-a;
   std::cout<<a<<" "<<b;
   return 0;
}
0
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
12.09.2010, 22:37 #13
Цитата Сообщение от Mayonez Посмотреть сообщение
а сама идея правильная
Кроме того, что дробную часть по заданию надо сохранить в int.
0
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
12.09.2010, 22:58 #14
тогда записать все число в масив
пока не встретится запятая считать в первый масив(целая часть)
потом считать во второй масив (дробная часть)
потом преобразовать в число



или если фиксированое количество цифр после запятой умножить b на 10 в необходимой степени
0
gosho
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 10
27.09.2011, 16:34 #15
Ребят а вот такой вопрос..

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
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int main()
{
    system("chcp 1251");
    clrscr();
    double RoadS, CarFuelRasxod, FuelCost, RideCost;
 
    cout << "Вычисление стоимости поездки в пункт назначения и обратно.\n"
         << "\nВведите исходные данные:\n"
         << "Расстояние до пункта назначения (км) -> ";
    cin >> RoadS;
    cout << "Расход бензина (литров на 100 км пробега) -> ";
    cin >> CarFuelRasxod;
    cout << "Цена одного литра топлива (руб.) -> ";
    cin >> FuelCost;
 
    RideCost = (CarFuelRasxod/100) * (2*RoadS) * FuelCost;
 
    cout << "Поездка в пункт назначения и обратно обойдется в " << RideCost << "руб.\n";
 
    getch();
    return 0;
}
Так вот если ввести исх.данные:
30.00001
10.00005
23.59
то ответ будет 141.541. А на самом деле д.б. 141.54075488.
как добиться этого? почему по умолчанию идет округление до 3-го знака?
Или например 1+1=2. А если я хочу чтоб вывелось 2.000 то как поступить?
Прошу не писать примеры с printf(). Привык уже с cout и cin.
Интересует тип double и float.
0
I_like_C++
29 / 29 / 9
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
03.11.2011, 13:51  [ТС] #16
Цитата Сообщение от gosho Посмотреть сообщение
Ребят а вот такой вопрос..
Так вот если ввести исх.данные:
30.00001
10.00005
23.59
то ответ будет 141.541. А на самом деле д.б. 141.54075488.
как добиться этого? почему по умолчанию идет округление до 3-го знака?
Или например 1+1=2. А если я хочу чтоб вывелось 2.000 то как поступить?
Прошу не писать примеры с printf(). Привык уже с cout и cin.
Интересует тип double и float.
используй стандартную библиотеку <iomanip> - реализует инструменты для работы с форматированием вывода, например базу, используемую при форматировании целых и точных значений чисел с плавающей запятой. википедия

вот примерненький код
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
#include <iomanip>
 
using namespace std;
 
int main()
{
    setlocale(0, "rus");
 
    double RoadS, CarFuelRasxod, FuelCost, RideCost;
    
    cout << "Вычисление стоимости поездки в пункт назначения и обратно.\n"
        << "\nВведите исходные данные:\n"
        << "Расстояние до пункта назначения (км) -> ";
    cin >> RoadS;
    cout << "Расход бензина (литров на 100 км пробега) -> ";
    cin >> CarFuelRasxod;
    cout << "Цена одного литра топлива (руб.) -> ";
    cin >> FuelCost;
 
    RideCost = (CarFuelRasxod/100) * (2*RoadS) * FuelCost;
 
    cout<< "Поездка в пункт назначения и обратно обойдется в " <<//setiosflags(ios::fixed);
           std::fixed<<setprecision(8)<< RideCost << "руб.\n";
 
    system("pause");
    return 0;
}
std::fixed и setiosflags(ios::fixed);
в приницпе одно и тоже и без fixed вместо 12.345 (3 цифры после точки) было бы выведено 12.3 (всего 3 цифры)
0
Maslina
4 / 4 / 2
Регистрация: 26.01.2016
Сообщений: 29
Завершенные тесты: 3
14.12.2016, 09:10 #17
Извиняюсь за запоздание. Но мне кажется автору нужно сделать так. Знак поместить в чар, тогда запишется по отдельности в 2 переменные. И оба числа int.
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
void main()
{
char charr;
int a,b;
cin>>a>>charr>>b;
cout<<a<<"|"<<b;
system("pause");
}
0
Лемур
15 / 15 / 13
Регистрация: 06.02.2014
Сообщений: 113
Завершенные тесты: 1
21.02.2018, 04:25 #18
Мне кажется, или вы ответили спустя 6 лет, после создания темы?
А я спустя 8 лет... =)
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7004 / 3297 / 448
Регистрация: 04.12.2011
Сообщений: 9,125
Записей в блоге: 5
21.02.2018, 08:50 #19
Цитата Сообщение от LemurDC Посмотреть сообщение
А я спустя 8 лет...
Хорошая мыслЯ приходит опослЯ.
Зато я эту тему прочитал. И ещё многие.
Глядя в топик я не могу представить о чём речь. Рациональные числа представляются 14 знаками (в среднем) и если иметь ввиду long double и степенями десятки от -308 до + 308. Хотел бы я видеть как получить все значащие цифры в дробной части в виде целого числа.
Шучу. Я знаю как и наверное не одним способом, но. Результат совершенно не переносим и никак не отображает какой либо логически консистентный объект. Ну то есть, дробная часть 1/3 это 12...13 троек, а дробная часть 1/2, это число пять. Трудно сказать, чем думали/закусывали/руководствовались те кто сочинил такое задание.
2
21.02.2018, 08:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2018, 08:50
Привет! Вот еще темы с решениями:

Отделение целой части числа от дробной
деление любое дробное число например: 12.34 и эту цифру надо делить что бы...

Последовательность в дробной части вещественного числа
Верно ли, что первые n цифр дробной части заданного по-ложительного...

Найти сумму первых 5 цифр дробной части действительного числа.например для числа 23,1680989 она равна 24.Програма на С++
Найти сумму первых 5 цифр дробной части действительного числа.например для...

Найти сумму первых 5 цифр дробной части действительного числа.например для числа 23,1680989 она равна 24.програма на С++
Найти сумму первых 5 цифр дробной части действительного числа.например для...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru