Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как написать код на c++

mult plan Знаток (435), закрыт 1 год назад
Дан список, содержащий 10 записей, каждая из которых имеет структуру:
Шифр книги Ф.И.О. авторов Название Год
тип строка тип строка тип строка издания
5 символов 20 символов 15 символов целое
Список упорядочен по возрастанию года издания.
Разработать алгоритмы и программы линейного и двоичного поиска всех книг, изданных до 1960 год с выводом найденных записей на экран.
Лучший ответ
etar125 Мыслитель (6454) 1 год назад
 #include  
#include

struct Kniga
{
std::string shifr;
std::string fio;
std::string nazvanie;
int year;

Kniga() {}
Kniga(std::string s, std::string f, std::string n, int y)
{
shifr = s; fio = f; nazvanie = n; year = y;
}
};

int main()
{
Kniga arr[10]
{
// тут книги
};

for(Kniga s : arr) if(s.year <= 1960) std::cout << s.shifr + " | " + s.fio + " | " + s.nazvanie << std::endl;

return 0;
}
Остальные ответы
Николай Веселуха Высший разум (383938) 1 год назад
 #include  
#include
#include
#include

using namespace std;

struct Book {
string code;
string title;
string author;
int year;
Book() : code("00001"), title("Библия "), author("И. Гутенберг"), year(1455) {}
private:
friend bool operator<(const Book& a, const Book& b) {
if (a.year < b.year) return true;
if (a.year == b.year) {
if (a.author < b.author) return true;
if (a.author == b.author) {
if (a.title < b.title) return true;
return a.code < b.code;
}
}
return false;
}
friend ostream& operator<<(ostream& out, const Book& book) {
out << book.code << ". "
<< book.author << ". "
<< book.title << ", "
<< book.year;
return out;
}
};

class ListOfBook {
public:
void add(const Book& book) {
books.push_back(book);
}
void arrange() {
sort(books.begin(), books.end());
}
vector linear(const int year) const {
vector answer;
for (const auto& book : books) {
if (book.year < year) {
answer.push_back(book);
}
}
return answer;
}
vector binary(const int year) const {
if (books.back().year < year) return books;
vector answer;
if (books.front().year >= year) return answer;
const auto length = books.size();
auto pos = length >> 1;
while (true) {
if (books[pos - 1].year < year && books[pos].year >= year) {
return vector{ books.begin(), books.begin() + pos };
}
if (books[pos].year <= year) {
pos = (pos + length) >> 1;
} else if (books[pos].year > year) {
pos >>= 1;
}
}
}
private:
vector books;
};

static Book parse_book() {
Book book;
cout << "Код: ";
cin >> book.code;
cin.ignore(0x1000, '\n');
cout << "Автор: ";
getline(cin, book.author);
cout << "Название: ";
getline(cin, book.title);
cout << "Год: ";
cin >> book.year;
cin.ignore(0x1000, '\n');
return book;
}

static void show(const char* prpmpt, const vector& books) {
puts(prpmpt);
for (const auto& book : books) {
cout << book << '\n';
}
cout.put('\n');
}

int main() {
constexpr size_t quantity = 10;
ListOfBook list_book;
Book book;
for (size_t i = 0; i < quantity; ++i) {
book = parse_book();
list_book.add(book);
}
cout.put('\n');
constexpr auto year = 1960;
auto liner = list_book.linear(year);
list_book.arrange();
auto binary = list_book.linear(year);
show("Линейный поиск:", liner);
show("Бинарный поиск:", binary);
}
Похожие вопросы