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

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

Войти
Регистрация
Восстановить пароль
 
 
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
#1

Дружественная функция подсчета площадей - C++

14.05.2014, 17:19. Просмотров 644. Ответов 18
Метки нет (Все метки)

Требуется для класса «круг» (определяется радиусом) и «треугольник»(определяется тремя точками на плоскости) написать дружественную функцию подсчета площадей этих фигур. Проверить возможность вписывания (описания) в (около) треугольник (треугольника)

В общем простенькую программу для подсчета площадей написал, а вот как переделать с дружественной функцией - не совсем понял, пробовал, переделывал с friend, но не выходит,а уж тем более проверку вписывания

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
59
60
61
62
63
#include <iostream>
#include <math.h>
#include <locale>
using namespace std;
    class ger
    {
public:
    double a, b, c, p, S;
    double x1, y1, x2, y2, x3, y3;
    void enter();
    void show();
    };
    void ger::enter()
    {
        cout<<"x1="; cin>>x1;
        cout<<"y1="; cin>>y1;
                cout<<endl;
        cout<<"x2="; cin>>x2;
        cout<<"y2="; cin>>y2;
                cout<<endl;
        cout<<"x3="; cin>>x3;
        cout<<"y3="; cin>>y3;
                cout<<endl;
        a=sqrt( pow((x1-x2),2)+pow((y1-y2),2) );
        b=sqrt( pow((x2-x3),2)+pow((y2-y3),2) );
        c=sqrt( pow((x1-x3),2)+pow((y1-y3),2) );
        p = a+b+c/2;
        S = sqrt(p*(p-a)*(p-b)*(p-c));
    };
    void ger::show()
    {
        cout<<"Площадь треугольника S="<<S<<endl;
    }
 
 class ker
 
    {
public:
    double R, S1;
    void enter1();
    void show1();
    };
    void ker::enter1()
    {
        cout<<"R="; cin>>R;
        S1 =3.14*(pow(R,2));
    };
    void ker::show1()
    {
        cout<<"Площадь круга S="<<S1<<endl;
    }
void main()
{
 setlocale(LC_ALL, "Russian");
    system("cls");
    ger s;
    ker d;
    s.enter();
    s.show();
    d.enter1();
    d.show1();
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 17:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дружественная функция подсчета площадей (C++):

Дружественная функция - C++
Хочу сделать вычисление площади как дружественную функцию, начал описывать, дальше догнать не могу как кодить. Подскажите? #include...

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

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

Дружественная функция - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; class massiv { int len,*p_mas; public : massiv() {} massiv...

Дружественная функция. Графы - C++
Здравствуйте! Задача такая: Пересечением двух графов называется граф, все вершины и все ребра которого принадлежат как одному, так и...

Дружественная функция класса - C++
Проблема в том что дружественная функция класа механик в класе car (friend void update_status) не может обращатся к полям, почему? ...

18
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
16.05.2014, 17:17  [ТС] #2
мало времени осталось ..помогите.
0
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,399
Завершенные тесты: 1
16.05.2014, 18:12 #3
C++
1
2
3
4
5
6
7
8
9
class ger
{
...  
 friend void show(ger GG);
};
void show(ger GG)
{
    cout<<"Площадь треугольника S="<<GG.S<<endl;
}
0
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
16.05.2014, 20:44  [ТС] #4
Цитата Сообщение от zss Посмотреть сообщение
friend void show(ger GG);
разве это не просто вывод уже вычисленной площади?
мне нужно вычисление площади в friend функцию
0
Darkos
5 / 5 / 4
Регистрация: 16.05.2014
Сообщений: 83
Завершенные тесты: 1
16.05.2014, 21:51 #5
Подойдет?
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
#include <iostream>
#include <math.h>
#include <locale>
using namespace std;
    class ger
    {
public:
    double a, b, c, p, S;
    double x1, y1, x2, y2, x3, y3;
    void enter();
    };
    void ger::enter()
    {
        cout<<"x1="; cin>>x1;
        cout<<"y1="; cin>>y1;
                cout<<endl;
        cout<<"x2="; cin>>x2;
        cout<<"y2="; cin>>y2;
                cout<<endl;
        cout<<"x3="; cin>>x3;
        cout<<"y3="; cin>>y3;
                cout<<endl;
        a=sqrt( pow((x1-x2),2)+pow((y1-y2),2) );
        b=sqrt( pow((x2-x3),2)+pow((y2-y3),2) );
        c=sqrt( pow((x1-x3),2)+pow((y1-y3),2) );
        p = a+b+c/2;
        S = sqrt(p*(p-a)*(p-b)*(p-c));    
        cout<<"Площадь треугольника S="<<S<<endl;
    }
 class ker
    {
public:
    double R, S1;
    void enter1();
    void show1();
    };
    void ker::enter1()
    {
        cout<<"R="; cin>>R;
        S1 =3.14*(pow(R,2));
        cout<<"Площадь круга S="<<S1<<endl;
    };
void main()
{
 setlocale(LC_ALL, "Russian");
    system("cls");
    ger s;
    ker d;
    s.enter();
    d.enter1();
    system("pause");
}
0
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,399
Завершенные тесты: 1
16.05.2014, 22:05 #6
Цитата Сообщение от lna Посмотреть сообщение
разве это не просто вывод уже вычисленной площади?
Уж коли Вы вычислили ее в конструкторе, то зачем вычислять еще раз?
0
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
17.05.2014, 07:09  [ТС] #7
zss, все дело в том, что я не хочу вычислять ее в конструкторе. это просто как бы набросок программы.
требуется вычислить ее в дружественной ф-ции.

как бы так или может даже отдельно от конструктора
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
#include <iostream>
#include <math.h>
#include <locale>
 
using namespace std;
    class ger
    {
public:
 
    double a, b, c, p, S;
    double x1, y1, x2, y2, x3, y3;
    void enter();
    };
    friend void enter(ger GG);
    void enter(ger GG)
    {
        cout<<"x1="; cin>>x1;
        cout<<"y1="; cin>>y1;
                cout<<endl;
        cout<<"x2="; cin>>x2;
        cout<<"y2="; cin>>y2;
                cout<<endl;
        cout<<"x3="; cin>>x3;
        cout<<"y3="; cin>>y3;
                cout<<endl;
        a=sqrt( pow((x1-x2),2)+pow((y1-y2),2) );
        b=sqrt( pow((x2-x3),2)+pow((y2-y3),2) );
        c=sqrt( pow((x1-x3),2)+pow((y1-y3),2) );
        p = a+b+c/2;
        S = sqrt(p*(p-a)*(p-b)*(p-c));    
        cout<<"Площадь треугольника S="<<GG.S<<endl;
    }
 class ker
    {
public:
    double R, S1;
    void enter1();
    };
    friend void enter1(ger GG);
    void enter1(ger GG)
    {
        cout<<"R="; cin>>R;
        S1 =3.14*(pow(R,2));
        cout<<"Площадь круга S="<<GG.S1<<endl;
    };
void main()
{
 setlocale(LC_ALL, "Russian");
    system("cls");
    ger s;
    ker d;
    s.enter();
    d.enter1();
    system("pause");
}
Darkos, спасибо что убрали везде show и перенесли ввод и вывод в одну ф-цию. но это совсем не то
0
Darkos
5 / 5 / 4
Регистрация: 16.05.2014
Сообщений: 83
Завершенные тесты: 1
17.05.2014, 07:27 #8
lna, если я правильно понял, нужно чтоб все расчеты велись в дружественной функции, но сама функция была вне класса, так?
0
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
17.05.2014, 07:38  [ТС] #9
Darkos, необязательно наверное вне класса. а то что расчеты в друж ф-ции это да
0
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,399
Завершенные тесты: 1
17.05.2014, 08:48 #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>
#define _USE_MATH_DEFINES
#include <cmath>
using namespace std;
class ker
{
private:
    double R;
public:
    ker():R(0){}
    ker(double r):R(r){}
    friend double Square(ger GG);
};
double Square(ger GG)
{
        return M_PI*GG.R*GG.R;
}
int main()
{
    double r;
    cout<<"R="; cin>>r;    
    ker A(r);
    double s=Square(A);
    cout<<"Площадь круга S="<<s<<endl;
    system("pause");
    return 0;
}
1
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
17.05.2014, 08:54  [ТС] #11
zss, для меня что-то это очень сложное ..
0
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,399
Завершенные тесты: 1
17.05.2014, 09:14 #12
Цитата Сообщение от lna Посмотреть сообщение
что-то это очень сложное
Здесь используется минимум знании ООП.
Если этого не поймете, то дальше двигаться бессмысленно.
Разъясняю подробно.
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
#include <iostream>
#define _USE_MATH_DEFINES // нужна чтобы видна была константа M_PI
#include <cmath>
using namespace std;
class ker
{
private:
    double R; // это защищенные данные класса. К ним доступа из вне нет.
public:
    ker():R(0){} // конструктор по умолчанию (без параметров)
    ker(double r):R(r){} // конструктор с 1 параметром типа double 
    friend double Square(ker GG); // нужная Вам дружественная функция, которая НЕ ЯВЛЯЕТСЯ членом класса
};
// описание функции Square, как видите, она глобальная (вне класса)
double Square(ker GG)
{
        return M_PI*GG.R*GG.R;
}
int main()
{
    double r;
    cout<<"R="; cin>>r;    // вводим значение радиуса в обычную переменную.
    ker A(r);   // создаем объект A имеющий тип ker, значение r запишется в A.R через конструктор
    double s=Square(A);  // вычисляем площадь
    cout<<"Площадь круга S="<<s<<endl;
    system("pause");
    return 0;
}
0
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
17.05.2014, 09:34  [ТС] #13
zss, а вот так можно? - это для окружности

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
 #include <conio.h>
#include <iostream>
 
using namespace std;
class A
  {
     double x; 
     friend void get_x(double, A &);  
   public:
 
      void show(); 
};
 
   void get_x(double N, A &obj_A)
    {
        cout<<"R="; cin>>N;
      obj_A.x=3.14*(pow(N,2)); 
    }
  
   void A::show() {
     cout<<x<<endl; 
    }
  void main()
   {
     system("cls");
      A obj_A;
      get_x(1,obj_A); 
      obj_A.show(); 
    getch();
    return;
   }
0
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,399
Завершенные тесты: 1
17.05.2014, 09:42 #14
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
#include <conio.h>
#include <iostream>
using namespace std;
class A
{
     double x; 
public:
     A(double x0):x(x0);
     void show(); 
     friend double get_Sqare(A a);  
};
double get_Square(A a)
{
     return M_PI*a.x*a.x;
}
void A::show() 
{
     cout<<"R="<<x<<endl; 
}
int main()
{
     cout<<"R=?"; 
     double r;cin>>r;
     A obj_A(r);
     obj_A.show(); 
     double s=get_Sqare(obj_A);
     cout<<"Площадь круга S="<<s<<endl; 
     getch();
     return 0;
   }
0
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
23.05.2014, 18:33  [ТС] #15
zss, хотел было сделать как вы, но ругается на две ошибки в строчке
C++
1
return M_PI*GG.R*GG.R;
error C2100: недопустимое косвенное обращение
IntelliSense: операнд * должен быть указателем
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2014, 18:33
Привет! Вот еще темы с ответами:

Не вызывается дружественная функция - C++
Создал класс, есть дружественная функция: int NOD(int a,int b) { while(b) { a%=b; std::swap(a,b); ...

Дружественная 2-м классам функция. - C++
Код программы: #include &lt;iostream.h&gt; class matrix; class vector{ int size; int* vec; public: vector(int sz = 2){vec...

Шаблон класса и дружественная функция - C++
Доброго времени суток. Столкнулся с непониманием одного процесса. Задача звучит следующим образом: Написать шаблон функции isEqualTo для...

базовый,дочерний , дружественная функция - C++
Базовый класс в нем будет массив имен из 10 элементов , конструктор должен сам заполнить этот массив любыми именами , второй класс...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
23.05.2014, 18:33
Ответ Создать тему
Опции темы

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