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

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

Войти
Регистрация
Восстановить пароль
 
ARA
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 11
#1

Использование стека - C++

12.06.2012, 18:42. Просмотров 842. Ответов 6
Метки нет (Все метки)

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

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
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream>
#include <malloc.h>
 
using namespace std;
 
#define n 6
#define m 6
 
int _tmain(int argc, _TCHAR* argv[])
{int i,j;
int a[n];
int *b;
for (i=1;i<=n;i++)
{
    cout<<"vvedite element=";
    cin>>a[i];
}
b=(int*)malloc(sizeof(int)*m);
for (i=1;i<=n;i++)
    for (j=1;j<=m;j++)
        {
            if (a[i]<0)
                b[j]=a[i];
        }
 
 
for (j=m;j>0;j--)
 
{
    if (b[j]<0)
    cout<<b[j];
}
 
 
 
getch ();
 
return 0;
 
}
Добавлено через 1 час 7 минут
переделал,но программа все равно не запускается,помогите пожалуйста
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
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#define max 30
 
int st[max];
int a;
int i=-1;
 
 
void main()
{
 
int a;
printf("vvedite chisla \n");
       while (a!=0)
       {               
       scanf("%d",&a);
       if (a>0)
       {
        i++;
        st[i]=a;
       }
       if ((a<=0)&&(i>-1))
       {
        while(i!=-1)
       {
        printf("%d ",st[i]);
        i--;
       }
       }
       } 
 
 
}
Добавлено через 17 часов 53 минуты
на правах апа
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2012, 18:42     Использование стека
Посмотрите здесь:

Использование стека - C++
Очереди, стеки В текстовом файле записано без ошибок логическое выражение следующего вида: &lt;лог.выр.&gt;::=true | false | !&lt;лог.выр.&gt; |...

Использование стека в преобразовании - C++
Наткнулся на одну проблему и нуждаюсь в помощи. задание следующее. Нужно преобразовать инфиксное выражение в постфиксное, используя стек. ...

Реализация и использование стека - C++
Господа, помогите разобраться со стеком. Хотя бы расскажите, как его правильно объявлять и заполнять. Я смотрел много всяких тем и сайтов,...

Использование стека для печати строки в обратной последовательности - C++
нужно написать программу, которая вводит строку текста и использует объект стека для печати строки в обратной последовательности. очень...

Использование стека. Дана строка символов. Проверьте правильность расстановки в ней круглых скобок. - C++
Использую пример программы от сюда: http://www.intuit.ru/department/algorithms/staldata/30/1.html Пример 1. Дана строка символов....

реализация стека - C++
всем привет! народ помогите с программой (не пойму в чем ошибка, помогите исправить) #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Переполнение стека - C++
Всем привет. Помогите, пожалуйста с решением одной проблемы. Мне нужно в программе обрабатывать большие объемы текста. 10 000 000 символов....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rakota
35 / 35 / 1
Регистрация: 05.02.2012
Сообщений: 76
12.06.2012, 21:12     Использование стека #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <stack>
#include <algorithm>
 
int main()
{
    std::stack<int> st;
    int i = 0;
    while(std::cin >> i)
        st.push(i);
    std::cout << '\n';
    while(!st.empty())
    {
        if((i = st.top()) < 0)
            std::cout << i << '\n';
        st.pop();
    }
    return 0;
}
ARA
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 11
12.06.2012, 23:26  [ТС]     Использование стека #3
std::stack<int> st;
а что это?нам сказали делать так
C++
1
2
3
int st[max];
int a;
int i=-1;
MrGluck
Модератор
Эксперт CЭксперт С++
7148 / 4314 / 629
Регистрация: 29.11.2010
Сообщений: 11,730
13.06.2012, 03:36     Использование стека #4
Цитата Сообщение от ARA Посмотреть сообщение
а что это?нам сказали делать так
C++
1
2
3
int st[max];
int a;
int i=-1;
Вам сказали делать свою реализацию стека.

Вот, чтобы поняли алгоритм работы программы. А дальше свою реализацию прикрутите и все.
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
#include <iostream>
#include <stack>
#include <cstddef>
 
int main()
{
    int arr[] = {1, 2, 3, 4, -7, -6, -5, 8, -11, -10, -9, 12, -13};
    const std::size_t N = sizeof(arr) / sizeof(*arr);
    std::stack<int> st;   
    for (std::size_t i=0; i < N; i++)
        std::cout<< arr[i]<< " ";
    std::cout<< std::endl;
    for (std::size_t i=0; i < N; i++)   
        if (arr[i] < 0)
        {
            st.push(arr[i]);
            while(arr[++i] < 0)
                st.push(arr[i]);
            while(!st.empty())
            { 
                std::cout<< st.top()<< " ";
                st.pop();
            }
        }
    return 0;
}
http://liveworkspace.org/code/ff7235...aa3fc4854995df
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
13.06.2012, 04:30     Использование стека #5
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
#include <iostream>
 
 
int main() {
   const unsigned int stackSize = 128;
   unsigned int stackPos = 0,
                n;
   int stack[ stackSize ],
       number;
 
   std::cout << "Enter number of elements: ";
   std::cin >> n;
 
   for ( unsigned int i = 1; i <= n; i++ ) {
      std::cout << "Enter " << i << " element: ";
      std::cin >> number;
      
      if ( number < 0 )
         stack[ stackPos++ ] = number;
   }
 
   std::cout << std::endl;
 
   while ( stackPos > 0 )
      std::cout << stack[ --stackPos ] << ' ';
 
   std::cout << std::endl;
 
   return 0;
}
MrGluck
Модератор
Эксперт CЭксперт С++
7148 / 4314 / 629
Регистрация: 29.11.2010
Сообщений: 11,730
13.06.2012, 05:21     Использование стека #6
Toshkarik, а как же
если подряд идет несколько отрицательных чисел,печатать их в обратном порядке.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2012, 13:02     Использование стека
Еще ссылки по теме:

Переполнение стека - C++
Хочу полюбопытствовать. Вычитал недавно, что на стек выделяется ограниченная область памяти, и в языке Си это 4 Кб. Вопрос: Если мне...

увеличение стека - C++
народ кто знает как увеличить размер стека ? VS 2008

Реализация стека - C++
Реализация стека (добавить 1 элемент, вытащить 1 элемент в стеке, определить, когда стек будет пустой). Помогите пожалуйста написать...

про 2 стека - C++
Обьясните на словах, каким образом: 1.вводим стек первый 2.если мое условие - вводим во второй Вопрос: Каким образом реализовать...

Переполнение стека - C++
Есть функция f(): void f() { //... std::make_pair&lt;size_t, size_t&gt; pairReturner(); //... } Если пускать ее в цикле от...


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

Или воспользуйтесь поиском по форуму:
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
13.06.2012, 13:02     Использование стека #7
Ну при выталкивании из стека они и печатаются в обратном порядке. Думаю это и имелось ввиду в задании.
Если же имеется ввиду в том порядке, в котором они печатались, то вот так можно сделать:
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
#include <iostream>
 
 
int main() {
   const unsigned int stackSize = 128;
   unsigned int stackPos = 0,
                bufferStackPos = 0,
                n;
   int stack[ stackSize ],
       bufferStack[ stackSize ],
       number;
 
   std::cout << "Enter number of elements: ";
   std::cin >> n;
 
   for ( unsigned int i = 1; i <= n; i++ ) {
      std::cout << "Enter " << i << " element: ";
      std::cin >> number;
      
      while ( number < 0 ) {
         bufferStack[ bufferStackPos++ ] = number;
         
         std::cout << "Enter " << ++i << " element: ";
         std::cin >> number;
      }
      
      while ( bufferStackPos > 0 )
         stack[ stackPos++ ] = bufferStack[ --bufferStackPos ];
   }
 
   std::cout << std::endl;
 
   while ( stackPos > 0 )
      std::cout << stack[ --stackPos ] << ' ';
 
   std::cout << std::endl;
 
   return 0;
}
Добавлено через 17 минут
Единственно упустил: вложенный цикл
C++
1
2
3
4
5
6
      while ( number < 0 ) {
         bufferStack[ bufferStackPos++ ] = number;
         
         std::cout << "Enter " << ++i << " element: ";
         std::cin >> number;
      }
нужно изменить на
C++
1
2
3
4
5
6
7
8
9
      while ( number < 0 ) {
         bufferStack[ bufferStackPos++ ] = number;
 
         if ( i == n )
            break;         
 
         std::cout << "Enter " << ++i << " element: ";
         std::cin >> number;
      }
Yandex
Объявления
13.06.2012, 13:02     Использование стека
Ответ Создать тему
Опции темы

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