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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
tegos-29
0 / 0 / 0
Регистрация: 02.08.2012
Сообщений: 6
#1

Ошибка функции max () | min() - C++

02.08.2012, 23:21. Просмотров 1686. Ответов 25
Метки нет (Все метки)

Задача:
Дано три числа, записанный в отдельных строках. Упорядочите их в порядке убывания. Программа должна считывать три числа a, b, c, затем программа должна менять их значения так, чтобы стали выполнены условия a <= b <= c, затем программа выводит тройку a, b, c.

Я хочу решить его таким способом... Но возникает проблема при компиляции... Почему?

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
#include <iostream>
#include <cmath>
#include <algorithm>
 
using namespace std;
 
int main()
{
    int a, b, c;
    cin >> a >> b >> c;
    
    int Ma = min(a, b, c);
    int Mi = max(a, b, c);
    
    if(a <= Ma || a >= Mi)
    {
        cout << Ma << " " << a << " " << Mi;
    }
    
    if(b <= Ma || b >= Mi)
    {
        cout << Ma << " " << b << " " << Mi;
    }
    
    if(c <= Ma || c >= Mi)
    {
        cout << Ma << " " << c << " " << Mi;
    }
    
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2012, 23:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка функции max () | min() (C++):

Найти max и min, если min левее max, то среднее арифметическое между ними - C++
#include &lt;iostream.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; void main() { int n,a; int...

Функции max и min - C++
Доброго времени суток) Как записать функции max и min? Сколько лазил, но понять не могу, как сформировать их по этому примеру. ...

min, max функции. - C++
Даны числа a(1), a(2), , a(2n). Вычислить: 1) max (a(1)+a(2n), a(2)+a(2n-1), , a(n)+a(n+1));и 2) min (a(1)*a(n+1), a(2)*a(n+2), ,...

Функции max min - C++
не могу написать функцию для вычисления такого рода. Даны натуральные числа k, n, m, действительные числа Х1,...,Xk, Y1, ...,Yn , ...

Функции min и max - C++
Что делают функции min и max?И какие у них аргументы?

Функции min/max/random - C++
подключил библиотеку stdlib.h в программе хотел использовать функцию max написал num3=max(num1,num2); компилятор ругается на то...

25
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,805
Записей в блоге: 17
02.08.2012, 23:42 #2
Потому что std::max() иstd::min() принимает всего лишь два аргумента...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
using namespace std;
 
vector<int> v;
 
v.push_back(1);
v.push_back(5);
v.push_back(3);
 
sort(v.begin(),v.end() );
copy(v.begin(),v.end(),ostream_iterator<int>(cout,"\t"));
cout<<endl;
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Вывод:
Код
Текущая кодовая страница: 1251
1       3       5
Для продолжения нажмите любую клавишу . . .
1
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
03.08.2012, 01:11 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <algorithm>
 
template <typename T>
inline const T& compare_3 (const T& t1, const T& t2, const T& t3, const T& comp(const T&, const T&)) {
  return comp (comp(t1, t2), t3);
}
 
template <typename T>
inline const T& min_3 (const T& t1, const T& t2, const T& t3) {
  return compare_3(t1, t2, t3, std::min<T>);
}
 
template <typename T>
inline const T& max_3 (const T& t1, const T& t2, const T& t3) {
  return compare_3 (t1, t2, t3, std::max<T>);
}
 
int main () {
  std::cout << min_3 (1, -3, 4) << std::endl;
}
Добавлено через 21 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
template <int t1, int t2>
struct min2 {
    static const int min_value = (t1 < t2) ? t1 : t2;
};
 
template <int t1, int t2, int t3>
struct min3 {
    static const int min_value = min2<min2<t1, t2>::min_value, t3>::min_value;
};
 
int main () {
    std::cout << min3 <1, -1, 2>::min_value << std::endl;
}
0
salam
163 / 144 / 12
Регистрация: 10.07.2012
Сообщений: 734
03.08.2012, 06:59 #4
Цитата Сообщение от tegos-29 Посмотреть сообщение
#include <cmath>
#include <algorithm>
зачем Вам понадобились эти библиотеки?
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
03.08.2012, 07:25 #5
alex_x_x, если уж считаем на этапе компиляции, то почему бы не считать для произвольного числа аргументов?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
template <int ... args>
struct min;
 
template <int arg, int ... args>
struct min<arg, args...>
{
    static const int value =
        arg < min<args...>::value ? arg : min<args...>::value;
};
 
template <int arg>
struct min<arg>
{
    static const int value = arg;
};
 
int main()
{
    std::cout << min<-5, 2, 5, 19, -8, 0>::value << std::endl;
}
Жаль, конечно, что к задаче ТС'а это неприменимо
1
b_kasenov47
14 / 14 / 1
Регистрация: 28.07.2012
Сообщений: 57
03.08.2012, 09:55 #6
вместо
C++
1
2
int Ma = min(a, b, c);
int Mi = max(a, b, c);
надо так:
C++
1
2
int Ma = min(a, min(b, c));
int Mi = max(a, max(b, c));
0
-=ЮрА=-
Заблокирован
Автор FAQ
03.08.2012, 10:07 #7
tegos-29, ругань компилятора объяснялась наличием define-а NOMINMAX просто подключите windows.h к проекту и всё станет хорошо
C++
1
2
3
4
5
6
7
8
9
#include <windows.h>
#include <iostream>
using namespace std;
 
int main()
{
    cout<<min(5,6)<<endl;
    return 0;
}
0
Миниатюры
Ошибка функции max () | min()   Ошибка функции max () | min()  
-=ЮрА=-
Заблокирован
Автор FAQ
03.08.2012, 10:10 #8
Цитата Сообщение от tegos-29 Посмотреть сообщение
Задача:
Дано три числа, записанный в отдельных строках. Упорядочите их в порядке убывания. Программа должна считывать три числа a, b, c, затем программа должна менять их значения так, чтобы стали выполнены условия a <= b <= c, затем программа выводит тройку a, b, c.
Само же задание рассматривалось мной в начале года здесь на форуме
Страуструп. Упражнение. Ввод 3 чисел и последующий их вывод в порядке возрастания.
в той теме есть ещё варианты...
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
03.08.2012, 10:14 #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ругань компилятора объяснялась наличием define-а NOMINMAX
нет, там функция вызывалась с неправильными типами своих аргументов (есть функции min и max, принимающие три аргумента, но последний аргумент в них - это объект-компаратор). Сами функции уже определены в заголовочном файле algorithm
0
b_kasenov47
14 / 14 / 1
Регистрация: 28.07.2012
Сообщений: 57
03.08.2012, 10:16 #10
Интересно а такое сработает???
C++
1
2
3
int Ma = min(a, b, c);
int Mi = max(a, b, c);
cout << Ma << ' ' <<  a + b + c - Ma - Mi << ' ' << Mi << endl;
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
03.08.2012, 10:19 #11
b_kasenov47, сработает, если кто-нибудь определит соответствующие перегрузки min и max (да и выводится твой результат не в убывающем порядке)
0
-=ЮрА=-
Заблокирован
Автор FAQ
03.08.2012, 10:24 #12
Если не будем вводить одинаковых чисел то вот решение с min и max-ами
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <windows.h>
#include <iostream>
using namespace std;
 
int main()
{
    int a, b, c;
    while(1)
    {
        cout<<"Enter a b c\n";
        cin>>a>>b>>c;
        cout<<min(a, min(b, c))
            <<max(a, min(b, c))
            <<max(a, max(b, c))
            <<endl;
    }
    return 0;
}
0
Миниатюры
Ошибка функции max () | min()  
-=ЮрА=-
Заблокирован
Автор FAQ
03.08.2012, 10:29 #13
Цитата Сообщение от Nameless One Посмотреть сообщение
Сами функции уже определены в заголовочном файле algorithm
Nameless One, это если используем 8-ку,9-ку,10-ку в старых версиях (в шестёрке например этих функций в algorithm нет верней они носят иное название min(max)_element)
C++
1
2
3
4
5
6
7
8
9
10
        // TEMPLATE FUNCTION max_element WITH PRED
template<class _FI, class _Pr> inline
    _FI max_element(_FI _F, _FI _L, _Pr _P)
    {_FI _X = _F;
    if (_F != _L)
        for (; ++_F != _L; )
            if (_P(*_X, *_F))
                _X = _F;
    return (_X); }
        // TEMPLATE FUNCTION min_element
а вот min и max были макросами, посмотри ещё раз скрин где они объявлялись.
Тут да я соглашусь 6-ка не соответствует стандарту
0
Миниатюры
Ошибка функции max () | min()  
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
03.08.2012, 10:36 #14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
в algorithm нет верней они носят иное название min(max)_element
ну так они там и остались: http://cplusplus.com/reference/algorithm/max_element/ (да и по коду, который ты привел, видно, что первые два аргумента функции - это итераторы). Но я не это имел в виду. Ошибка была в том, что ТС пытался вызвать функцию с тремя числовыми аргументами, т.е. так:

C++
1
int Ma = min(a, b, c);
Этот код приведет к ошибке, даже если воспользоваться макросами min/max из windows.h. Посмотри внимательно код из стартового сообщения.
0
-=ЮрА=-
Заблокирован
Автор FAQ
03.08.2012, 11:09 #15
Т.к. у нас модно везде пихать STL там где надо и там где нет, то последую модным тенденциям
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
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
 
int main()
{
    int val;
    vector<int> vec;
    vector<int>::iterator it;
    while(1)
    {
        vec.clear();
        cout<<"Enter a b c;\n";
        while(cin>>val)
            vec.push_back(val);
        cin.clear();
        cin.sync();
        sort(vec.begin(),vec.end());
        for(it = vec.begin(); it < vec.end(); it++)
            cout<<(*it)<<" ";
        cout<<endl; 
    }
    return 0;
}
0
Миниатюры
Ошибка функции max () | min()  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2012, 11:09
Привет! Вот еще темы с ответами:

Функции max, min в Dev-Cpp - C++
Извините за возможно глупые вопросы... Начал изучать C++ только пару дней назад... Помогите дописать программу! Нужно чтобы пользователь...

Почему не возвращаются из функции min и max? - C++
#include&lt;iostream&gt; #include&lt;stdlib.h&gt; #include&lt;time.h&gt; using namespace std; template &lt;class T&gt; int SortArr(T arr, int size) ...

Нахождение max и min функции одной переменной - C++
Нужна помощь. Надо написать программу которая находить max и min функции с 1 переменой. (пользователь должен ввести функцию) Очень...

Вычислить min max функции методом бисекции - C++
Долго пытался что то придумать,но понять хронологию и концепцию программы понять не могу


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
03.08.2012, 11:09
Закрытая тема Создать тему
Опции темы

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