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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
#1

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

12.06.2012, 13:52. Просмотров 1916. Ответов 24
Метки нет (Все метки)

Добрый день. Нужно вывести максимальное и минимальное значения на экран. Что нужно прописать для этого в 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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2012, 13:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод максимального и минимального значений (C++):

Получение максимального и минимального значений вектора целого типа - C++
Всем привет! Что-то я опять на быдлокодил, задание простое: Определить интерфейс (тип, имя, входные и выходные параметры) функции. ...

Определение максимального и минимального значений во время ввода данных - C++
Определение максимального и минимального значений во время ввода данных даны натуральное число n и целые числа a1,a2, ..., an. Найти...

Найти среднее арифметическое минимального и максимального значений массива - C++
Выполните следующие задания на обработку элементов одномерного массива: Найти среднее арифметическое минимального и максимального...

Определение максимального и минимального значений во время ввода данных - C++
Даны натуральное число n и целые числа a1, a2,...,an. Найти номер максимального и номер минимального из чисел аi. Если чисел с максимальным...

Вывод максимального и минимального значения - C++
Что не так? Выводит: 8 9 Максимальное значение 8004304 Минимальное значение 8 #include &lt;iostream&gt; #include &lt;string&gt; ...

Составить программу, которая вычисляет произведение максимального и минимального значений - C++
Составить программу, которая вычисляет произведение максимального и минимального значений элементов одномерного массива Х, состоящая из 15...

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

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

Добавлено через 7 минут
Хм, но теперь почему то и максимальное и минимальное значения равны единице. В чём проблема?
Потому что у тебя код для нахождения максимального и минимального элемента во первых - всегда возвращает 1 (return 1; в конце каждого метода), во вторых (мне так показалось) - даже с устранением первой проблемы все равно неправильный.
0
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
18.06.2012, 08:03  [ТС] #18
Вот я и хочу проверить правильность выводом всего дерева на экран. Как это сделать?
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 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);
}
но это гадание на кофейной гуще.
0
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
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
19.06.2012, 12:40 #21
C++
1
std::cout << *b;
?
0
B@R_L0G
0 / 0 / 0
Регистрация: 08.06.2012
Сообщений: 5
19.06.2012, 17:14 #22
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>
#include <conio.h>
main()
{
int N, M, min, max, Z, i, max1, min1;
printf("\nВведите кол-во чисел ");
scanf ( "%d", &Z );
printf ( "\nВведите целые числа ");
for (i=1; i<=Z/2; i++)      //Вводит 5 пар чисел и сравнивает
{scanf ( "%d%d", &N, &M );
if  (N>M)
{max1=N; min1=M;}
else 
{max1=M; min1=N;}
 
if (max<max1) max=max1;
if (min>min1) min=min1;
} 
printf ("Наименьшее из них = %d\n",min );
printf ("Наибольшее из них = %d\n",max );
getch();    
}
Только начал знакомиться с языком, поэтому за стиль программы сразу извиняюсь.
При больших числах программа работает, но при маленьких ( в районе первых трёх десятков - точно) максимумом стабильно выводится число 34, которое я даже НЕ ввожу/
Кому не трудно - объясните ошибку.
0
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
20.06.2012, 20:59  [ТС] #23
Цитата Сообщение от gray_fox Посмотреть сообщение
C++
1
std::cout << *b;
?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
main.cpp(25): error C2593: неоднозначный "operator <<"
tree.h(25): может быть "std::ostream &operator <<<char>(std::ostream &,tree<T>)"
1>          with
1>          [
1>              T=char
1>          ]
tree.h(94): или       "std::ostream &operator <<<char>(std::ostream &,tree<T> &)"
1>          with
1>          [
1>              T=char
1>          ]
1>          при попытке сопоставить список аргументов "(std::ostream, tree<T>)"
1>          with
1>          [
1>              T=char
1>          ]
1>
1>СБОЙ построения.
0
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
23.06.2012, 15:18  [ТС] #24
Ап. Проблема с выводом на экран дерева не решена.
0
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
24.06.2012, 22:42  [ТС] #25
up...
0
24.06.2012, 22:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2012, 22:42
Привет! Вот еще темы с ответами:

Сколько нулей лежит вне минимального и максимального значений массива - C++
Кто знает решение?? (C++) Определить, сколько нулей лежит вне минимального и максимального значений массива R

Ввести массив целых чисел. Вывести позиции максимального и минимального значений скользящей суммы из 5-ти соседних элементов. - C++
Ввести массив целых чисел. Вывести позиции максимального и минимального значений скользящей суммы из 5-ти соседних элементов.

Нахождение максимального и минимального числа - C++
Здравствуйте. Помогите найти максимальное и минимальное число #include &lt;iostream&gt; using namespace std; int main() { ...

Номер максимального и минимального элементов - C++
Нужно найти номер максимального и минимального элементов #include &lt;iostream&gt; using namespace std; int find_max_value(int* mas,...


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

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

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