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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> шаблоны функций, шаблоны функций 
:(
    Опции темы
irvis
Дата 18.5.2006, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

template <typename T1, typename T2> тут не знаю lin(T1 a, T2 b)
{
     тут не знаю x;
     x=-(b)/a;
     return x;
}

помогите разобраться как сдесь быть 
PM MAIL   Вверх
likehood
Дата 18.5.2006, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


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

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



Странная задачка для шаблонов функций. Ты хочешь, чтобы x, a и b могли иметь три разных типа? Не совсем ясно зачем это надо.
Главная проблема в том, что тип возвращаемого значения нельзя вывести из параметров фукции. В этом случае тип можно задать явно при вызове функции, если не ошибаюсь вот так:
Код

template <typename T1, typename T2, typename T3> T3 lin(T1 a, T2 b)    
{    
     T3 x;    
     x=-(b)/a;    
     return x;    
}

void main()
{
  long double x = lin<long double>(3.14, 12L);
}


Те типы, которые нельзя вывести из параметров задаются при вызове функции (остальные типы задавать не надо). 
PM MAIL   Вверх
irvis
Дата 18.5.2006, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



"а" и "b" вводяться пользователем, как же я могу задавать тип функции если я его не знаю.
так как мне быть?
задача звучит так:
Написать перегруженные шаблоны функций для нахождения корней линейного (a*x + b = 0) уравнения. Замечание: в функции передаются коэффициенты уравнений. 
 
PM MAIL   Вверх
Fazil6
Дата 18.5.2006, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

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



так а разве нельзя для всех случаев принять что для любых  a и b функция возвращает double?
Код

template <typename T1, typename T2> long double lin(T1 a, T2 b)    
{    
     long double x;    
     x=-(b)/a;    
     return x;    
}
 
и не совсем понятно зачем здесь перегрузка. 
PM MAIL   Вверх
likehood
Дата 18.5.2006, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


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

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



напиши код как ты собираешся использовать эту функцию 
PM MAIL   Вверх
_hunter
Дата 18.5.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



считай что это даблы. в чем проблема? 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
likehood
Дата 18.5.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


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

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



если что, в своем предыдущем посте я обращался к irvis'у. 
PM MAIL   Вверх
irvis
Дата 18.5.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



все правильно для все случаев пишу long double. спасибо 
PM MAIL   Вверх
irvis
Дата 18.5.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



и еще
Код

template <typename T1, typename T2>
long double  lin(T1 a, T2 b)    
{ 
     T1 a;
     T2 b;
     cout<<"a=";
     cin>>a;
     cout<<endl;
     cout<<"b=";
     cin>>b;
     cout<<endl;
     long double x;    
     x=-(b)/a;    
     return x;    
}

void main()
{
    
    cout<<lin(a, b);
    cout<<endl;
}


мне компилятор пишет 
'a' : undeclared identifier
'b' : undeclared identifier
не понимаю уже как быть

Добавлено @ 11:22 
за рание прошу извинения за мелочевые вопросы. я только начала изучать 
PM MAIL   Вверх
bsa
Дата 18.5.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



А зачем ты два раза определяешь a и b?!? Шаблонные функции от обычных отличаются только наличием перед их заголовком строки template:
Код
template <typename T1, typename T2>    
long double  lin(T1 a, T2 b)     
{    
     cout<<"a=";    
     cin>>a;    
     cout<<endl;    
     cout<<"b=";    
     cin>>b;    
     cout<<endl;    
     long double x;     
     x=-(b)/a;     
     return x;     
}

А почему нельзя использовать такую конструкцию:
Код
template<typename T>
T lin( T a, T b ) {
}
 
PM   Вверх
Fazil6
Дата 18.5.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

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



Цитата

А почему нельзя использовать такую конструкцию

зачем? типы а и b ведь не обязятельно одинаковые. И возврат, у нас же не сложение, а деление.
 
PM MAIL   Вверх
irvis
Дата 18.5.2006, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да что же это такое 
Код

template <typename T1, typename T2>
long double  lin(T1 a, T2 b)    
{ 
     cout<<"a=";
     cin>>a;
     cout<<endl;
     cout<<"b=";
     cin>>b;
     cout<<endl;
     long double x;    
     x=-(b)/a;    
     return x;    
}

void main()
{
    
    cout<<lin(a, b);
    cout<<endl;
}

так тоже не работет.
пишет тоже
'a' : undeclared identifier
'b' : undeclared identifier
 smile

Добавлено @ 11:56 
а такую конструкцию нельзя потомучто 'a'  и 'b' разные 
PM MAIL   Вверх
irvis
Дата 18.5.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну я о 
Код

template<typename T>
T lin( T a, T b ) {
}
 
PM MAIL   Вверх
likehood
Дата 18.5.2006, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


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

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



Ты в main'е не объявил переменные a и b. Надо писать так:
Код

void main()    
{
    int a=10, b=5;
    cout<<lin(a, b);    
    cout<<endl;    
}
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1833 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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