Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запутался с наследованием и полиморфизмом 
:(
    Опции темы
mes
Дата 10.11.2010, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Нитонисе @  10.11.2010,  00:28 Найти цитируемый пост)
А вот это интересно) Что, по вашему, является грязью в моей функции расчета усилий?)

т.е Вы считаете блоки внутри функций у вас написаны хорошо и ясно ?




--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 10.11.2010, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mes @  10.11.2010,  01:31 Найти цитируемый пост)
т.е Вы считаете блоки внутри функций у вас написаны хорошо и ясно ?

В этой функции я вижу только один недостаток - она большая. Как вы оформляете блоки внутри функций, чтобы бы было "хорошо и ясно"?)
PM MAIL   Вверх
mes
Дата 10.11.2010, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Нитонисе @  10.11.2010,  00:28 Найти цитируемый пост)
общем-то не имеет смысла обсуждать этот вопрос дальше, так как для того чтобы вы поняли о чем идет речь - вам придется освоить профессию расчетчика строительных конструкций. 

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

Добавлено @ 01:36
Цитата(Нитонисе @  10.11.2010,  00:34 Найти цитируемый пост)
 Как вы оформляете блоки внутри функций, чтобы бы было "хорошо и ясно"?) 

меня не смущает размер самой функции.. (исправить это дело 5ти минут)

но возьмем любой блок
Цитата(Нитонисе @  9.11.2010,  18:25 Найти цитируемый пост)
      if (LinearLoad *ll = dynamic_cast<LinearLoad*>(l))
      {
        float value = ll->getValue();
        m1 = - value*length*length/2;
        m2 = 0;
        report = 1;

это самый простой и то выглядит, глаз сломать можно..

Добавлено @ 01:40
ну я так понимаю.. вы не понимаете как исправить ситуацию..
ну давайте вместе.. я буду писать условия, вы код, а я подправлять.. посмотрим что получится..

для начала возьмем самое простое, линейную нагрузку и жесткие опоры..

Добавлено @ 01:42
только без непонятных цифр, как например 12.. если это констатнта, значит давайте соответсвующее имя..


Это сообщение отредактировал(а) mes - 10.11.2010, 02:20


--------------------
PM MAIL WWW   Вверх
mes
Дата 10.11.2010, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



что то я не дождусь.. сделаю  первый шаг :

Код

//  linear_load, ridgit & ridgit
m1 = 
  m2 = load.value * pow(bar.length, 2) * rr_rate; 
rr_rate -  RidgitRidgit коэфициент. (1/12)

для двух других видов опор, будет меняться лишь коэфициент ?
тогда я так понимаю будет :
Код

m = load.value * pow(bar.length, 2);
m1 = m * rate1;
m2 = m * rate2;


Это сообщение отредактировал(а) mes - 10.11.2010, 02:15


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 10.11.2010, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mes @  10.11.2010,  01:34 Найти цитируемый пост)
это самый простой и то выглядит, глаз сломать можно.

Вы так и не написали вариант, когда "глаз не ломается"))

Цитата(mes @  10.11.2010,  01:58 Найти цитируемый пост)
rr_rate -  RidgitRidgit коэфициент. (1/12)

Ну, если вам понятнее символьный язык - ваше дело, мне понятнее цифры) они однозначны, да и код короче, нагляднее и привычнее (с точки зрения реальных расчетов).

Цитата(mes @  10.11.2010,  01:58 Найти цитируемый пост)
для двух других видов опор, будет меняться лишь коэфициент ?тогда я так понимаю будет :

К чему это приведет? К запутанной структуре функции. Сейчас в ней все прозрачно  - идет проверка типов опор и для уникальной пары четко прописаны опорные усилия. В вашем же случае можно сократить код, но он потеряет наглядность... дело вкуса. Мне видится оптимизация только в выделении отдельных блоков в отдельные же функции.

Это сообщение отредактировал(а) Нитонисе - 10.11.2010, 02:22
PM MAIL   Вверх
mes
Дата 10.11.2010, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Нитонисе @  10.11.2010,  01:22 Найти цитируемый пост)
Ну, если вам понятнее символьный язык - ваше дело, мне понятнее цифры) они однозначны, да и код короче, нагляднее и привычнее (с точки зрения реальных расчетов).

почитайте про антипаттерн "магические числа"

Добавлено через 1 минуту и 18 секунд
Цитата(Нитонисе @  10.11.2010,  01:22 Найти цитируемый пост)
Вы так и не написали вариант, когда "глаз не ломается"))

для этого я должен прдставить картину взаимосвязей, а ее Вы пока не описали smile

Добавлено через 3 минуты и 36 секунд
Цитата(Нитонисе @  10.11.2010,  01:22 Найти цитируемый пост)
 Сейчас в ней все прозрачно  - идет проверка типов опор и для уникальной пары четко прописаны опорные усилия.

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



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 10.11.2010, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mes @  10.11.2010,  02:31 Найти цитируемый пост)
почитайте про антипаттерн "магические числа"

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

Второй же сомнительный плюс - уменьшение количества кода путем запутывания его структуры. Несмотря на то, что вы нашли схожие выражения в разных формулах - это не даст дивидендов, потому что все равно эти выражение должны быть включены в свои разделы. Если попытаться их объединить, то получатся сложные и неочевидные с первого взгляда конструкции. Имею ввиду в первую очередь условия условных переходов.
PM MAIL   Вверх
mes
Дата 10.11.2010, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Нитонисе @  10.11.2010,  01:39 Найти цитируемый пост)
Вы просто не понимаете природу этих цифр,

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

Цитата(Нитонисе @  10.11.2010,  01:39 Найти цитируемый пост)
Второй же сомнительный плюс - уменьшение количества кода путем запутывания его структуры. 

мы пока не запутываем, а разбираемся.. потому что условия пока не понятны.. но потихоньку просветляется.. smile



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 10.11.2010, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mes @  10.11.2010,  02:47 Найти цитируемый пост)
мы пока не запутываем, а разбираемся.. потому что условия пока не понятны.. но потихоньку просветляется.. 

Вот общая конструкция моей функции
Код

если левая опора - жесткая
{
    если правая опора - жесткая
    {
        если нагрузка линейная
        {
            вычисляем опорные усилия 
        }
        если нагрузка линейная на чсати балки
        {
            вычисляем опорные усилия 
        } 
        если нагрузка точечная
        {
            вычисляем опорные усилия 
        }
    }
    если правая опора - шарнир
    {
        если нагрузка линейная
        {
            вычисляем опорные усилия 
        }
        если нагрузка линейная на чсати балки
        {
            вычисляем опорные усилия 
        } 
        если нагрузка точечная
        {
            вычисляем опорные усилия 
        }
    }
    если правая опора - консоль
    {
        если нагрузка линейная
        {
            вычисляем опорные усилия 
        }
        если нагрузка линейная на чсати балки
        {
            вычисляем опорные усилия 
        } 
        если нагрузка точечная
        {
            вычисляем опорные усилия 
        }
    }
}

если левая опора - шарнир
{
    если правая опора - жесткая
    {
        если нагрузка линейная
        {
            вычисляем опорные усилия 
        }
        если нагрузка линейная на чсати балки
        {
            вычисляем опорные усилия 
        } 
        если нагрузка точечная
        {
            вычисляем опорные усилия 
        }
    }
    если правая опора - шарнир
    {
        если нагрузка линейная
        {
            вычисляем опорные усилия 
        }
        если нагрузка линейная на чсати балки
        {
            вычисляем опорные усилия 
        } 
        если нагрузка точечная
        {
            вычисляем опорные усилия 
        }
    }
}

если левая опора - консоль
{
    если правая опора - жесткая
    {
        если нагрузка линейная
        {
            вычисляем опорные усилия 
        }
        если нагрузка линейная на чсати балки
        {
            вычисляем опорные усилия 
        } 
        если нагрузка точечная
        {
            вычисляем опорные усилия 
        }
    }
}

Я тут не показал еще переменную report, которую возвращает функция. Она равна 0 - если вычислить усилия не удалось и 1 - если удалось.
Конструкция очень прямая - тупой перебор всех возможных сочетаний нагрузок и типов опор.
Попытайтесь упростить общую конструкцию на основе выявленных вами математических закономерностей. Я даже подскажу их вам больше - везде, где опора шарнир (Hinge), либо консоль (Free) соответствующее усилие всегда равно нулю.


PM MAIL   Вверх
xvr
Дата 10.11.2010, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Нитонисе @  10.11.2010,  09:53 Найти цитируемый пост)
Вот общая конструкция моей функции
Ваша конструкция - написанный вручную статический диспетчер для вызова Мультиметода. Если вам она кажется логичной (и функции внутри совершенными) то мой совет - забейте на ООП и пишите в процедурном стиле  smile 

PM MAIL   Вверх
Нитонисе
Дата 10.11.2010, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(xvr @  10.11.2010,  10:26 Найти цитируемый пост)
то мой совет - забейте на ООП и пишите в процедурном стиле 

На это я пойтить не могу!  smile 

Только я не совсем понял какое отношение имеет ООП к логике моей функции?

Это сообщение отредактировал(а) Нитонисе - 10.11.2010, 10:33
PM MAIL   Вверх
mes
Дата 10.11.2010, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Нитонисе @  10.11.2010,  08:53 Найти цитируемый пост)
Вот общая конструкция моей функции

как раз эта часть и так понятна.. 
smile

Цитата(Нитонисе @  10.11.2010,  08:53 Найти цитируемый пост)
 Я даже подскажу их вам больше - везде, где опора шарнир (Hinge), либо консоль (Free) соответствующее усилие всегда равно нулю.

вот ее надо было еще на прошлой странице озвучить smile 

Цитата(Нитонисе @  10.11.2010,  08:53 Найти цитируемый пост)
Попытайтесь упростить общую конструкцию на основе выявленных вами математических закономерностей. 

почему математических ? вполне возможно табличных  закономерностей.

Добавлено @ 13:18
итак для начала определим функции расчетники :
Код

// r- riged, h-hince, f-free, l-linear, p-partlinear, d-dot , _ - any
namespace ns_calc_moment {
float r_l (size_t l, float v, size_t k)  { return v*l*l/k; } // helper
 
float rrl (size_t l, float v) { return r_l(l,v); }
float rhl (..) ..
float rfl (..) ..
float rrp (..) ..
float rhp (..) ..
float rfp (..) ..
float rrd (..) ..
float rhd (..) ..
float rfd (..) ..

}



Это сообщение отредактировал(а) mes - 10.11.2010, 13:19


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 10.11.2010, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mes @  10.11.2010,  13:12 Найти цитируемый пост)
итак для начала определим функции расчетники :

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


любитель
****


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

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



думаю Вам удобнее суппорт ассоцировать напрямую с ид (т.е. или самого сделать целочисленной константой/енумом или ее возврающим )
тогда база будет выглядить примерно так 
Код


struct linear_load;
struct partlinear_load;
struct dot_load;
struct i_load_visitor
{
    virtual void visit (linear_load&) =0;
    virtual void visit (partlinear_load&) =0;
    virtual void visit (dot_load&) =0;    
}; 
struct i_load 
{
   virtual ~i_load () {}
   virtual void accept (i_load_visitor&) =0;   
};

struct linear_load : i_load
{
   virtual void accept (i_load_visitor& v) { v.visit(*this); }
};
struct partlinear_load : i_load
{
   virtual void accept (i_load_visitor& v) { v.visit(*this); }
};
struct dot_load : i_load
{
   virtual void accept (i_load_visitor& v) { v.visit(*this); }
};

struct construction
{
   i_load * load;
   size_t   length;
   size_t   support[2];   
   float    moment[2];
   
   void calc_moments ();
   
};

void  construction::calc_moments ()
{   

   struct load_visitor : i_load_visitor
   { 
   // !!
   };
}


Цитата(Нитонисе @  10.11.2010,  13:11 Найти цитируемый пост)
Если честно, то непонятно что вы такое понаписали и что вы ожидаете вместо точек. 

в скобках необходимые параметры, а в конце реализация.. 
Код

например
float rrd ( size_t l /* length */
          , size_t x /* load_x */
          , float v  /* load_value */ ) 
{ 
     ну и тут расчет из вашей основной функции.. 
}


Добавлено @ 14:20
Цитата(mes @  10.11.2010,  13:14 Найти цитируемый пост)
   // !!

тут будет связь с расчетниками... чуть позже напишу. 


Это сообщение отредактировал(а) mes - 10.11.2010, 14:28


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 10.11.2010, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mes @  10.11.2010,  14:14 Найти цитируемый пост)
тут будет связь с расчетниками... чуть позже напишу. 

Напишите. Общую задумку я пока не понимаю.
PM MAIL   Вверх
Страницы: (8) Все « Первая ... 4 5 [6] 7 8 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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