Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Beauty44
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17
#1

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

20.09.2013, 23:18. Просмотров 931. Ответов 12
Метки нет (Все метки)

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

Структура содержит название книги, автора, год издания. Удалить издания с годом меньше заданного - C++
Структура содержит название книги, автора, год издания. Удалить издания с годом меньше заданного.

Найти названия книг заданного автора и вывести их на экран в порядке убывания года издания - C++
Дан массив записей, содержащий сведения о книгах: фамилия автора, название книги, год издания книги. Найти названия книг заданного автора и...

Из структуры, содержащей название книги, автора, год издания, удалить издания с годом меньше заданного. - C++
Задание: Структура содержит название книги, автора, год издания. Удалить издания с годом меньше заданного. Планирую сделать меню...

Отсортировать стуктуры по автору а внутри каждого автора- по году издания - C++
надо отсортировать по автору а внутри каждого автора- по году издания. у меня почему-то иероглифы выводит. я вообщем проверяю...

Строки. Вывести на экран самую короткую группу из 0 и 1 - C++
Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран самую короткую группу. Попроще только, без #include <algorithm>...

Строки. Вывести на экран самую короткую группу из 0 и 1. - C++
Помогите плз написать код. Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран самую короткую группу.

12
egor2116
342 / 373 / 42
Регистрация: 20.01.2013
Сообщений: 1,132
20.09.2013, 23:38 #2
Если скажите(а лучше покажите), что у вас не получается, обязательно поможем.
0
Хулиган
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;
};
книги автора будут отсортированы по году
0
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, и как делать дальше, объясните пожаалуйста((
0
Хулиган
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;
        }
    }
}
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;
        }
    }
}
Скажите пожалуйста, программа готова или нет? надо еще обеспечить возможность добавления новых авторов? но как??
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
22.09.2013, 17:16 #7
Создать контейнер который будет хранить структуры Author например: vector<Author>
0
Beauty44
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17
22.09.2013, 17:31  [ТС] #8
Цитата Сообщение от Хулиган Посмотреть сообщение
Создать контейнер который будет хранить структуры Author например: vector<Author>
Боже...
0
Kuzia domovenok
2030 / 1874 / 168
Регистрация: 25.03.2012
Сообщений: 6,451
Записей в блоге: 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 Посмотреть сообщение
Боже...
вот именно! забивание гвоздей микроскопом.
0
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 минуту
Помогите пожалуйста составить программу, очень надо, буду безмерно благодарна!
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
22.09.2013, 19:02 #11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
слишком заумно и к тому же неуниверсально.
ну это понятно, я изначально задание не дочитал, написал код, дочитал задание и подделал под него код
0
Kuzia domovenok
2030 / 1874 / 168
Регистрация: 25.03.2012
Сообщений: 6,451
Записей в блоге: 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 минут
1
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 минут
спасибо вам огромное приогромное!!! Оочень помогли!
0
22.09.2013, 22:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 22:25
Привет! Вот еще темы с ответами:

Строка: вывести на экран самую повторяющуюся комбинацию символов. - C++
Здравствуйте! Нужна помощь в решении задачи по программированию (с++). Дана строка из повторяющихся комбинаций символов например:...

Определить самую большую отрицательную и самую маленькую положительную температуры - C++
Помогите новичку,первая контрольная по программированию в с++ В массиве T(12) хранится среднемесячная температура для каждого из 12...

Определить самую большую четную и самую маленькую нечетную цифру в матрице и сложить их - C++
Помогите решить задачу:

Определить самую длинную и самую короткую из введенных строк - C++
Необходимо организовать ввод 3 названия городов. А потом вывести на экран консольно самое длинное и короткое название города. Лезут ошибки...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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