Читаем Искусство программирования на языке сценариев командной оболочки полностью

s3=9$s3 # Если первый символ в имени -- гласная буква

#+ или 'w' или 'h',

#+ то ее "значение" нужно отбросить.

#+ Поэтому ставим 9, или другое

#+ неиспользуемое значение, которое можно будет проверить.


if [[ "$s1" -ne "$s2" || "$s3" -eq 9 ]]

then

suffix=$s2

else

suffix=${s2:$char_pos}

fi

# ++++++++++++++++++++++++ Конец исключения отдельных ситуаций +++++++++++++++++++++++++++++++


padding=000 # Дополнить тремя нулями.


soun=$prefix$suffix$padding # Нули добавить в конец получившегося индекса.


MAXLEN=4 # Ограничить длину индекса 4-мя символами.

soundex=${soun:0:$MAXLEN}


echo "Индекс созвучия = $soundex"


echo


# Индекс "созвучия" - это метод индексации и классификации имен

#+ по подобию звучания.

# Индекс "созвучия" начинается с первого символа в имени,

#+ за которым следуют 3-значный расчетный код.

# Имена, которые произносятся примерно одинаково, имеют близкие индексы "созвучия".


# Например:

# Smith и Smythe -- оба имеют индекс "созвучия" "S530".

# Harrison = H625

# Hargison = H622

# Harriman = H655


# Как правило эта методика дает неплохой результат, но имеются и аномалии.

#

#

# Дополнительную информацию вы найдете на

#+ "National Archives and Records Administration home page",

#+ http://www.nara.gov/genealogy/soundex/soundex.html


# Упражнение:

# ----------

# Упростите блок "Исключение отдельных ситуаций" .


exit 0

Пример A-11. "Игра "Жизнь""

#!/bin/bash

# life.sh: Игра "Жизнь"


# ##################################################################### #

# Это Bash-версия известной игры Джона Конвея (John Conway) "Жизнь". #

# --------------------------------------------------------------------- #

# Прямоугольное игровое поле разбито на ячейки, в каждой ячейке может #

#+ располагаться живая особь. #

# Соответственно, ячейка с живой особью отмечается точкой, #

#+ не занятая ячейка -- остается пустой. #

# Изначально, ячейки заполняются из файла -- #

#+ это первое поколение, или "поколение 0" #

# Воспроизводство особей, в каждом последующем поколении, #

#+ определяется следующими правилами #

# 1) Каждая ячейка имеет "соседей" #

#+ слева, справа, сверху, снизу и 4 по диагоналям. #

# 123 #

# 4*5 #

# 678 #

# #

# 2) Если живая особь имеет 2 или 3 живых соседей, то она остается жить.#

# 3) Если пустая ячейка имеет 3 живых соседей -- #

#+ в ней "рождается" новая особь #

SURVIVE=2 #

BIRTH=3 #

# 4) В любом другом случае, живая особь "погибает" #

# ##################################################################### #


startfile=gen0 # Начальное поколение из файла по-умолчанию -- "gen0".

# если не задан другой файл, из командной строки.

#

if [ -n "$1" ] # Проверить аргумент командной строки -- файл с "поколениемn 0".

then

if [ -e "$1" ] # Проверка наличия файла.

then

startfile="$1"

fi

fi


ALIVE1=.

DEAD1=_

# Представление "живых" особей и пустых ячеек в файле с "поколением 0".


# Этот сценарий работает с игровым полем 10 x 10 grid (может быть увеличено,

#+ но большое игровое поле будет обрабатываться очень медленно).

ROWS=10

COLS=10


GENERATIONS=10 # Максимальное число поколений.


NONE_ALIVE=80 # Код завершения на случай,

#+ если не осталось ни одной "живой" особи.

TRUE=0

FALSE=1

ALIVE=0

DEAD=1


avar= # Текущее поколение.

generation=0 # Инициализация счетчика поколений.


# =================================================================


let "cells = $ROWS * $COLS"

# Количество ячеек на игровом поле.


declare -a initial # Массивы ячеек.

declare -a current


display ()

{


alive=0 # Количество "живых" особей.

# Изначально -- ноль.


declare -a arr

arr=( `echo "$1"` ) # Преобразовать аргумент в массив.


element_count=${#arr[*]}


local i

local rowcheck


for ((i=0; i<$element_count; i++))

do


# Символ перевода строки -- в конец каждой строки.

let "rowcheck = $i % ROWS"

if [ "$rowcheck" -eq 0 ]

then

echo # Перевод строки.

echo -n " " # Выравнивание.

fi


cell=${arr[i]}


if [ "$cell" = . ]

then

let "alive += 1"

fi


echo -n "$cell" | sed -e 's/_/ /g'

# Вывести массив, по пути заменяя символы подчеркивания на пробелы.

done


return


}


IsValid () # Проверка корректности координат ячейки.

{


if [ -z "$1" -o -z "$2" ] # Проверка наличия входных аргументов.

then

return $FALSE

fi


local row

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT