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

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

Восстановить пароль Регистрация
 
_Loader_
 Аватар для _Loader_
6 / 6 / 0
Регистрация: 18.04.2012
Сообщений: 92
22.04.2013, 17:51     Функция max #1
Здравствуйте, надо написать функцию которая выводит максимальное целое число из цепочки чисел. Например МАХ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);
      }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,055
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 18:03     Функция max #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;
}
_Loader_
 Аватар для _Loader_
6 / 6 / 0
Регистрация: 18.04.2012
Сообщений: 92
22.04.2013, 18:20  [ТС]     Функция max #3
Спасибо, но как я понял int n является количеством чисел в последовательности, а мне надо что бы количество чисел было любое без ее указания(
DiffEreD
 Аватар для DiffEreD
1424 / 761 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
22.04.2013, 18:24     Функция max #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;
}
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,055
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 18:24     Функция max #5
Только если сделать много перегрузок функции. По-другому никак.
_Loader_
 Аватар для _Loader_
6 / 6 / 0
Регистрация: 18.04.2012
Сообщений: 92
22.04.2013, 18:40  [ТС]     Функция max #6
yuron_477, я понял но вот все равно нужна нецифра что бы остановить, а мне бы надо чтобы одни цифры

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

lazybiz, да я понимаю но препод сказал так сделать вот сижу голову ломаю(((
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,055
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 19:01     Функция max #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' ;
}
Но думаю что препод тебя с таким кодом живым не отпустит))
_Loader_
 Аватар для _Loader_
6 / 6 / 0
Регистрация: 18.04.2012
Сообщений: 92
22.04.2013, 19:08  [ТС]     Функция max #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

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

Добавлено через 32 секунды
Какой компилятор?
_Loader_
 Аватар для _Loader_
6 / 6 / 0
Регистрация: 18.04.2012
Сообщений: 92
22.04.2013, 19:11  [ТС]     Функция max #13
lazybiz, ааа вон чего я на VS 2010, эта функция для firebird препод сказал написать а под 2012 нет исходников сборки((( а живым да точно не пустит
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,055
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 19:16     Функция max #14
Ну да, первая поддержка С++11 появилась только в Visual Studio 12.
_Loader_
 Аватар для _Loader_
6 / 6 / 0
Регистрация: 18.04.2012
Сообщений: 92
22.04.2013, 19:17  [ТС]     Функция max #15
А других вариантов кроме "Вектора" нет как я понимаю?
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,055
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 19:27     Функция max #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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2013, 19:33     Функция max
Еще ссылки по теме:

Определить значение Z=max(a,2b)*max(2a-b,b), где max(x,y)-максимальное из чисел x,y C++
Определить значение функции max(a, max(a/2, cos b))*max(2a-b,b) C++
Найти в матрице А max элемент, все элементы в столбце до max умножить на 2 C++
Функция которая находит max элемент массива и имеет перегруженность C++
Определите значение õ=max(a,a+b,a- b)+max(b, 2b-a,b+2a) C++

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
22.04.2013, 19:33     Функция max #17
Без извращений - только вектором.
Ну и еще такая штука есть в с++11.
C++
1
std::cout << std::max({1, 2, 4}) << std::endl;
Yandex
Объявления
22.04.2013, 19:33     Функция max
Ответ Создать тему
Опции темы

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