0 / 0 / 0
Регистрация: 26.12.2020
Сообщений: 7
1

Массив кортежей, его фильтрация по запросу пользователя по принципу и/или

17.03.2021, 22:49. Показов 1555. Ответов 0

Author24 — интернет-сервис помощи студентам
Здравствуйте. Такая вот задачка: при помощи векторов создать массив кортежей, состоящий из полей: цвет + форма фигуры. После вывода всех элементов, пользователем должен вводиться текст по типу "красный и/или треугольник", по которому должен отфильтроваться полученный набор фигур. Решение должно быть несложным, но вот все найденное мной в интернете на эту тему говорит об обратном. По итогу добыл необходимый код, пытался разобраться уже по имеющемуся решению, подстроить под себя код, сократив число "самописных" функций, исключить использование перечислений, но всё безуспешно. Прикрепляю код, вопрос можно ли исключить/сократить использование функций, перечислений, каких-то SetConsoleCP(1251); SetConsoleOutputCP(1251);
или, может, есть еще идеи решения. Спасибо
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <vector>
#include <tuple>
#include <ctime>
#include <Windows.h>
#include <string>
#include <iostream>
 
using namespace std;
 
using namespace std;
 
enum {
    solidsNumber = 15,
    color = 0,
    solid = 1,
    orScore = 1,
    andScore = 2
};
 
struct solidsAndColors {
    vector <string> colors = { "желтый", "белый", "синий", "розовой", "синий", "красный" };;
    vector <string> solids = { "квадрат", "треугольник", "круг", "овал", "ромб", "пятиугольник" };
    vector <tuple <string, string> > geoTela;
    struct querry {
        string querryColor, querrySymbol, querrySolid;
    };
 
    void add_color_and_solid() {
        for (auto& telo : geoTela) {
            get<color>(telo) = colors[rand() % colors.size()];
            get<solid>(telo) = solids[rand() % solids.size()];
        }
    }
    void tuple_out() {
        for (auto& telo : geoTela) {
            cout << get<color>(telo) << " " << get<solid>(telo) << endl;
        }
    }
    bool tuple_out(tuple <string, string>& telo) {
        cout << get<color>(telo) << " " << get<solid>(telo) << endl;
        return true;
    }
 
    void querry_search(querry& thisQuerry) {
        bool outed = false;
        for (auto& telo : geoTela) {
            short searchScore = 0;
            if (get<color>(telo) == thisQuerry.querryColor) {
                searchScore++;
            }
            if (get<solid>(telo) == thisQuerry.querrySolid) {
                searchScore++;
            }
            if ((searchScore == orScore) and (thisQuerry.querrySymbol == "или")) {
                outed = tuple_out(telo);
            }
            if ((searchScore == andScore) and (thisQuerry.querrySymbol == "и")) {
                outed = tuple_out(telo);
            }
        }
        if (not outed) {
            cout << "Объекты, удовлетворяющие условиям поиска, не были найдены";
        }
    }
 
    void new_querry() {
        cout << endl << "Ввведите запрос вида 'красный и квадрат' или 'синий или круг' : " << endl;
        querry thisQuerry;
        cin >> thisQuerry.querryColor >> thisQuerry.querrySymbol >> thisQuerry.querrySolid;
        cout << endl;
        if (thisQuerry.querrySymbol != "и") {
            if (thisQuerry.querrySymbol != "или") {
                cout << "Был сформирован неправильный запрос. Повторите попытку " << endl;
                new_querry();
                return;
            }
        }
        querry_search(thisQuerry);
    }
 
    solidsAndColors() {
        geoTela.resize(solidsNumber);
        add_color_and_solid();
        tuple_out();
    }
};
 
int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
    solidsAndColors geoStructs;
    geoStructs.new_querry();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2021, 22:49
Ответы с готовыми решениями:

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

По запросу пользователя вывести тот или иной абзац
Добрый вечер:) Помогите пожалуйста чуток исправить прогу. Суть ее вот в чем: Дан текстовый файл,...

Массив: Создать двухмерный массив и заполнить его по заданному принципу...
Помогите пожалуйста с решением в с++, Надо написать программу, которая создаёт двухмерный...

Фильтрация букв или цифр в зависимости от выбора пользователя
Написать функцию, которая при вводе с клавиатуры текста выполняет фильтрацию букв или цифр в...

0
17.03.2021, 22:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2021, 22:49
Помогаю со студенческими работами здесь

Появление картинки в одной из 4х квадратов/областей по запросу пользователя путем введения цифр 1,2,3 или 4 в командную строку
Доброй ночи всем программистам! Нужна ваша помощь! Задание: создать/разделить область на 4...

Напишите программу, которая создает двухмерный массив и заполняет его по следующему принципу
2. Напишите программу, которая создает двухмерный массив и заполняет его по следующему принципу:...

Дан массив из 18 элементов, заполнить его по вашему усмотрению(запросить у пользователя или заполнить случайными числами
Дан массив из 18 элементов, заполнить его по вашему усмотрению(запросить у пользователя или...

По запросу пользователя просмотр или копирование всех файлов из корневого каталога на дискете в создаваемый новый каталог на дискете с именем 1
Помогите пожалуйста создать в Windows командный файл. Каждый командный файл должен содержать не...

Ввести число. По выбору пользователя добавить в него его четверть, найти его квадратный корень или остаток от деления на 4
Ввести число. По выбору пользователя добавить в него его четверть, найти его квадратный корень или...

Фильтрация по таблице и запросу одновременно
Здравствуйте, помогите пожалуйста, не могу разобраться. У меня есть таблица Basic_table, к ней...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru