Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создать стек с числами в диапазоне от -50 до +50 
:(
    Опции темы
shilovec5377
Дата 15.5.2013, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 15.5.2013

Репутация: нет
Всего: нет



Всем привет. помогите с условием: 
 Преобразовать стек в 2 стека. В первый поместить все четные, а во второй нечетные числа.

Код

#include <iostream>
#include <stack>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
template <typename T>
void print_stack(std::stack<T> &s)
{
    if (!s.empty()) {
        T top = s.top();
        s.pop();
        cout << top << endl;
        print_stack(s);
        s.push(top);
    }
}
 
int main()
{
    srand(time(0));
 
    stack<int> st;
    
    double max = 50.0, min = -50.0;
    
    for (size_t i = 0; i != 100; i++)
        st.push( (max - min) * ( (double)rand() / (double)RAND_MAX ) + min );
 
    print_stack(st);
    return 0;
}

 
PM MAIL   Вверх
bsa
Дата 15.5.2013, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



shilovec5377, у стека есть три основных метода:
1. запихать что-то в стек (push)
2. вытащить из стека (pop)
3. получить содержимое "вершины" стека (top) - элемента добавленного последним.

Взять i-й элемент ты не можешь по определению. Только верхний (последний). Вот и придумай алгоритм.
Кстати, твоя функция печати стека выводит только элемент добавленный последним. Причем, делает это крайне неоптимально. Похоже, что-то было взято из очереди.
PM   Вверх
Guinness
Дата 15.5.2013, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: 2
Всего: 10



Цитата(bsa @  15.5.2013,  16:18 Найти цитируемый пост)
Кстати, твоя функция печати стека выводит только элемент добавленный последним. Причем, делает это крайне неоптимально. Похоже, что-то было взято из очереди.

Мне тоже сначала так показалось. Тут более извращенно поступили - рекурсивный вызов функции.
PM MAIL   Вверх
shilovec5377
Дата 15.5.2013, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 15.5.2013

Репутация: нет
Всего: нет



подскажите пожалуйста как можно сделать:  Преобразовать стек в 2 стека. В первый поместить все четные, а во второй нечетные числа.
PM MAIL   Вверх
feodorv
Дата 15.5.2013, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(shilovec5377 @  15.5.2013,  17:24 Найти цитируемый пост)
Преобразовать стек в 2 стека. В первый поместить все четные, а во второй нечетные числа. 

Вау. А ведь ещё каплок есть и жирный фонт))) И буквы в полэкрана...

Код

    srand(time(0));
 
    stack<int> st;
    
    double max = 50.0, min = -50.0;
    
    for (size_t i = 0; i != 100; i++)
        st.push( (max - min) * ( (double)rand() / (double)RAND_MAX ) + min );

    stack<int> stEven, stOdd;

    while( !st.empty() )
    {
       int v = st.top();
       st.pop();

       if( v % 2 == 0 ) stEven.push( v ); else  stOdd.push( v );
    }


А печать переделать нужно, а то она разрушает печатаемый стек...

Это сообщение отредактировал(а) feodorv - 15.5.2013, 19:18


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
bsa
Дата 15.5.2013, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Разрушает? Это же рекурсивная функция!
shilovec5377, делай по аналогии с функцией печати. Только передавай не один стек, а два - второй для отрицательных чисел.
PM   Вверх
feodorv
Дата 15.5.2013, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(bsa @  15.5.2013,  20:40 Найти цитируемый пост)
Разрушает? Это же рекурсивная функция!

Ага, рекурсия только созидает)))

Цитата(bsa @  15.5.2013,  20:40 Найти цитируемый пост)
Только передавай не один стек, а два - второй для отрицательных чисел.

Да, и чтобы сохранить изначальный порядок следования элементов, придётся использовать ещё один временный стек, в который нужно будет запихнуть значения в обратном порядке по отношению к изначальному стеку.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
bsa
Дата 15.5.2013, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



feodorv, сделай трассировку этой функции. Она добавляет в стек после работы рекурсивного вызова, поэтому порядок сохраняется.
PM   Вверх
feodorv
Дата 15.5.2013, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



О, слона-то я и не заметил)))
А слон красивый)))


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.