Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследственность классов, задача с наследственностю 
:(
    Опции темы
Hurricane
Дата 15.5.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 10.4.2007

Репутация: 6
Всего: 9



adLucem, ну и чего буянишь? С постановкой задачи уже все выяснили:

Цитата

...
1.Объект океана имеет такие данные:
...

Т.е. речь идет об объекте океана, это совсем не то, что весь океан. Океан - это контейнер, хранящий и обрабатывающий объекты океана. А вот объект океана - это может быть просто объем воды, это может быть скала, это может быть пароход, это может быть рыба-кит. Каждый из них обладает набором собственных свойств (скорость течения, собственная скорость, возможно - координаты, способен ли объект перемещаться). И собственной реализацией методов отрисовки на экране, вывода в файл, и пересчет своих координат.

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

Т.е. в процессе флейма, здесь разобрались с постановкой задачи, определили состав того, что должно быть реализовано, определили требования к каждой составляющей, даже сделали прототип. Так чего не хватает? Документации? Ну вот и помог бы. 

Ну нельзя быть таким серьезным. Терпеть не могу форумы, где за шаг влево - шаг вправо от темы или за шутку юмора начинается расстрел на месте. А давление авторитетом нагугленных фраз и переход на личности - так это и совсем лишнее
PM MAIL   Вверх
cyrrus
Дата 15.5.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 7.5.2007

Репутация: нет
Всего: нет



хм.. 
1. Перевёл я правильно;
2. Препод если и дурак, то это скрывает (шутка);
3. Посмотрел остальные задачи и вот что в них:
 базовыи объект Окружение -> наследуемыи человек
              университет -> студент
                   климат -> деревья
4. Я изучаю не програмирование (факультет електроники у меня), С++ у нас как стороннии предмент, вот нада написать 2 проги (одну я написал) чтоб отчитатся.
 
PM MAIL   Вверх
Hurricane
Дата 15.5.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 10.4.2007

Репутация: 6
Всего: 9



Цитата(cyrrus @ 15.5.2007,  11:49)
3. Посмотрел остальные задачи и вот что в них:
 базовыи объект Окружение -> наследуемыи человек
              университет -> студент
                   климат -> деревья

Нда. Значит, качество образовательного процесса сильно ухудшилось по сравнению с тем временем, когда я учился. Маразм, да и только.

cyrrus, тогда остается надеяться только на то, что, независимо от маразма данного преподавателя, ты сам понимаешь, что отношения типа "университет-студент" или "океан-рыба" с наследованием не имеют ничего общего. Типичные контейнеры и их содержимое. А "климат-деревья" - это вообще непонятно, из какой области. Сочувствую.

Просто даже интересно, как ваш преподаватель сам представляет эти вещи.
PM MAIL   Вверх
cyrrus
Дата 15.5.2007, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 7.5.2007

Репутация: нет
Всего: нет



С климатом там: 
климат : температура воздуха, скорость верта, вложность
Деревья: высота, толшчина ствола, скорость роста.
Описать состояние дерева при пазных климатических условиях, на сколько дерево выростет за год, когда согнётся и треснет( при определённои скорости ветра)
В общем буду спрашиват  преподавателя что он таки имеет в виду.
PM MAIL   Вверх
zkv
Дата 16.5.2007, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



adLucem,  предлагаю продолжить тему во флейме, чтобы не засорять пустыми сообщениями эту ветку форума, есть желание - отписывайтесь ко мне в личку, либо открывайте тему сами.
PM MAIL   Вверх
cyrrus
Дата 21.5.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 7.5.2007

Репутация: нет
Всего: нет



В общем я вот так поправил:
Код

#include <math.h>
#include <iostream>
using namespace std;

typedef double  Vector3[3];

class COcean
{
protected:

    static Vector3 R0,R1; 

   static void GetV( double t, const Vector3& Point, Vector3& V )
   {
      V[0] = V[1] = V[2] =0.0;
   }
};

Vector3 COcean::R0={0.0,0.0,0.0};
Vector3 COcean::R1={10.0e6,10.0e6,10.0e6};



class CFish : public COcean

public:
// Задание начальной координаты рыбы
   void Init ( Vector3 _R0, Vector3 _V )
   {
      for( int i=0; i<3; i++ ) 
      {
         R[i] = _R0[i];
         Vf[i] = _V[i];
      }
   }
// Текущее задание извне текущей скорости рыбы
   void SetVf( double Vx, double Vy, double Vz )
   {
      Vf[0] = Vx; Vf[1] = Vy; Vf[2] = Vz;
   }
// Движение рыбы на очередной шаг
   void Motion( double t, double dt )
   {
// Полная скорость рыбы получается суммированием её собственной скорости и скорости течения океана
// в месте её нахождения
// (чтобы был хоть какой-то смысл в наследовании).
// Для развития: можно контролировать, чтобы рыба не выплывала за пределы океана (по суху аки по
// морю)
      int i;
      Vector3 Vs;
      GetV( t, R, Vs );
      for( i=0; i<3; i++ ) 
      {
         R[i] += ( Vs[i] + Vf[i] )*dt;
      }
   }
   
   void Vyvod (Vector3 R, Vector3 Vf)
    {
        cout<<"va "<<R<<endl;
    }

   Vector3 R,Vf; //Текущие координаты и собственная скорость рыбы
};


void main ( void )
{  Vector3 R, Vf;
   Vector3 R0={1000.0, 2000.0, 3000.0}, R1={3000.0, 2500.0, 3000.0};
   Vector3 V0={0.1,0.0,0.0}, V1={0.0,0.0,0.2};
   CFish f[2];
   f[0].Init( R0, V0 ); f[1].Init( R1, V1 );
   double t0=0.0,t1=10.0,dt=0.1,t;
// По ходу движения меняем скорость рыб и вычисляем их координаты
   for( t=t0; t<=t1; t+=dt )
   {
      if( fabs(t-3.0) < dt ) 
      {
// В этот момент первая рыба сделала резкий манёвр
         f[0].SetVf( 0.2, 0.0, -0.1);
      }
      for(int i=0; i<2; i++ )
      {
         f[i].Motion(t, dt);
         f[i].Vyvod(R,Vf);

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



но что такое R, R1, R0 и V, V0, V1?
И почему выводится в HEXe?
cout<<"va " , я так просто написал чтоб посмотрет как выводится.
PM MAIL   Вверх
Ln78
Дата 21.5.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



Цитата(cyrrus @  21.5.2007,  18:02 Найти цитируемый пост)
но что такое R, R1, R0 и V, V0, V1?
И почему выводится в HEXe?
cout<<"va " , я так просто написал чтоб посмотрет как выводится

Если в main-е, то что такое R и V (наверное, Vf), то не знаю, в моём примере их не было, непонятно, зачем ты их добавил. R0, R1, V0, V1 - начальные значения векторов координат и скорости рыб (просто для примера задал произвольные значения для двух рыб, можно было делать несколько рыб, здесь для примера я задал 2.
cout в твоём примере просто выводит адрес начального элемента массива из трёх чисел, а тебе, нужны сами числа, вместо

Цитата(cyrrus @  21.5.2007,  18:02 Найти цитируемый пост)
   
Код

void Vyvod (Vector3 R, Vector3 Vf)
    {
        cout<<"va "<<R<<endl;
    }


лучше что-то типа
void Vyvod (Vector3 R, Vector3 Vf)
    {
        cout<<"R "<<R[0]<<','<<R[1]<<','<<R[2]<<";  V "<<Vf[0]<<','<<Vf[1]<<','<<Vf[2]<<endl;
    }


Это сообщение отредактировал(а) Ln78 - 21.5.2007, 19:22
PM MAIL   Вверх
cyrrus
Дата 21.5.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 7.5.2007

Репутация: нет
Всего: нет



Ln78
Цитата

в моём примере их не было, непонятно, зачем ты их добавил.

просто я вместо TestFish написал main smile
PM MAIL   Вверх
Ln78
Дата 21.5.2007, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



cyrrus, так там строчки
Код

Vector3 R, Vf;

вроде как не было
PM MAIL   Вверх
cyrrus
Дата 21.5.2007, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 7.5.2007

Репутация: нет
Всего: нет



А., это я что то эксперементировал, так, нету у меня этои строчки smile
Код

#include <math.h>
#include <iostream>
using namespace std;

typedef double  Vector3[3];

class COcean
{
protected:

    static Vector3 R0,R1; 

   static void GetV( double t, const Vector3& Point, Vector3& V )
   {
      V[0] = V[1] = V[2] =0.0;
   }
};

Vector3 COcean::R0={0.0,0.0,0.0};
Vector3 COcean::R1={10.0e6,10.0e6,10.0e6};



class CFish : public COcean

public:
// Задание начальной координаты рыбы
   void Init ( Vector3 _R0, Vector3 _V )
   {
      for( int i=0; i<3; i++ ) 
      {
         R[i] = _R0[i];
         Vf[i] = _V[i];
      }
   }
// Текущее задание извне текущей скорости рыбы
   void SetVf( double Vx, double Vy, double Vz )
   {
      Vf[0] = Vx; Vf[1] = Vy; Vf[2] = Vz;
   }
// Движение рыбы на очередной шаг
   void Motion( double t, double dt )
   {
// Полная скорость рыбы получается суммированием её собственной скорости и скорости течения океана
// в месте её нахождения
// (чтобы был хоть какой-то смысл в наследовании).
// Для развития: можно контролировать, чтобы рыба не выплывала за пределы океана (по суху аки по
// морю)
      int i;
      Vector3 Vs;
      GetV( t, R, Vs );
      for( i=0; i<3; i++ ) 
      {
         R[i] += ( Vs[i] + Vf[i] )*dt;
      }
   }
   
   void Vyvod ()
   { 
        cout<<"R"<<R[0]<<','<<R[1]<<','<<R[2]<<";  V "<<Vf[0]<<','<<Vf[1]<<','<<Vf[2]<<endl;
        
    }

   Vector3 R,Vf; //Текущие координаты и собственная скорость рыбы
};


void main ( void )
{  
   Vector3 R0={1000.0, 2000.0, 3000.0}, R1={3000.0, 2500.0, 3000.0};
   Vector3 V0={0.1,0.0,0.0}, V1={0.0,0.0,0.2};
   CFish f[2];
   f[0].Init( R0, V0 ); f[1].Init( R1, V1 );
   double t0=0.0,t1=10.0,dt=0.1,t;
// По ходу движения меняем скорость рыб и вычисляем их координаты
   for( t=t0; t<=t1; t+=dt )
   {
      if( fabs(t-3.0) < dt ) 
      {
// В этот момент первая рыба сделала резкий манёвр
         f[0].SetVf( 0.2, 0.0, -0.1);
      }
      for(int i=0; i<2; i++ )
      {
         f[i].Motion(t, dt);
         f[i].Vyvod();

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

};


PM MAIL   Вверх
Ln78
Дата 22.5.2007, 04:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



cyrrus, комментарии там рассчитаны были на тебя, а не на преподавателя. Так, что нужно добавить вывод на печать - уже неактуален, так как ты это сделал. Другой: 
Цитата(cyrrus @  21.5.2007,  20:04 Найти цитируемый пост)
// Для развития: можно контролировать, чтобы рыба не выплывала за пределы океана (по суху аки по
// морю)

означает, что тебе желательно поставить ограничение, и проверить: поместить какую-нибудь рыбу недалеко от границы и задать скорость движения в сторону границы. Контроль можно делать совсем просто: если какая-либо координата вышла за допустимый диапазон (определяемый соответствующими координатами векторов COcean::R0 и COcean::R1, задать значением этой координаты. Метод GetV у океана попробуй написать тоже какой-нибудь поинтереснее, но чтобы на границах скорость была нулевой, а вне - хотя бы линейными функциями, можно кусочно-линейными.
PM MAIL   Вверх
cyrrus
Дата 22.5.2007, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 7.5.2007

Репутация: нет
Всего: нет



Ln78, ну допустим, но если вернутся к выводу результатов, в этои моеи версии выводится около ста (100) строк smile , в общем я на этом и застрял. За 
Цитата

Для развития: можно контролировать, чтобы рыба не выплывала за пределы океана (по суху аки по
// морю)
 еще не брался.
PM MAIL   Вверх
v_nikolaev
Дата 24.5.2007, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 6.5.2007

Репутация: нет
Всего: нет



Цитата(Hurricane @ 15.5.2007,  17:29)
adLucem, ну и чего буянишь? С постановкой задачи уже все выяснили:

Цитата

...
1.Объект океана имеет такие данные:
...

Т.е. речь идет об объекте океана, это совсем не то, что весь океан. Океан - это контейнер, хранящий и обрабатывающий объекты океана. А вот объект океана - это может быть просто объем воды, это может быть скала, это может быть пароход, это может быть рыба-кит. Каждый из них обладает набором собственных свойств (скорость течения, собственная скорость, возможно - координаты, способен ли объект перемещаться). И собственной реализацией методов отрисовки на экране, вывода в файл, и пересчет своих координат.

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

Т.е. в процессе флейма, здесь разобрались с постановкой задачи, определили состав того, что должно быть реализовано, определили требования к каждой составляющей, даже сделали прототип. Так чего не хватает? Документации? Ну вот и помог бы. 

Ну нельзя быть таким серьезным. Терпеть не могу форумы, где за шаг влево - шаг вправо от темы или за шутку юмора начинается расстрел на месте. А давление авторитетом нагугленных фраз и переход на личности - так это и совсем лишнее

там у объекта океана имеются ещё его координаты - это кубический объём воды.
плюс к тому, если б твоё рассуждение было верным, то, наверное, в задачи присутствовали бы и другие "объекты океана"
добавим ещё то, что сказано топикстартером про другие задачи.



так что достаточно статического члена объекта океана - если он единственнен, или указателя на него и т.п.
нельзя всё-таки наследование где попало использовать, тем более, что тут как раз тот случай, когда следует использовать аггрегацию, ведь тут у нас не обобщение, не расширение, не ограничение и тп, а просто использование полей объекта... неужели где-то в программе рыбка будет играть роль океана?

Добавлено через 2 минуты и 31 секунду
Цитата(cyrrus @ 22.5.2007,  08:43)
Ln78, ну допустим, но если вернутся к выводу результатов, в этои моеи версии выводится около ста (100) строк smile , в общем я на этом и застрял. За 
Цитата

Для развития: можно контролировать, чтобы рыба не выплывала за пределы океана (по суху аки по
// морю)
 еще не брался.

мне кажется, что координаты океана только для того и даны, что рыба за их пределы не должна выплывать то есть это изначально в задаче присутствует.
PM MAIL   Вверх
Ln78
Дата 24.5.2007, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



v_nikolaev, мы с cyrrus уже об этом договорились (в частом порядке) 
PM MAIL   Вверх
Promitheus
Дата 24.5.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.3.2007

Репутация: 1
Всего: 1



А если такой варинат:

у океана есть x,y,z - начальные координаты в некой системе отсчета
и xd,yd,zd - возможные перемещения по трём осям скажем у окена, 2-3% процента от габаритов, а у рыбки габариты окена т.к. наследует у класса океан такие свойства как габариты; считаем, что берега нет, только в окенане плавает и выкинуть её оттуда нельзя.

Плюс еще само собой ваши задумки про скорость.

Если повторяюсь, звиняйте.



Это сообщение отредактировал(а) Promitheus - 24.5.2007, 17:19
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0953 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.