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

Вывод максимального и минимального значений - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
12.06.2012, 13:52     Вывод максимального и минимального значений #1
Добрый день. Нужно вывести максимальное и минимальное значения на экран. Что нужно прописать для этого в main'e?

Функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <class T> int tree<T>::get_max(T &obj)
{
    if (tr==NULL) return 0;
    tree_element<T> *p;
    for (p=tr; p->r!=NULL; p=p->r);
    obj=p->elem;
    return 1;
}
 
template <class T> int tree<T>::get_min(T &obj)
{
    if (tr==NULL) return 0;
    tree_element<T> *p;
    for (p=tr; p->l!=NULL; p=p->l);
    obj=p->elem;
    return 1;
}
main:
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
void main()
{
    setlocale(LC_CTYPE, "rus");
    tree<char> *b=new tree<char>(5);
    b->add_elem('a');
    b->add_elem('s');
    b->add_elem('d');
    b->add_elem('f');
    b->add_elem('g');
    
    std::cout << b;
 
       int n, max, min;
 
    cout << "\nЗагрузка: ";
    cin >> n;
    b->add_elem(n);
 
    std::cout << b;
 
    //cout << "Максимальное значение: " << &tree::get_max << endl; не работает
    //cout << "Минимальное значение: " << &tree::get_min << endl; не работает
 
        delete b;
 
    getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2012, 13:52     Вывод максимального и минимального значений
Посмотрите здесь:

Составить программу, которая вычисляет произведение максимального и минимального значений C++
Ввести массив целых чисел. Вывести позиции максимального и минимального значений скользящей суммы из 5-ти соседних элементов. C++
Нахождение максимального и минимального числа C++
C++ Номер максимального и минимального элементов
C++ Определение максимального и минимального значений во время ввода данных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
margarin
 Аватар для margarin
35 / 35 / 0
Регистрация: 02.06.2012
Сообщений: 332
12.06.2012, 13:56     Вывод максимального и минимального значений #2
Я ничего не петрю, но в чём ты пишешь?
Почему
C++
1
void main()
?
Я почему то думал что
C++
1
int main()
писать нужно...
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
12.06.2012, 14:07  [ТС]     Вывод максимального и минимального значений #3
margarin, разницы никакой в этом случае. Вопрос в другом.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
12.06.2012, 14:10     Вывод максимального и минимального значений #4
margarin, не слушайте его. int main() - стандарт. void main() - чушь. Но успешно поддерживается несколькими компиляторами.

ZiP-777, очевидно, что вызвать функцию и передать ей дерево.
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
12.06.2012, 14:26  [ТС]     Вывод максимального и минимального значений #5
Цитата Сообщение от soon Посмотреть сообщение
ZiP-777, очевидно, что вызвать функцию и передать ей дерево.
Это понятно. Но как не пытался писать - не работает. Если можно, представьте в виде кода. Спасибо.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
12.06.2012, 14:33     Вывод максимального и минимального значений #6
b.get_min(a)

Добавлено через 2 минуты
Я ошибся, передавать надо не дерево, а переменную, в которую будет записываться максимальное/минимальное значение
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
12.06.2012, 14:40  [ТС]     Вывод максимального и минимального значений #7
Цитата Сообщение от soon Посмотреть сообщение
b.get_min(a)

Добавлено через 2 минуты
Я ошибся, передавать надо не дерево, а переменную, в которую будет записываться максимальное/минимальное значение
error C2228: выражение слева от ".get_min" должно представлять класс, структуру или объединение
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
12.06.2012, 14:49     Вывод максимального и минимального значений #8
b -> get_min(a)
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
12.06.2012, 15:38  [ТС]     Вывод максимального и минимального значений #9
Цитата Сообщение от soon Посмотреть сообщение
b -> get_min(a)
error C2664: tree<T>::get_min: невозможно преобразовать параметр 1 из "int" в "char &"

Добавлено через 1 минуту
Упс, переопределил переменную - всё заработало. Спасибо!

Добавлено через 7 минут
Хм, но теперь почему то и максимальное и минимальное значения равны единице. В чём проблема?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
12.06.2012, 15:55     Вывод максимального и минимального значений #10
Только не говорите, что вы пишете так std::cout << b -> get_min(a);
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
12.06.2012, 15:57  [ТС]     Вывод максимального и минимального значений #11
Цитата Сообщение от soon Посмотреть сообщение
Только не говорите, что вы пишете так std::cout << b -> get_min(a);
Пишу вот так:
C++
1
2
3
4
char a;
char c;
cout << "Минимальное значение: " << b -> get_min(a) << endl;
cout << "Максимальное значение: " << b -> get_max(c) << endl;
При этом минимальное и максимальное значения одинаковы и равны единице...
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
12.06.2012, 15:58     Вывод максимального и минимального значений #12
ZiP-777, я так понимаю, функции писали не вы. Советую их изучить
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
12.06.2012, 20:43  [ТС]     Вывод максимального и минимального значений #13
Цитата Сообщение от soon Посмотреть сообщение
ZiP-777, я так понимаю, функции писали не вы. Советую их изучить
Функции изучил насколько хватило знаний и опыта. Дак как всё-таки вывести эти значения правильно? Очень нужно.

Добавлено через 4 часа 33 минуты
Блин, ребят... Что всё-таки написать нужно?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
12.06.2012, 20:55     Вывод максимального и минимального значений #14
C++
1
2
3
4
5
6
char a;
char c;
b->get_min(a);
cout << "Минимальное значение: " << a << endl;
b->get_max(c);
cout << "Максимальное значение: " << c << endl;
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
13.06.2012, 19:01  [ТС]     Вывод максимального и минимального значений #15
Цитата Сообщение от gray_fox Посмотреть сообщение
C++
1
2
3
4
5
6
char a;
char c;
b->get_min(a);
cout << "Минимальное значение: " << a << endl;
b->get_max(c);
cout << "Максимальное значение: " << c << endl;
Большое спасибо!

Добавлено через 21 час 32 минуты
Возник ещё один вопрос, как вывести на экран всё дерево, а не только его адрес?
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
17.06.2012, 11:33  [ТС]     Вывод максимального и минимального значений #16
Возник ещё один вопрос, как вывести на экран всё дерево, а не только его адрес?
Zuzik
 Аватар для Zuzik
218 / 203 / 34
Регистрация: 11.06.2012
Сообщений: 1,331
17.06.2012, 11:46     Вывод максимального и минимального значений #17
Цитата Сообщение от ZiP-777 Посмотреть сообщение
error C2664: tree<T>::get_min: невозможно преобразовать параметр 1 из "int" в "char &"

Добавлено через 1 минуту
Упс, переопределил переменную - всё заработало. Спасибо!

Добавлено через 7 минут
Хм, но теперь почему то и максимальное и минимальное значения равны единице. В чём проблема?
Потому что у тебя код для нахождения максимального и минимального элемента во первых - всегда возвращает 1 (return 1; в конце каждого метода), во вторых (мне так показалось) - даже с устранением первой проблемы все равно неправильный.
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
18.06.2012, 08:03  [ТС]     Вывод максимального и минимального значений #18
Вот я и хочу проверить правильность выводом всего дерева на экран. Как это сделать?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
18.06.2012, 23:13     Вывод максимального и минимального значений #19
Цитата Сообщение от ZiP-777 Посмотреть сообщение
как вывести на экран всё дерево
Как дерево то выглядит? Предположу, что можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
template<typename T>
class tree {
   // ...
public:
   void print_inorder() const;
   // ...
};
 
template<typename T>
void print_inorder(tree_element<T> const* node) {
   if (node != 0) {
      print_inorder(node->l);
      std::cout << node->elem << << std::endl;
      print_inorder(node->r);
   }
}
 
template<typename T>
void tree<T>::print_inorder() const {
   print_inorder(tr);
}
но это гадание на кофейной гуще.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 09:58     Вывод максимального и минимального значений
Еще ссылки по теме:

Вывод максимального и минимального значения C++
Сколько нулей лежит вне минимального и максимального значений массива C++
C++ Определение максимального и минимального значений во время ввода данных

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

Или воспользуйтесь поиском по форуму:
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
19.06.2012, 09:58  [ТС]     Вывод максимального и минимального значений #20
Цитата Сообщение от gray_fox Посмотреть сообщение
Как дерево то выглядит?
main.cpp в первом посте

tree.h
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#ifndef tree_H
#define tree_H
 
#include "stdafx.h"
#include "tree_element.h"
 
template <class T> class tree
{
    tree_element<T> *tr;
 
public:
    tree();
    tree(T elem);
    tree(tree<T> &obj);
    ~tree();
 
    unsigned int get_n();                       //кол-во эл-тов в дереве
    void add_elem(T _elem);                     //добавление элемента с сохренением упорядоченности
    unsigned int delete_elem(unsigned int _n);  //удаление поддерева
    int get_elem(unsigned int _n, T &obj);      //получение эл-та по лог. номеру
    int get_max(T &obj);                        //получение максимального эл-та
    int get_min(T &obj);                        //получение мининималного эл-та
 
    template<class T> friend istream &operator>>(istream &s, tree<T>);
    template<class T> friend ostream &operator<<(ostream &s, tree<T>);
};
 
template <class T> tree<T>::tree(){
    tr=NULL;
}
 
template <class T> tree<T>::tree(T elem){
    tr=new tree_element<T>(elem);
}
 
template <class T> tree<T>::tree(tree<T> &obj){
    tr=new tree_element<T>(*obj.tr);
}
 
template <class T> tree<T>::~tree(){
    delete tr;
}
 
//кол-во вершин в дереве
template <class T> unsigned int tree<T>::get_n()
{
    if (tr!=NULL) return tr->n;
    else return 0;
}
 
template <class T> void tree<T>::add_elem(T _elem){
    if (tr==NULL) tr=new tree_element<T>(_elem); 
    else tr->add_elem(_elem);
}
 
template <class T> int tree<T>::get_elem(unsigned int _n, T &obj)
{
    if (tr==NULL||_n>=tr->n) return 0;
    obj=tr->get_elem(_n);
    return 1;
}
 
template <class T> int tree<T>::get_max(T &obj)
{
    if (tr==NULL) return 0;
    tree_element<T> *p;
    for (p=tr; p->r!=NULL; p=p->r);
    obj=p->elem;
    return 1;
}
 
//template <class T> int tree<T>::get_min(T &obj)
template <class T> int tree<T>::get_min(T &obj)
{
    if (tr==NULL) return 0;
    tree_element<T> *p;
    for (p=tr; p->l!=NULL; p=p->l);
    obj=p->elem;
    return 1;
}
 
//удаление поддерева по лог. нормеру, возвращает кол-во удаленных вершин
template <class T> unsigned int tree<T>::delete_elem(unsigned int _n)
{
    if (tr==NULL||_n>=tr->n) return 0;
    unsigned int res=tr->delete_elem(_n);
    if (res==0){
        res=tr->n;
        delete tr;
        tr=NULL;}
    return res;
}
 
template <class T> ostream &operator<<(ostream &s, tree<T> &obj)
{
    if (obj.tr!=NULL) 
    {
        s << obj.get_n();
        obj.tr->save_stream(s);
    }
    return s;
}
 
template <class T> istream &operator>>(istream &s, tree<T> &obj)
{
    unsigned int n;
    s >> n;
    T tmp;
    for (int i=0; i<n; i++)
    {
        s >> tmp;
        
    }
}
 
#endif
tree_element.h
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
//класс элемента дерева
//все рекурсивные ф-ии реализованы в этом классе.
#ifndef tree_element_H
#define tree_element_H
 
#include "stdafx.h"
#include "tree.h"
 
template <class T> class tree_element
{
    T elem;         //элемент
    tree_element<T> *l;
    tree_element<T> *r;
    unsigned int n; //кол-во эл-тов в дереве
 
public:
    tree_element();
    tree_element(T _elem);
    tree_element(tree_element &obj);
    ~tree_element();
 
    //возвращает кол-во эл-тов в левом и правом поддеревьях
    unsigned int get_nl();
    unsigned int get_nr();
 
    T  &get_elem(unsigned int _n);              //получение элемента по лог. номеру
    unsigned int delete_elem(unsigned int _n);  //удаление поддерева по лог. номеру
    void add_elem(T &_elem);                    //добавление с сохранением упорядоченности 
    void save_array(T *A);                      //сохранение дерева в массив
    void save_stream(ostream &s);               //сохранение в поток
 
    template<class T> friend class tree;
};
 
//спец. члены -----------------------------------------------------------------
template <class T> tree_element<T>::tree_element()
{
    l=NULL;
    r=NULL;
    n=1;
}
 
template <class T> tree_element<T>::tree_element(T _elem): elem(_elem)
{
    l=NULL;
    r=NULL;
    n=1;    
}
 
template <class T> tree_element<T>::tree_element(tree_element<T> &obj): elem(obj.elem)
{
    n=obj.n;
    l=(obj.l!=NULL)?new tree_element(*obj.l):NULL;
    r=(obj.r!=NULL)?new tree_element(*obj.l):NULL;
}
 
template <class T> tree_element<T>::~tree_element()
{
    if (l!=NULL) delete l;
    if (r!=NULL) delete r;
}
 
//служебные--------------------------------------------------------------------
//получение кол-во ветвей в левом и правом поддеревьях
template <class T> unsigned int tree_element<T>::get_nl()
{
    if (l!=NULL) return l->n;
    else return 0;
}
template <class T> unsigned int tree_element<T>::get_nr()
{
    if (r!=NULL) return r->n;
    else return 0;
}
 
//получение элемента по лог. номеру (_n<n)
template <class T> T& tree_element<T>::get_elem(unsigned int _n)
{
    unsigned int nl=get_nl();
    if (_n==nl) return elem;
    if (_n<nl) return l->get_elem(_n);
    else return r->get_elem(_n-nl-1);
}
 
//удаление поддерева с вершиной в _n-м эл-те (_n<n)
template <class T> unsigned int tree_element<T>::delete_elem(unsigned int _n)
{
    unsigned int nl=get_nl();
    if (_n==nl) return 0;
    unsigned int res;
    if (_n<nl){
        res=l->delete_elem(_n);
        if (res==0){
            res=nl;
            delete l;
            l=NULL;
        }
    }else{
        res=r->delete_elem(_n-nl-1);
        if (res==0){
            res=r->n;
            delete r;
            r=NULL;
        }
    }
    n-=res;
    return res;
}
 
//добавление с сохранением упорядоченности
template <class T> void tree_element<T>::add_elem(T &_elem)
{
    if (_elem<elem)
        if (l!=NULL) l->add_elem(_elem);
        else l=new tree_element(_elem);
    else
        if (r!=NULL) r->add_elem(_elem);
        else r=new tree_element(_elem);
    n++;
}
 
//сохранение дерева в упорядоченный массив
template <class T> void tree_element<T>::save_array(T *A)
{
    if (l!=NULL) l->save_array(A);
    nl=get_nl();
    A[nl]=elem;
    if (r!=NULL) r->save_array(A+nl+1);
}
 
template <class T> void tree_element<T>::save_stream(ostream &s)
{
    s << elem << endl;      
    l->save_stream(s);
    r->save_stream(s);
}
 
#endif
Yandex
Объявления
19.06.2012, 09:58     Вывод максимального и минимального значений
Ответ Создать тему
Опции темы

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