Пример 25-10. Исследование математических последовательностей
Пример 25-10. Исследование математических последовательностей
#!/bin/bash
# Пресловутая "Q-последовательность" Дугласа Хольфштадтера *Douglas Hofstadter):
# Q(1) = Q(2) = 1
# Q(n) = Q(n - Q(n-1)) + Q(n - Q(n-2)), для n>2
# Это "хаотическая" последовательность целых чисел с непредсказуемым поведением.
# Первые 20 членов последовательности:
# 1 1 2 3 3 4 5 5 6 6 6 8 8 8 10 9 10 11 11 12
# См. книгу Дугласа Хольфштадтера, "Goedel, Escher, Bach: An Eternal Golden Braid",
# p. 137, ff.
LIMIT=100 # Найти первые 100 членов последовательности
LINEWIDTH=20 # Число членов последовательности, выводимых на экран в одной строке
Q[1]=1 # Первые два члена последовательности равны 1.
Q[2]=1
echo
echo "Q-последовательность [первые $LIMIT членов]:"
echo -n "${Q[1]} " # Вывести первые два члена последовательности.
echo -n "${Q[2]} "
for ((n=3; n <= $LIMIT; n++)) # C-подобное оформление цикла.
do # Q[n] = Q[n - Q[n-1]] + Q[n - Q[n-2]] для n>2
# Это выражение необходимо разбить на отдельные действия,
# поскольку Bash не очень хорошо поддерживает сложные арифметические действия над элементами массивов.
let "n1 = $n - 1" # n-1
let "n2 = $n - 2" # n-2
t0=`expr $n - ${Q[n1]}` # n - Q[n-1]
t1=`expr $n - ${Q[n2]}` # n - Q[n-2]
T0=${Q[t0]} # Q[n - Q[n-1]]
T1=${Q[t1]} # Q[n - Q[n-2]]
Q[n]=`expr $T0 + $T1` # Q[n - Q[n-1]] + Q[n - Q[n-2]]
echo -n "${Q[n]} "
if [ `expr $n % $LINEWIDTH` -eq 0 ] # Если выведено очередные 20 членов в строке.
then # то
echo # перейти на новую строку.
fi
done
echo
exit 0
# Этот сценарий реализует итеративный алгоритм поиска членов Q-последовательности.
# Рекурсивную реализацию, как более интуитивно понятную, оставляю вам, в качестве упражнения.
# Внимание: рекурсивный поиск членов последовательности будет занимать *очень* продолжительное время.
--
Bash поддерживает только одномерные массивы, но, путем небольших ухищрений, можно эмулировать многомерные массивы.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Отключение вывода эскейп-последовательностей
Отключение вывода эскейп-последовательностей При помощи <xsl:text> можно включать в выходной документ непосредственно символы < и &, а не последовательности &lt; и &amp;. Для этого следует установить атрибут disable-output-escaping элемента <xsl:text> в yes («да», по умолчанию он
Создание последовательностей страниц: <fo:page-sequence>
Создание последовательностей страниц: <fo:page-sequence> Что такое последовательность страниц? Это ряд страниц с одинаковыми характеристиками (например, глава в книге), которые при желании можно форматировать одинаковым способом. Страницы в результирующем документе в
21.3.3. Тестирование последовательностей
21.3.3. Тестирование последовательностей Для проверки большинства последовательностей вам нужно просто войти в виртуальную консоль и запустить cat. Введите последовательности, которые вы хотите протестировать, и увидите результаты. Для ^[ нажмите клавишу <Esc>.Терминалы
6.2. Применение математических к результатам моделирования
6.2. Применение математических к результатам моделирования Теперь вам, естественно, хотелось бы графически представить в PROBE напряжения на катушке UL и конденсаторе UC. Но как можно отобразить эти напряжения, если PROBE рассчитывает только узловые потенциалы, то есть
Урок № 100. Групповое проведение документов и восстановление последовательностей
Урок № 100. Групповое проведение документов и восстановление последовательностей С помощью команды Операции | Проведение документов осуществляется переход в режим группового проведения документов и восстановления последовательностей. При этом на экран выводится окно
4.21. Замена в текстовом файле последовательностей пробелов на один пробел
4.21. Замена в текстовом файле последовательностей пробелов на один пробел ПроблемаИмеется текстовый файл с последовательностями пробелов различной длины и требуется заменить каждое вхождение такой последовательности на единственный пробел.РешениеДля чтения
7.8. Выполнение для последовательностей операций над множествами
7.8. Выполнение для последовательностей операций над множествами ПроблемаИмеются последовательности, которые требуется реорганизовать с помощью операций над множествами, таких как объединение (union), различие (difference) или пересечение (intersection).РешениеДля этой цели
15.10.4. Ранжирование последовательностей определенных пользователем преобразований
15.10.4. Ранжирование последовательностей определенных пользователем преобразований Фактический аргумент функции может быть неявно приведен к типу формального параметра с помощью последовательности определенных пользователем преобразований. Как это влияет на
Пример 12-25. Исследование каталога /usr/X11R6/bin
Пример 12-25. Исследование каталога /usr/X11R6/bin #!/bin/bash# Что находится в каталоге /usr/X11R6/bin?DIRECTORY="/usr/X11R6/bin"# Попробуйте также "/bin", "/usr/bin", "/usr/local/bin", и т.д.for file in $DIRECTORY/*do whatis `basename $file` # Вывод информации о файле.doneexit 0# Вывод этого сценария можно перенаправить в файл:# ./what.sh >>whatis.db# или
12.8. Команды выполнения математических операций
12.8. Команды выполнения математических операций factorРазложение целого числа на простые множители.bash$ factor 2741727417: 3 13 19 37 bcBash не в состоянии выполнять действия над числами с плавающей запятой и не содержит многих важных математических функций. К счастью существует
Методы последовательностей
Методы последовательностей Все последовательности имеют множество методов обработки последовательностей, реализованных как методы расширения.Список методов последовательностей* Методы Print* Метод фильтрации Where* Метод проецирования Select* Метод проецирования SelectMany*
Методы для последовательностей
Методы для последовательностей Методы Print Описание методовМетоды приведены для последовательности sequence of T. function Print(delim: string := ): sequence of T; Выводит последовательность на экран, используя delim в качестве разделителя. function Println(delim: string := ): sequence of T; Выводит
Вставка математических формул
Вставка математических формул Математические формулы могут содержать греческие буквы, надстрочные и подстрочные символы, знаки корня, интеграла и т. д. Для создания подобных формул в составе Microsoft Office есть специальный редактор формул. Использование этой программы