Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17

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

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

Студворк — интернет-сервис помощи студентам
Дан массив записей, содержащий сведения о книгах: фамилия автора, название книги, год издания книги. Для заданного автора найти и вывести на экран его самую раннюю книгу и самую последнюю по году издания. На языке С++.Помогите пожалуйста!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.09.2013, 23:18
Ответы с готовыми решениями:

Вывести на экран самую позднюю и раннюю даты
Дан файл f.txt, содержащий различные даты. каждая дата – это число, месяц и год. Вывести на экран самую позднюю и раннюю даты. ...

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

Даны координаты вершин пятиугольника, вывести на экран самую длинную и самую короткую сторону
Если ктот знает формулу, то киньте лишней небудет.

12
 Аватар для egor2116
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
20.09.2013, 23:38
Если скажите(а лучше покажите), что у вас не получается, обязательно поможем.
0
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
20.09.2013, 23:56
Beauty44, попробуйте сделать структуру вида:
C++
1
2
3
4
5
struct Avtor
{
    string name;
    multimap<int, string> books;
};
книги автора будут отсортированы по году
0
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17
21.09.2013, 13:17  [ТС]
Я не понимаю,как выполнить поиск самый ранней и поздней книги определенного автора, плюс, чтобы еще и с названием книги((
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
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
21.09.2013, 15:51
по рабоче-крестьянски(без функций) это только для одного автора, нужно просто обеспечить возможностсь добавление новых авторов

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
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17
22.09.2013, 16: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
#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
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
22.09.2013, 17:16
Создать контейнер который будет хранить структуры Author например: vector<Author>
0
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17
22.09.2013, 17:31  [ТС]
Цитата Сообщение от Хулиган Посмотреть сообщение
Создать контейнер который будет хранить структуры Author например: vector<Author>
Боже...
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
22.09.2013, 17:34
Цитата Сообщение от Хулиган Посмотреть сообщение
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
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17
22.09.2013, 19:00  [ТС]
Цитата Сообщение от 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
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
22.09.2013, 19:02
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
слишком заумно и к тому же неуниверсально.
ну это понятно, я изначально задание не дочитал:black_eye.:, написал код, дочитал задание и подделал под него код
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
22.09.2013, 19:35
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
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 17
22.09.2013, 22:25  [ТС]
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2013, 22:25
Помогаю со студенческими работами здесь

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

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

Вывести строку, содержащую самую раннюю/ позднюю весеннюю/летнюю/осеннюю/зимнюю дату
Дан строковый файл, содержащий даты в формате &quot;день/месяц/год&quot;, причем под день и месяц отводится по две позиции, а под год - четыре....

Найти самую раннюю дату
Найти самую раннюю дату. Данные сведения о различных даты. Каждая дата - это число , месяц и год. Найти самую раннюю дату.

Определить самую раннюю дату
Ввести N дат в формате ДД.ММ.ГГГГ. Определить самую раннюю дату.


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru