Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2010, 17:27   #1
PARTOS
Пользователь
 
Регистрация: 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). Только меняем "большее" на "меньшее" и наоборот.
Вложения
Тип файла: zip фр1.zip (4.7 Кб, 18 просмотров)
PARTOS вне форума Ответить с цитированием
Старый 10.01.2010, 08:30   #2
VistaSV30
Форумчанин
 
Аватар для VistaSV30
 
Регистрация: 08.12.2009
Сообщений: 136
По умолчанию

Честно говоря, не совсем понял задание. Советую поэкспериментирвать с функцией ПОИСКПОЗ
VistaSV30 вне форума Ответить с цитированием
Старый 10.01.2010, 12:07   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

смотрю строка данных 2 Сх=16. в Дх оказалось 20. допустим согласно условия 1. ищем ближайшее большее, нашли куда уже ближе в той же строке.
но если почитать п.2. условий - я бы искомым числом считал 18 из 6-й строки.

Вопрос что важнее: число должно быть минимальным из больших или быть поближе расположенным?

строка данных 3 (Сх=15) вызывает полное недоумение: почему там в Дх 20? там далжно быть 19 (из той же строки) или 16, находящееся на таком же расстоянии как и 20 от исходного 15.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 10.01.2010, 12:08   #4
PARTOS
Пользователь
 
Регистрация: 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
PARTOS вне форума Ответить с цитированием
Старый 10.01.2010, 13:17   #5
PARTOS
Пользователь
 
Регистрация: 24.10.2009
Сообщений: 87
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
смотрю строка данных 2 Сх=16. в Дх оказалось 20. допустим согласно условия 1. ищем ближайшее большее, нашли куда уже ближе в той же строке.
но если почитать п.2. условий - я бы искомым числом считал 18 из 6-й строки.

Вопрос что важнее: число должно быть минимальным из больших или быть поближе расположенным?

строка данных 3 (Сх=15) вызывает полное недоумение: почему там в Дх 20? там далжно быть 19 (из той же строки) или 16, находящееся на таком же расстоянии как и 20 от исходного 15.
смотрю строка данных 2 Сх=16. в Дх оказалось 20. допустим согласно условия 1. ищем ближайшее большее, нашли куда уже ближе в той же строке.
Та же строка не входит в диапазон значений. (поэтому расчёт нужно производить с строки 3 (Сх=15), у меня в примере ошибка - для строки данных 2 (Сх=16) не надо находить значения )

но если почитать п.2. условий - я бы искомым числом считал 18 из 6-й строки.
Диапазон значений находится выше строки контрольного значения (нижняя граница диапазона значений смещена вверх от строки данных на 1)

Вопрос что важнее: число должно быть минимальным из больших или быть поближе расположенным?
Для ячеек D3:Dx число должно быть минимальным из больших
Для ячеек E3:Еx число должно быть и минимальным из больших, и в ближайшей строке

строка данных 3 (Сх=15) вызывает полное недоумение: почему там в Дх 20? там далжно быть 19 (из той же строки) или 16, находящееся на таком же расстоянии как и 20 от исходного 15.
Диапазон значений находится выше строки контрольного значения (нижняя граница диапазона значений смещена вверх от строки данных на 1)
PARTOS вне форума Ответить с цитированием
Старый 10.01.2010, 15:43   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Что написал,как написал та и не понял
Проверяйте.
Диапазон задал на 100 значений
Вложения
Тип файла: rar фр.rar (45.9 Кб, 14 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 10.01.2010, 16:47   #7
PARTOS
Пользователь
 
Регистрация: 24.10.2009
Сообщений: 87
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Что написал,как написал та и не понял
Проверяйте.
Диапазон задал на 100 значений
А что делать, если диапазон значений 1000 или 5000 значений?

И ещё. Можно сделать так, что бы для каждой ячейки искомое значение рассчитывалось из определённого диапазона значений? В Вашем варианте расчёт значений прекращается на 100 ячейке и для 101 ничего не рассчитывает. Как сделать так, чтобы и для 101 и для 102 и для 2536 ячейки, искомое значение рассчитывалось из диапазона последних 100 ячеек.
PARTOS вне форума Ответить с цитированием
Старый 10.01.2010, 17:33   #8
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Есть двумерный массив данных А1:В100
Как задача поставпена была ,так и выполнена
Вложения
Тип файла: rar FULL VERSION.rar (46.3 Кб, 14 просмотров)
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 10.01.2010 в 18:21.
doober вне форума Ответить с цитированием
Старый 10.01.2010, 19:58   #9
PARTOS
Пользователь
 
Регистрация: 24.10.2009
Сообщений: 87
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Как задача поставпена была ,так и выполнена
Спасибо за подсказку. Но я опять в затруднении… Расписанный здесь вариант определения значений, я предполагал использовать в более сложной формуле поиска значений. Но поскольку, в предложенном варианте я не вижу и не знаю, как и куда привязать другие условия, прошу помощи и в этом.

Суть в следующем
Добавляются ещё две колонки условий
Столбец Н2:Нх «для МАКС» - условие для заполнения столбцов D1:Dх и Е1:Ех
Столбец I2:Iх «для МИН» - условие для заполнения столбцов F1:Fх и G1:Gх
(значения для столбцов Н2:Нх и I2:Iх рассчитываются по очень длинным формулам, поэтому не хотел загружать свой вопрос лишними данными)

Получаем следующий алгоритм:
Если в ячейке Нх (диапазона условий «для МАКС») значение отличное от нуля, то и в ячейку Dх и Ех (диапазонов значений «БХ» и «СБХ») возвращаем значение из ячейки Нх.
Если в ячейке Нх (диапазона условий «для МАКС») значение равное нулю, то в ячейки Dх и Ех (диапазонов значений «БХ» и «СБХ») возвращаются значения по описанному ранее алгоритму: для «БХ» - наименьшее из наибольших, для «СБХ» - ближайшее наименьшее из наибольших.
Если в ячейке Iх (диапазона условий «для МИН») значение отличное от нуля, то и в ячейку Fх и Gх (диапазонов значений «МХ» и «СМХ») возвращаем значение из ячейки Iх.
Если в ячейке Iх (диапазона условий «для МИН») значение равное нулю, то в ячейки Fх и Gх (диапазонов значений «МХ» и «СМХ») возвращаются значения по описанному ранее алгоритму: для «МХ» - наименьшее из наибольших, для «СМХ» - ближайшее наименьшее из наибольших.
Вложения
Тип файла: zip фр2.zip (3.3 Кб, 11 просмотров)
PARTOS вне форума Ответить с цитированием
Старый 10.01.2010, 20:31   #10
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Вы понимаете,от ваших условий и так голова опухла,а теперь новые условия,возможно и алгоритм надо менять.
сразу все надо озвучивать,или чтобы не испугать.
Вложения
Тип файла: rar фр2.rar (74.7 Кб, 17 просмотров)
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 10.01.2010 в 21:45.
doober вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление массива значений функции(С++) 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