233 / 29 / 11
Регистрация: 04.06.2010
Сообщений: 293
1

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

04.06.2013, 22:34. Показов 2514. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2013, 22:34
Ответы с готовыми решениями:

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

При обработке большого числа данных выдает nan
Добрый день! Программа нацелена на то, чтобы прочитать большой объем числовых данных, подставить...

Выдаёт -nan(ind)
Header.h файл#pragma once double f(double x); double h(double a, double b, int n); double hi(int...

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

4
414 / 410 / 95
Регистрация: 06.10.2011
Сообщений: 832
04.06.2013, 22:36 2
Переменная p инициализирована нулём. Тогда и получается квадрат из 0/0
1
233 / 29 / 11
Регистрация: 04.06.2010
Сообщений: 293
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
414 / 410 / 95
Регистрация: 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 / 11
Регистрация: 04.06.2010
Сообщений: 293
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2013, 22:47

LU - разложение (выдает NaN)
Здравствуйте. Помогите исправить программу. Проблема заключается в том, что некоторые значение...

Почему выдает -nan(ind)
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { ...

вижуал выдает -nan(ind) как ответ
Здраствуйте, не могли бы вы помочь с проблемой -nan(ind), я знаю что это связано с отрицательным...

Ища корень методом итераций выдает nan
Мне надо найти корень уравнения методом итераций. Что на С++, что на Паскале результат выходит Not...


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

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

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