Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Бедел
233 / 29 / 4
Регистрация: 04.06.2010
Сообщений: 286
#1

При вычисление выдает nan - C++

04.06.2013, 22:34. Просмотров 979. Ответов 4
Метки нет (Все метки)

Здравствуйте, дорогие форумчане.
Небольшая программка для вычисления полупериметра треугольника и т.д., реализованная через классы.
Полупериметр считает нормально, а вот при подсчете других формул выдает nan. Помогите разрешить проблему. Заранее спасибо.

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>
#include <math.h>
#include <stdlib.h>
 
using namespace std;
 
class treug
{
    public:
    float p,r,R,S,a,b,c;
    float poluperimetr()
     {
         return ((a+b+c)/2);
     }
    float radiuso()
     {
        return ((a*b*c)/4*sqrt(p*(p-a)*(p-b)*(p-c)));
     }
    float radiusv()
     {
         return (sqrt((p*(p-a)*(p-b)*(p-c))/p));
     }
    float area()
     {
         return (sqrt(p*(p-a)*(p-b)*(p-c)));
     }
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
    treug t;
    cout <<"Введите сторону а, b, c: ";
    cin >> t.a >> t.b >> t.c;
    cout << "Полупериметр равен = " << t.poluperimetr() << endl;
    cout <<"Введите сторону а, b, c: ";
    cin >> t.a >> t.b >> t.c;
    cout << "Радиус описанной окружности равен = " << t.radiuso() << endl;
    cout <<"Введите сторону а, b, c: ";
    cin >> t.a >> t.b >> t.c;
    cout << "Радиус вписанной окружности равен = " << t.radiusv() << endl;
    cout <<"Введите сторону а, b, c: ";
    cin >> t.a >> t.b >> t.c;
    cout << "Площадь равна = " << t.area() << endl;
    system("PAUSE");
    return 0;
}
Добавлено через 4 минуты
Подозреваю, что для других формул требуется ввод полупериметра, так как он используется при вычислениях. Я прав ? Просто когда реализовывал эту программу через функции, этой проблемы не было.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2013, 22:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос При вычисление выдает nan (C++):

LU - разложение (выдает NaN) - C++
Здравствуйте. Помогите исправить программу. Проблема заключается в том, что некоторые значение получаются NaN/ #include&lt;iostream.h&gt; ...

Вывод nan при расчете - C++
При расчете codeblocks выводит nan как сделать так, чтобы он считал это ошибкой? #include &lt;iostream&gt; #include &lt;math.h&gt; using...

При изменении значения переменной получается nan - C++
Здравствуйте, подскажите пожалуйста почему при указании у=1 всё нормально а если сделать его больше то выдает Nan? ...

При возведении числа в степень оно становится равным Nan - C++
Доброго времени суток! Имеется функция, которая возводит, ранее введенную матрицу, в степень. Иногда все отображается нормально, а иногда в...

Как вернуть NaN и Infinity, проверить на NaN и Infinity? - C++
Как вернуть NaN и Infinity, проверить на NaN и Infinity?

Компьютер при исчислениях ненадолго виснет и иногда выбивает число nan - C++
Доброго времени суток! Помогите, пожалуйста, оптимизировать код. Дело в том, что компьютер при исчислениях ненадолго виснет и иногда...

4
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
04.06.2013, 22:36 #2
Переменная p инициализирована нулём. Тогда и получается квадрат из 0/0
1
Бедел
233 / 29 / 4
Регистрация: 04.06.2010
Сообщений: 286
04.06.2013, 22:39  [ТС] #3
Цитата Сообщение от Olivеr Посмотреть сообщение
Переменная p инициализирована нулём. Тогда и получается квадрат из 0/0
Да, пока писал сюда сам уже понял, в чем проблема)) Спасибо большое.
Просто при реализацию этой программы через функции этого не требовалось. Можете объяснить почему ?
Вот реализация через функции:
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
#include <iostream.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
float poluperimetr(float a, float b, float c);
float radiuso(float a, float b, float c, float p);
float radiusv(float a, float b, float c, float p);
float area(float a, float b, float c, float p);
int main()
{
    setlocale(LC_ALL, "Russian");
    float p=0, R=0, r=0, S=0, a, b, c;
    cout <<"Введите сторону а, b, c: "; cin >> a >>b >>c;
    p=poluperimetr(a,b,c);
    cout << "Полупериметр равен = " << p << endl;
    cout <<"Введите сторону а, b, c: "; cin >> a >>b >>c;
    R=radiuso(a,b,c,p);
    cout << "Радиус описанной окружности равен = " << R << endl;
    cout <<"Введите сторону а, b, c: "; cin >> a >>b >>c;
    r=radiusv(a,b,c,p);
    cout << "Радиус вписанной окружности равен = " << r << endl;
    cout <<"Введите сторону а, b, c: "; cin >> a >>b >>c;
    S=area(a,b,c,p);
    cout << "Площадь равна = " << S << endl;
    system("PAUSE");
    return 0;
}
float poluperimetr(float a, float b, float c)
{
    return ((a+b+c)/2);
}
float radiuso(float a, float b, float c, float p)
{
    return ((a*b*c)/4*sqrt(p*(p-a)*(p-b)*(p-c)));
}
float radiusv (float a, float b, float c, float p)
{
    return (sqrt((p*(p-a)*(p-b)*(p-c))/p));
}
float area (float a, float b, float c, float p)
{
    return (sqrt(p*(p-a)*(p-b)*(p-c)));
}
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
04.06.2013, 22:42 #4
Вот через классы:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <math.h>
#include <stdlib.h>
 
using namespace std;
 
class treug
{
    public:
        treug(float _a, float _b, float _c):
            a(_a), b(_b), c(_c)
        {
            p = (a+b+c)/2;
            R = ((a*b*c)/4*sqrt(p*(p-a)*(p-b)*(p-c)));
            r = (sqrt((p*(p-a)*(p-b)*(p-c))/p));
            S = (sqrt(p*(p-a)*(p-b)*(p-c)));
        }
    float p,r,R,S,a,b,c;
 
    float poluperimetr()
    { return p; }
 
    float radiuso()
    { return R; }
 
    float radiusv()
    { return r; }
 
    float area()
    { return S; }
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
    cout <<"Введите сторону а, b, c: ";
    float a, b, c; cin >> a >> b >> c;
    treug t(a, b, c);
    cout << "Полупериметр равен = " << t.poluperimetr() << endl;
    cout << "Радиус описанной окружности равен = " << t.radiuso() << endl;
    cout << "Радиус вписанной окружности равен = " << t.radiusv() << endl;
    cout << "Площадь равна = " << t.area() << endl;
    system("PAUSE");
    return 0;
}

Цитата Сообщение от Бедел Посмотреть сообщение
Просто при реализацию этой программы через функции этого не требовалось. Можете объяснить почему ?
потому, что вот
C++
1
p=poluperimetr(a,b,c);
1
Бедел
233 / 29 / 4
Регистрация: 04.06.2010
Сообщений: 286
04.06.2013, 22:47  [ТС] #5
Цитата Сообщение от Olivеr Посмотреть сообщение
Вот через классы:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <math.h>
#include <stdlib.h>
 
using namespace std;
 
class treug
{
    public:
        treug(float _a, float _b, float _c):
            a(_a), b(_b), c(_c)
        {
            p = (a+b+c)/2;
            R = ((a*b*c)/4*sqrt(p*(p-a)*(p-b)*(p-c)));
            r = (sqrt((p*(p-a)*(p-b)*(p-c))/p));
            S = (sqrt(p*(p-a)*(p-b)*(p-c)));
        }
    float p,r,R,S,a,b,c;
 
    float poluperimetr()
    { return p; }
 
    float radiuso()
    { return R; }
 
    float radiusv()
    { return r; }
 
    float area()
    { return S; }
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
    cout <<"Введите сторону а, b, c: ";
    float a, b, c; cin >> a >> b >> c;
    treug t(a, b, c);
    cout << "Полупериметр равен = " << t.poluperimetr() << endl;
    cout << "Радиус описанной окружности равен = " << t.radiuso() << endl;
    cout << "Радиус вписанной окружности равен = " << t.radiusv() << endl;
    cout << "Площадь равна = " << t.area() << endl;
    system("PAUSE");
    return 0;
}


потому, что вот
C++
1
p=poluperimetr(a,b,c);
Спасибо, теперь точно всё понятно)
0
04.06.2013, 22:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2013, 22:47
Привет! Вот еще темы с ответами:

При работе с числом с плавающей запятой в файл выводится -NaN(not a number) - C++
Есть функция для чтения из файла и записи в массив, после прорабатывается алгоритм и выводит новое значение в файл(тоже через функцию), но...

При запуске из среды программа работает, при запуске выполняемого файла выдает ошибку - C++
Добавлено через 1 минуту 35 секунд как исправить ошибки в названии темы? там должно было быть исполняемого файла

При b=1 выдает ошибку - C++
# include &lt;iostream&gt; # include &lt;math.h&gt; using namespace std; double Func( double s, double b); void main () { double c=0;...

nan - C++
подскажите что это означает ввожу данные на выходе &quot;nan&quot; работаю только с double, long int


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

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

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