понедельник, 7 мая 2012 г.

Сиракузская последовательность

Возьмем любое натуральное число.
  1. Если оно четное, разделим его на 2, если нечетное - умножим на 3 и прибавим 1.
  2. С полученным числом проделаем пункт 1.
Есть гипотеза, утверждающая, что через конечное число шагов мы придем к последовательности 1 - 4 - 2 - 1 ...

Немного сократим количество шагов, используя массивы в Excel.

Пусть в ячейке A1 исходное нечетное число. В ячейку A2 запишем такую формулу:

=НАИМЕНЬШИЙ(ЕСЛИ(ОСТАТ((A1*3+1);2^СТРОКА(ДВССЫЛ("1:16")));3*A1+1;(A1*3+1)/2^СТРОКА(ДВССЫЛ("1:16")));1)
Это формула содержит массивы, поэтому после окончания ввода нужно нажать CTRL+SHIFT+ENTER.

Указанная формула избавляет число 3*A1+1 от максимальной степени двойки.

Например, если в ячейке A1 число 53, то 3*53+1 = 160 = 25 * 5, то после применения формулы в ячейке A2 получим число 5.

Теперь можно скопировать формулу до строки 20, например, и изменяя первоначальное число в ячейке A1, увидеть что в итоге приходим к числу 1.

среда, 18 января 2012 г.

Скатерть Улама

Скатерть Улама представляет из себя спираль чисел натурального ряда, на которой отмечены клетки, соответствующие простым числам.

Попробуем составить скатерь Улама в Excel. При этом воспользуемся VBA.

Располагая числа по спирали


обозначим перемещения таким образом:
  • П - вправо
  • В - вверх
  • Л - влево
  • Н - вниз

пятница, 30 декабря 2011 г.

Уникальный идентификатор списка

Пусть у нас есть какой-либо список, к примеру фамилий, и мы хотим каждому элементу присвоить уникальный номер.

Сделать это можно следующим образом.

Первому элементу присваиваем номер 1.

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

Чтобы проверить первое ли это появление элемента используем комбинацию функций ЕНД(ПОИСКПОЗ()).

Если это первое появление, то ПОИСКПОЗ() вернет #Н/Д, а функция ЕНД(#Н/Д) вернет ИСТИНА и мы смело присваиваем элементу номер МАКС() среди верхних идентификаторов плюс 1.

Если это не первое появление, то ЕНД(ПОИСКПОЗ()) возвращает ЛОЖЬ и мы через функцию ВПР() находим уже имеющийся у элемента идентификатор.

В конечном итоге получаем такую формулу (для второго элемента):
=ЕСЛИ(ЕНД(ПОИСКПОЗ(C3;C$2:C2;0));МАКС(D$2:D2)+1;ВПР(C3;C$2:D2;2;ЛОЖЬ))

Дальше просто копируем эту формулу.


среда, 28 декабря 2011 г.

Месяц, квартал, полугодие

Пусть в ячейке A1 находится дата в числовом формате.

Тогда чтобы определить месяц, воспользуемся следующей формулой:
=МЕСЯЦ(A1)

Чтобы определить квартал года по дате пишем:
=ОКРУГЛВВЕРХ(МЕСЯЦ(A1)/3;0)

Для определения полугодия:
=ОКРУГЛВВЕРХ(МЕСЯЦ(A1)/6;0)

В последних двух примерах использована функция ОКРУГЛВВЕРХ(), которая округляет число до ближайшего большего по модулю.

вторник, 27 декабря 2011 г.

Редактирование формул

При редактировании формулы в окне "присвоение имени" или в строке формул возможны 2 состояния:
режим "правки" и режим "ввод".

При режиме "ввод" нажатие клавиш влево, вправо и прочее вызывает перемещение по активному листу книги, а при режиме "правка" - перемещение по самой строке формул.

Особенность функции СУММ

При использовании функции СУММ() пустые ячейки, логические значения, тексты и значения ошибок в массиве или ссылке игнорируются, а учитываются только числа.

Благодаря этому получаем следующее:


Во втором случае получаем ошибку.

понедельник, 26 декабря 2011 г.

Функция МОДА

Функция МОДА() возвращает наиболее часто встречающееся числовое значение указанного диапазона. Если несколько значений встречается наиболее часто и одинаковое количество раз, то вернется первое из этих значений. Не числовые значения игнорируются.

Удобнее эту функцию использовать для проверки диапазона на уникальность значений.

Т.е. у нас есть диапазон, в котором каждое число должно встречаться ровно один раз. Тогда функция МОДА(диапазон) вернет ошибку #Н/Д если значения уникальны.

В Excel 2010 функция МОДА() оставлена для совместимости с предыдущими версиями и добавлены две новые функции МОДА.НСК(), возвращающая массив наиболее часто встречающихся значений, и МОДА.ОДН(), возвращающая одно наиболее часто встречающееся число.

Если диапазон (к примеру  A1:A20) содержит не только числовые данные, то можно воспользоваться такой конструкцией:
=ИНДЕКС(A1:A20;ПОИСКПОЗ(МАКС(СЧЁТЕСЛИ(A1:A20;A1:A20));СЧЁТЕСЛИ(A1:A20;A1:A20);0))

Эта формула использует массивы, поэтому после ввода жмем CTRL+SHIFT+ENTER.