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

Посчитать в стеке количество элементов между минимальным и максимальным значениями - C++

Восстановить пароль Регистрация
 
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
16.03.2014, 02:58     Посчитать в стеке количество элементов между минимальным и максимальным значениями #1
Доброго времени суток, господа)
Возникла проблема с реализацией.
Суть кода: посчитать в стеке количество элементов между минимальным и максимальным значениями.
Проблема с функцией search_max_min


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
 #include <iostream>     
#include <conio.h>
 
using namespace std;
 
struct stack
{
public:
    stack() : top(0){}
    ~stack();
    void push(float what);
    void pop(float &what);
    bool empty() const {return  top ==0;}
    void print() const;
    int countFromMinToMax();
    void search_max_min();
private:
 
struct node
{
 float num;
 node  *next;
}; node *top; node *min; node *max;
};
 
stack::~stack()
{
    while(!empty()){
    node *tmp = top -> next;
    delete top;
    top = tmp;
    }
}
void stack::push (float what){
    node *newitem = new node;
    newitem->next = top;
    newitem->num = what;
    top = newitem;
}
void stack::pop(float &what) {
    what = top->num;
    node *tmp = top;
    top = top->next;
    delete tmp;
}
void stack::print() const {
    node *iter = top;
    while (iter != 0) {
        std::cout << iter->num << " ";
        iter = iter->next;
    }
    std::cout << std::endl;
}
int stack::countFromMinToMax() 
{
     node *it = top;
     int count = 0;
     while (it != 0) {
         if (it == max) {
            while (it != min) {
               ++count;
               it = it->next;
             }
             if (count) { 
                 --count;
             }
             break;
         } else if (it == min) {
             while (it != max) {
                 ++count;
                 it = it->next;
              }
              if (count) { 
                --count;
              }
              break;
         }
         it = it->next;
     }
     cout << count;
    return count;
}
void stack::search_max_min() 
 {
    if (top)
    {
    node *iterator = top;
        while (iterator -> next) 
        {
        iterator = iterator -> next;
    
        if (max -> num < iterator -> num)
        max = iterator;
            
        if (min -> num > iterator -> num)
        min = iterator;
    }   
    }
 }
int main()                               
{
    using std::cin;
    using std::cout;
    stack mylist;
    float num;
    int n;
    cin >> n;
    cout << "Input float values, no flout to quit: ";   
    for (int i = 0; i < n; i++){
    cin >> num; 
    mylist.push(num);
    }
    cin.clear();
    cin.ignore(256, '\n');
            cout << "Your numbers in reverse order are (bottom - right, top - left): ";
            mylist.print();
            mylist.search_max_min();
            mylist.countFromMinToMax();
            
            cout << endl;
            mylist.print();
            _getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 02:58     Посчитать в стеке количество элементов между минимальным и максимальным значениями
Посмотрите здесь:

C++ Поиск разности между максимальным и минимальным значениями массива
C++ Найти разность между максимальным и минимальным значениями массива
Найти количество нулей среди элементов массива, расположенных между минимальным и максимальным элементом массива. C++
Посчитать кол-во элементов между максимальным и минимальным значением элементов двумерного массива( подразумевается, что эти значения уже найдены) C++
Определить, сколько нулей лежит между минимальным и максимальным значениями массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
16.03.2014, 04:15     Посчитать в стеке количество элементов между минимальным и максимальным значениями #2
Да кто ж вам такие задания придумывает? Нет в стеке ни максимального, ни минимального значения. В стеке или есть какой-то элемент на вершине, или нет, если стек пустой. Массивы для таких вещей нужно использовать, или списки...
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
16.03.2014, 04:36  [ТС]     Посчитать в стеке количество элементов между минимальным и максимальным значениями #3
оговорился я(
на основе списка, вписывать значения по принципу lifo.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
16.03.2014, 06:53     Посчитать в стеке количество элементов между минимальным и максимальным значениями #4
Цитата Сообщение от easybudda Посмотреть сообщение
Да кто ж вам такие задания придумывает?
Оставь негодование. Посмотри на MIT и BARKLEY. Наша система образования держится на мифах о ее превосходстве овер твенти йеарс назад. Сегодня от выпускника инженера надо -- "сдать зачет по прогграммированию". Это печально. Но! это дает свои плоды.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
16.03.2014, 16:28     Посчитать в стеке количество элементов между минимальным и максимальным значениями #5

Не по теме:

alkagolik, ну не по "проггранулированию", и на том спасибо. Хотя грустно это всё...


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
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <ctime>
 
int main() {
    std::list<int> list;
 
    srand(time(NULL));
 
    for ( int i = 0; i < 10; ++i )
        list.push_back(rand() % 100);
 
    std::cout << "All elements:" << std::endl;
    std::copy(list.begin(), list.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout <<  std::endl;
 
    std::list<int>::iterator minPtr = std::min_element(list.begin(), list.end());
    std::list<int>::iterator maxPtr = std::max_element(list.begin(), list.end());
 
    if ( *minPtr == *maxPtr ) 
        std::cout << "All elements has the same value, nothing to do." << std::endl;
    else {
        std::cout << "Min value: " << *minPtr << "\nMax value: " << *maxPtr << std::endl;
        int between = std::max(std::distance(list.begin(), minPtr), std::distance(list.begin(), maxPtr)) -
            std::min(std::distance(list.begin(), minPtr), std::distance(list.begin(), maxPtr)) - 1;
        std::cout << "Elements between the first occures of them: " << between << std::endl;
    }
 
    return 0;
}
Yandex
Объявления
16.03.2014, 16:28     Посчитать в стеке количество элементов между минимальным и максимальным значениями
Ответ Создать тему
Опции темы

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