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

Как записать выражение, чтобы не отбрасывалась дробная часть? - C++

Восстановить пароль Регистрация
 
rny
2 / 2 / 0
Регистрация: 23.12.2014
Сообщений: 105
07.07.2015, 08:54     Как записать выражение, чтобы не отбрасывалась дробная часть? #1
Здравствуйте.Есть такой код:
C++
1
2
3
double s = 14.5;
int m = 4;
double b=s/m
При вычислении выражения отбрасывается дробная часть. Знаю, что при делении на конкретное число, можно записать b = s/4.0. А как быть когда в выражении только переменные?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2015, 08:54     Как записать выражение, чтобы не отбрасывалась дробная часть?
Посмотрите здесь:

C++ Дробная часть
C++ ОБНУЛЯЕТСЯ ДРОБНАЯ ЧАСТЬ ПРИ СОРТИРОВКЕ МАССИВА!!!
C++ Дробная часть
Не видна дробная часть числа C++
поймать! дробная часть равна 1(нулю) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
07.07.2015, 09:00     Как записать выражение, чтобы не отбрасывалась дробная часть? #2
В таком виде как у тебя, ничего не отбрасывается. Вывод проверяй. Как ты определяешь, что дробной части нет?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
07.07.2015, 09:01     Как записать выражение, чтобы не отбрасывалась дробная часть? #3
При вычислении выражения отбрасывается дробная часть.
Врете ведь
http://ideone.com/y8HHX7
rny
2 / 2 / 0
Регистрация: 23.12.2014
Сообщений: 105
07.07.2015, 09:38  [ТС]     Как записать выражение, чтобы не отбрасывалась дробная часть? #4
nmcf, Вот полная программа
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    double **a;
    int m,n;
    cout << "Введите m: ";
    cin >> m;
    cout << "Введите n: ";
    cin >> n;
    a = new double *[m];
    double *b1 = new double[m];
    double *b2 = new double[m];
    for (int i=0; i<m; i++)
         a[i] = new double [n];
    for (int i=0; i<m; i++)
        for (int j=0; j<n; j++)
        {
            cout << "Введите a["<<i+1<<","<<j+1<<"]: ";
            cin >> a[i][j];
        }
    for (int i=0; i<m; i++)
    {
        double p=1,s=0;
        for (int j=0; j<n; j++)
        {
            p*=a[i][j];
            s+=a[i][j];
        }
        b1[i]=p;
        b2[i]=s/m;
    }
    int min = b2[0];
    for (int i=0; i<m; i++)
            if (b2[i]<min) min = b2[i];
    cout << "Вектор произведений: " << endl;
    for (int i=0; i<m; i++)
        cout << b1[i] << " ";
    cout << endl << "Наименьшее среднее арифметическое: "<<min;
    for (int i=0; i<m; i++)
        delete [] a[i];
    delete []a;
    delete []b1;
    delete []b2;
}
В общем считаю среднее арифметическое элементов строк матрицы и записываю его в массив b2. Далее в нем ищу минимум. Выводятся все время целые числа.
IrineK
Заблокирован
07.07.2015, 09:50     Как записать выражение, чтобы не отбрасывалась дробная часть? #5
Цитата Сообщение от rny Посмотреть сообщение
А как быть когда в выражении только переменные?
C++
1
double b=1.0*s/m;
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
07.07.2015, 09:58     Как записать выражение, чтобы не отбрасывалась дробная часть? #6
Цитата Сообщение от IrineK Посмотреть сообщение
C++
1
double b=1.0*s/m;
здесь это (1.0*) вроде не нужно, выражение вычисляется слева направо, s типа double, m автоматически приведётся к типу double.
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
07.07.2015, 09:58     Как записать выражение, чтобы не отбрасывалась дробная часть? #7
Цитата Сообщение от rny Посмотреть сообщение
int min = b2[0];
############
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
07.07.2015, 10:00     Как записать выражение, чтобы не отбрасывалась дробная часть? #8
Цитата Сообщение от Mr.X Посмотреть сообщение
C++
1
int min = b2[0];
а слона-томы и не заметили.
rny
2 / 2 / 0
Регистрация: 23.12.2014
Сообщений: 105
07.07.2015, 10:07  [ТС]     Как записать выражение, чтобы не отбрасывалась дробная часть? #9
Строку
C++
1
int min = b2[0]
пробовал править. Вывел весь вектор b2. Все равно все числа целые. Вариант с 1.0 тоже не работает...
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
07.07.2015, 12:44     Как записать выражение, чтобы не отбрасывалась дробная часть? #10
Так сделал?
C++
1
double min = b2[0];
rny
2 / 2 / 0
Регистрация: 23.12.2014
Сообщений: 105
07.07.2015, 16:30  [ТС]     Как записать выражение, чтобы не отбрасывалась дробная часть? #11
nmcf, Да, именно так.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
07.07.2015, 16:33     Как записать выражение, чтобы не отбрасывалась дробная часть? #12
Цитата Сообщение от rny Посмотреть сообщение
Да, именно так.
http://ideone.com/pLS8nd
rny
2 / 2 / 0
Регистрация: 23.12.2014
Сообщений: 105
07.07.2015, 17:31  [ТС]     Как записать выражение, чтобы не отбрасывалась дробная часть? #13
Теперь разобрался. Программа работает неверно, если вводить целые числа. Но почему?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2015, 12:18     Как записать выражение, чтобы не отбрасывалась дробная часть?
Еще ссылки по теме:

Корень и дробная часть. Калькулятор с парсингом C++
Разделить дробное число на 2 части: целая часть числа и его дробная часть C++
При переводе string в long double теряется дробная часть C++

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

Или воспользуйтесь поиском по форуму:
irises
 Аватар для irises
68 / 25 / 8
Регистрация: 29.06.2015
Сообщений: 101
08.07.2015, 12:18     Как записать выражение, чтобы не отбрасывалась дробная часть? #14
Цитата Сообщение от rny Посмотреть сообщение
Программа работает неверно, если вводить целые числа. Но почему?
потому что любые операции с int приводят к int :
int +-*/ int = int
чтоб от операции с int получить другой тип (double, float) нужно явно указать что вам нужно
(double)int + int = double

например:
int a=5, b=6;
если напишем
double c = a+b; то получим int, который запишется в double, а нам надо double, поетому пишем:
double c = (double)a + b;
double + int даст нам double
Yandex
Объявления
08.07.2015, 12:18     Как записать выражение, чтобы не отбрасывалась дробная часть?
Ответ Создать тему
Опции темы

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