Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Aecttann
6 / 6 / 0
Регистрация: 19.10.2013
Сообщений: 334
#1

Зацикливается стек - C++

17.06.2014, 23:09. Просмотров 326. Ответов 8
Метки нет (Все метки)

Реализация простой базы данных на базе класса стек (на основе связанного списка).
Зацикливается на вводе фамилии.

головной:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include "Untitled1.h"
 
int main()
{
    int z=1,k=1,n=5;
    Queue mn;
    Chuvak *ch;
    ch=new Chuvak[n];
strcpy( ch[0].name,"Pelevin");
strcpy( ch[0].surname, "Vitek");
//strcpy( ch[0].year, "1995");
 
    mn.push(ch[0]);
    k++;
 
strcpy( ch[k-1].name,"Bulgakov");
strcpy( ch[k-1].surname, "Mishanya");
//strcpy( ch[k-1].year, "1994");
 
    mn.push(ch[k-1]);
    k++;
 
    int inn=0;
    int s_pop,i,ask;
    char s;
    char d[15],*lessie[3];
    while(z==1)
    {
        mn.Show();
        cout<< endl << "Hochew` vt0lknut` chuvaka?     1 - DA   2- NE :"<<endl;
        cin>>inn;
            if(inn==1)
            {
                cout<<endl<<" Enter name :";
                cin>>d;
                strcpy(ch[k-1].name,d);
 
                cout<<endl<<"Enter surname: ";
                cin>>s;
                strcpy(ch[k-1].surname, lessie[i]);
              //  ch[k-1].surname = s;
 
                mn.push(ch[k-1]);
                k++;
 
                mn.Show();
            }
 
    cout<<endl<<"Do you want to pop ?  1 - YES   2- NO : "<<endl;
    cin>>s_pop;
    if(s_pop==1)
    {mn.pop();
    k--;
    }
 
 
    cout<<endl<<"Do you want to find something?  : 1 - YES   2- NO : ";
    cin>>ask;
    if(ask==1)
    {
        cout<<endl<<"Enter the key for search - ";
        cin>>d;
        mn.find(d);
    }
 
    cout<<endl<<"Again? : 1 - YES   2- NO : "<<endl;
    }
 
    return 0;
}


хэд:
Кликните здесь для просмотра всего текста
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
#ifndef UNTITLED1_H_INCLUDED
#define UNTITLED1_H_INCLUDED
#include <iostream>
#include <string.h>
#include <iomanip>
#include <string>
 
 
using namespace std;
 
int size=0;
 
class Chuvak
{
    public:
    char name[25];
    char surname [25];
    int year;
};
 
class Node
{
    public:
    Chuvak ch;
    Node *next;
};
 
class Queue
{
    public:
    Node *top = new Node;
 
 
void push(Chuvak ch1)
{
 
    Node *tmp = new Node;
    strcpy(tmp->ch.name,ch1.name);
    strcpy(tmp->ch.surname,ch1.surname);
 //   strcpy(tmp->ch.year,ch1.year);
    tmp->ch.name == ch1.name;
    tmp->ch.surname == ch1.surname;
    tmp->ch.year = ch1.year;
    tmp->next = top;
    top=tmp;
 
    size ++;
 
}
 
 
 
void *pop()
{
    Node *pv = top;
    top = top->next;
                  // освобождаем память, тем самым удалили вершину
         cout<<endl<<"Ty ubral ne togo parnya "<<endl<<pv->ch.surname<<") "<<pv->ch.name<<" "<<endl;
         size--;                 //Вывод текущего элемента на экран
       delete pv;                     // возвращаем значение, которое было в вершине
}
 
void *Show()
{
    cout<<"Est` cho v razmere: "<<size<<endl;
    Node *pv=top;
    int g=0;
    while(g<size)
    {
        cout << pv->ch.surname << " " << pv->ch.name <<"  "<<endl;
        pv=pv->next;
       g++;
    }
 
}
 
void *find(char d[])
{
     Node *pv=top;
     int c=0;
    while(pv->next)
    {
        if((strcmp(d,pv->ch.name)==0||(strcmp(d,pv->ch.surname)==0)))
           {
               cout<<") "<<pv->ch.name<<pv->ch.surname<<" "<<endl;
               c++;
           }
        pv=pv->next;
    }
    if(strcmp(d,pv->ch.name)==0||(strcmp(d,pv->ch.surname)==0))
           {
               cout<<") "<<pv->ch.name<<pv->ch.surname<<" "<<endl;
               c++;
           }
           if(c==0)
            cout<<endl<<"Ty iskal ne togo chuvaka";
 
}
};
#endif // UNTITLED1_H_INCLUDED
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2014, 23:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Зацикливается стек (C++):

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

Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами - C++
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? - C++
Есть у меня пробелы в познаниях, хотел бы их устранить. 1. Что такое стек в самом языке С++ ? 2. В какой памяти он хранится и почему...

при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"? - C++
Сабж g++ 4.5.0

Не нормально зацикливается Do - C++
Нужно написать процедуру, которая сравнивает каждое слово из текстового файла с каждым словом из словаря (слова уже забиты в список) и...

Multimap зацикливается - C++
Всем добрый вечер, Помогите, пожалуйста разобраться с зацикленным &quot;Not found&quot;. Поиск по названию блюда происходит нормально, а вот...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SatanaXIII
18.06.2014, 08:58
  #2

Не по теме:

Цитата Сообщение от Aecttann Посмотреть сообщение
головной
Цитата Сообщение от Aecttann Посмотреть сообщение
хэд
Тавтология.

Aecttann
18.06.2014, 12:03  [ТС]
  #3

Не по теме:

Файл с главной функцией и хэдэр - тавтология?Оо

SatanaXIII
18.06.2014, 12:11
  #4

Не по теме:

Aecttann, нет. Но в слове "главной" сколько букв 'о'? А слово хедер от какого слова?

Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
18.06.2014, 13:45 #5
вообще-то какой-то бред написан, словно код кусками из разных мест понатыкали!
C++
1
2
3
4
5
6
7
8
9
10
    Chuvak *ch=new Chuvak[n]; //массив из пяти структур. Зачем? Почему именно из пяти?
 
    strcpy( ch[0].name,"Pelevin");   //заполнение полей нулевого элемента массива. Зачем? А как же остальные?
    strcpy( ch[0].surname, "Vitek"); //это было какое-то упражнение на массивы? Ты массивы плохо знаешь что ли, что упражняться приходится?
 
    strcpy( ch[k-1].name,"Bulgakov");     //а почему тут ещё обращение по индексу к? что это за индекс? Его в цикле изменять что ли планировалось?
   strcpy( ch[k-1].surname, "Mishanya");  //пока что я вижу, что k  всегда равен 1
 
   mn.push(ch[k-1]);//О, да! Один из элементов запушили в очередь! А зачем сразу в очередь его не отправили? Зачем было создавать тут массив
//и вообще, при чём тут очередь (QUEUE) ? Ты же говорил, что стек делаешь!
и.т.д. и.т.п. вопросы по каждой строчке этого говнокода, который ты не сам писал, а отчасти откуда-то копировал!

ну и, как ещё одно подтверждение бреда, смотрим в код самой очереди:

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
void push(Chuvak ch1)
{
 
    Node *tmp = new Node;
    strcpy(tmp->ch.name,ch1.name);
    strcpy(tmp->ch.surname,ch1.surname);
 //   strcpy(tmp->ch.year,ch1.year);
    tmp->ch.name == ch1.name;
    tmp->ch.surname == ch1.surname;
    tmp->ch.year = ch1.year;        
 
    tmp->next = top;
    top=tmp;//добавление элемента ставим в top
 
    size ++;
 
}
 
 
void *pop()//       
{
    Node *pv = top;   //удаление элемента тоже из top
    top = top->next;
                 
         cout<<endl<<"Ty ubral ne togo parnya "<<endl<<pv->ch.surname<<") "<<pv->ch.name<<" "<<endl;
         size--;                
       delete pv;                    
}
по-твоему это очередь??? Это же стэк! Таки ты его делаешь? Почему сразу stack не назвал? Подозрения, что код был откуда-то стырен, а затем перепилен под стек из очереди всё сильнее подтверждаются...
И, кстати, что за тупой указатель возвращает твоя функция pop? void* ???

Теперь по теме. Насчёт ввода фамилии.
char s; Это по-твоему фамилия???
А вот это что? char *lessie[3]; Тоже фамилия?
Что за бредятину ты пишешь? Ты сначала язык изучи, а потом уже принимайся программировать! Хотя бы работу со строками изучи ДО того как будешь углубляться в дебри со списками и очередями!
Меня не покидает ощущение, что ты начал язык учить совсем недавно, но сразу же скакнул во всякую работу с классами, памятью и структурами типа очередей...
Зачем? Учиться надо по порядку, никто не гонит тебя никуда. Потрать год на последовательное изучение С++ с нуля... ну хоть полгода!
Никто тебя на второй год в школе не оставит за незданную задачку по программированию - изучай его самостоятельно!
Aecttann
6 / 6 / 0
Регистрация: 19.10.2013
Сообщений: 334
18.06.2014, 13:53  [ТС] #6

Не по теме:

а я что, сказал, что это мой код? нет


это была реализация стека, потом я хотел запилить из него очередь, потом уже стало всё равно

Не по теме:

в школе, может, и не оставили бы на второй год, а вот на сессии к экзамену без лаб не допустят) и да, в шею как раз гонят

Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
18.06.2014, 14:04 #7

Не по теме:

Цитата Сообщение от Aecttann Посмотреть сообщение
в школе, может, и не оставили бы на второй год, а вот на сессии к экзамену без лаб не допустят) и да, в шею как раз гонят
Университетом, небось, гордо именуется учреждение... пфф. Ещё и деньги дерёт за задачки про стек и очередь?


Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Теперь по теме. На счёт ввода фамилии.
??? по теме-то повторить вопрос? или прочитаешь?
Aecttann
6 / 6 / 0
Регистрация: 19.10.2013
Сообщений: 334
18.06.2014, 14:35  [ТС] #8

Не по теме:

именуется. нет, не дерёт - бюджет, все дела


char s; Это по-твоему фамилия???
по-моему, да

А вот это что? char *lessie[3]; Тоже фамилия?
а это что-то лишнее, но не знаю куда и как его убрать

вот оригинал:
мэин
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include "bd.h"
int main()
{
    int z=1,k=1,n=5;
    Stack mn;
    Film *f;
    f=new Film[n];
strcpy(    f[0].name,"Hrabraya_serdcem");
strcpy(    f[0].format, ".avi");
    f[0].number = k;
    f[0].time = 147;
    mn.push(f[0]);
    k++;
 
 
strcpy(    f[k-1].name,"Mstiteli");
strcpy(    f[k-1].format, ".mkv");
    f[k-1].number = k;
    f[k-1].time = 83;
    mn.push(f[k-1]);
    k++;
 
    int inn=0;
    int s_pop,i,t,ask;//Положили в стек 200
    char d[15],*form[3];
    form[1]=".avi";
    form[2] = ".mvk";
    while(z==1)
    {
        mn.out();
        cout<<endl<<"______________________________________________"<<endl<<endl;
        cout<<"-=Do you want to add new film?=- 1 - YES   2- NO :"<<endl;
        cin>>inn;
            if(inn==1)
            {
                cout<<endl<<" Enter name :";
                cin>>d;
                strcpy(f[k-1].name,d);
                cout<<endl<<"Format? : 1-.avi   2-.mvk :  ";
                cin>>i;
                strcpy(f[k-1].format,form[i]);
                cout<<endl<<"Enter time = ";
                cin>>t;
                f[k-1].time=t;
                f[k-1].number = k;
 
                mn.push(f[k-1]);
                k++;
                cout<<endl<<"______________________________________________"<<endl<<endl;
 
                mn.out();
                cout<<endl<<"______________________________________________"<<endl<<endl;
            }
cout<<"______________________________________________"<<endl<<endl;
 
    cout<<endl<<"Do you want to pop ?  1 - YES   2- NO : "<<endl;
    cin>>s_pop;
    if(s_pop==1)
    {mn.pop(); //вывели на экран текущий элемент стека = 200
    k--;
    }
  //  pop(p); //вывели на экран текущий элемент стека = 100
 
cout<<endl<<"______________________________________________"<<endl<<endl;
 
    cout<<endl<<"Do you want to find something?  : 1 - YES   2- NO : ";
    cin>>ask;
    if(ask==1)
    {
        cout<<endl<<"Enter the key for search - ";
        cin>>d;
        mn.find(d);
    }
 
cout<<endl<<"______________________________________________"<<endl<<endl;
 
 
    cout<<endl<<"Want more? : 1 - YES   2- NO : "<<endl;
    cin>>z;
    }
 
    return 0;
}


хэд
Кликните здесь для просмотра всего текста
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
#ifndef BD_H_INCLUDED
#define BD_H_INCLUDED
#include <iostream>
#include <string.h>
#include <iomanip>
using namespace std;
int size=0;
 
 
class Film
{
    public:
    char format[3];
    char year [5];
    int time;
    int number;
    char name [25];
};
 
class Node
{
    public:
    Film f;
    Node *next;
};
 
 
 
class Stack
{
    public:
    Node *top = new Node;
 
 
void push(Film f1)
{
 
    Node *tmp = new Node;
    strcpy(tmp->f.name,f1.name);
    strcpy(tmp->f.year,f1.year);
    tmp->f.time = f1.time;
    tmp->f.number = f1.number;
    tmp->next = top;
    top=tmp;
    //tmp=top;
   // cout<<"Great! You just added new film! it is :"<<endl<<tmp->f.number<<") "<<setw(10)<<setfill('_')<<top->f.name<<tmp->f.format<<"  "<<tmp->f.time<<endl;
 
 
     //top->next=tmp;
    //top->f = f;
    //top=top->next;
    //top->f = f1;
    size ++;
 
}
 
 
void *pop()
{
    Node *pv = top;
    top = top->next;
                  // освобождаем память, тем самым удалили вершину
         cout<<endl<<"Good Job! You watched "<<endl<<pv->f.number<<") "<<pv->f.name<<pv->f.year<<" "<<pv->f.time<<endl;
         size--;                 //Вывод текущего элемента на экран
       delete pv;                     // возвращаем значение, которое было в вершине
}
 
void *out()
{
    cout<<"Size of current Data Base is : "<<size<<endl;
    Node *pv=top;
    int g=0;
    while(g<size)
    {
        cout<<pv->f.number<<") "<<pv->f.name<<"  "<<pv->f.time<<endl;
        pv=pv->next;
       g++;
    }
    //cout<<pv->f.number<<") "<<setw(10)<<setfill('_')<<pv->f.name<<pv->f.format<<"  "<<pv->f.time<<endl;
 
 
}
 
 
void *find(char d[])
{
     Node *pv=top;
     int c=0;
    while(pv->next)
    {
        if((strcmp(d,pv->f.name)==0||(strcmp(d,pv->f.format)==0)))
           {
               cout<<pv->f.number<<") "<<pv->f.name<<pv->f.format<<" "<<pv->f.time<<endl;
               c++;
           }
        pv=pv->next;
    }
    if(strcmp(d,pv->f.name)==0||(strcmp(d,pv->f.format)==0))
           {
               cout<<pv->f.number<<") "<<pv->f.name<<pv->f.format<<" "<<pv->f.time<<endl;
               c++;
           }
           if(c==0)
            cout<<endl<<"Sorry, that was no coincidence";
 
}
};
#endif // BD_H_INCLUDED


Добавлено через 6 минут
из этого как-то хотел сделать очередь
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
18.06.2014, 15:09 #9
А по-моему, нет. (я про строки).
char это не строка, а символ. Для хранения строки следует объявлять массив char s[20], например!

Дипломом такого "университета" можешь подтереться. Это школьные задачки!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2014, 15:09
Привет! Вот еще темы с ответами:

Зацикливается программа - C++
Нужно сделать стек из элементов и вывести все положительные значения. Программа на этапе принта зацикливается, посмотрите, что не так: ...

Программа зацикливается - C++
void __fastcall TForm1::Button1Click(TObject *Sender) { int k; float a,sum,x; a=StrToFloat(Edit1-&gt;Text); k=1; sum=0; ...

Программа зацикливается - C++
Программа зацикливается после ввода размеров массива. Подскажите пожалуйста, где ошибка. #include &lt;iostream&gt; void inn(int **, int,...

Почему зацикливается??? - C++
Доброе время суток. Прошу объяснить или дать ссылку где такое описывается. #include &lt;iostream&gt; using namespace std; int main(){ ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.06.2014, 15:09
Ответ Создать тему
Опции темы

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