Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для SuLLeN
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855

Не выполняется функция удаления

15.11.2012, 16:15. Показов 1894. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Функция удаления не выполняется.
Вот код:

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
#include <iostream>
#define MAX 15
 
using namespace std;
 
char *stack[MAX]; // Ìàññèâ äëÿ ñòåêà
int tos=0; // Äëÿ âåðøèíû ñòåêà
 
void push(char *i) // Ôóíêöèÿ äîáàâëåíèÿ ýëåìåòà â ñòýê
{
    if(tos >= MAX) // Ïðîâåðêà íà çàïîëíåííîñòü ñòåêà
    {
        printf("Steck polon\n");
        return;
    }
    strcpy(stack[tos],i); // Çàïèñûâàåì ñòðîêó â ñòýê
    tos = tos + 1; // Óâåëè÷èâàåì âåðøèíó ñòýêà
}
 
int size() // Äëÿ îïðåäåëåíèÿ ðàçìåðà ñòåêà
{
    if (tos >= 0) return tos;// Åñëè áîëüøå íóëÿ, òî âîçâðàùàåì òåêóùåå çíà÷åíèå âåðøèíû ñòýêà
    else return 0; // èíà÷å âîçâðàùàåì íîëü
}
 
char *pop(void) // Ôóíêöèÿ âûòàñêèâàíèÿ ýëåìåíòà èç ãîëîâû
{
    char *str = new char[30]; // Áóôôåð
    tos = tos - 1; // Ñäâèãàåìñÿ îò ãîëîâû âíèç
    if(tos < 0) // Åñëè âåðøèíà ìåíüøå íóëÿ, òî ñòýê ïóñòîé
    {
        printf("Steck pust\n");
        return 0;
    }
    str = stack[tos]; //èíà÷å â áóôôåð ïîìåøàåì òåêóùåå çíà÷åíèå âåðøèíû
    return str; // âåçâðàùàåì ýòî çíà÷åíèå
}
 
void delet(char *element) // Ôóíêöèÿ óäàëåíèÿ
{
    int razmer = size(); // Ïîëó÷àåì ðàçìåðíîñòü ñòåêà
    char *buf[MAX]; // Äëÿ áóôôåðà, èñ÷ïîëüçóåòñÿ ïðè óäàëåíèè
    for(int i = 0;i<MAX;i++) // ÂÛäåëåíèå ïàìÿòè
    {
        buf[i] = new char[30];
    }
    int c = 0; // Ñ÷åò÷èêè
    int ravn = 0;
    for(int i = 0;i<=size();i++) // Öèêë äëÿ óäàëåíèÿ
    {
        /*Ïðîâåðÿåì,åñëè íå ðàâíû ýëåìåíò èç
        ñòåêà è ýëåìåíò ââåäåäíûé ñ êëàâèàòóðû,
        òî êîïèðóåì â áóôôåð
        óâåëè÷èâàåì ñ÷åò÷èê
        è óäàëÿåì ïîëíîñòüþ äàííóþ ÿ÷åêó èç ñòåêà*/
        if (strcmp(element,stack[i])!=0)
        {
            strcpy(buf[c],stack[i]);
            c = c + 1;
            delete stack[i];
        }
        else //èíà÷å ïðîñòî óäàëÿåì ïîëíóñòüþ ÿ÷åéêó èç ñòåêà
        {
            delete stack[i];
            ravn = ravn + 1;
        }
    }
    tos=0;
    /*Âûäåëÿåì ïàìÿòü äëÿ ñòåêà, òàê êàê îíà áûëà
    óäàëåíà
    è êëàäåì â ñòåê çíà÷åíèÿ*/
    for (int i=0;i<=(razmer-ravn);i++)
    {
        stack[i] = new char[30];
        push(buf[i]);
    }
}
 
int main() // Îcíîâíîå òåëî ïðîãðàììû
{
    system("chcp 1251");
    setlocale(0, "rus");
    
    for (int i = 0;i<MAX;i++) // Âûäåëåíèå ïïàìÿòè äëÿ ýëåìåíòîâ ñòýê
    {
        stack[i] = new char[30];
    }
    int NumberOfElements = 0; // ×èñëî ýëåìåíòîâ ñòåêà
    char *Element = new char[30]; // Äëÿ ââîäà ýëåìåíòà äëÿ óäàëåíèÿ
    cout << "Ñêîëüêî ýëåìåíòîâ äîáàâèòü: "; // Ââîä êîëè÷åñòâà ýëåìåíòîâ ñòåêà
    cin >> NumberOfElements;
    cout << "Ââåäèòå ýëåìåíòû" << endl;
    
    for (int i = 0;i < NumberOfElements; i++) // Ââîä ýëåìåíòîâ
    {
        cout << "Ýëåìåíò " << i << ": ";
        cin >> Element;
        push(Element);
    }
    cout << "Âåðõíèé ýëåìåíò: " << pop() << endl; // Ââîä ýëåìåíòà äëÿ óäàëåíèÿ
    cout << "Êàêîé ýëåìåíò óäàëèòü: ";
    char *ItemToDelete = new char[30];
    cin >> ItemToDelete;
    delet(ItemToDelete); // Óäàëåíèå ýëåìåíòà
    cout <<"Âåðõíèé ýëåìåíò: " << pop() << endl << endl; // Ïå÷àòü òåêóùåé âåðøèíû ñòåêà
    system("PAUSE");
}
Добавлено через 5 часов 13 минут
Помогите хоть кто нибудь...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2012, 16:15
Ответы с готовыми решениями:

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба, угу), в которой нужно удалить весь текст в скобках,...

Не выполняется функция
Здравствуйте. C++ в Atmel Studio. Проблема в том, что компилятор не обращает никакого внимания на самодельную функцию и никак в неё не...

Функция удаления на С
Помогите исправить ошыбки в удалении вот полный код: #include &lt;stdio.h&gt; #include&lt;iostream.h&gt; #include &lt;conio.h&gt; void...

20
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
15.11.2012, 16:21
Цитата Сообщение от SuLLeN Посмотреть сообщение
C++
1
2
3
4
char *pop(void) // Функция вытаскивания элемента из головы {
char *str = new char[30];
//...
 str = stack[tos];
Утечка однозначно
C++
1
strcpy(str, stack[tos])
поможет
1
 Аватар для SuLLeN
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
15.11.2012, 16:48  [ТС]
Не помогло....
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
15.11.2012, 17: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
#include <iostream>
#define MAX 15
 
using namespace std;
 
char *stack[MAX]; // Ìàññèâ äëÿ ñòåêà
int tos=0; // Äëÿ âåðøèíû ñòåêà
 
void push(char *i) // Ôóíêöèÿ äîáàâëåíèÿ ýëåìåòà â ñòýê
{
    if(tos >= MAX) // Ïðîâåðêà íà çàïîëíåííîñòü ñòåêà
    {
        printf("Steck polon\n");
        return;
    }
    strcpy(stack[tos],i); // Çàïèñûâàåì ñòðîêó â ñòýê
    tos = tos + 1; // Óâåëè÷èâàåì âåðøèíó ñòýêà
}
 
int size() // Äëÿ îïðåäåëåíèÿ ðàçìåðà ñòåêà
{
    if (tos >= 0) return tos;// Åñëè áîëüøå íóëÿ, òî âîçâðàùàåì òåêóùåå çíà÷åíèå âåðøèíû ñòýêà
    else return 0; // èíà÷å âîçâðàùàåì íîëü
}
 
char *pop(void) // Ôóíêöèÿ âûòàñêèâàíèÿ ýëåìåíòà èç ãîëîâû
{
    char *str = new char[30]; // Áóôôåð
    tos = tos - 1; // Ñäâèãàåìñÿ îò ãîëîâû âíèç
    if(tos < 0) // Åñëè âåðøèíà ìåíüøå íóëÿ, òî ñòýê ïóñòîé
    {
        printf("Steck pust\n");
        return 0;
    }
    strcpy(str, stack[tos]); //èíà÷å â áóôôåð ïîìåøàåì òåêóùåå çíà÷åíèå âåðøèíû
    return str; // âåçâðàùàåì ýòî çíà÷åíèå
}
 
