• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Программа на С++

mauntiDEW

New member
26.05.2021
4
0
BIT
0
Добрый день! Не могли бы помочь с программой, уже несколько дней сижу не знаю как её сделать.
Использовать программу:
C++:
#include<iostream>
#include<windows.h>
using namespace std;
struct Bibliot
{
    char name[50];
    char avtor[50];
    int god;
    int stranic;
};
void Find(Bibliot* obj, int n, int god)
{
    for (int i = 0; i < n; i++)
    {
        if (obj[i].god > god)
        {
            cout << "Назваие книги: " << obj[i].name << "\n";
            cout << "Автор книги: " << obj[i].avtor << "\n";
        }
    }
    cout << endl;
}
int main()
{
    setlocale(LC_CTYPE, "Rus");
    int n = 0, god = 0;
    int key = 0;
    Bibliot obj[100];
    do
    {
        cout << "1. Добавить книгу\n2. Вывод книг изданных в определенный период\n0. Выход\n";
        cin >> key;
        cin.ignore(1);
        switch (key)
        {
        case 1:
            cout << "Введите название книги: \n";
            gets_s(obj[n].name);
            OemToCharA(obj[n].name, obj[n].name);
            cout << "Введите автора книги: \n";
            gets_s(obj[n].avtor);
            OemToCharA(obj[n].avtor, obj[n].avtor);
            cout << "Введите год издания: \n";
            cin >> obj[n].god;
            cout << "Введите количество страниц: \n";
            cin >> obj[n].stranic;
            cin.ignore(1);
            n++;
            system("pause");
            system("cls");
            break;
        case 2:
            cout << "Введите год, после которого найти книги: ";
            cin >> god;
            Find(obj, n, god);
            system("pause");
            system("cls");
            break;
        case 0:
            break;
        default:
            cout << "Выбран неправильный пункт меню\n";
            break;
        }
    } while (key != 0);
    cout << "\n\n";
}
Упорядочить по неубыванию массив структур по заданному ключу. Ключ: год издания. Методы сортировки: QuickSort и пузырьковая сортировка.
 

userCut

Member
13.05.2021
23
0
BIT
0
В общем попытался все сделать максимально просто, есть сортировка пузырьком по году и по имени автора, быструю сортировку можете просто взять готовый алгоритм из интернета и также всё сделать.

C++:
#include<iostream>
#include<string>
using namespace std;


struct Bibliot
{
public:
    char *name;
    char *author ;
    int year;
    int countOfPages;
};

void printBibl(Bibliot* obj,int n){
    for (int i = 0; i < n; i++)
    {
//            cout << "Номер книги: " << i << "\n";
//            cout << "Назваие книги: " << obj[i].name << "\n";
            cout << "Автор книги: " << obj[i].author << "\n";
//            cout << "Год: " << obj[i].year << "\n";
    }
    cout << endl;
}


void swapB(Bibliot *i, Bibliot *j)
{
    Bibliot t;
    t = *i;
    *i = *j;
    *j = t;
}

//сортировка по году
void bubbleSort(Bibliot *obj,int len)
{
    int i, j;
    for (i = 0; i < len-1; i++){
        for (j = 0; j < len-1; j++){
            if (obj[j].year > obj[j+1].year){
                swapB(&obj[j],&obj[j+1]);
            }
        }
    }
}
//сортировка по автору
void bubbleSortA(Bibliot *obj,int len)
{
    int i, j;
    for (i = 0; i < len-1; i++){
        for (j = 0; j < len-1; j++){
            if (obj[j].author > obj[j+1].author){
                swapB(&obj[j],&obj[j+1]);
            }
        }
    }
}

int main(){

    Bibliot obj[100];
    obj[0].name   = "prata c++";
    obj[0].author = "john";
    obj[0].year   = 2005;
    obj[0].countOfPages = 55;

    obj[1].name   = "example book 3";
    obj[1].author = "alex";
    obj[1].year   = 2002;
    obj[1].countOfPages = 35;

    obj[2].name   = "codeby";
    obj[2].author = "new member";
    obj[2].year   = 2020;
    obj[2].countOfPages = 4;

    obj[3].name  = "doc";
    obj[3].author = "ms word";
    obj[3].year   = 2016;
    obj[3].countOfPages = 754;

    obj[4].name   = "alias";
    obj[4].author = "lin";
    obj[4].year   = 3066;
    obj[4].countOfPages = 2045;


    printBibl(obj,5);
    bubbleSortA(obj,5);
    printBibl(obj,5);

    return 0;
}
 

mauntiDEW

New member
26.05.2021
4
0
BIT
0
В общем попытался все сделать максимально просто, есть сортировка пузырьком по году и по имени автора, быструю сортировку можете просто взять готовый алгоритм из интернета и также всё сделать.

C++:
#include<iostream>
#include<string>
using namespace std;


struct Bibliot
{
public:
    char *name;
    char *author ;
    int year;
    int countOfPages;
};

void printBibl(Bibliot* obj,int n){
    for (int i = 0; i < n; i++)
    {
//            cout << "Номер книги: " << i << "\n";
//            cout << "Назваие книги: " << obj[i].name << "\n";
            cout << "Автор книги: " << obj[i].author << "\n";
//            cout << "Год: " << obj[i].year << "\n";
    }
    cout << endl;
}


void swapB(Bibliot *i, Bibliot *j)
{
    Bibliot t;
    t = *i;
    *i = *j;
    *j = t;
}

//сортировка по году
void bubbleSort(Bibliot *obj,int len)
{
    int i, j;
    for (i = 0; i < len-1; i++){
        for (j = 0; j < len-1; j++){
            if (obj[j].year > obj[j+1].year){
                swapB(&obj[j],&obj[j+1]);
            }
        }
    }
}
//сортировка по автору
void bubbleSortA(Bibliot *obj,int len)
{
    int i, j;
    for (i = 0; i < len-1; i++){
        for (j = 0; j < len-1; j++){
            if (obj[j].author > obj[j+1].author){
                swapB(&obj[j],&obj[j+1]);
            }
        }
    }
}

int main(){

    Bibliot obj[100];
    obj[0].name   = "prata c++";
    obj[0].author = "john";
    obj[0].year   = 2005;
    obj[0].countOfPages = 55;

    obj[1].name   = "example book 3";
    obj[1].author = "alex";
    obj[1].year   = 2002;
    obj[1].countOfPages = 35;

    obj[2].name   = "codeby";
    obj[2].author = "new member";
    obj[2].year   = 2020;
    obj[2].countOfPages = 4;

    obj[3].name  = "doc";
    obj[3].author = "ms word";
    obj[3].year   = 2016;
    obj[3].countOfPages = 754;

    obj[4].name   = "alias";
    obj[4].author = "lin";
    obj[4].year   = 3066;
    obj[4].countOfPages = 2045;


    printBibl(obj,5);
    bubbleSortA(obj,5);
    printBibl(obj,5);

    return 0;
}
Выдаёт ошибки значение типа "const char*" нельзя присвоить сущности типа char. Строка, где obj[0].name = "prata c++". Если в крации,то знак равно типо ошибка
 

userCut

Member
13.05.2021
23
0
BIT
0
Выдаёт ошибки значение типа "const char*" нельзя присвоить сущности типа char. Строка, где obj[0].name = "prata c++". Если в крации,то знак равно типо ошибка
Покажите как и чем компилируете, мне выдает варнинг для строк " bibliot.cpp:63:21: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings] 63 | obj[0].name = "prata c++";", но все работает, чтобы убрать варнинги в структуре вместо char*, нужно написать const char *. Ну а вообще для строк стоит использовать string и при необходимости конвертировать в char* функцией c_str.
p.s. я компилирую вот так, если что - g++ bibliot.cpp
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!