27 / 22 / 13
Регистрация: 31.07.2013
Сообщений: 121
1

Перетасовать элементы в стеке

09.09.2014, 15:55. Показов 618. Ответов 19
Метки нет (Все метки)

Перетасовать элементы в стеке.
Стек я сам пишу в коде.
нужна функция которая рандомно тасует элементы стека.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2014, 15:55
Ответы с готовыми решениями:

Как перетасовать числа?
есть масив int a={1,2,3,4,5,6,7,8,9,2,1,3,5,4,7,6,8,9,2,3,1,4,5,7,6,8,9,1,2,3,4,5,7,6,8,9};как...

Перетасовать записи в файле
Надо случайным образом перемешать записи в файле, записей много около 10 000 000, скорость роботи...

В стеке определить количество элементов, имеющих значения меньше среднего и удалить эти элементы
Здравствуйте. Помогите пожалуйста исправить код. Создать стек из случайных чисел и определить,...

Если создать указатель на переменную, созданную в стеке, переменная перемещается в кучу? Или остается в стеке?
Подскажите, если не трудно, я создаю переменную любого стандартного типа и она хранится в стеке, а...

19
1939 / 1512 / 635
Регистрация: 27.07.2012
Сообщений: 4,557
09.09.2014, 16:02 2
1) Вытащить все элементы из стека в контейнер с произвольным доступом
2) Перетасовать рандомно, например, с помощью std::random_shuffle
3) Положить назад все элементы в стек.
0
27 / 22 / 13
Регистрация: 31.07.2013
Сообщений: 121
09.09.2014, 16:12  [ТС] 3
что такое контейнер и как он работает?
0
1939 / 1512 / 635
Регистрация: 27.07.2012
Сообщений: 4,557
09.09.2014, 16:15 4
Контейнер - это общее понятие. Это может быть простой массив или std::vector или что-либо ещё.
0
27 / 22 / 13
Регистрация: 31.07.2013
Сообщений: 121
09.09.2014, 16:20  [ТС] 5
это если в стеке просто цифры или символы, то да. а если там объекты класса?
0
1939 / 1512 / 635
Регистрация: 27.07.2012
Сообщений: 4,557
09.09.2014, 16:22 6
petyahohlov, чему это может помешать?
0
27 / 22 / 13
Регистрация: 31.07.2013
Сообщений: 121
09.09.2014, 16:29  [ТС] 7
просто я ни разу такого не делал и не видел ни где.
и вообще в ООП недавно

Добавлено через 5 минут
мне кажется я допустил ошибку.
я создаю 36 карт и записываю их в стек, и там их нужно перетасовуть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
enum Mast { as, qw, er, ty };
 
class Card {
    Mast mast;
    int value;
};
int main(){
...
for (int value = 6; value <= 14; ++value) 
{
    for (int mast = 0; mast <= 3; ++mast)
     {
        Card card = new Card()
        card.value = value;
        card.mast = mast;
                stack(card);
    }
}
0
1939 / 1512 / 635
Регистрация: 27.07.2012
Сообщений: 4,557
09.09.2014, 16:32 8
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
#include <iostream>
#include <stdlib.h>
#include <stack>
#include <vector>
#include <algorithm>
 
struct SomeClass
{
    int value;
    SomeClass(int x) : value(x) {};
};
 
int main()
{
    std::stack<SomeClass> some_stack;
    for (int i = 0; i < 10; ++i)
        some_stack.push(SomeClass(i));
 
    std::vector<SomeClass> temp_vector;
    while (!some_stack.empty())
    {
        temp_vector.push_back(some_stack.top());
        some_stack.pop();
    }
 
    std::random_shuffle(temp_vector.begin(), temp_vector.end());
 
    for (std::vector<SomeClass>::iterator j = temp_vector.begin(); j != temp_vector.end(); ++j)
        some_stack.push(*j);
 
    return 0;
}
0
27 / 22 / 13
Регистрация: 31.07.2013
Сообщений: 121
09.09.2014, 16:33  [ТС] 9
т.е. в каждом элементе стека будет храниться объект класса с одним и тем же именем но с разными значениями?
0
1939 / 1512 / 635
Регистрация: 27.07.2012
Сообщений: 4,557
09.09.2014, 16:36 10
Перетасовать сам стек не получится, потому что, если стек написан по всем канонам, он не позволяет обращаться произвольно к элементам, лежащим ниже вершины. А значит нужен алгоритм, который задействует какие-то доп.вещи для перетасовки. Например, как я говорил - какой-нибудь контейнер.

ПС. А зачем тебе в этой задаче именно стек?

Добавлено через 54 секунды
Цитата Сообщение от petyahohlov Посмотреть сообщение
т.е. в каждом элементе стека будет храниться объект класса с одним и тем же именем но с разными значениями?
Скажем так, имени у объекта в стеке не будет. Это будут безымянные объекты со своими значениями.
0
27 / 22 / 13
Регистрация: 31.07.2013
Сообщений: 121
09.09.2014, 16:57  [ТС] 11
ну стек более менее похож на колоду готовую к раздаче.
глупый вопрос наверное, но как сделать массив объектов?
C++
1
2
3
4
5
6
7
8
9
10
for (int value = 6; value <= 14; ++value) 
{
    for (int mast = 0; mast <= 3; ++mast)
     {
        Card card = new Card()
        card.value = value;
        card.mast = mast;
                stack(card);  //что бы здесь добавлять не в стек, а в массив
    }
}
0
1939 / 1512 / 635
Регистрация: 27.07.2012
Сообщений: 4,557
09.09.2014, 17:02 12
Цитата Сообщение от petyahohlov Посмотреть сообщение
ну стек более менее похож на колоду готовую к раздаче.
Да как-то не очень похож. В реальной колоде всегда можно вынуть любую произвольную карту или вернуть карту на произвольное место. Так что здесь лучше бы подошёл вектор или, на худой конец, простой массив.

Цитата Сообщение от petyahohlov Посмотреть сообщение
глупый вопрос наверное, но как сделать массив объектов?
Точно так же, как и любой другой массив.
C++
1
SomeClass object_array[100500];
Добавлено через 32 секунды
Только у класса SomeClass должен быть конструктор без параметров.
0
27 / 22 / 13
Регистрация: 31.07.2013
Сообщений: 121
09.09.2014, 17:11  [ТС] 13
C++
1
2
3
4
5
6
7
8
9
10
card[36]
for(int i = 0, value = 6; value <= 14; ++value)
{
    for(int mast = 0; mast <=3; ++mast)
    {
        card[i].value = value;
        card[i].mast = mast;
        ++i;
    }
}
так?
0
1939 / 1512 / 635
Регистрация: 27.07.2012
Сообщений: 4,557
09.09.2014, 17:16 14
C++
1
Card card[36];
В остальном вроде бы так.
0
27 / 22 / 13
Регистрация: 31.07.2013
Сообщений: 121
09.09.2014, 17:30  [ТС] 15
а что твой код делает?
0
1939 / 1512 / 635
Регистрация: 27.07.2012
Сообщений: 4,557
09.09.2014, 17:31 16
Цитата Сообщение от petyahohlov Посмотреть сообщение
а что твой код делает?
Какой?
0
27 / 22 / 13
Регистрация: 31.07.2013
Сообщений: 121
09.09.2014, 17:32  [ТС] 17
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
#include <iostream>
#include <stdlib.h>
#include <stack>
#include <vector>
#include <algorithm>
 
struct SomeClass
{
    int value;
    SomeClass(int x) : value(x) {};
};
 
int main()
{
    std::stack<SomeClass> some_stack;
    for (int i = 0; i < 10; ++i)
        some_stack.push(SomeClass(i));
 
    std::vector<SomeClass> temp_vector;
    while (!some_stack.empty())
    {
        temp_vector.push_back(some_stack.top());
        some_stack.pop();
    }
 
    std::random_shuffle(temp_vector.begin(), temp_vector.end());
 
    for (std::vector<SomeClass>::iterator j = temp_vector.begin(); j != temp_vector.end(); ++j)
        some_stack.push(*j);
 
    return 0;
}
0
1939 / 1512 / 635
Регистрация: 27.07.2012
Сообщений: 4,557
09.09.2014, 17:35 18
Кладёт элементы в стек по порядку, достаёт их оттуда, перемешивает, кладёт назад.
0
27 / 22 / 13
Регистрация: 31.07.2013
Сообщений: 121
09.09.2014, 17:44  [ТС] 19
а где бы мне посмотреть методы стека?
0
1939 / 1512 / 635
Регистрация: 27.07.2012
Сообщений: 4,557
09.09.2014, 21:05 20
Цитата Сообщение от petyahohlov Посмотреть сообщение
а где бы мне посмотреть методы стека?
Типичные обычно такие:
C++
1
2
3
4
5
6
7
8
9
10
11
template <class T>
class stack
{
public:
    T & top(); // возвращает элемент, лежащий на вершине
    const T & top() const; // константная версия
    void push(const T & el); // положить элемент в стек (в вершину)
    void pop(); // извлечь элемент из вершины
    size_t size() const; // размер (кол-во элементов) стека
    void clear(); // очистить (удалить все элементы)
};
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2014, 21:05
Помогаю со студенческими работами здесь

В стеке удалите все элементы равные 0
Задание: В стеке, заполненном пользователем, удалите все элементы равные 0.

Удалить все элементы, равные первому в стеке
Всем привет) в делфи нужно сделать программу но дно вообще в этом(( Добавлено через 10 минут...

Поменять местами элементы в стеке со случайными числами
Вот взял, код с вашего же форума. Подскажите, мне нужно чтобы я вносил кол-во элементов и в стеке...

Стек: Как вывести все элементы которые в содержаться в стеке?
Я пытаюсь реализовать корзину. У меня есть stack класса Item. В item хранится наименование продукта...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru