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

Сортировка данных класса - C++

Восстановить пароль Регистрация
 
Vlad_
5 / 5 / 0
Регистрация: 07.09.2012
Сообщений: 170
02.02.2013, 19:35     Сортировка данных класса #1
Всем привет,есть класс "книга" у меня не получилось сделать несколько пунктов,
1.При добавлении авторов сохраняется последний автор,так же если вводить больше 1 то сохраняется последний(тут явно что-то упускаю)
2.нужно полученные данные отсортировать по алфавиту используя friend функцию(хотя я смысла не вижу)
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
#include <iostream>
#include <string.h>
 
using namespace std;
 
#define n 20
 
class book{
    char name_of_book[n],author[n];
    int numb_of_authors,year,numb_of_pages;
public:
    void input();
    void show();
    void addauthor();
    void friend sort_class();
};
    void book::input()
    {
        cout<<"Заполните информацию:Имя книги,кол-во авторов,имена авторов,год издания,кол-во страниц\n";
        cin>>name_of_book>>numb_of_authors;
        for (int i=0;i<numb_of_authors;i++)
        {
            cin>>author;
        }
        cin>>year>>numb_of_pages;
    }
 
    void book::show()
    {
        cout<<name_of_book<<" "<<numb_of_authors<<" "<<author<<" "<<year<<" "<<numb_of_pages<<endl;
    }
    
    void book::addauthor()
    {
        int count;
        cout<<"Сколько нужно добавить авторов?\n";
        cin>>count;
        for (int i=0;i<count;i++)
        {
            cin>>author;
        }
    }
 
    void sort_class()
    {
 
    }
 
int main(){
    setlocale(0,"");
    book objbk;
    objbk.input();
    objbk.show();
    objbk.addauthor();
    objbk.show();
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
02.02.2013, 19:41     Сортировка данных класса #2
C++
1
2
3
4
for (int i=0;i<count;i++)
        {
            cin>>author;
        }
Вы много раз записываете данные в одну и ту же переменную. Метод класса может работать лишь с *this, текущим объектом, про другие он ничего не знает.
Vlad_
5 / 5 / 0
Регистрация: 07.09.2012
Сообщений: 170
02.02.2013, 21:01  [ТС]     Сортировка данных класса #3
MrGluck, а как тогда это реализовать?

Добавлено через 58 минут
точнее меня не уже интереусет 1 пункт,там я забыл индексы[i],а вот 2 подскажите пожалуйста.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
02.02.2013, 23:34     Сортировка данных класса #4
Vlad_, для этого пишите функцию, принимающую массив объектов класса, а не метод
Vlad_
5 / 5 / 0
Регистрация: 07.09.2012
Сообщений: 170
03.02.2013, 18:57  [ТС]     Сортировка данных класса #5
MrGluck, а можно как-то по подробней а то мне не ясно толком,может куски кода,как пример.
потому что я не знаю как мою функцию void show можно о сортировать по алфавиту

Добавлено через 1 час 41 минуту
в общем решил сделать по другому создать несколько книг и сортировать по названию книг,
вот текущий код,помогите функцию сортировки сделать,а ещё почему-то вылетает программа и не хочем добавлять несколько книг
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 <algorithm>
 
using namespace std;
 
#define n 40
 
class book{
    char name_of_book[n],author[n];
    int numb_of_authors,year,numb_of_pages;
public:
    void input();
    void show();
    void addauthor();
    void sort_class();
};
    void book::input()
    {
        cout<<"Заполните информацию:Имя книги,кол-во авторов,имена авторов,год издания,кол-во страниц\n";
        cin>>name_of_book>>numb_of_authors;
        for (int j=0;j<numb_of_authors;j++)
        {
            cin>>author[j];
        }
        cin>>year>>numb_of_pages;
    }
 
    void book::show()
    {
        
        cout<<name_of_book<<" "<<numb_of_authors<<" ";
        for (int j=0;j<numb_of_authors;j++)
        {
            cout<<author[j]<<" ";
        }
        cout<<year<<" "<<numb_of_pages<<endl;
    }
    
    void book::addauthor()
    {
        int count;
        cout<<"Сколько нужно добавить авторов?\n";
        cin>>count;
        for (int i=0;i<count;i++)
        {
            cin>>author[i];
        }
        if (count==0)
            return;
    }
 
    void sort_class()
    {
    
    }
 
int main(){
    setlocale(0,"");
    int i,nub;
    cout<<"Сколько необходимо добавить книг?\n";
    cin>>nub;
    book *objbk=new book[nub];
    for(i=0;i<nub;i++);{
    objbk[i].input();
    }
    objbk[nub].show();
    objbk[nub].addauthor();
    objbk[nub].show();
    system("pause");
    return 0;
}
Vlad_
5 / 5 / 0
Регистрация: 07.09.2012
Сообщений: 170
04.02.2013, 23:18  [ТС]     Сортировка данных класса #6
не ужели не кто не подскажет?

Добавлено через 2 часа 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
#include <iostream>
#include <string.h>
 
using namespace std;
 
#define n 40
 
class book{
    char name_of_book[n],author[n];
    int numb_of_authors,year,numb_of_pages;
public:
    void input();
    void show();
    friend void sort();
    
};
    void book::input()
    {
        cout<<"Заполните информацию:Имя книги,кол-во авторов,имена авторов,год издания,кол-во страниц\n";
        cin>>name_of_book>>numb_of_authors>>author>>year>>numb_of_pages;
    }
 
    void book::show()
    {
        
        cout<<name_of_book<<" "<<numb_of_authors<<" "<<year<<" "<<numb_of_pages<<endl;
    }
    
    /*void sort(int nub){
        int j,k;
        book p;
        for(j=0; j<nub; j++)
        {
            for(k=0; k<nub; k++)
            {
                if(strcmp(objk[j].name_of_book,objk[k].name_of_book)<0)
                {
                    p=objk[j];
                    objk[j]=objk[k];
                    objk[k]=p;
                }
            }
        }
    }*/
 
int main(){
    setlocale(0,"");
    int i,nub;
    cout<<"Сколько необходимо добавить книг?\n";
    cin>>nub;
    book *objbk;
    objbk= new book[nub];
    for(i=0;i<nub;i++){
    objbk[i].input();
    }
    for(i=0;i<nub;i++){
    objbk[i].show();
    }
    objbk[nub].sort();
    system("pause");
    return 0;
}
подскажите почему objk не видно в функции хотя это friend она на сколько я понял читая с литературы должна иметь доступ,и как сделать что бы такая перестановка заработа,функция void sort,которая закоментированна
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
05.02.2013, 01:24     Сортировка данных класса #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
#include <iostream>
#include <string>
 
class Book
{
    public:
        Book() : title() {}
        Book (const std::string &t) : title(t) {}
        void print() const { std::cout << "Title: " << title << std::endl; }
        friend void sort(Book *, const int);
 
    protected:
    std::string title;
};
 
 
int main()
{
    const int N = 3;
    Book b[N] = { Book("War and Peace"), Book("Asya"), Book("Idiot") };
    sort(b, N);
    for (int i=0; i < N; i++)
        b[i].print();
}
 
void sort(Book *b, const int size)
{
    for (int i=1; i < size; i++)
        if (b[i].title < b[i-1].title) // благодаря тому, что функция friend, мы
        {                              // имеем доступ к закрытым членам класса
            Book tmp = b[i];
            b[i] = b[i-1];
            b[i-1] = tmp;
        }
}
Vlad_
5 / 5 / 0
Регистрация: 07.09.2012
Сообщений: 170
05.02.2013, 02:28  [ТС]     Сортировка данных класса #8
MrGluck, не реально выручили,спасибо вам!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2013, 02:31     Сортировка данных класса
Еще ссылки по теме:

C++ Сортировка массива объектов класса
C++ Сортировка массива с объектами класса
Не работает сортировка объектов класса C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
05.02.2013, 02:31     Сортировка данных класса
  #9

Не по теме:

Давно хотел помочь вам, все время руки не доходили, даже в избранное добавил ссыль на тему Вы хотя бы делаете что то, а не просто пишите задание, как 9/10

Yandex
Объявления
05.02.2013, 02:31     Сортировка данных класса
Ответ Создать тему
Опции темы

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