Реализация алгоритмов генерации псевдотекстов
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

В процессе выполнения данной курсовой работы были реализованы некоторые алгоритмы генерации псевдотекстов. В качестве языка реализации был выбран AWK. Причинами такого выбора явились:

1) приспособленность AWKа к обработке текстовой информации;

2) сложность реализации некоторых алгоритмов на C, Pascal или другом общем языке программирования;

3) наличие у автора курсовой работы качественной реализации интерпретатора данного языка.

AWK представляет собой язык, предназначенный для обработки текстовой информации. Программа на AWKе состоит из пар шаблон-действие. Действие заключается в фигурные скобки. Каждая строка входного файла сопоставляется с каждым шаблоном; если обнаружено соответствие, то выполняется соответствующее действие. Если шаблон не указан, то действие выполняется для каждой входной строки. Если не указано действие, то строка выводится на стандартный вывод. Шаблон BEGIN распознаётся перед началом чтения файла, шаблон END - после его окончания. Текущая входная строка находится в переменной $0. Все массивы в AWKе - ассоциативные, размерности 1. Индексироваться массивы могут как одним значением (напр. x[2], q["abc"]), так и несколькими, что используется для эмуляции многомерных массивов (напр. y[1,2,3], f["2",6]). Большинство операций заимствовано из Си. Кроме того, есть операция конкатенации строк - a = b c. Строки b и c конкатенируются, и результат помещается в a. AWK имеет операторы for и if, аналогичные соответствующим операторам языка Си [3]. У оператора for также имеется форма for (i in array) operator, при этом operator выполняется для i, принимающего последовательно значения всех индексов массива array. Порядок перебора элементов не определён. В приведённых ниже программах использованы следующие встроенные функции AWKа:

1) srand() - инициализирует генератор псевдослучайных чисел текущим временем;

2) int(expr) - возвращает целую часть выражения expr;

3) rand() - возвращает случайное число в диапазоне от 0 до 1;

4) length(str) - возвращает длину строки str;

5) printf(...) - аналогична одноимённой функции ANSI C;

6) substr(str, i, n) - возвращает подстроку строки str, начиная с i-го символа, длиной не больше n символов;

7) exit - завершает выполнение программы.

Комментарии начинаются со знака "#" и продолжаются до конца строки.

Генератор псевдотекста со случайным выбором букв без учёта вероятностей их появления в текстах на русском языке

 

В данном генераторе имеется строка, в которой находятся буквы русского алфавита и пробел. При каждой итерации цикла выбранный случайным образом символ из этой строки выводится на стандартный вывод.

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

# Программа 1. Генератор псевдотекста со случайным выбором букв

# без учёта вероятностей их появления в текстах на русском языке.

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

BEGIN {

srand ()

str = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя "

for (i = 0; i < 200; ++i) {

ind = int (rand () * length (str)) + 1

printf ("%c", substr (str, ind, 1))

}

}



Генератор псевдотекста со случайным выбором слов без учёта вероятностей их появления в текстах на русском языке

 

Данный генератор содержит массив words, в который добавляется каждое слово, прочитанное из словаря. Словарь представляет собой текстовый файл, каждая строка которого содержит одно слово. Слова не повторяются. После того, как весь файл будет прочитан, переменная n содержит количество слов, содержащихся в массиве words. Далее в цикле выводятся случайно выбранные слова, разделённые пробелами.

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

# Программа 2. Генератор псевдотекста со случайным выбором слов

# без учёта вероятностей их появления в текстах на русском языке.

# Запуск: gawk -f prog3.awk words.txt

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

{

words[++n] = $0

}

 

END {

srand ()

for (i = 0; i < 20; ++i)

printf ("%s ", words[int (rand () * n + 1)])

}

 

Дата: 2019-07-30, просмотров: 150.