void delet(char *element) // Ôóíêöèÿ óäàëåíèÿ
{
    int razmer = size(); // Ïîëó÷àåì ðàçìåðíîñòü ñòåêà
    char *buf[MAX]; // Äëÿ áóôôåðà, èñ÷ïîëüçóåòñÿ ïðè óäàëåíèè
    for(int i = 0;i<MAX;i++) // ÂÛäåëåíèå ïàìÿòè
    {
        buf[i] = new char[30];
    }
    int c = 0; // Ñ÷åò÷èêè
    int ravn = 0;
    for(int i = 0;i<=size();i++) // Öèêë äëÿ óäàëåíèÿ
    {
        /*Ïðîâåðÿåì,åñëè íå ðàâíû ýëåìåíò èç
        ñòåêà è ýëåìåíò ââåäåäíûé ñ êëàâèàòóðû,
        òî êîïèðóåì â áóôôåð
        óâåëè÷èâàåì ñ÷åò÷èê
        è óäàëÿåì ïîëíîñòüþ äàííóþ ÿ÷åêó èç ñòåêà*/
        if (strcmp(element,stack[i])!=0)
        {
            strcpy(buf[c],stack[i]);
            c = c + 1;
            delete stack[i];
        }
        else //èíà÷å ïðîñòî óäàëÿåì ïîëíóñòüþ ÿ÷åéêó èç ñòåêà
        {
            delete stack[i];
            ravn = ravn + 1;
        }
    }
    tos=0;
    /*Âûäåëÿåì ïàìÿòü äëÿ ñòåêà, òàê êàê îíà áûëà
    óäàëåíà
    è êëàäåì â ñòåê çíà÷åíèÿ*/
    for (int i=0;i<=(razmer-ravn);i++)
    {
        stack[i] = new char[30];
        push(buf[i]);
    }
}
 
int main() // Îcíîâíîå òåëî ïðîãðàììû
{
    system("chcp 1251");
    setlocale(0, "rus");
    
    for (int i = 0;i<MAX;i++) // Âûäåëåíèå ïïàìÿòè äëÿ ýëåìåíòîâ ñòýê
    {
        stack[i] = new char[30];
    }
    int NumberOfElements = 0; // ×èñëî ýëåìåíòîâ ñòåêà
    char *Element = new char[30]; // Äëÿ ââîäà ýëåìåíòà äëÿ óäàëåíèÿ
    cout << "How many elems to add?: "; // Ââîä êîëè÷åñòâà ýëåìåíòîâ ñòåêà
    cin >> NumberOfElements;
    cout << "Input elems" << endl;
    
    for (int i = 0;i < NumberOfElements; i++) // Ââîä ýëåìåíòîâ
    {
        cout << "el " << i << ": ";
        cin >> Element;
        push(Element);
    }
    cout << "top elem: " << pop() << endl; // Ââîä ýëåìåíòà äëÿ óäàëåíèÿ
    cout << "what elem to delete(input str): ";
    char *ItemToDelete = new char[30];
    cin >> ItemToDelete;
    delet(ItemToDelete); // Óäàëåíèå ýëåìåíòà
    cout <<"Top elem: " << pop() << endl << endl; // Ïå÷àòü òåêóùåé âåðøèíû ñòåêà
        cout << "what elem to delete(input str): ";
    cin >> ItemToDelete;
    delet(ItemToDelete); // Óäàëåíèå ýëåìåíòà
    cout <<"Top elem: " << pop() << endl << endl; // Ïå÷àòü òåêóùåé âåðøèíû ñòåêà
        cout << "what elem to delete(input str): ";
    cin >> ItemToDelete;
    delet(ItemToDelete); // Óäàëåíèå ýëåìåíòà
    cout <<"Top elem: " << pop() << endl << endl; // Ïå÷àòü òåêóùåé âåðøèíû ñòåêà
    system("PAUSE");
}
1
 Аватар для SuLLeN
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
16.11.2012, 04:11  [ТС]
Все равно при попытке удалить верхний элемент, он снова показывает его...
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
16.11.2012, 04:25
что я делаю не так
Миниатюры
Не выполняется функция удаления  
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
16.11.2012, 04:49
что я делаю не так?
0
 Аватар для SuLLeN
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
17.11.2012, 12:25  [ТС]
Значит что то не так... задумка была удалить по его номеру а не значению... именно для этого перед вводом элемента пишется его номер.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
17.11.2012, 12:32
Цитата Сообщение от SuLLeN Посмотреть сообщение
Значит что то не так... задумка была удалить по его номеру а не значению... именно для этого перед вводом элемента пишется его номер.
Нет, по значению, именно для этого в функцию void delet(char *element) передаётся строка char *element, значение которой ищется в списке.
0
 Аватар для SuLLeN
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
17.11.2012, 17:58  [ТС]
А как туда можно вставить структуру?

Добавлено через 1 минуту
К примеру
C++
1
2
3
4
5
6
7
8
struct sport
{
    string fio;
    string vid;
    string fak;
    string spc;
    string lvl;
};
Так что бы можно было вводить и удалять элементы так же.

Добавлено через 5 часов 13 минут
Ок, помогите исправить ошибку программы:

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
#include <iostream>
#define MAX 15
 
using namespace std;
 
char *stack[MAX]; // Ìàññèâ äëÿ ñòåêà
int tos=0; // Äëÿ âåðøèíû ñòåêà
 
void push(char *i) // Ôóíêöèÿ äîáàâëåíèÿ ýëåìåòà â ñòýê
{
    if(tos >= MAX) // Ïðîâåðêà íà çàïîëíåííîñòü ñòåêà
    {
        cout << "Ñòåê ïîëîí!" << endl;
        return;
    }
    strcpy(stack[tos],i); // Çàïèñûâàåì ñòðîêó â ñòýê
    tos = tos + 1; // Óâåëè÷èâàåì âåðøèíó ñòýêà
}
 
int size() // Äëÿ îïðåäåëåíèÿ ðàçìåðà ñòåêà
{
    if (tos >= 0) return tos;// Åñëè áîëüøå íóëÿ, òî âîçâðàùàåì òåêóùåå çíà÷åíèå âåðøèíû ñòýêà
    else return 0; // èíà÷å âîçâðàùàåì íîëü
}
 
char *pop(void) // Ôóíêöèÿ âûòàñêèâàíèÿ ýëåìåíòà èç ãîëîâû
{
    char *str = new char[30]; // Áóôôåð
    tos = tos - 1; // Ñäâèãàåìñÿ îò ãîëîâû âíèç
    if(tos < 0) // Åñëè âåðøèíà ìåíüøå íóëÿ, òî ñòýê ïóñòîé
    {
        cout << "Ñòåê ïóñò!" << endl;
        return 0;
    }
    strcpy(str, stack[tos]); //èíà÷å â áóôôåð ïîìåøàåì òåêóùåå çíà÷åíèå âåðøèíû
    return str; // âåçâðàùàåì ýòî çíà÷åíèå
}
 
void delet(char *element) // Ôóíêöèÿ óäàëåíèÿ
{
    int razmer = size(); // Ïîëó÷àåì ðàçìåðíîñòü ñòåêà
    char *buf[MAX]; // Äëÿ áóôôåðà, èñ÷ïîëüçóåòñÿ ïðè óäàëåíèè
    for(int i = 0;i<MAX;i++) // ÂÛäåëåíèå ïàìÿòè
    {
        buf[i] = new char[30];
    }
    int c = 0; // Ñ÷åò÷èêè
    int ravn = 0;
    for(int i = 0;i<=size();i++) // Öèêë äëÿ óäàëåíèÿ
    {
        /*Ïðîâåðÿåì,åñëè íå ðàâíû ýëåìåíò èç
        ñòåêà è ýëåìåíò ââåäåäíûé ñ êëàâèàòóðû,
        òî êîïèðóåì â áóôôåð
        óâåëè÷èâàåì ñ÷åò÷èê
        è óäàëÿåì ïîëíîñòüþ äàííóþ ÿ÷åêó èç ñòåêà*/
        if (strcmp(element,stack[i])!=0)
        {
            strcpy(buf[c],stack[i]);
            c = c + 1;
            delete stack[i];
        }
        else //èíà÷å ïðîñòî óäàëÿåì ïîëíóñòüþ ÿ÷åéêó èç ñòåêà
        {
            delete stack[i];
            ravn = ravn + 1;
        }
    }
    tos=0;
    /*Âûäåëÿåì ïàìÿòü äëÿ ñòåêà, òàê êàê îíà áûëà
    óäàëåíà
    è êëàäåì â ñòåê çíà÷åíèÿ*/
    for (int i=0;i<=(razmer-ravn);i++)
    {
        stack[i] = new char[30];
        push(buf[i]);
    }
}
 
struct sport
{
    string fio;
    string vid;
    string fak;
    string spc;
    string lvl;
};
 
void word(sport * obj, int n = 6)
{
     for (int i=0; i < n; i++)
     {
        cin.get();
        cout << "Ââåäèòå äàííûå Ô.È.Î.: ";
        getline(cin, obj[i].fio);
        cout << "Ââåäèòå äàííûå î ñïîðòå: ";
        getline(cin, obj[i].vid);
        cout << "Ââåäèòå äàííûå î ôàêóëüòåòå: ";
        getline(cin, obj[i].fak);
        cout << "Ââåäèòå äàííûå î ñïåöèàëüíîñòè: ";
        getline(cin, obj[i].spc);
        cout << "Ââåäèòå äàííûå î âîçðàñòå: ";
        cin >> obj[i].lvl;
        cout << endl;
     } 
}
 
int main() // Îcíîâíîå òåëî ïðîãðàììû
{
    system("chcp 1251");
    setlocale(0, "rus");
    
    int n;
    
    for (int i = 0;i<MAX;i++) // Âûäåëåíèå ïïàìÿòè äëÿ ýëåìåíòîâ ñòýê
    {
        stack[i] = new char[30];
    }
    
    char *Element = new char[6]; // Äëÿ ââîäà ýëåìåíòà äëÿ óäàëåíèÿ
    
    word(Element,n);
    
    cout << "Âåðøèíà ñòåêà: " << pop() << endl;
    cout << "Êàêîé ýëåìåíò óäàëèòü? (âïèøèòå åãî): "; // Ââîä ýëåìåíòà äëÿ óäàëåíèÿ
    char *ItemToDelete = new char[30];
    cin >> ItemToDelete;
    delet(ItemToDelete); // Óäàëåíèå ýëåìåíòà
    
    cout <<"Âåðøèíà ñòåêà: " << pop() << endl << endl; // Ïå÷àòü òåêóùåé âåðøèíû ñòåêà
    
    system("PAUSE");
}
C++
1
121 C:\Users\SulleN\Desktop\stek.cpp cannot convert `char*' to `sport*' for argument `1' to `void word(sport*, int)'
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
17.11.2012, 18:03
Не вижу
C++
1
#include <string>
и у Вас функция
C++
1
word();
Принимает в качестве первого аргумента sport*, а Вы ей впихиваете char*
0
 Аватар для SuLLeN
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
17.11.2012, 18:22  [ТС]
Решение:
C++
1
sport* Element=new sport[n];
Добавлено через 9 минут
Подскажите пожалуйста, как с помощью функции push мне добавить элементы моей структуры в стек?

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
#include <iostream>
#define MAX 15
 
using namespace std;
 
char *stack[MAX]; // Ìàññèâ äëÿ ñòåêà
int tos=0; // Äëÿ âåðøèíû ñòåêà
 
void push(char *i) // Ôóíêöèÿ äîáàâëåíèÿ ýëåìåòà â ñòýê
{
    if(tos >= MAX) // Ïðîâåðêà íà çàïîëíåííîñòü ñòåêà
    {
        cout << "Ñòåê ïîëîí!" << endl;
        return;
    }
    strcpy(stack[tos],i); // Çàïèñûâàåì ñòðîêó â ñòýê
    tos = tos + 1; // Óâåëè÷èâàåì âåðøèíó ñòýêà
}
 
int size() // Äëÿ îïðåäåëåíèÿ ðàçìåðà ñòåêà
{
    if (tos >= 0) return tos;// Åñëè áîëüøå íóëÿ, òî âîçâðàùàåì òåêóùåå çíà÷åíèå âåðøèíû ñòýêà
    else return 0; // èíà÷å âîçâðàùàåì íîëü
}
 
char *pop(void) // Ôóíêöèÿ âûòàñêèâàíèÿ ýëåìåíòà èç ãîëîâû
{
    char *str = new char[30]; // Áóôôåð
    tos = tos - 1; // Ñäâèãàåìñÿ îò ãîëîâû âíèç
    if(tos < 0) // Åñëè âåðøèíà ìåíüøå íóëÿ, òî ñòýê ïóñòîé
    {
        cout << "Ñòåê ïóñò!" << endl;
        return 0;
    }
    strcpy(str, stack[tos]); //èíà÷å â áóôôåð ïîìåøàåì òåêóùåå çíà÷åíèå âåðøèíû
    return str; // âåçâðàùàåì ýòî çíà÷åíèå
}
 
void delet(char *element) // Ôóíêöèÿ óäàëåíèÿ
{
    int razmer = size(); // Ïîëó÷àåì ðàçìåðíîñòü ñòåêà
    char *buf[MAX]; // Äëÿ áóôôåðà, èñ÷ïîëüçóåòñÿ ïðè óäàëåíèè
    for(int i = 0;i<MAX;i++) // ÂÛäåëåíèå ïàìÿòè
    {
        buf[i] = new char[30];
    }
    int c = 0; // Ñ÷åò÷èêè
    int ravn = 0;
    for(int i = 0;i<=size();i++) // Öèêë äëÿ óäàëåíèÿ
    {
        /*Ïðîâåðÿåì,åñëè íå ðàâíû ýëåìåíò èç
        ñòåêà è ýëåìåíò ââåäåäíûé ñ êëàâèàòóðû,
        òî êîïèðóåì â áóôôåð
        óâåëè÷èâàåì ñ÷åò÷èê
        è óäàëÿåì ïîëíîñòüþ äàííóþ ÿ÷åêó èç ñòåêà*/
        if (strcmp(element,stack[i])!=0)
        {
            strcpy(buf[c],stack[i]);
            c = c + 1;
            delete stack[i];
        }
        else //èíà÷å ïðîñòî óäàëÿåì ïîëíóñòüþ ÿ÷åéêó èç ñòåêà
        {
            delete stack[i];
            ravn = ravn + 1;
        }
    }
    tos=0;
    /*Âûäåëÿåì ïàìÿòü äëÿ ñòåêà, òàê êàê îíà áûëà
    óäàëåíà
    è êëàäåì â ñòåê çíà÷åíèÿ*/
    for (int i=0;i<=(razmer-ravn);i++)
    {
        stack[i] = new char[30];
        push(buf[i]);
    }
}
 
struct sport
{
    string fio;
    string vid;
    string fak;
    string spc;
    string lvl;
};
 
void addelement(sport * obj, int n = 1)
{
     for (int i=0; i < n; i++)
     {
        cout << "Ââåäèòå äàííûå Ô.È.Î.: ";
        getline(cin, obj[i].fio);
        cout << "Ââåäèòå äàííûå î ñïîðòå: ";
        getline(cin, obj[i].vid);
        cout << "Ââåäèòå äàííûå î ôàêóëüòåòå: ";
        getline(cin, obj[i].fak);
        cout << "Ââåäèòå äàííûå î ñïåöèàëüíîñòè: ";
        getline(cin, obj[i].spc);
        cout << "Ââåäèòå äàííûå î âîçðàñòå: ";
        cin >> obj[i].lvl;
        cout << endl;
     } 
}
 
int main() // Îcíîâíîå òåëî ïðîãðàììû
{
    system("chcp 1251");
    setlocale(0, "rus");
    
    int n = 1;
    
    for (int i = 0;i<MAX;i++) // Âûäåëåíèå ïïàìÿòè äëÿ ýëåìåíòîâ ñòýê
    {
        stack[i] = new char[30];
    }
    
    sport* Element=new sport[n]; // Äëÿ ââîäà ýëåìåíòà äëÿ óäàëåíèÿ
    
    addelement(Element,n);
    
    cout << "Âåðøèíà ñòåêà: " << pop() << endl;
    cout << "Êàêîé ýëåìåíò óäàëèòü? (âïèøèòå åãî): "; // Ââîä ýëåìåíòà äëÿ óäàëåíèÿ
    char *ItemToDelete = new char[30];
    cin >> ItemToDelete;
    delet(ItemToDelete); // Óäàëåíèå ýëåìåíòà
    
    cout <<"Âåðøèíà ñòåêà: " << pop() << endl << endl; // Ïå÷àòü òåêóùåé âåðøèíû ñòåêà
    
    system("PAUSE");
}
Добавлено через 30 секунд
Я что то не понимаю... одни ошибки при любой попытке...
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
17.11.2012, 18:25
Цитата Сообщение от SuLLeN Посмотреть сообщение
Подскажите пожалуйста, как с помощью функции push мне добавить элементы моей структуры в стек?
Элементы структуры никак. Только строчку из структуры.
Для добавления эл-ов структуры придётся переделать функ-ии push() pop() delete() и сам стек char *stack[MAX];
для работы со стеком sport* stack[MAX];
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
17.11.2012, 18:27
А еще определиться, что Вы там хотите хранить - копии переданных объектов или указатели на переданные объекты.
2
 Аватар для SuLLeN
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
17.11.2012, 19:42  [ТС]
А что бы строчку структуры вбивать в стек, как это реализовать?

Добавлено через 24 минуты
Помогите с этим пожалуйста.

Добавлено через 35 минут
Ну хоть подсказку какую нибудь дайте, знаете ведь как!
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
17.11.2012, 20:10
Цитата Сообщение от SuLLeN Посмотреть сообщение
Ну хоть подсказку какую нибудь дайте, знаете ведь как!
Откройте учебник и почитайте про то, что такое стек.
0
 Аватар для SuLLeN
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
17.11.2012, 20:19  [ТС]
Да начитался уже... Стек — структура данных, в которой доступ к элементам организован по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»). Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
17.11.2012, 20:22
Цитата Сообщение от SuLLeN Посмотреть сообщение
Да начитался уже... Стек — структура данных, в которой доступ к элементам организован по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»). Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю.
Я знаю, что такое стек. А вот теперь возьмите и нарисуйте на бумаге, как это будет выглядеть в памяти компьютера.
0
 Аватар для SuLLeN
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
17.11.2012, 20:37  [ТС]
Рисование тут вряд ли поможет... тут скорее пример не помешал бы в виде кода...

Добавлено через 2 минуты
Нужно при заполнении все элементы записать в массив, а массив вставить в 1 ячейку стека, так я добавлю данные 1 студента.
Вот так в моем понимании должна работать программа. Реализуемо?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
17.11.2012, 20:40
Цитата Сообщение от SuLLeN Посмотреть сообщение
Рисование тут вряд ли поможет... тут скорее пример не помешал бы в виде кода...
Значит Вы просто не понимаете то, о чем говорите. Выучить определение - это ничего не даст.
А пример? Ну если Вы считаете, что Вам это поможет, то вот Вам пример (вчера писали):
Стек для хранения данных
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.11.2012, 20:40
Помогаю со студенческими работами здесь

Функция, подключенная в VS не выполняется
Добрый день. Помогите пожалуйста разобраться. VS 2010 Win8 Решил сделать программу, начал с меню и захотел вывести все функции и...

Почему выполняется функция?
Не могу понять, почему таки выполняется функция? Значения по умолчанию нет, параметры не принимает, а ошибок не выдает Visual Studio 2015 ...

Не выполняется функция getline()
Добрый вечер, уважаемые программисты! Написал программу, содержащую класс, который имеет два поля: номер и имя, и два метода: ввод и...

Функция getche() не выполняется
В MVS 2015 не выполняется ф-ция getche() (в коде строка 52) по этому цикл выполняется всего один раз. Как это исправить? Проверял код в...

Не выполняется восстановление системы после удаления avast
Здравствуйте, прошу мне помочь! Все случилось с момента,когда удалила антивирус Аваст, в ходе удаления появлялись сообщения (создание...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru