Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
watmann
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 20
1

Передача параметров в функции

28.11.2015, 15:46. Просмотров 215. Ответов 6
Метки нет (Все метки)

Здравствуйте
Помогите, пожалуйста, разобраться с передачей параметров.
Задание : создать класс "Треугольник", определить углы и тип треугольников.
В одном методе я определяю углы, а в другом тип треугольника (хочу сделать сравнением углов). В общем я так понимаю, что я неправильно возвращаю и передаю значения угла посчитанного в Angle. Подскажите, пожалуйста как правильно и почему именно так.
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
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <cmath>
using namespace std;
class Triangle
{
    private: double a,b,c;
    public:
    void Set_length (double m, double n, double k)
    {
        a=m;
        b=n;
        c=k;
    }
    double Angles (double m, double n, double k, double *al, double *be, double *ga)
    {
        double alpha = 57*acos((k*k+n*n-m*m)/(2*k*n));
        double beta = 57*acos((m*m+k*k-n*n)/(2*m*k));
        double gamma = 57*acos((m*m+n*n-k*k)/(2*m*n));
        cout << "Alpha=" <<alpha << endl;
        cout << "Beta=" <<beta << endl;
        cout << "Gamma=" <<gamma << endl;
        al=&alpha;
        be=&beta;
        ga=&gamma;
        return *al,*be,*ga;
    }
    void Type (double m, double n, double k, double alpha, double beta, double gamma)
    {   
        if ((alpha==90)||(beta==90)||(gamma==90)){
            cout << "Rectangular";
        }   
        if ((alpha<90)&&(beta<90)&&(gamma<90)){
            cout << "Acute";
        }
        else {
            cout << "Obuse";
        }
    }
};
 
int main (){
    Triangle object;
    double s1,s2,s3;
    cout << "Enter triangle sides."<< endl;
    cout << "a=";
    cin>> s1;
    cout << "b=";
    cin>> s2;
    cout << "c=";
    cin>> s3;
    object.Set_length(s1,s2,s3);
    double alph,bet,gamm;
    object.Angles(s1,s2,s3, &alph,&bet,&gamm);
 
    object.Type(s1,s2,s3,alph,bet,gamm);
 
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2015, 15:46
Ответы с готовыми решениями:

Передача параметров функции
доброго времени суток:) есть программа реализующая метод градиентного спуска....

Передача параметров функции
Не могу передать значение переменной функции. По идее все правильно, но она...

Передача параметров функции
Добрый день! Помогите, пожалуйста с передачей параметров по функциям. Как...

Передача параметров функции в main()
Вот у меня есть две функции, которые в дальнейшем нужно вызвать в void main ()....

Передача параметров во виртуальные функции, перегрузка
нужна помощь. имеется абстрактный класс Base, объекты которого будут храниться...

6
RAFA91
Заблокирован
28.11.2015, 17:56 2
Цитата Сообщение от watmann Посмотреть сообщение
return *al,*be,*ga;
это лишние. ничего не надо возвращать

Добавлено через 5 минут
Цитата Сообщение от watmann Посмотреть сообщение
if ((alpha==90)||(beta==90)||(gamma==90)){
неужели ты думаешь что это условие когда-то будет истинно ?

Добавлено через 1 минуту
Цитата Сообщение от watmann Посмотреть сообщение
double Angles (double m, double n, double k, double *al, double *be, double *ga)
на кой передаешь в метод стороны раз у тебя эти стороны уже в полях.

Добавлено через 1 минуту
Цитата Сообщение от watmann Посмотреть сообщение
al=&alpha;
* * * * be=&beta;
* * * * ga=&gamma;
убери &

Добавлено через 1 минуту
C++
1
 *al=alpha;
Добавлено через 1 минуту
Цитата Сообщение от watmann Посмотреть сообщение
void Type (double m, double n, double k, double alpha, double beta, double gamma)
на кой передаешь в метод стороны раз у тебя эти стороны уже в полях.
1
watmann
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 20
29.11.2015, 10:57  [ТС] 3
Спасибо за ответ с:
Цитата Сообщение от RAFA91
if ((alpha==90)||(beta==90)||(gamma==90)){
Да, это я протупила.
Теперь делаю так:
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
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <cmath>
using namespace std;
class Triangle
{
    private: double a,b,c;
    public:
    void Set_length (double m, double n, double k)
    {
        a=m;
        b=n;
        c=k;
    }
    double Angles (double *al, double *be, double *ga)
    {
        double alpha = 57*acos((c*c+b*b-a*a)/(2*b*c));
        double beta = 57*acos((a*a+c*c-b*b)/(2*a*c));
        double gamma = 57*acos((b*b+a*a-c*c)/(2*a*b));
        cout << "Alpha=" <<alpha << endl;
        cout << "Beta=" <<beta << endl;
        cout << "Gamma=" <<gamma << endl;
        *al=alpha;
        *be=beta;
        *ga=gamma;
        return *al,*be,*ga;
    }
    void Type (double alpha, double beta, double gamma)
    {   
        if ((a*a+b*b==c*c)||(b*b+c*c==a*a)||(a*a+c*c==b*b)){
            cout << "Rectangular";
        }   
        if ((alpha<89.5)&&(beta<89.5)&&(gamma<89.5)){
            cout << "Acute";
        }
        if ((alpha>90)||(beta>90)||(gamma>90)) {
            cout << "Obuse";
        }
    }
};
 
int main (){
    Triangle object;
    double s1,s2,s3;
    cout << "Enter triangle sides."<< endl;
    cout << "a=";
    cin>> s1;
    cout << "b=";
    cin>> s2;
    cout << "c=";
    cin>> s3;
    object.Set_length(s1,s2,s3);
    double alph,bet,gamm;
    object.Angles(&alph,&bet,&gamm);
 
    object.Type(alph,bet,gamm);
 
    return 0;
}
Есть ещё вариант округлять посчитанные значения градусов с помощью ceil до высшего значения. Но я не уверена в корректности.
0
Kerry_Jr
Эксперт PHP
2211 / 2007 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
29.11.2015, 11:00 4
Цитата Сообщение от watmann Посмотреть сообщение
C++
1
return *al,*be,*ga;
почитайте мою запись в блоге.
0
RAFA91
Заблокирован
29.11.2015, 14:51 5
Цитата Сообщение от watmann Посмотреть сообщение
Теперь делаю так:

все верно . теорема пифа тут как раз.

кстати должна быть аналогичная зависимость и для других типов тр.

Добавлено через 2 минуты
есть же еще равнобедренный и равносторонний.

Добавлено через 9 минут
C++
1
if ((a*a+b*b>c*c)&&(b*b+c*c>a*a)&&(a*a+c*c>b*b))  cout << "Acute";
не надо вычислять углы
0
Kerry_Jr
29.11.2015, 17:18
  #6

Не по теме:

Цитата Сообщение от RAFA91 Посмотреть сообщение
для других типов тр.
В таких случаях возникает ощущение, что у человека буквы на клаве закончились.

0
RAFA91
Заблокирован
29.11.2015, 17:34 7
иногда они просто выводят не тот символ.
0
29.11.2015, 17:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2015, 17:34

Передача параметров функции с пoмощью указателя
Всем доброго времени суток, есть обычная функция, возвращающая сумму цифр...

Передача массивов в качестве параметров функции
Задав динамический двумерный массив вещественных данных (матрицу А размером...

Передача параметров функции по значению, ссылке и указателю
Вычислить F=f(a)-5f^3(sin(b/2))+1/f(1+c^4), де f(x)=3x^2-2x^2+7, при a=5.08,...


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

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

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