Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 11
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте,помогите разобраться с задачей пожалуйста.
Дана последовательность из 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 минуты
на правах апа
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2012, 18:42
Ответы с готовыми решениями:

Использование стека
Очереди, стеки В текстовом файле записано без ошибок логическое выражение следующего вида:...

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

Использование стека STL
Прошу поддержки, дайте комментарии к коду по стекам.Код писал мой кореш,а я плохо врубаюсь в стеки...

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

6
35 / 35 / 12
Регистрация: 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;
}
0
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;
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
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/... c4854995df
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
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;
}
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
13.06.2012, 05:21 6
Toshkarik, а как же
если подряд идет несколько отрицательных чисел,печатать их в обратном порядке.
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
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;
      }
0
13.06.2012, 13:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2012, 13:02
Помогаю со студенческими работами здесь

Интересная задача на использование стека
Здравствуйте, уважаемые форумчане! На этот раз решил немного поделиться недавно полученным опытом...

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

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

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...)
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru