![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 24.10.2009
Сообщений: 87
|
![]()
Поздравляю всех с праздниками!
Вопрос по массивам Есть двумерный массив данных А1:В100 Есть одномерный массив контрольных значений С1:С100 Нужно заполнить значениями четыре одномерных массива D1:D100 - массив №1 (ближайшие большие значения из всего массива значений) Е1:Е100 - массив №2 (ближайшие большие значения из всего массива значений определённых построчно) F1:F100 - массив №3 (ближайшие меньшие значения из всего массива значений) G1:G100 - массив №4 (ближайшие меньшие значения из всего массива значений определённых построчно) Алгоритм поиска «ближайших больших» значений (столбцы D1:D100 и Е1:Е100). В любую ячейку Dх возвращается значение из двумерного массива данных А1:Вх-1, отвечающее следующим условиям: 1. искомое значение больше чем значение в ячейке Сх 2. искомое значение является наименьшим из всех значений определённых условием 1 3. если значения отвечающее первым двум условиям не существует, в ячейку Dх возвращается значение из ячейки Сх В любую ячейку Ех возвращается значение из двумерного массива данных А1:Вх-1, отвечающее следующим условиям: 1. искомое значение больше чем значение в ячейке Сх 2. искомое значение находится в ближайшей строке из всех строк диапазона значений 3. если в ближайшей строке значений Х, в обеих ячейках (Ах и Вх) находятся значения большие чем в ячейке Сх – выбирается меньшее из Ах и Вх. 4. если значения отвечающее первым трём условиям не существует, в ячейку Dх возвращается значение из ячейки Сх Алгоритм поиска «ближайших меньших» значений (столбцы F1:F100 и G1:G100) аналогичен алгоритму поиска «ближайших больших» значений (столбцы D1:D100 и Е1:Е100). Только меняем "большее" на "меньшее" и наоборот. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 08.12.2009
Сообщений: 136
|
![]()
Честно говоря, не совсем понял задание. Советую поэкспериментирвать с функцией ПОИСКПОЗ
|
![]() |
![]() |
![]() |
#3 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
смотрю строка данных 2 Сх=16. в Дх оказалось 20. допустим согласно условия 1. ищем ближайшее большее, нашли куда уже ближе в той же строке.
но если почитать п.2. условий - я бы искомым числом считал 18 из 6-й строки. Вопрос что важнее: число должно быть минимальным из больших или быть поближе расположенным? строка данных 3 (Сх=15) вызывает полное недоумение: почему там в Дх 20? там далжно быть 19 (из той же строки) или 16, находящееся на таком же расстоянии как и 20 от исходного 15.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 24.10.2009
Сообщений: 87
|
![]()
По варианту 1
Если контрольное значение в ячейке Сх = 5, то из массива значений $A$1:$Bх-1, в ячейку Dх возвращаем: 6, если нет 6 возвращаем 7, если нет 7 возвращаем 8 и т.д. Другими словами, возвращаем следующее за 5 число, или: шаг 1. в диапазоне $A$1:$Bх-1 находим все значения большие чем искомое в ячейке Сх шаг 2. из найденных значений (шаг 1) определяем наименьшее и возвращаем в ячейку Dх. шаг 3. если значения отвечающее первым двум условиям не существует (в диапазоне $A$1:$Bх-1 нет значений больших чем в ячейке Сх), в ячейку Dх возвращается значение из ячейки Сх По варианту 2 Если контрольное значение = 5 находится в ячейке С10 (десятая строка) то искомое значение (следующее за 5 число) из массива значений $A$1:$B9 находим по следующему алгоритму: шаг 1. проверяем по порядку все строки массива условий $A$1:$B9: • проверяем значения нижней строки массива условий (девятую строку А9:В9): • если в данной строке (ячейки А9 и В9) находится хотя бы одно значение большее 5, то это число возвращаем в ячейку Е10 • если в данной строке находятся два значения больших 5 (и в ячейке А9 и в ячейке В9), то меньшее из этих двух значений возвращаем в ячейку Е10 • если в данной строке нет значений больших 5, переходим к следующей строке массива условий (восьмой строке А8:В8) и т.д. шаг 2. если, после проверки всех строк массива условий $A$1:$B9 значение большее 5 не найдено, то в ячейку Е10 возвращаем значение из ячейки С10 |
![]() |
![]() |
![]() |
#5 | |
Пользователь
Регистрация: 24.10.2009
Сообщений: 87
|
![]() Цитата:
Та же строка не входит в диапазон значений. (поэтому расчёт нужно производить с строки 3 (Сх=15), у меня в примере ошибка - для строки данных 2 (Сх=16) не надо находить значения ) но если почитать п.2. условий - я бы искомым числом считал 18 из 6-й строки. Диапазон значений находится выше строки контрольного значения (нижняя граница диапазона значений смещена вверх от строки данных на 1) Вопрос что важнее: число должно быть минимальным из больших или быть поближе расположенным? Для ячеек D3:Dx число должно быть минимальным из больших Для ячеек E3:Еx число должно быть и минимальным из больших, и в ближайшей строке строка данных 3 (Сх=15) вызывает полное недоумение: почему там в Дх 20? там далжно быть 19 (из той же строки) или 16, находящееся на таком же расстоянии как и 20 от исходного 15. Диапазон значений находится выше строки контрольного значения (нижняя граница диапазона значений смещена вверх от строки данных на 1) |
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
![]()
Что написал,как написал та и не понял
Проверяйте. Диапазон задал на 100 значений
Анализ,обработка данных Недорого
|
![]() |
![]() |
![]() |
#7 | |
Пользователь
Регистрация: 24.10.2009
Сообщений: 87
|
![]() Цитата:
И ещё. Можно сделать так, что бы для каждой ячейки искомое значение рассчитывалось из определённого диапазона значений? В Вашем варианте расчёт значений прекращается на 100 ячейке и для 101 ничего не рассчитывает. Как сделать так, чтобы и для 101 и для 102 и для 2536 ячейки, искомое значение рассчитывалось из диапазона последних 100 ячеек. |
|
![]() |
![]() |
![]() |
#8 | |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
![]() Цитата:
Анализ,обработка данных Недорого
Последний раз редактировалось doober; 10.01.2010 в 18:21. |
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 24.10.2009
Сообщений: 87
|
![]()
Спасибо за подсказку. Но я опять в затруднении… Расписанный здесь вариант определения значений, я предполагал использовать в более сложной формуле поиска значений. Но поскольку, в предложенном варианте я не вижу и не знаю, как и куда привязать другие условия, прошу помощи и в этом.
Суть в следующем Добавляются ещё две колонки условий Столбец Н2:Нх «для МАКС» - условие для заполнения столбцов D1:Dх и Е1:Ех Столбец I2:Iх «для МИН» - условие для заполнения столбцов F1:Fх и G1:Gх (значения для столбцов Н2:Нх и I2:Iх рассчитываются по очень длинным формулам, поэтому не хотел загружать свой вопрос лишними данными) Получаем следующий алгоритм: Если в ячейке Нх (диапазона условий «для МАКС») значение отличное от нуля, то и в ячейку Dх и Ех (диапазонов значений «БХ» и «СБХ») возвращаем значение из ячейки Нх. Если в ячейке Нх (диапазона условий «для МАКС») значение равное нулю, то в ячейки Dх и Ех (диапазонов значений «БХ» и «СБХ») возвращаются значения по описанному ранее алгоритму: для «БХ» - наименьшее из наибольших, для «СБХ» - ближайшее наименьшее из наибольших. Если в ячейке Iх (диапазона условий «для МИН») значение отличное от нуля, то и в ячейку Fх и Gх (диапазонов значений «МХ» и «СМХ») возвращаем значение из ячейки Iх. Если в ячейке Iх (диапазона условий «для МИН») значение равное нулю, то в ячейки Fх и Gх (диапазонов значений «МХ» и «СМХ») возвращаются значения по описанному ранее алгоритму: для «МХ» - наименьшее из наибольших, для «СМХ» - ближайшее наименьшее из наибольших. |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
![]()
Вы понимаете,от ваших условий и так голова опухла,а теперь новые условия,возможно и алгоритм надо менять.
сразу все надо озвучивать,или чтобы не испугать.
Анализ,обработка данных Недорого
Последний раз редактировалось doober; 10.01.2010 в 21:45. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вычисление массива значений функции(С++) | mathe | Помощь студентам | 1 | 22.04.2009 15:11 |
Вычисление массива значений функции | mathe | Общие вопросы C/C++ | 0 | 22.04.2009 10:27 |
Алгоритм поиска значений в памяти. | Ivan_32 | Win Api | 2 | 07.11.2008 19:59 |
Модуль для поиска значений | wnuks | Microsoft Office Excel | 1 | 02.07.2008 07:46 |
графический вывод значений массива | vitalik007 | Помощь студентам | 6 | 21.10.2007 20:34 |