![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Igor_K |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
Здравствуйте!
Мне нужно понять ка реализовать такую штуку для лабы. Есть массив структур, например:
И нужно реализовать вывод определенных структур массива по определению которое вводит пользователь с клавиатуры. Например вводим:
типа выборка как из базы данных. Я не могу сообразить как выбрать данные по таким критерием. То есть не пойму как разобрать , например "n > 10" и выбрать все елементы, в которых елемент структуры n больше 10. Наверно нужно гдето почитать как реализовано такое в базах данных. Никто не знает где? ИЛи может кто-то может словами объяснить как такое делается. Спасибо всем за любую информацию! |
||||
|
|||||
| bronislav |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 29.1.2008 Где: Украина::Донецк Репутация: нет Всего: 3 |
А каким способом пользователь вводит ограничения?
У тебя в структуре два члена m и n. Пользователь может наложить на них условие
А в программе читаешь строку-условие например из файла или из консоли, разбираешь ее на отдельные сооставляющие. И делаешь выборку по условиям. Ну типа если такое ограничение найдено, то найдем множество структур, которые соостветствуют этому условию. А потом когда найдены множества для отдельных условий ищешь их пересечения, объединения и т.д. Я понятно объяснил? Если что-то не понятно то пиши. Можно воспользоваться стандартной функцией std::find_if Ей передаются три параметра, итератор начала, итератор конца и предикат (или условие). Предикат - єто функция, которая как аргумент получает элемент твоей структуры и как результат выдает ответ соответствует структура условию или нет. Пишеться функция, предикат, в которой происходит обработка разобранного условия, а условие разбирается (парсится) единоразово при чтении из файла. Это сообщение отредактировал(а) bronislav - 2.5.2008, 23:03 -------------------- ![]() иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes |
|||
|
||||
| Igor_K |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
||||
|
||||
| bronislav |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 29.1.2008 Где: Украина::Донецк Репутация: нет Всего: 3 |
Ну пишеш switch который проверяет так, условие применимо к элементу 'n', оператор = '>', ограничение = 10.
-------------------- ![]() иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes |
|||
|
||||
| Igor_K |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
bronislav, спасибо большое за помощь!
|
|||
|
||||
| bronislav |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 29.1.2008 Где: Украина::Донецк Репутация: нет Всего: 3 |
Еще несколько советов.
При разборе строки условия создаешь список структур условий:
Потом пишешь предикат, в котором поелементно проверяешь условия: если условие верно, переходем к следующему, если не верно возвращаем false. -------------------- ![]() иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |