Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » перегруженные шаблоны

Ответить
Настройки темы
перегруженные шаблоны
papam


Сообщения: n/a

Профиль | Цитировать


Как написать перегруженные шаблоны функций для нахождения корней линейного (а*х + в = 0) и квадратного (а * (х*х) + в * х + с = 0) уравнений.
Замечание: в функции передаются коэффициенты уравнений.

Отправлено: 12:36, 27-11-2005

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


А смысл писать шаблон? Перегрузной гораздо правильней получается.
Код: Выделить весь код
// шаблон
template<typename X> std::vector<X> polynom2_roots(X a X b, X c)
{
    std::vector<X> result;

    X det = b*b - 4*a*c;

    if (X()<=det)
    {
          det = std::sqrt(det);
          result.push_back((det-b)/(a*2));

          if (X()<det)
          {
                result.push_back((-det-b)/(a*2));
          }
    }

    return result;
}

template<typename X> std::vector<std::complex<X> > polynom2_roots(std::complex<X> a std::complex<X> b, std::complex<X> c)
{
    std::vector<std::complex<X> > result;

    X det = std::sqrt(b*b - 4*a*c);

    result.push_back((-b+det)/(a*2));

    if (X()!=det)
    {
           result.push_back((-det-b)/(a*2));
    }

    return result;
}

// При компиляции могут возникать неопределённости при выборе параметров шаблона.
// Если убрать все template<...> и заменить X на double, мне кажется получится лучше.
// Если задача стоит математическая (не сугубо прикладная), то использование std::complex<double>
// просто идеально для машин P-4
Если не нужно делать выбор более подходящего алгоритма для решения линейной и квадратичной задачи, то можно задать параметры по умолчанию и поменять порядок аргументов:
Код: Выделить весь код
template<...> ... polynom2_roots(X c, X b, X a=X());
Для выбора алгоритма, внутри можно добавить:
Код: Выделить весь код
if (a==X()) // линейное уравнение
else // квадратичное
Можно сделать так, чтобы выбор алгоритма выполнялся статически (тогда если вдруг по ходу выполнения программы окажется что a=0, будет всё равно решаться полное уравнение).
[code]
template<...> ... polynom2_roots(X c, X b, X a); // квадратичное
template<...> ... polynom2_roots(X c, X b); // линейное
[code]

Последний раз редактировалось pva, 28-11-2005 в 11:44.


Отправлено: 11:29, 28-11-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » перегруженные шаблоны

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Шаблоны и исходники проекта prokazzza Проект WinStyle 26 16-12-2009 23:39
Административные шаблоны Dr.FRECH Microsoft Windows NT/2000/2003 0 18-10-2007 09:38
MSFT SQL Server - Шаблоны отчетов dzhserv Программирование и базы данных 1 04-09-2007 17:51
Шаблоны ivank Вебмастеру 12 06-06-2006 10:54
Шаблоны сайтов.... Guest Вебмастеру 2 25-05-2004 17:55




 
Переход