23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
1

Добавление строки в стек

13.11.2012, 21:11. Показов 6867. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер!

Уже раза 3-4 писал, так и никто не помог....
Программку чутку доделал, осталось только организовать добавление элементов структуры в стек.
Помогите пожалуйста.

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <iostream>
#include <string>
 
using namespace std;
 
template<typename T>
class MyStack
{
  public:
    MyStack();
    void push(T);
    void pop();
    T top();
    T operator[](int);
    int mySize() const;
  private:
    int size; 
    T* stack;                    
};
 
template<typename T>
MyStack<T>::MyStack()
  :size(0)
{       
}                                           
 
template<typename T>
void MyStack<T>::push( T elem )
{ 
  if(size == 0)
  {     
    stack = new T[size];
    stack[size++] = elem;
  }
  else
  { 
   T tempMass[size];  
   
   for( int i = 0; i < size; ++i)
   {
     tempMass[i] = stack[i];  
   }     
     
   delete [] stack;
   stack = new T[++size];
   
   for( int i = 0; i < size; ++i)
   {
     stack[i] = tempMass[i];  
   } 
   
   stack[size-1] = elem;
  }                      
}
 
template<typename T>
void MyStack<T>::pop()
{
  if( size > 0 )
  { 
    --size;    
    T tempMass[size];  
    for( int i = 0; i < size; ++i )
    {
      tempMass[i] = stack[i];
    }
    delete [] stack;
    stack = new T[size];
    
    for( int i = 0; i < size; ++i )
      stack[i] = tempMass[i];
  }
  else 
  cout << "Stek pust." << endl;       
}   
 
template<typename T>
T MyStack<T>::top()
{
  if( size > 0 )                 
  return stack[size-1];    
  else if( size == 0 )
  cout << "Stek pust." << endl;
}   
 
template<typename T>
T MyStack<T>::operator[](int pos)
{   
  if( pos <= size - 1 )                          
  return stack[pos]; 
  else 
  cout << "Vihod za granici steka/" << endl;                          
}                               
 
template<typename T>
int MyStack<T>::mySize() const
{
  return size;  
}
 
struct sport
{
 string fio;
 string vid;
 string fak;
 string spc;
 int lvl;
};
 
void word(sport * obj, int n)
{
     for (int i=0; i < n; i++)
     {
        std::cout << std::endl;
        std::cout << "Ââåäèòå äàííûå Ô.È.Î.: ";
        getline(std::cin, obj[i].fio);
        std::cout << "Ââåäèòå äàííûå î ñïîðòå: ";
        getline(std::cin, obj[i].vid);
        std::cout << "Ââåäèòå äàííûå î ôàêóëüòåòå: ";
        getline(std::cin, obj[i].fak);
        std::cout << "Ââåäèòå äàííûå î ñïåöèàëüíîñòè: ";
        getline(std::cin, obj[i].spc);
        std::cout << "Ââåäèòå äàííûå î âîçðàñòå: ";
        std::cin >> obj[i].lvl;
        std::cout << std::endl;
     } 
}
  
int main ()
{
    system("chcp 1251");
    setlocale(0, "rus");
    
    int n = 1;
    sport* mas_struct=new sport[n]; // Ìàññèâ äëÿ õðàíåíèÿ äàííûõ
    word(mas_struct,n); // Ôóíêöèÿ ââîäà äàííûõ î ñòóäåíòàõ
 
    
 
    system("pause");
    return 0;   
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2012, 21:11
Ответы с готовыми решениями:

Добавление элемента в стек
Здравствуйте, после цикла for, в котором добавляю элементы в стек, голова стека begin остается =...

Добавление элемента в стек
Помогите пофиксить такую проблему,когда использую добавление элемента в стек, добавляется элемент...

Добавление элемента в стек
Здравствуйте, пытаюсь написать функцию добавления элемента в стек. Выдаёт ошибки в строках 47,48....

Добавление элементов в стек
Задание: Тут сам язык даже не имеет значения, просто вообще не могу понять, что требуется...

14
2271 / 1763 / 740
Регистрация: 27.07.2012
Сообщений: 5,238
13.11.2012, 21:41 2
C++
1
T operator[](int);
Стек, он на то и стек, что к произвольному элементу в нём не обратишься. Эта перегрузка оператора здесь не нужна, скорее всего.
1
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
14.11.2012, 01:46  [ТС] 3
Ну допустим, и попрощаемся с шаблончиком:
C++
1
2
3
4
5
6
7
8
template<typename T>
T MyStack<T>::operator[](int pos)
{   
  if( pos <= size - 1 )                          
  return stack[pos]; 
  else 
  cout << "Vihod za granici steka/" << endl;                          
}
А как все таки со строками работать?
0
2271 / 1763 / 740
Регистрация: 27.07.2012
Сообщений: 5,238
14.11.2012, 09:56 4
Цитата Сообщение от SuLLeN Посмотреть сообщение
А как все таки со строками работать?
Ну а что не получается-то? Пробовал написать такое?
C++
1
2
MyStack<string> stringStack;
stringStack.push("Push Me Baby");
Работает?
1
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
14.11.2012, 16:12  [ТС] 5
А если по элементно из структуры
C++
1
2
3
4
5
6
7
8
struct sport
{
 string fio;
 string vid;
 string fak;
 string spc;
 int lvl;
};
вбивать в стек, то как будет выглядеть это?

Добавлено через 11 минут
Сначала нужно записать элементы в массив, к примеру mas_struct, а потом этот массив в стек запилить...
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
14.11.2012, 16:18 6
Лично я нихрена не понял что надо в стек запихать, строку, элемент структуры, структуру или массив структур...
Видимо поэтому
Цитата Сообщение от SuLLeN Посмотреть сообщение
Уже раза 3-4 писал, так и никто не помог....
0
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
14.11.2012, 17:05  [ТС] 7
Создать стек записи Спортсмен на основе статического массива типа запись.
Реализовать методы : Добавить элемент, удалить элемент, вершина стека.

Может я объясняю не так.... в общем вот задание.

Добавлено через 2 минуты
В записи должны быть элементы: string fio (ФИО), string vid (Вид спорта), string fak (Факультет), string spc (Специальность), int lvl (Возраст).
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
14.11.2012, 17:19 8
А шаблон тебе зачем?
В общем класс стек должен работать со структурой (sport в твоем случае).
Я бы реализовал стек на основе указателей на структуру.
C++
1
2
3
4
5
6
sport *p_sport = new sport; // выделил
... // заполнил
my_stack.push( p_sport ); // затолкнул
...
my_stack.pop( &p_sport ); // вытолкнул
delete p_sport; // удалил
1
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
14.11.2012, 17:56  [ТС] 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main ()
{
    system("chcp 1251");
    setlocale(0, "rus");
    
    int i,n = 1;
    sport *p_sport = new sport[n];
    word(p_sport,n);
    
    MyStack.push(p_sport); // Тут ошибка
    
    MyStack.pop(&p_sport); // И тут
    
    delete p_sport;
 
    system("pause");
    return 0;   
}
C++
1
2
3
 C:\Users\SulleN\Desktop\stek.cpp In function `int main()': 
128 C:\Users\SulleN\Desktop\stek.cpp missing template arguments before '.' token 
130 C:\Users\SulleN\Desktop\stek.cpp missing template arguments before '.' token
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
14.11.2012, 18:11 10
А MyStack у тебя где определен?
Метод pop принимает аргументы?
0
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
14.11.2012, 18:15  [ТС] 11
Вот весь код

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <iostream>
#include <string>
 
using namespace std;
 
template<typename T>
class MyStack
{
  public:
    MyStack();
    void push(T);
    void pop();
    T top();
    int mySize() const;
  private:
    int size; 
    T* stack;                    
};
 
template<typename T>
MyStack<T>::MyStack()
  :size(0)
{       
}                                           
 
template<typename T>
void MyStack<T>::push( T elem )
{ 
  if(size == 0)
  {     
    stack = new T[size];
    stack[size++] = elem;
  }
  else
  { 
   T tempMass[size];  
   
   for( int i = 0; i < size; ++i)
   {
     tempMass[i] = stack[i];  
   }     
     
   delete [] stack;
   stack = new T[++size];
   
   for( int i = 0; i < size; ++i)
   {
     stack[i] = tempMass[i];  
   } 
   
   stack[size-1] = elem;
  }                      
}
 
template<typename T>
void MyStack<T>::pop()
{
  if( size > 0 )
  { 
    --size;    
    T tempMass[size];  
    for( int i = 0; i < size; ++i )
    {
      tempMass[i] = stack[i];
    }
    delete [] stack;
    stack = new T[size];
    
    for( int i = 0; i < size; ++i )
      stack[i] = tempMass[i];
  }
  else 
  cout << "Stek pust." << endl;       
}   
 
template<typename T>
T MyStack<T>::top()
{
  if( size > 0 )                 
  return stack[size-1];    
  else if( size == 0 )
  cout << "Stek pust." << endl;
}                               
 
template<typename T>
int MyStack<T>::mySize() const
{
  return size;  
}
 
struct sport
{
 string fio;
 string vid;
 string fak;
 string spc;
 int lvl;
};
 
void word(sport * obj, int n)
{
     for (int i=0; i < n; i++)
     {
        std::cout << std::endl;
        std::cout << "Ââåäèòå äàííûå Ô.È.Î.: ";
        getline(std::cin, obj[i].fio);
        std::cout << "Ââåäèòå äàííûå î ñïîðòå: ";
        getline(std::cin, obj[i].vid);
        std::cout << "Ââåäèòå äàííûå î ôàêóëüòåòå: ";
        getline(std::cin, obj[i].fak);
        std::cout << "Ââåäèòå äàííûå î ñïåöèàëüíîñòè: ";
        getline(std::cin, obj[i].spc);
        std::cout << "Ââåäèòå äàííûå î âîçðàñòå: ";
        std::cin >> obj[i].lvl;
        std::cout << std::endl;
     } 
}
  
int main ()
{
    system("chcp 1251");
    setlocale(0, "rus");
    
    int i,n = 1;
    sport *p_sport = new sport[n];
    word(p_sport,n);
    
    MyStack.push(p_sport);
    
    MyStack.pop(&p_sport);
    
    delete p_sport;
 
    system("pause");
    return 0;   
}
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
14.11.2012, 18:24 12
Ну а дальше то что?
Класс стека не определен, метод pop параметров не принимает. Что будешь предпринимать?
1
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
14.11.2012, 18:28  [ТС] 13
Знал бы, не просил бы помощи... логично ведь?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
14.11.2012, 18:36 14
Нее дружок, с такими знаниями ты сам ничего не сделаешь, а думать за тебя я не хочу.
0
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
14.11.2012, 19:57  [ТС] 15
Может кто другой поможет тогда? В беде человека оставлять тоже не вариант...

Добавлено через 11 минут
Ну как обычно, пол пути прошел и встал на месте...

Добавлено через 40 минут
Люди, помогите кто нибудь, пожалуйста, неделю уже пишу!
0
14.11.2012, 19:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2012, 19:57
Помогаю со студенческими работами здесь

Стек: добавление и изъятие элемента, проверка стека
Здравствуйте,через неделю у меня экзамен и нам выдали вопросы которые будут на экзамене и один...

Ввести строки из файла, записать их в стек. Вывести строки в файл в обратном порядке
Помогите сделать лабу :help:

Создать стек. Реализовать добавление, вывода и удаления из стека
Создать стек. Реализовать добавление, вычисление среднего арифметического парных значений элементов...

печать строки. передача строки через стек
c1 segment assume cs:c1, ds:c1, ss:c1 org 100h start: jmp setup prg proc pop dx mov...


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

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

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