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

Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. - C++

Восстановить пароль Регистрация
 
Beauty44
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17
20.09.2013, 23:18     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. #1
Дан массив записей, содержащий сведения о книгах: фамилия автора, название книги, год издания книги. Для заданного автора найти и вывести на экран его самую раннюю книгу и самую последнюю по году издания. На языке С++.Помогите пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2013, 23:18     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания.
Посмотрите здесь:

C++ Определить самую длинную и самую короткую из введенных строк
Найти самую часто встречаемую и самую редко встречаемую буквы во фрагменте произвольного текста C++
C++ Открыть заданный текстовый файл, найти в нем и вывести на экран самую длинную строку
C++ Строки. Вывести на экран самую короткую группу из 0 и 1.
C++ Определить самую большую отрицательную и самую маленькую положительную температуры
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
20.09.2013, 23:38     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. #2
Если скажите(а лучше покажите), что у вас не получается, обязательно поможем.
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
20.09.2013, 23:56     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. #3
Beauty44, попробуйте сделать структуру вида:
C++
1
2
3
4
5
struct Avtor
{
    string name;
    multimap<int, string> books;
};
книги автора будут отсортированы по году
Beauty44
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17
21.09.2013, 13:17  [ТС]     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. #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
#include<iostream>
#include<string.h>
#include<conio.h>
using namespace std;
void main()
{
struct book {
char nameAutor[L]; 
char nameBook[L];
int yearBook;
};
void inputMasBook( book x[], int&n);
void outputMasBook( book x[], int n);
void outputBook( book x);
int sravnDate(date v, date w)
}
void main()
{ const int N=10;
Book a[N], b[N]
date maxDate;
date minDate;
int ???
cout<< "Введите исходный массив:\n";
правильно ли это, что поставить после int, и как делать дальше, объясните пожаалуйста((

Добавлено через 26 минут
Цитата Сообщение от egor2116 Посмотреть сообщение
Если скажите(а лучше покажите), что у вас не получается, обязательно поможем.
Я не понимаю,как выполнить поиск самый ранней и поздней книги определенного автора, плюс, чтобы еще и с названием книги((
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
#include<string.h>
#include<conio.h>
using namespace std;
void main()
{
struct book {
char nameAutor[L]; 
char nameBook[L];
int yearBook;
};
void inputMasBook( book x[], int&n);
void outputMasBook( book x[], int n);
void outputBook( book x);
int sravnDate(date v, date w)
}
void main()
{ const int N=10;
Book a[N], b[N]
date maxDate;
date minDate;
int ???
cout<< "Введите исходный массив:\n";
правильно ли это, что поставить после int, и как делать дальше, объясните пожаалуйста((
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
21.09.2013, 15:51     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. #5
по рабоче-крестьянски(без функций) это только для одного автора, нужно просто обеспечить возможностсь добавление новых авторов

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
#include <iostream>
#include <map>
#include <string>
#include <locale>
using namespace std;
 
 
struct Author
{
    string name;
    multimap<int, string> books;
};
 
int main()
{
    setlocale(LC_ALL, "Rus");
    
    Author aut;
    char ch;
    int years;
    string buf;
    
    cout << "Ââåäèòå èìÿ Г*âòîðГ*: ";
    getline(cin, aut.name);
    
    while(1)
    {
        cout << "1 - äîáГ*ГўГЁГІГј ГЄГ*ГЁГЈГі, 2 - Г±Г*Г¬Г*Гї ïåðâГ*Гї ГЁ ïîñëåäГ*ГїГї ГЄГ*ГЁГЈГЁ, 3 - âûõîä: ";
        cin >> ch;
        
        switch(ch)
        {
            case '1':
                 cout << "Ãîä: ";
                 cin >> years;
                 cout << "ГЌГ*çâГ*Г*ГЁГҐ ГЄГ*ГЁГЈГЁ: ";
                 cin >> buf;
                 aut.books.insert(make_pair(years, buf));
                 break;
            case '2':
                 cout << "ÏåðâГ*Гї ГЄГ*ГЁГЈГ*: " << aut.books.begin()->first << " " << aut.books.begin()->second << endl; 
                 cout << "ÏîñëåäГ*ГїГї ГЄГ*ГЁГЈГ*: " << (--aut.books.end()) ->first << " " << (--aut.books.end())->second;              
                 break;
                 
            case '3':
                return 0;
        }
    }
}
Beauty44
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17
22.09.2013, 16:37  [ТС]     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. #6
Цитата Сообщение от Хулиган Посмотреть сообщение
по рабоче-крестьянски(без функций) это только для одного автора, нужно просто обеспечить возможностсь добавление новых авторов

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
#include <iostream>
#include <map>
#include <string>
#include <locale>
using namespace std;
 
 
struct Author
{
    string name;
    multimap<int, string> books;
};
 
int main()
{
    setlocale(LC_ALL, "Rus");
    
    Author aut;
    char ch;
    int years;
    string buf;
    
    cout << "Ââåäèòå èìÿ Г*âòîðГ*: ";
    getline(cin, aut.name);
    
    while(1)
    {
        cout << "1 - äîáГ*ГўГЁГІГј ГЄГ*ГЁГЈГі, 2 - Г±Г*Г¬Г*Гї ïåðâГ*Гї ГЁ ïîñëåäГ*ГїГї ГЄГ*ГЁГЈГЁ, 3 - âûõîä: ";
        cin >> ch;
        
        switch(ch)
        {
            case '1':
                 cout << "Ãîä: ";
                 cin >> years;
                 cout << "ГЌГ*çâГ*Г*ГЁГҐ ГЄГ*ГЁГЈГЁ: ";
                 cin >> buf;
                 aut.books.insert(make_pair(years, buf));
                 break;
            case '2':
                 cout << "ÏåðâГ*Гї ГЄГ*ГЁГЈГ*: " << aut.books.begin()->first << " " << aut.books.begin()->second << endl; 
                 cout << "ÏîñëåäГ*ГїГї ГЄГ*ГЁГЈГ*: " << (--aut.books.end()) ->first << " " << (--aut.books.end())->second;              
                 break;
                 
            case '3':
                return 0;
        }
    }
}
Скажите пожалуйста, программа готова или нет? надо еще обеспечить возможность добавления новых авторов? но как??
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
22.09.2013, 17:16     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. #7
Создать контейнер который будет хранить структуры Author например: vector<Author>
Beauty44
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17
22.09.2013, 17:31  [ТС]     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. #8
Цитата Сообщение от Хулиган Посмотреть сообщение
Создать контейнер который будет хранить структуры Author например: vector<Author>
Боже...
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
22.09.2013, 17:34     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. #9
Цитата Сообщение от Хулиган Посмотреть сообщение
Beauty44, попробуйте сделать структуру вида:

C++
1
2
3
4
5
struct Avtor
{
    string name;
    multimap<int, string> books;
};
книги автора будут отсортированы по году
слишком заумно и к тому же неуниверсально.
Заумно потому что автор, очевидно, только начал проходить структуры. Как можно пользоваться мультимапом или вообще каким-либо объектом из std, если не то что классов, а структур не знаешь?

Я бы не рекомендовал такой подход даже, если самостоятельно изучаешь язык. Ну а уж если это задание от учителя... он точно STL вские шаблоны заметит и не пропустит! Ибо преподу лучше известно, знает школьник STL или нет.

Это первое.
Второе - Задание, очевидно именно на тему СТРУКТУРЫ. И оно подразумевает именно создание структуры вида
C++
1
2
3
4
5
struct book{
  string author; 
  string title;
  int year;
};
И последующий линейный поиск в массиве этих структур по разным критериям. Это и есть простейшая программа, раскрывающая тему "структуры", и не надо её усложнять.

В-третьих, мы, используя мапы, жёстко привязываемся к ключам, по которым искать и к типам данных, хранящимся в этом мапе. А если учитель попросит добавить в книгу ещё полей и сделать поиск по ним?
Изменить пару полей struct book и в условии линейного поиска будет легко. А в твоём случае всё будет запутанней.

Добавлено через 32 секунды
Цитата Сообщение от Beauty44 Посмотреть сообщение
Боже...
вот именно! забивание гвоздей микроскопом.
Beauty44
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17
22.09.2013, 19:00  [ТС]     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
слишком заумно и к тому же неуниверсально.
Заумно потому что автор, очевидно, только начал проходить структуры. Как можно пользоваться мультимапом или вообще каким-либо объектом из std, если не то что классов, а структур не знаешь?

Я бы не рекомендовал такой подход даже, если самостоятельно изучаешь язык. Ну а уж если это задание от учителя... он точно STL вские шаблоны заметит и не пропустит! Ибо преподу лучше известно, знает школьник STL или нет.

Это первое.
Второе - Задание, очевидно именно на тему СТРУКТУРЫ. И оно подразумевает именно создание структуры вида
C++
1
2
3
4
5
struct book{
  string author; 
  string title;
  int year;
};
И последующий линейный поиск в массиве этих структур по разным критериям. Это и есть простейшая программа, раскрывающая тему "структуры", и не надо её усложнять.

В-третьих, мы, используя мапы, жёстко привязываемся к ключам, по которым искать и к типам данных, хранящимся в этом мапе. А если учитель попросит добавить в книгу ещё полей и сделать поиск по ним?
Изменить пару полей struct book и в условии линейного поиска будет легко. А в твоём случае всё будет запутанней.

Добавлено через 32 секунды

вот именно! забивание гвоздей микроскопом.
Да, оно подразумевает именно создание такой структуры, которую вы написали..Я просто не понимаю, как вообще создать такую программу, чтобы не было ничего гиперзаумного, и выполнить поиск в массиве по критериям, которые говорятся в задаче(

Добавлено через 1 час 1 минуту
Помогите пожалуйста составить программу, очень надо, буду безмерно благодарна!
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
22.09.2013, 19:02     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. #11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
слишком заумно и к тому же неуниверсально.
ну это понятно, я изначально задание не дочитал, написал код, дочитал задание и подделал под него код
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
22.09.2013, 19:35     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. #12
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
#include <iostream>
#include <cstdlib>
using namespace std;
const int L=25;
const int maxsize=25;
struct book {
    char nameAutor[L]; 
    char nameBook[L];
    int yearBook;
};
void inputMasBook( book x[], int& n);
void outputBook(book x);
 
int main(){ 
    book data[maxsize];
    int lib_size;
    setlocale(LC_ALL, "rus");
    cout<< "Введите исходный массив:\n";
    inputMasBook(data, lib_size);
 
    char ans;
    do{
        char target[L];
        int first, last;
        bool found=false;
 
        cout<<"Введите искомого автора:";
        cin>>target;
        for (int i=0; i<lib_size; i++){
            if (strcmp(data[i].nameAutor, target)==0)
                if (!found){
                    first=last=i;
                    found=true;
                }
                else
                    if (data[i].yearBook>data[last].yearBook) last=i;
                    else
                        if (data[i].yearBook<data[first].yearBook) first=i;
        }
        if (!found)
            cout<<"Автор "<<target<<" не найден";
        else{
            cout<<"самая ранняя книга автора "<<target<<" это"<<endl;
            outputBook(data[first]);
            cout<<"самая поздняя книга автора "<<target<<" это"<<endl;
            outputBook(data[last]);
        }
 
        cout<<"Продолжить поиск? (y/n):";
        cin>>ans;
    }while(ans=='y' || ans=='Y');
    return 0;
}
void inputMasBook( book x[], int& n){
    do{
        cout<<"Введите количество книг";
        cin>>n;
    }while(n<=0 || n>=maxsize);
    for (int i=0; i<n; i++){
        cout<<"Ввод "<<i<<"-й книги:"<<endl<<"Введите автора: ";
        cin>>x[i].nameAutor;
        cout<<"Введите название: ";
        cin>>x[i].nameBook;
        cout<<"Введите год: ";
        cin>>x[i].yearBook;
    }
}
void outputBook(book x){
    cout<<"Автор: "<<x.nameAutor<<endl;
    cout<<"Книга: "<<x.nameBook<<endl;
    cout<<"Год:   "<<x.yearBook<<endl;
}
Добавлено через 9 минут
http://s5.hostingkartinok.com/upload...aefa73932d.jpg
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 22:25     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания.
Еще ссылки по теме:

Строки. Вывести на экран самую короткую группу из 0 и 1 C++
C++ Из структуры, содержащей название книги, автора, год издания, удалить издания с годом меньше заданного.
C++ Открыть заданный текстовый файл, найти в нем и вывести на экран самую короткую строку

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

Или воспользуйтесь поиском по форуму:
Beauty44
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17
22.09.2013, 22:25  [ТС]     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания. #13
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
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
#include <iostream>
#include <cstdlib>
using namespace std;
const int L=25;
const int maxsize=25;
struct book {
    char nameAutor[L]; 
    char nameBook[L];
    int yearBook;
};
void inputMasBook( book x[], int& n);
void outputBook(book x);
 
int main(){ 
    book data[maxsize];
    int lib_size;
    setlocale(LC_ALL, "rus");
    cout<< "Введите исходный массив:\n";
    inputMasBook(data, lib_size);
 
    char ans;
    do{
        char target[L];
        int first, last;
        bool found=false;
 
        cout<<"Введите искомого автора:";
        cin>>target;
        for (int i=0; i<lib_size; i++){
            if (strcmp(data[i].nameAutor, target)==0)
                if (!found){
                    first=last=i;
                    found=true;
                }
                else
                    if (data[i].yearBook>data[last].yearBook) last=i;
                    else
                        if (data[i].yearBook<data[first].yearBook) first=i;
        }
        if (!found)
            cout<<"Автор "<<target<<" не найден";
        else{
            cout<<"самая ранняя книга автора "<<target<<" это"<<endl;
            outputBook(data[first]);
            cout<<"самая поздняя книга автора "<<target<<" это"<<endl;
            outputBook(data[last]);
        }
 
        cout<<"Продолжить поиск? (y/n):";
        cin>>ans;
    }while(ans=='y' || ans=='Y');
    return 0;
}
void inputMasBook( book x[], int& n){
    do{
        cout<<"Введите количество книг";
        cin>>n;
    }while(n<=0 || n>=maxsize);
    for (int i=0; i<n; i++){
        cout<<"Ввод "<<i<<"-й книги:"<<endl<<"Введите автора: ";
        cin>>x[i].nameAutor;
        cout<<"Введите название: ";
        cin>>x[i].nameBook;
        cout<<"Введите год: ";
        cin>>x[i].yearBook;
    }
}
void outputBook(book x){
    cout<<"Автор: "<<x.nameAutor<<endl;
    cout<<"Книга: "<<x.nameBook<<endl;
    cout<<"Год:   "<<x.yearBook<<endl;
}
Добавлено через 9 минут
http://s5.hostingkartinok.com/upload...aefa73932d.jpg
спасибо вам огромное приогромное!!! Оочень помогли!
Yandex
Объявления
22.09.2013, 22:25     Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания.
Ответ Создать тему
Опции темы

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