Форум программистов, компьютерный форум CyberForum.ru

Написать функцию min с переменным числом параметров - C++

Восстановить пароль Регистрация
 
Folayt
 Аватар для Folayt
1 / 2 / 1
Регистрация: 25.10.2012
Сообщений: 107
05.02.2014, 19:23     Написать функцию min с переменным числом параметров #1
Написать функцию min с переменным числом параметров, которая находит минимальное из чисел типа int или из чисел типа double, тип параметров определяется с помощью первого параметра функции. Написать вызываю-щую функцию main, которая обращается к функции min не менее трех раз с количеством параметров 5, 10, 12.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2014, 19:23     Написать функцию min с переменным числом параметров
Посмотрите здесь:

C++ Написать функцию со сменным числом параметров
C++ Массивы в функцию с переменным числом параметров
C++ Передать в функцию с переменным числом параметров УКАЗАТЕЛИ на другие функции
Написать функцию kvadr с переменным числом параметров, которая определяет количество чисел, являющихся точными квадратами (2, 4, 9, 16,. . . ) типа in C++
Реализовать функцию с переменным числом параметров C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
05.02.2014, 19:38     Написать функцию min с переменным числом параметров #2
Если есть поддержка С++11, то можно сразу стандартным функционалом воспользоваться:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <algorithm>
 
int main()
{
   std::cout << "Min element: -> " << std::min({5,7,9,3,6,7,1,6}) << "\n";
   std::cout << "Min element: -> " << std::min({1.2, 4.6, 7.03, 1.009, 0.6}) << "\n";
 
   return 0;
}
Добавлено через 1 минуту
Если хочется писать самому функцию, то можно посмотреть сюда: Variadic functions
Folayt
 Аватар для Folayt
1 / 2 / 1
Регистрация: 25.10.2012
Сообщений: 107
05.02.2014, 21:59  [ТС]     Написать функцию min с переменным числом параметров #3
у меня есть код, только он некорректно работает, тоесть вывод то есть то нет его, либо выводит число совсем не понятно откуда взявшееся.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <cstdlib>
#include <cstdarg>
#include <iostream.h>
#include <conio.h>
namespace 
 {
    template<unsigned int Count, typename T>
    const T& min(const T& first, ...)
    {
    T result = first;
    T crt;
 
    va_list v1;
    va_start(v1, first);
    for(unsigned int i = 0; i < Count - 1; ++i)
    {
        crt = va_arg(v1, T);
        if(crt < result)
            result = crt;
        }
        va_end(v1);
 
        return result;
    }
}
    int main()
{
    int i5[5] = {1, 2 ,3 ,4, 5 };
    double d10[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    double f12[12]  = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
 
 
    
    int mi = min<5>(i5[0], i5[1], i5[2], i5[3], i5[4]);
    double md = min<10>(d10[0], d10[1], d10[2], d10[3], d10[4], d10[5], d10[6], d10[7], d10[8], d10[9]);
    double mf = min<12>(f12[0], f12[1], f12[2], f12[3], f12[4], f12[5], f12[6], f12[7], f12[8], f12[9], f12[10], f12[11]);
    cout<min;
    cout<<"\n";
    getch(); 
    return 0;
}
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
05.02.2014, 22:45     Написать функцию min с переменным числом параметров #4
Я бы так написал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <cstdarg>
 
template<typename T>
T min(int count, ...)
{
   va_list args;
   va_start(args, count);
 
   T smallest = va_arg(args, T);
   for (int i = 0; i < count-1; ++i)
   {
      T next = va_arg(args, T);
      if (smallest > next) smallest = next;
   }
 
   va_end(args);
   return smallest;
}
 
int main()
{
   std::cout << min<int>(10, 3, 7, 9, 6, 2, 9, 8, 3, 8, 10);
 
   return 0;
}
DrOffset
6449 / 3823 / 885
Регистрация: 30.01.2014
Сообщений: 6,618
06.02.2014, 00:05     Написать функцию min с переменным числом параметров #5
Если доступен C++11, то я бы сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
template <typename T>
inline T min(T const& arg0)
{
    return arg0;
}
template <typename T, typename ...Args>
inline T min(T const & arg0, T const & arg1, Args const &... args)
{
    return min(arg0 < arg1 ? arg0 : arg1, args...);
}
 
int main()
{
    std::cout << min(1, 2, -1, 4, -10) << std::endl;
    return 0;
}
Folayt
 Аватар для Folayt
1 / 2 / 1
Регистрация: 25.10.2012
Сообщений: 107
06.02.2014, 09:48  [ТС]     Написать функцию min с переменным числом параметров #6
Цитата Сообщение от DiffEreD Посмотреть сообщение
Я бы так написал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <cstdarg>
 
template<typename T>
T min(int count, ...)
{
   va_list args;
   va_start(args, count);
 
   T smallest = va_arg(args, T);
   for (int i = 0; i < count-1; ++i)
   {
      T next = va_arg(args, T);
      if (smallest > next) smallest = next;
   }
 
   va_end(args);
   return smallest;
}
 
int main()
{
   std::cout << min<int>(10, 3, 7, 9, 6, 2, 9, 8, 3, 8, 10);
 
   return 0;
}
если мне нужно чтобы находило минимальные с 3 мя параметрами, допустимо ли такое написание
C++
1
2
std::cout << min<double>(12,11,10, 3, 7, 9, 6, 2, 9, 8, 3, 8, 10, 11, 12);
std::cout << min<>(10.1, 3.1, 7, 9.1, 6.1, 2, 9.1, 8, 3, 8, 10);
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
06.02.2014, 11:52     Написать функцию min с переменным числом параметров #7
Folayt, с разными типами не просто сделать. За основу я бы взял код DrOffset, а дальше надо думать. Проблема состоит в том что надо будет определять возвращаемый тип в зависимости от условия сравнения. Пока идей нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2014, 12:00     Написать функцию min с переменным числом параметров
Еще ссылки по теме:

Напишите функцию с переменным числом параметров (среднее гармоническое элементов числового ряда) C++
В функцию с переменным, числом параметров передать массивы целых чисел C++
Написать функцию mult с переменным числом параметров, которая находит произведение чисел типа float C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.02.2014, 12:00     Написать функцию min с переменным числом параметров #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <type_traits>
 
template<typename T>
T min(const T& arg)
{
   return arg;
}
 
template<typename T, typename T2, typename... Args>
typename std::common_type<T, T2, Args...>::type min(const T& f, const T2& s, const Args&... args)
{
   return min(f < s ? f : s, args...);
}
 
int main()
{
   std::cout << min(10.1, 3.1, 7, 9.1, 6.1, 2, 9.1, 8, 3, 8, 10) << std::endl;
   std::cout << min(2, 5.0, 10.1, 0.1, 8, 12) << std::endl;
}
Yandex
Объявления
06.02.2014, 12:00     Написать функцию min с переменным числом параметров
Ответ Создать тему
Опции темы

Текущее время: 23:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru