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

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

Восстановить пароль Регистрация
 
ARA
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 11
12.06.2012, 18:42     Использование стека #1
Здравствуйте,помогите разобраться с задачей пожалуйста.
Дана последовательность из 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++
C++ Использование стека в преобразовании
C++ Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести эталонный символ.
C/C++ Использование функций, использование break C++
C++ Использование стека. Дана строка символов. Проверьте правильность расстановки в ней круглых скобок.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
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
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 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
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
13.06.2012, 05:21     Использование стека #6
Toshkarik, а как же
если подряд идет несколько отрицательных чисел,печатать их в обратном порядке.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2012, 13:02     Использование стека
Еще ссылки по теме:

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...) C++
Удалить элемент из стека по условию и добавить элемент в начало стека C++
Использование стека для печати строки в обратной последовательности C++

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

Или воспользуйтесь поиском по форуму:
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 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     Использование стека
Ответ Создать тему
Опции темы

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