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

Списки. Как правильней организовать? - C++

Восстановить пароль Регистрация
 
KiberDollar
0 / 0 / 0
Регистрация: 22.06.2011
Сообщений: 24
23.06.2011, 17:26     Списки. Как правильней организовать? #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
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
#include <iostream>
#include <conio.h>
#include <ctime>
#include <cstdlib>
#include <windows.h>
using namespace std;
 
int num,n;
int inp_t();
int out_t();
int plus_t();
int minus_t();
int proizv_t();
 
struct list
{
    int inf;
    list *next;
}*first, *q, *p,*f;
 
int main()
{      clrscr();
       inp_t();
       out_t();
       plus_t();
       minus_t();
       proizv_t();
       getch();
       return(0);
}
 
int inp_t ()  // Создание списка
{
        int i,k;
        srand(time(0));
        cout<<"Vvedite kol-vo elementov"<<endl;
        cin>>n;
        cout<<"Vvedite elementIb spiska"<<endl;
    cin>>k;
        first= new list;
        first->inf=k;
        first->next=NULL;
        q=first;
        for (i=1;i<n;i++)
        {       cin>>k;
                p=new list;
                p->inf=k;
        p->next=NULL;
        q->next=p;
        q=p;
        }
return(0);
}
    
 
int out_t()   //Вывод списка
{
        cout<<endl<<"VIbvod spiska"<<endl;
        q=first;
        while (q!=NULL)
        {
        cout<<q->inf<<" ";
            q=q->next;
        }
        cout<<endl;
        return(0);
}
 
int plus_t()
{       int z=0;
        q=first;
        while (q!=NULL)
        {
        z+=q->inf;
            q=q->next;
        }
        cout<<"Summa elementov spiska ravna:   "<<z;
        cout<<endl;
        return(0);
}
 
int minus_t()
{       int a;
        q=first; a=q->inf; q=q->next;
        while (q!=NULL)
        {
                a-=q->inf;
                q=q->next;
        }
        cout<<"Raznost' elementov spiska ravna:   "<<a;
        cout<<endl;
        return(0);
}
 
int proizv_t()
{       int c;
        q=first; c=q->inf; q=q->next;
        while (q!=NULL)
        {
                c=c*q->inf;
                q=q->next;
        }
        cout<<"Proizvedenie elementov spiska ravno:   "<<c;
        cout<<endl;
        return(0);
}
Задание: организовать односвязный список. Провести с элементами этого списка операции сложения, вычитания и умножения.

Программа в принципе рабочая. Но... мне сказали что в организации списков надо использовать классы. Подскажите пожалуйста куда эти классы вставлять.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2011, 17:26     Списки. Как правильней организовать?
Посмотрите здесь:

C++ как организовать ?
как организовать конвейер C++
C++ Как организовать меню..в Си...
Как правильней делать матрицу-объект? C++
C++ Как работают списки и как их создать вообще?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
23.06.2011, 17:30     Списки. Как правильней организовать? #2
struct заменить на class, все функции твои сделать членами этого класса. Не знаю может это прокатит, но другого ничего тебе посоветовать не могу, так как ты в си ни бум бум
KiberDollar
0 / 0 / 0
Регистрация: 22.06.2011
Сообщений: 24
23.06.2011, 17:32  [ТС]     Списки. Как правильней организовать? #3
То есть то что есть это не список да?
Тогда ещё один глупый вопрос. как сделать функции членами класса?
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
23.06.2011, 17:42     Списки. Как правильней организовать? #4
Цитата Сообщение от KiberDollar Посмотреть сообщение
как сделать функции членами класса?
в книжках всё написано.


Нет это не лист. Твоя структура это элемент листа, не знаю почему она так названа, только путает
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
23.06.2011, 17:42     Списки. Как правильней организовать? #5
KiberDollar,
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
class ListElem
{
public:
   int data;
   ListElem* next;
};
 
 
class List
{
private:
   ListElem* elem;
   
public:
   List(); // конструктор
   ~List(); // деструктор
   
   //описываешь все свои методы
   void AddElem(int data);
   ListElem* FindElem(int data) const;
   bool RemoveElem(int data);
   bool EmptyList() const;
   
   //... И так далее
};
Ну а дальше создаешь объект класса и работаешь с ним:

C++
1
2
3
4
5
List listObj;
 
listObj.AddElem(5);
 
// и так далее...
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
23.06.2011, 17:49     Списки. Как правильней организовать? #6
Цитата Сообщение от nameless Посмотреть сообщение
class ListElem
{
public:
int data;
ListElem* next;
};
смысл отпадает, если public. Должен быть private. Можно либо оставить как есть и ListItem делать вложенным и помещать его в приватную секцию листа. Либо как у тебя, но делать приватным и френдить
KiberDollar
0 / 0 / 0
Регистрация: 22.06.2011
Сообщений: 24
23.06.2011, 17:50  [ТС]     Списки. Как правильней организовать? #7
Ааааааааааа Ужас)))
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
23.06.2011, 17:53     Списки. Как правильней организовать? #8
pito211, Ну да, сглупил немного.. Ну я думаю автору суть ясна..
KiberDollar
0 / 0 / 0
Регистрация: 22.06.2011
Сообщений: 24
23.06.2011, 18:08  [ТС]     Списки. Как правильней организовать? #9
То есть в обоих классах не надо писать Public и Private?

Добавлено через 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
40
41
42
43
44
45
#include <iostream>
#include <conio.h>
#include <ctime>
#include <cstdlib>
#include <windows.h>
using namespace std;
 
int num,n;
int inp_t();
int out_t();
int plus_t();
int minus_t();
int proizv_t();
 
class ListElem
{
    int inf;
    ListElem* next;
};
 
class List
{
        ListElem* elem;
public:
        List();
        ~List();
        int inp_t();
        int out_t();
        int plus_t();
        int minus_t();
        int proizv_t();
};
 
 
int main()
{      clrscr();
        List listObj;
       listObj.inp_t();
       listObj.out_t();
       listObj.plus_t();
       listObj.minus_t();
       listObj.proizv_t();
       getch();
       return(0);
}
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
23.06.2011, 18:09     Списки. Как правильней организовать? #10
короче как naneless сделай хотя бы, и то счастьем для тебя будет
KiberDollar
0 / 0 / 0
Регистрация: 22.06.2011
Сообщений: 24
23.06.2011, 18:14  [ТС]     Списки. Как правильней организовать? #11
Цитата Сообщение от pito211 Посмотреть сообщение
короче как naneless сделай хотя бы, и то счастьем для тебя будет
Знаешь что... если ты хорошо знаешь С++, то это ещё не значит, что ты крутой... Да я не слова не понимаю из того что вы говорите... На на форум я пришёл что бы мне помогли вставить в программу классы.. а не за унижениями...
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
23.06.2011, 18:19     Списки. Как правильней организовать? #12
Цитата Сообщение от KiberDollar Посмотреть сообщение
я пришёл что бы мне помогли вставить в программу классы
судя по предыдущим темам, ты пришёл за тем чтобы тебе написали на халяву. И никто тебя не унижал, что за параноя, ты ведь сам сказал, что ничего не понял, а я тебе ответил соответсвенно, что сделай как знаешь.
KiberDollar
0 / 0 / 0
Регистрация: 22.06.2011
Сообщений: 24
23.06.2011, 19:02  [ТС]     Списки. Как правильней организовать? #13
Цитата Сообщение от pito211 Посмотреть сообщение
судя по предыдущим темам, ты пришёл за тем чтобы тебе написали на халяву. И никто тебя не унижал, что за параноя, ты ведь сам сказал, что ничего не понял, а я тебе ответил соответсвенно, что сделай как знаешь.
А тебе судя по всему делать больше не чего кроме как подозревать всех. Да. Предыдущая тема была без кода программы. А эта с кодом. и тебе наверно прицепиться не к чему было Твои слова "и то для тебя счастье будет" явно намёк на то, что я идиот... Обязательно сделаю как знаю... когда получу способность делать списки на С++.

Добавлено через 37 минут
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
#include <iostream>
#include <conio.h>
#include <ctime>
#include <cstdlib>
#include <windows.h>
using namespace std;
 
int num,n;
int inp_t();
int out_t();
int plus_t();
int minus_t();
int proizv_t();
 
class ListElem
{
    int inf;
    ListElem* next;
};
 
class List
{
        ListElem* elem;
public:
       // List();
       // ~List();
        int inp_t();
        int out_t();
        int plus_t();
        int minus_t();
        int proizv_t();
}*first, *q, *p,*f;
List listObj;
 
int main()
{      clrscr();
       listObj.inp_t();
       listObj.out_t();
       listObj.plus_t();
       listObj.minus_t();
       listObj.proizv_t();
       getch();
       return(0);
}
 
int inp_t ()  // ÑîçäГ*Г*ГЁГҐ Г±ГЇГЁГ±ГЄГ*
{
        int i,k;
        srand(time(0));
        cout<<"Vvedite kol-vo elementov"<<endl;
        cin>>n;
        cout<<"Vvedite elementIb spiska"<<endl;
    cin>>k;
        first= new List;
        first->elem=k;
        first->next=NULL;
        q=first;
        for (i=1;i<n;i++)
        {       cin>>k;
                p=new list;
                p->inf=k;
        p->next=NULL;
        q->next=p;
        q=p;
        }
return(0);
}
На 55 строке возникает ошибка
[C++ Error] Spisok2.cpp(55): E2247 'List::elem' is not accessible
Я же указал elem в классе элементов. И функции к классу List пришлёпал. Откуда ошибка?
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
23.06.2011, 19:20     Списки. Как правильней организовать? #14
у функций не членов класса нет доступа к его приватной составляющей. Надо указывать List:: перед определениями функций членов класса. Это *first, *q, *p,*f; стереть вобще, first добавить как приватные данные

Добавлено через 5 минут
все эти методы загонять в класс - дело тухлое. Быстрее будет написать нормальный лист по подобие stl::list с базовым функционалом. Именно это скорее всего требует препод
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2011, 19:39     Списки. Как правильней организовать?
Еще ссылки по теме:

Как правильней объявить динамический двухмерный массив C++
Списки, как склеить списки между собой? C++

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

Или воспользуйтесь поиском по форуму:
KiberDollar
0 / 0 / 0
Регистрация: 22.06.2011
Сообщений: 24
23.06.2011, 19:39  [ТС]     Списки. Как правильней организовать? #15
[C++ Error] Spisok2.cpp(32): E2333 Class member 'List::inp_t()' declared outside its class
Что это за ошибка? Она появилась когда я перенёс определения функций под классы
и просто написал
List::inp_t();
заместо определения функций.

Добавлено через 1 минуту
stl::list мы даже не задевали вроде бы. Препод требует просто класс list. легче наверно будет просто сделать программу без функций.
Yandex
Объявления
23.06.2011, 19:39     Списки. Как правильней организовать?
Ответ Создать тему
Опции темы

Текущее время: 06:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru