С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/30: Рейтинг темы: голосов - 30, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 02.08.2012
Сообщений: 6

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

02.08.2012, 23:21. Показов 6390. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.08.2012, 23:21
Ответы с готовыми решениями:

Найти max и min, если min левее max, то среднее арифметическое между ними
#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
Доброго времени суток) Как записать функции max и min? Сколько лазил, но понять не могу, как сформировать их по этому примеру. ...

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

25
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.08.2012, 23:42
Потому что 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;
}
//---------------------------------------------------------------------------
Вывод:
Code
1
2
3
Текущая кодовая страница: 1251
1       3       5
Для продолжения нажмите любую клавишу . . .
1
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
03.08.2012, 01:11
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
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
03.08.2012, 06:59
Цитата Сообщение от tegos-29 Посмотреть сообщение
#include <cmath>
#include <algorithm>
зачем Вам понадобились эти библиотеки?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
03.08.2012, 07:25
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
14 / 14 / 3
Регистрация: 28.07.2012
Сообщений: 57
03.08.2012, 09:55
вместо
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
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.08.2012, 10:07
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;
}
Миниатюры
Ошибка функции max () | min()   Ошибка функции max () | min()  
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.08.2012, 10:10
Цитата Сообщение от tegos-29 Посмотреть сообщение
Задача:
Дано три числа, записанный в отдельных строках. Упорядочите их в порядке убывания. Программа должна считывать три числа a, b, c, затем программа должна менять их значения так, чтобы стали выполнены условия a <= b <= c, затем программа выводит тройку a, b, c.
Само же задание рассматривалось мной в начале года здесь на форуме
Страуструп. Упражнение. Ввод 3 чисел и последующий их вывод в порядке возрастания.
в той теме есть ещё варианты...
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
03.08.2012, 10:14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ругань компилятора объяснялась наличием define-а NOMINMAX
нет, там функция вызывалась с неправильными типами своих аргументов (есть функции min и max, принимающие три аргумента, но последний аргумент в них - это объект-компаратор). Сами функции уже определены в заголовочном файле algorithm
0
14 / 14 / 3
Регистрация: 28.07.2012
Сообщений: 57
03.08.2012, 10:16
Интересно а такое сработает???
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
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
03.08.2012, 10:19
b_kasenov47, сработает, если кто-нибудь определит соответствующие перегрузки min и max (да и выводится твой результат не в убывающем порядке)
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.08.2012, 10:24
Если не будем вводить одинаковых чисел то вот решение с 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;
}
Миниатюры
Ошибка функции max () | min()  
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.08.2012, 10:29
Цитата Сообщение от 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-ка не соответствует стандарту
Миниатюры
Ошибка функции max () | min()  
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
03.08.2012, 10:36
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
в algorithm нет верней они носят иное название min(max)_element
ну так они там и остались: http://cplusplus.com/reference... x_element/ (да и по коду, который ты привел, видно, что первые два аргумента функции - это итераторы). Но я не это имел в виду. Ошибка была в том, что ТС пытался вызвать функцию с тремя числовыми аргументами, т.е. так:

C++
1
int Ma = min(a, b, c);
Этот код приведет к ошибке, даже если воспользоваться макросами min/max из windows.h. Посмотри внимательно код из стартового сообщения.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.08.2012, 11:09
Т.к. у нас модно везде пихать 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;
}
Миниатюры
Ошибка функции max () | min()  
0
14 / 14 / 3
Регистрация: 28.07.2012
Сообщений: 57
03.08.2012, 12:07
Цитата Сообщение от b_kasenov47 Посмотреть сообщение
Интересно а такое сработает???
Код C++
1
2
3
4
int Ma = min(a, b, c);
int Mi = max(a, b, c);
cout << Ma << ' ' << *a + b + c - Ma - Mi << ' ' << Mi << endl;
Я накосячил((((
вот так должно быть
C++
1
2
3
int Ma = max(a, max(b, c));
int Mi = min(a, min(b, c));
cout << Ma << ' ' << a + b + c - Ma - Mi << ' ' << Mi << endl;
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.08.2012, 13:07
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Т.к. у нас модно везде пихать STL там где надо и там где нет, то последую модным тенденциям
Для начала надо его немного уметь использовать...
C++
1
for(it = vec.begin(); it != vec.end(); it++)// Вместо it < vec.end()
Вариант с сортировкой был приведен еще в самом начале...
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.08.2012, 13:46
для троля Avazart

Не по теме:

Avazart, итератор на то и итератор что позволяет с объектами работать как с индексами массива - лучше бы сам поучил STL впрочем как и использование рефакторинга...

0
Эксперт С++
 Аватар для nameless
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
03.08.2012, 14:05
-=ЮрА=-, смысл в том, что итераторы следует сравнивать при помощи оператора !=, а не <. Т. к. < работает только итераторами произвольного доступа, тогда как != работает со всеми типами итераторов.

Например, std::list предоставляет лишь bidirectional итераторы..

Добавлено через 9 минут
Саттера почитайте, там этому отдельный вопрос посвящен..
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.08.2012, 14:07
Еще ++it вместо it++, мелочь а глаз режет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.08.2012, 14:07
Помогаю со студенческими работами здесь

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

min, max функции.
Даны числа 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), ,...

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

Почему не возвращаются из функции min и max?
#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 в Dev-Cpp
Извините за возможно глупые вопросы... Начал изучать C++ только пару дней назад... Помогите дописать программу! Нужно чтобы пользователь...


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Новые блоги и статьи
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru