Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2014, 18:06   #11
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
По умолчанию

Код:
#include <iostream>
#include <cmath>
#define M_PI 3.14159265358979323846
using namespace std;
 
class Ellips {
public:
    Ellips(double a, double b);
    double perimeter();
};

Ellips::Ellips(double a, double b) {
    cout << "Constructor Ellips";
    cout << "a = " << a << endl;
    cout << "b = " << b;
    cout << endl;
}

double Ellips::perimeter() {
    double result = 0.0;
    cout << "result = " << result;
    return result;
}

class Circle{
public:
        Circle(double r);
		double perimeter();
        friend Ellips;
        //double perimeter(){return 2*M_PI*m_r;}
 
};
Circle::Circle(double r) 
{
    cout << "Constructor Circle";
    cout << "r = " << r << endl;
    cout << endl;
}

double Circle::perimeter()
{
    double result = 0.0;
    cout << "result = " << result;
    return result;
}

void print()
{
cout<<"print"<<endl;
}
void show_Ellips()
{
cout << "void show_Elips(void)" <<endl;
}

int main()
{
double r = 5.5;
double a = 5.5;
double b = 5.5;
Ellips ellips(a, b);
ellips.perimeter();
Circle circle(r);
circle.perimeter();
system("pause");
return 0;
}
Возможно не до конца вас понял.
dkii вне форума Ответить с цитированием
Старый 02.03.2014, 18:39   #12
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Я убедился, что Вы всё выполнили. Теперь идём дальше

Я сделал для круга, а Вы сделайте тоже самое для эллипса, тогда и продолжим:

Код:
#include <iostream>
#include <cmath>
using namespace std;

class Circle {
public:
    Circle(double r);
    double perimeter();

private:
    double m_r;
};

Circle::Circle(double r) {
    m_r = r;
}

double Circle::perimeter() {
    double result = 2.0 * M_PI * m_r;
    return result;
}

int main() {
    double r = 5.5;
    Circle circle(r);
    double p = circle.perimeter();
    cout << "Radius = " << r << endl;
    cout << "Perimeter = " << p << endl;
    return 0;
}
8Observer8 вне форума Ответить с цитированием
Старый 02.03.2014, 19:03   #13
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
По умолчанию

Код:
#include <iostream>
#include <cmath>
#define M_PI 3.14159265358979323846
using namespace std;
 
class Ellips {
public:
    Ellips(double a, double b);
    double perimeter();
private:
    double m_a, m_b;
};

Ellips::Ellips(double a, double b)
{
m_a = a;
m_b = b;
}

double Ellips::perimeter() 
{
    double result = 4*(MP_I*m_a*m_b +(m_a-m_b)*(m_a-m_b))/(m_a+m_b);
    return result;
}

class Circle{
public:
        Circle(double r);
		double perimeter();
        friend Ellips;
private:
        double m_r;

};
Circle::Circle(double r) 
{
    m_r = r;
}

double Circle::perimeter()
{
    double result = 2.0 * M_PI * m_r;
    return result;
}

void print()
{
cout<<"print"<<endl;
}
void show_Ellips()
{
cout << "void show_Elips(void)" <<endl;
}

int main()
{
	double r = 5.5;
    Circle circle(r);
    double p = circle.perimeter();
    cout << "Radius = " << r << endl;
    cout << "Perimeter = " << p << endl;
double a = 5.5;
double b = 5.5;
Ellips ellips(a, b);
double i = ellips.perimeter();
cout << "Bolshie poluosi Ellipsa = " << a << b << endl;
cout << "Dina okrujnosti = " << i << endl;
system("pause");
return 0;
}
dkii вне форума Ответить с цитированием
Старый 02.03.2014, 19:04   #14
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
По умолчанию

Думаю что теперь print и show_Ellips можно удалить
dkii вне форума Ответить с цитированием
Старый 03.03.2014, 10:48   #15
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Уже намного лучше, но ещё далеко не всё

Вижу, что Вам нужен инструмент для выравнивания кода. Выравнивать код очень важно, так как этим Вы показываете уважение к другим разработчикам (и к себе)

Но вручную это делать сложно. Рекомендую Вам сменить среду разработку, где встроен механизм выравнивания.

Специально для Вас написал инструкцию: http://notes.orgfree.com/pure_cpp_in_qt.php

Ваша задача:
- выполнить инструкцию выше
- отформатировать код, как написано в той же инструкции (в конце)
- выложить сюда отформатированный код

P.S. Код должен компилироваться
8Observer8 вне форума Ответить с цитированием
Старый 03.03.2014, 21:22   #16
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
По умолчанию

Код:
#include <iostream>
#include <cmath>
#define M_PI 3.14159265358979323846
using namespace std;

class Ellips {
public:
	Ellips(double a, double b);
	double perimeter();
private:
	double m_a, m_b;
};

Ellips::Ellips(double a, double b)
{
	m_a = a;
	m_b = b;
}

double Ellips::perimeter() 
{
	double result = 4*(M_PI*m_a*m_b +(m_a-m_b)*(m_a-m_b))/(m_a+m_b);
	return result;
}

class Circle{
public:
	Circle(double r);
	double perimeter();
	friend Ellips;
private:
	double m_r;

};
Circle::Circle(double r) 
{
	m_r = r;
}

double Circle::perimeter()
{
	double result = 2.0 * M_PI * m_r;
	return result;
}

int main()
{
	double r = 5.5;
	Circle circle(r);
	double p = circle.perimeter();
	cout << "Radius = " << r << endl;
	cout << "Perimeter = " << p << endl;
	double a = 5.5;
	double b = 5.5;
	Ellips ellips(a, b);
	double i = ellips.perimeter();
	cout << "Bolshie poluosi Ellipsa = " << a << b << endl;
	cout << "Dina okrujnosti = " << i << endl;
	system("pause");
	return 0;
}
dkii вне форума Ответить с цитированием
Старый 03.03.2014, 21:26   #17
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
По умолчанию

Извините, но не стал качать то что вы сказали, выровнял в уже установленом microsoft visual studio.
dkii вне форума Ответить с цитированием
Старый 03.03.2014, 21:29   #18
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

А зачем Вы делаете Эллипс дружественным для Круга? Вы понимаете зачем это?
8Observer8 вне форума Ответить с цитированием
Старый 03.03.2014, 21:36   #19
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
По умолчанию

В моём первом посте есть задание и одно из условий задания наличие дружественных классов.
dkii вне форума Ответить с цитированием
Старый 03.03.2014, 23:35   #20
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Зачем здесь дружба? Я что-то не вижу причин для этого. Периметр лучше вычислять на лету, это быстрая операция. Дружба в данном случае - это плохо. Лучше сделать отдельную функцию для вычисления: во сколько раз периметр эллипса больше периметра круга.

Если у Вас по заданию так, то:

- создайте внутри классов переменные для хранения периметров
- сделайте функцию howManyTimes() (из кода ниже) членом класса Ellipse
- объявите Ellipse другом Circle
- внутри howManyTimes() замените функцию e.perimeter() на переменную m_perimeter (которая будет хранить периметр)

Код:
#include <iostream>
#include <cmath>
#define M_PI 3.14159265358979323846
using namespace std;

class Ellips {
public:
    Ellips(double a, double b);
    double perimeter() const;
    double a() const { return m_a; }
    double b() const { return m_b; }
private:
    double m_a, m_b;
};

Ellips::Ellips(double a, double b)
{
    m_a = a;
    m_b = b;
}

double Ellips::perimeter() const
{
    double result = 4*(M_PI*m_a*m_b +(m_a-m_b)*(m_a-m_b))/(m_a+m_b);
    return result;
}

class Circle{
public:
    Circle(double r);
    double perimeter() const;
    double redius() const { return m_r; }
    //friend Ellips;
private:
    double m_r;
};

Circle::Circle(double r)
{
    m_r = r;
}

double Circle::perimeter() const
{
    double result = 2.0 * M_PI * m_r;
    return result;
}

// Вычисляем во сколько раз периметр Эллипса больше периметра Круга
int howManyTimes(const Circle &c, const Ellips &e, double &result) {
    // Код ошибки
    int error = 0;

    // Проверяем деление на ноль
    if (c.perimeter() > 0) {
        // Вычисляем во сколько раз периметр Эллипса больше периметра Круга
        result = e.perimeter() / c.perimeter();
    } else {
        error = 1; // в случае деления на ноль возвращаем код ошибки
    }

    // ошибок нет - возвращаем ноль
    return error;
}

int main()
{
    double r = 5.5;
    Circle circle(r);
    double p = circle.perimeter();
    cout << "Radius = " << r << endl;
    cout << "Perimeter = " << p << endl;
    double a = 5.5;
    double b = 5.5;
    Ellips ellips(a, b);
    double i = ellips.perimeter();
    cout << "Bolshie poluosi Ellipsa = " << a << b << endl;
    cout << "Dina okrujnosti = " << i << endl;

    // Вычисляем во сколько раз периметр Эллипса больше периметра Круга
    double result;
    int error = howManyTimes(circle, ellips, result);
    if (error) {
        cerr << "Error: division by zero." << endl;
        return error;
    } else {
        cout << "howManyTimes = " << result << endl;
    }

    system("pause");
    return 0;
}
P.S. Дружба даёт доступ к закрытым переменным и используется очень редко, так как она раскрывает "внутренности" класса для друзей, а это создаёт дополнительные зависимости. Друзья могут напакостить (изменить значения закрытых переменных объекта) Либо, допустим, мы захотим изменить имена внутренних (закрытых) переменных класса нам придётся и в друзьях их менять. Лучше, когда можем свободно меня внутренности класса, не затрагивая клиентский код. Пусть клиентский код работает только через открытый (public) интерфейс класса.

Последний раз редактировалось 8Observer8; 03.03.2014 в 23:40.
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наклонный эллипс SomeBod Компоненты Delphi 2 12.02.2016 02:04
C++: Классы, перегрузка операторов, дружественные функции. Lingri Помощь студентам 6 20.09.2013 21:22
Делфи,эллипс Ильгизуля Помощь студентам 1 21.05.2013 22:58
Дружественные классы и protected Stiker Помощь студентам 1 10.01.2013 00:57
Дружественные функции и классы Opiym Помощь студентам 1 05.04.2010 21:51