Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
_Loader_
6 / 6 / 1
Регистрация: 18.04.2012
Сообщений: 92
#1

Функция max - C++

22.04.2013, 17:51. Просмотров 1088. Ответов 16
Метки нет (Все метки)

Здравствуйте, надо написать функцию которая выводит максимальное целое число из цепочки чисел. Например МАХ2 (2,3,7)выдает 7.
Можно ли сделать так чтобы входным параметром в функцию было количество чисел?
Или при вводе пользователем некоторого количества чисел например 10 чисел они передавались строкой в функцию там разбирались(каждое число вводится через пробел) и находился максимум из этого?
Буду рад любой помощи.

Возможно по такому принципу?
C++
1
2
3
4
 int max (int a, int b, int c)
      {
          return max( max(a,b), c);
      }

http://www.cyberforum.ru/cpp-beginners/thread2203657.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2013, 17:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Функция max (C++):

Даны действительные числа A, B, C. Получить max(a,a+b)+max(a,b+c,a+b) \ 1+max(ab,bc)+max(a+bc,15,ac)
Всем привет)Помогите пожалуйста написать в С++ Даны действительные числа A, B,...

Функция max
Здравствуйте, не могу написать функцию для поиска максимально числа. Нужно...

Задача для курсовой: определить значение z=max(a, 2b)*max(2a-b,b), где max(x, y)-максимальные из чисел х и у
Определить значение z=max(a, 2b)*max(2a-b,b), где max(x, y)-максимальные из...

Функция max и min
Скажите, пожалуйста, почему на трёх данных не работает функция max(min)? С...

Определить значение Z=max(a,2b)*max(2a-b,b), где max(x,y)-максимальное из чисел x,y
Помогите решить задачу: Определить значение Z=max(a,2b)*max(2a-b,b), где...

16
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 18:03 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdio>
#include <cstdarg>
 
int my_max( int n, ... ) {
    int m = 0;
    va_list l;
    if ( n > 0 ) {
        va_start( l, n );
        for ( ; n > 0; n-- ) {
            int v = va_arg( l, int );
            if ( v > m ) m = v;
        }
        va_end( l );
    }
    return m;
}
 
int main()
{
    printf( "%d\n", my_max( 3, 1,3,5 ) );
    printf( "%d\n", my_max( 5, 7,1,9,3,5 ) );
    return 0;
}
1
_Loader_
6 / 6 / 1
Регистрация: 18.04.2012
Сообщений: 92
22.04.2013, 18:20  [ТС] #3
Спасибо, но как я понял int n является количеством чисел в последовательности, а мне надо что бы количество чисел было любое без ее указания(
0
DiffEreD
1441 / 778 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
22.04.2013, 18:24 #4
Есть же стандартная функция (вот ее пример):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template<class ForwardIt>
ForwardIt max_element(ForwardIt first, ForwardIt last)
{
    if (first == last) {
        return last;
    }
    ForwardIt largest = first;
    ++first;
    for (; first != last; ++first) {
        if (*largest < *first) {
            largest = first;
        }
    }
    return largest;
}
И пример пользования:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <algorithm>
#include <iterator>
 
int main()
{
    std::cout<<"Enter numbers (any letter to stop):";
    std::cout<<"Max elem is: "
             <<*std::max_element(std::istream_iterator<int>(std::cin), std::istream_iterator<int>())<<"\n";
    
    std::cout<<"\n";
    return 0;
}
1
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 18:24 #5
Только если сделать много перегрузок функции. По-другому никак.
0
_Loader_
6 / 6 / 1
Регистрация: 18.04.2012
Сообщений: 92
22.04.2013, 18:40  [ТС] #6
yuron_477, я понял но вот все равно нужна нецифра что бы остановить, а мне бы надо чтобы одни цифры

lazybiz, много перегрузок это для каждого существующего int n ? от 0 и до ууууууууу...? 0_0
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
22.04.2013, 18:49 #7
_Loader_, плюсы не заточены на такое использование. Если нужно безопасно передавать любое кол-во параметров, оберните их в какой-нибудь std::vector и передавайте.
1
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 18:50 #8
_Loader_, А тебе надо чтобы функция принимала yyyyyyyyy параметров? А вообще я вижу эффективность в данном подходе только если количество параметров будет ~ не более 5.
1
_Loader_
6 / 6 / 1
Регистрация: 18.04.2012
Сообщений: 92
22.04.2013, 18:55  [ТС] #9
Tulosba, а как сделать через std::vector???

lazybiz, да я понимаю но препод сказал так сделать вот сижу голову ломаю(((
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 19:01 #10
Ха, я так и думал что это все-таки возможно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
template < typename T >
inline const T& largest_of( const T& a, const T& b )
{
    return a > b ? a : b;
}
 
template < typename T, typename ...REST >
inline const T& largest_of( const T& first, const REST&... rest... )
{
    return largest_of( first, largest_of( rest... ) );
}
 
int main()
{
    std::cout << largest_of( 9, 1, 7 ) << '\n' ;
    std::cout << largest_of( 1, 9, 2, 8, 3, 7, 4, 6, 5 ) << '\n' ;
}
Но думаю что препод тебя с таким кодом живым не отпустит))
1
_Loader_
6 / 6 / 1
Регистрация: 18.04.2012
Сообщений: 92
22.04.2013, 19:08  [ТС] #11
lazybiz, у меня ошибки что то(

error C2143: синтаксическая ошибка: отсутствие "," перед "..."
error C2780: const T &largest_of(const T &,const int): требует аргументов: 2, имеется: 3
error C2780: const T &largest_of(const T &,const int): требует аргументов: 2, имеется: 9

как быть?)))
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 19:09 #12
Только учти что эта конструкция работает только начиная со стандарта С++ 2011.

Добавлено через 32 секунды
Какой компилятор?
1
_Loader_
6 / 6 / 1
Регистрация: 18.04.2012
Сообщений: 92
22.04.2013, 19:11  [ТС] #13
lazybiz, ааа вон чего я на VS 2010, эта функция для firebird препод сказал написать а под 2012 нет исходников сборки((( а живым да точно не пустит
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 19:16 #14
Ну да, первая поддержка С++11 появилась только в Visual Studio 12.
1
_Loader_
6 / 6 / 1
Регистрация: 18.04.2012
Сообщений: 92
22.04.2013, 19:17  [ТС] #15
А других вариантов кроме "Вектора" нет как я понимаю?
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 19:27 #16
Нашел еще такой вариант на Си:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int _max( size_t count, int values[] )
{
    int m = values[0];
    while ( count-- ) {
        if ( values[count] > m ) m = values[count];
    }
    return m;
}
 
#define my_max( ... ) ({                            \
    int _args[] = { __VA_ARGS__ };                  \
    _max( sizeof _args / sizeof *_args, _args );    \
})
 
 
int main()
{
    printf( "%d", my_max( 0, 5, 1, 2, 3 ) );
    return 0;
}
1
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
22.04.2013, 19:33 #17
Без извращений - только вектором.
Ну и еще такая штука есть в с++11.
C++
1
std::cout << std::max({1, 2, 4}) << std::endl;
1
22.04.2013, 19:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2013, 19:33
Привет! Вот еще темы с решениями:

Определить значение функции max(a, max(a/2, cos b))*max(2a-b,b)
Составьте программу для решения задачи. Определите значение õ=max(a, max(a/2,...

Функция которая находит max элемент массива и имеет перегруженность
#include &lt;iostream&gt; using namespace std; int max(int a) {for (int i = 0; i...

Найти min(max(x, y), max(x, z), max(z, d)
Даны различные действительные числа x, y, z, d. Найти min(max(x, y), max(x, z),...

Найти в матрице А max элемент, все элементы в столбце до max умножить на 2
Всем доброго вечера. Возникла проблема с задачей, прошу помочь. В матрице А...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru