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

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

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

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

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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2012, 16:15
Ответы с готовыми решениями:

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

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

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

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

20
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
15.11.2012, 16:21 2
Цитата Сообщение от SuLLeN Посмотреть сообщение
C++
1
2
3
4
char *pop(void) // Функция вытаскивания элемента из головы {
char *str = new char[30];
//...
 str = stack[tos];
Утечка однозначно
C++
1
strcpy(str, stack[tos])
поможет
1
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
15.11.2012, 16:48  [ТС] 3
Не помогло....
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
15.11.2012, 17:11 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
#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
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
16.11.2012, 04:11  [ТС] 5
Все равно при попытке удалить верхний элемент, он снова показывает его...
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
16.11.2012, 04:25 6
что я делаю не так
Миниатюры
Не выполняется функция удаления  
1
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
16.11.2012, 04:49 7
что я делаю не так?
0
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
17.11.2012, 12:25  [ТС] 8
Значит что то не так... задумка была удалить по его номеру а не значению... именно для этого перед вводом элемента пишется его номер.
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
17.11.2012, 12:32 9
Цитата Сообщение от SuLLeN Посмотреть сообщение
Значит что то не так... задумка была удалить по его номеру а не значению... именно для этого перед вводом элемента пишется его номер.
Нет, по значению, именно для этого в функцию void delet(char *element) передаётся строка char *element, значение которой ищется в списке.
0
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
17.11.2012, 17:58  [ТС] 10
А как туда можно вставить структуру?

Добавлено через 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
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
17.11.2012, 18:03 11
Не вижу
C++
1
#include <string>
и у Вас функция
C++
1
word();
Принимает в качестве первого аргумента sport*, а Вы ей впихиваете char*
0
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
17.11.2012, 18:22  [ТС] 12
Решение:
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
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
17.11.2012, 18:25 13
Цитата Сообщение от SuLLeN Посмотреть сообщение
Подскажите пожалуйста, как с помощью функции push мне добавить элементы моей структуры в стек?
Элементы структуры никак. Только строчку из структуры.
Для добавления эл-ов структуры придётся переделать функ-ии push() pop() delete() и сам стек char *stack[MAX];
для работы со стеком sport* stack[MAX];
1
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
17.11.2012, 18:27 14
А еще определиться, что Вы там хотите хранить - копии переданных объектов или указатели на переданные объекты.
2
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
17.11.2012, 19:42  [ТС] 15
А что бы строчку структуры вбивать в стек, как это реализовать?

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

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

Добавлено через 2 минуты
Нужно при заполнении все элементы записать в массив, а массив вставить в 1 ячейку стека, так я добавлю данные 1 студента.
Вот так в моем понимании должна работать программа. Реализуемо?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
17.11.2012, 20:40 20
Цитата Сообщение от SuLLeN Посмотреть сообщение
Рисование тут вряд ли поможет... тут скорее пример не помешал бы в виде кода...
Значит Вы просто не понимаете то, о чем говорите. Выучить определение - это ничего не даст.
А пример? Ну если Вы считаете, что Вам это поможет, то вот Вам пример (вчера писали):
Стек для хранения данных
0
17.11.2012, 20:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2012, 20:40
Помогаю со студенческими работами здесь

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

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

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

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


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

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