Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

12.06.2012, 18:42. Просмотров 873. Ответов 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 минуты
на правах апа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2012, 18:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование стека (C++):

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

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

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

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

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

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

6
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;
}
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;
0
MrGluck
Модератор
Эксперт CЭксперт С++
7496 / 4612 / 694
Регистрация: 29.11.2010
Сообщений: 12,626
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/ff72359c67ec98f4e6aa3fc4854995df
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 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;
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
7496 / 4612 / 694
Регистрация: 29.11.2010
Сообщений: 12,626
13.06.2012, 05:21 #6
Toshkarik, а как же
если подряд идет несколько отрицательных чисел,печатать их в обратном порядке.
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 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;
      }
0
13.06.2012, 13:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2012, 13:02
Привет! Вот еще темы с ответами:

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

Удалить элемент из стека по условию и добавить элемент в начало стека - C++
Здравствуйте, помогите пожалуйста исправить(дописать) программы. 1). Нужно удалить элемент, находящийся в середине стека , если число...

Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести эталонный символ. - C++
Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести...

Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя. - C++
Помогите пожалуйста!!!!!!! Сделать три варианта: первый вариант – передача данных между функциями с помощью глобального...


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

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

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