Начальные значения текущих четырёх букв одинаковы и равны EOL. В цикле при каждой итерации выбирается случайная буква, соответствующая текущим, и если она не является концом строки, она выводится на стандартный вывод, в противном случае программа завершается. Далее происходит сдвиг текущих букв, и только что выведенная буква становится последней буквой этой цепочки. Эти действия повторяются, пока не будет выведено необходимое число букв.
#----------------------------------------------------------------
# Программа 4. Генератор псевдотекста, анализирующий вероятность
# появления в тексте буквы после четырёх букв.
# Запуск: gawk -f prog4.awk textfile.txt
#----------------------------------------------------------------
BEGIN {
MAXGEN = 200
EOL = "\n"
c0 = c1 = c2 = c3 = EOL
}
{
for (i = 1; i <= length($0); i++) {
c = substr ($0, i, 1)
statetab[c0,c1,c2,c3,++nsuffix[c0,c1,c2,c3]] = c
c0 = c1
c1 = c2
c2 = c3
c3 = c
}
}
END {
srand ()
statetab[c0,c1,c2,c3,++nsuffix[c0,c1,c2,c3]] = EOL
c0 = c1 = c2 = c3 = EOL
for (i = 0; i < MAXGEN; i++) {
r = int (rand () * nsuffix[c0,c1,c2,c3]) + 1
p = statetab[c0,c1,c2,c3,r]
if (p == EOL) {
exit
}
printf ("%c", p)
c0 = c1
c1 = c2
c2 = c3
c3 = p
}
}
В данной программе массив a содержит строки таблицы A, массив b - строки таблицы B, и т.д. После инициализации массивов инициализируется генератор псевдослучайных чисел. В цикле генерируются 4 случайных числа - индексы массивов, и соответствующие строки выводятся на стандартный вывод.
#---------------------------------------------------------------
# Программа 5. Генератор псевдотекста с использованием
# SIMP-таблиц.
#---------------------------------------------------------------
BEGIN {
a[1] = "В частности "
a[2] = "С другой стороны, "
a[3] = "Однако "
a[4] = "Аналогично, "
a[5] = "Таким образом "
a[6] = "Нетрудно видеть, что "
a[7] = "Как показывают приведённые выше соображения, "
a[8] = "Например, "
a[9] = "Итак, "
a[0] = "Что касается нашей конкретной задачи, то "
b[1] = "гиперповерхность в пространстве состояний "
b[2] = "постоянный поток эффективной информации "
b[3] = "отличительная особенность выбранных критериев "
b[4] = "инициация развития критической подсистемы "
b[5] = "комплексная программа испытаний "
b[6] = "траектория в конфигурационном пространстве "
b[7] = "нагруженный несущий элемент "
b[8] = "включение дополнительных внутренних связей "
b[9] = "независимый принцип функционирования "
b[0] = "первичное отношение между подсистемой и технологией подсистемы "
c[1] = "находит широкое применение и требует "
c[2] = "сводит до минимума затраты при условии "
c[3] = "указывает на пределы применимости "
c[4] = "свидетельствует о необходимости более тщательного анализа "
c[5] = "чрезвычайно усложняется, если не принять во внимание условие"
c[6] = "подразумевает более основательное использование теории "
c[7] = "открывает весьма интересные перспективы "
c[8] = "признаёт значимость других систем и необходимость "
c[9] = "позволяет эффективно использовать "
c[0] = "требует применения "
d[1] = "более тонкой аппаратурной реализации."
d[2] = "оборудования четвёртого поколения."
d[3] = "тестирования четвёртого поколения."
d[4] = "проектирования на основе системного подхода."
d[5] = "предварительного отбора данных по определённым критериям."
d[6] = "гибкого, изменяющегося в зависимости от условий, описания."
d[7] = "интеграции и специализации."
d[8] = "более строгой стандартизации основных модулей."
d[9] = "функционирования в режиме дискретного времени."
d[0] = "разветвления сети сопровождения и поддержки."
srand ()
for (i = 0; i < 10; ++i) {
printf ("%s%s%s%s\n",
a[int (rand () * 10)],
b[int (rand () * 10)],
c[int (rand () * 10)],
d[int (rand () * 10)])
}
}
Итогом данной курсовой работы стали 5 различных генераторов псевдотекстов. Эти генераторы были протестированы и отлажены на большом количестве входных данных. Результаты их работы свидетельствуют о достижении автором поставленных целей. В процессе её выполнения автором были более глубоко изучены алгоритмы генерации псевдотекстов и накоплен опыт в построении и реализации данных алгоритмов. Также внимание автора было уделено изучению теории вероятности, некоторых аспектов языка AWK, значительного количества разнообразных русскоязычных текстов. Все трудности, возникшие в ходе выполнения курсовой работы, были успешно преодолены, а полученные результаты могут быть использованы при создании генераторов псевдотекстов, не уступающих генераторам таких известных корпораций, как Microsoft, IBM, Symantec, Adobe.
1. Гарднер, М. Путешествие во времени / М. Гарднер. – М.: Мир, 1990. – 341 с., ил.
2. Гасфилд, Д. Строки, деревья и последовательности в алгоритмах: Информатика и вычислительная биология / Пер. с англ. И. В. Романовского. – СПб.: Невский диалект; БХВ-Петербург, 2003. – 654 с.: ил.
3. Керниган, Б. Язык программирования С, 2-е издание / Б. Керниган, Д. Ритчи. – М.: Издательский дом “Вильямс”, 2006. – 304 с.: ил.
4. Яглом, А. Вероятность и информация / А.М. Яглом, И.М. Яглом. – М.: Наука, 1973. – 512с.: ил.