|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.01.2012, 09:05 | #191 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Кэп, нужно что бы "Monday", "monday", "Mon" были синонимами? Или наоборот, что бы левые игнорировались? |
|
12.01.2012, 18:56 | #192 |
Пользователь
Регистрация: 19.12.2011
Сообщений: 65
|
|
12.01.2012, 19:10 | #193 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
"Monday", "mon", "понедельник" <--- это первый вектор, содержащий список синонимов "вторник", "втор" <--- это второй вектор, содержащий список синонимов И тд. Все эти вектора вместе - это вектор векторов. Идентификация дня: пробежаться по всему вектору векторов, искать до тех пор пока не обнаружится нужный день, либо пока не будут перебором исследованы все элементы. Можно оптимизировать процесс идентификации данных: глянуть в сторону ассоциативного массива map Элемент асоциативного массива, это ключ (день недели, например "понедельник"), и значение - индекс элемента в векторе, который хранит истинное значение дня недели (например: 0 - это понедельник) Тогда можно запихать в ассоциативный массив сколько угодно разных ключей, ссылающихся на один и тот же индекс в векторе, а следовательно разные ключи, ссылающиеся на одно и тоже значение - суть синонимы. В такой системе поиск элемента по ключу среди любых 100500 возможных синонимов выполняется очень быстро. (А вот вставки-удаления медленно. Если не нужно на лету постоянно добавлять-удалять новые элементы-синонимы, то этот способ - оптимальное решение по скорости. Если нужно постоянно добавлять-удалять, нужно придумать что нибудь поинтереснее) Иллюстрация-концепт: Мап заполняется по следующей схеме: ключ, значение. Где ключ - строка, обозначающая синоним. Значение - индекс в векторе, значение которого - истинная строка, синонимом которой является ключ мапа, на него ссылающийся Примерное содержимое мапа: "понедельник" , 0 "пон", 0 "втор" ,1 "вторник", 1 Примерное содержимое вектора: "Понедельник" "Вторник" Теперь мы ищем в мапе по ключу: Вернуть значение элемента с заданным ключем (допустим "пон"). Тогда значение вернётся - 0. По индексу 0 в векторе находится значение "Понедельник". Значит "пон" синоним "Понедельник". Если же в мапе отсутствует элемент с заданным ключом - значит заданный ключ не_валидный. Поиск данных через ключи-синонимы даже в очень большом массиве происходит практически мгновенно. Здесь примитивное описание std::map на русском: http://adorning.ru/2010/01/18/s-urok...ivnyiy-massiv/ Здесь - добротное описание на английском http://www.cplusplus.com/reference/stl/map/ Последний раз редактировалось _Bers; 12.01.2012 в 19:20. |
|
13.01.2012, 20:12 | #194 |
Пользователь
Регистрация: 19.12.2011
Сообщений: 65
|
это подходит, ибо даже обычные массивы дядя еще не показывал.
но я почитаю вот там, попозже. сейчас есть актуальней проблемы. проверь, пожалуйста. оставляй замечания, исправлять буду сама. есть только два вопроса. Код:
2. как сделать что-бы sum округлялось до двух знаков после запятой(только попроще что-нибудь)? |
13.01.2012, 20:40 | #195 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
2. Допустим, у тебя есть число: 123,12345 Тебе нужно, что бы в в результате после запятой осталось только две цыфры. Для этого: 123,12345*100 получаем 12312,345 Берём целую часть от полученного: int val = (int) 12312,345 Так как приемник - целое, то дробная часть отрежеццо. Останется: 12312 Теперь делим на 100: 12312/100.0 получим: 123,12 Этот способ позволяет "отрезать" лишние цыфры. То есть, правило "округления" тут не действует. Если тебе нужно именно огруглять - можно поюзать мат. библиотеку: http://www.cplusplus.com/reference/clibrary/cmath/ceil/ http://www.cplusplus.com/reference/c...y/cmath/floor/ /ps приучай себя давать говорящие имена функциям и переменным. И не имей дурацкой привычки юзать условия в циклах, если эти условия могут быть истинными на всего одной итерации за все время жизни цикла. Это - не_рациональное падение производительности. Последний раз редактировалось _Bers; 13.01.2012 в 21:05. |
|
13.01.2012, 21:18 | #196 | |
Пользователь
Регистрация: 19.12.2011
Сообщений: 65
|
Цитата:
может я не так поняла, но там округляется именно до целого числа. так ответ получается правильный(два знака после запятой), но как-то тупо(?): sum*=100; sum=ceil(sum); sum/=100; cout << sum << endl; |
|
13.01.2012, 22:00 | #197 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
|
14.01.2012, 06:21 | #198 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
14.01.2012, 06:56 | #199 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
|
14.01.2012, 07:39 | #200 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Код:
На этапе тестирования и отладки нужно стремится делать так, что бы все исходные данные забивались автоматически. Последний раз редактировалось _Bers; 14.01.2012 в 07:48. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
PopupMenu со мной не дружит | Жигилий_Ульяна | Компоненты Delphi | 5 | 25.12.2008 11:04 |
проблемы с select или со мной... | smoke888 | JavaScript, Ajax | 2 | 23.09.2008 19:02 |