Обработка текстов. Автоматизация создания словарей
Главные особенности автоматизации создания словаря. Структура словаря и словарной статьи. Алгоритм программы, модуль System, Crt, Graph, dos. Описание структур данных. Структура записи словарной статьи с динамическими и статистическими переменными.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 15.05.2011 |
Размер файла | 34,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
Данная программа демонстрирует автоматизированное создание словарей, редактирование текста/ словаря, построение диаграмм. Данная программа написана на языке программирования высокого уровня Turbo Pascal 7.0 с использованием стандартных модулей Graph и CRT. В пояснительной записке приведено описание общего алгоритма программы, подробного описания программы, описание нескольких процедур, описание структур данных, описание используемых в программе модулей Turbo Pascal.
В приложении 1 приведены техническое задание и инструкция пользователя на английском языке.
В приложении 2 к пояснительной записке приведен исходный текст.
В курсовой работе по программированию требуется:
1. Разработать и отладить программу в соответствии с вариантом.
2. Используя разработанную программу, обработать 3-4 группы по 5-10 текстов в каждой (каждый текст не меньше 6 Кб). Для каждой группы текстов составить свой собственный словарь - всего получится 3-4 словаря.
3. Используя разработанную программу, провести анализ полученных словарей в соответствии с вариантом.
4. Представить результаты работы по пунктам 1-3 преподавателю на проверку.
5. В случае удовлетворительности результатов (по оценке преподавателя) подготовить пояснительную записку и плакаты (2 штуки).
6. Защитить курсовую работу.
Разработанная программа должна обеспечивать следующие действия:
1. Выбор текста для анализа.
2. Автоматизированное составление словаря.
3. Редактирование словаря.
4. Анализ словаря.
5. Сравнительный анализ нескольких словарей.
6. Отображение результатов анализа в виде графических диаграмм.
Выбор требуемого действия осуществляется посредством выбора соответствующего пункта меню - вертикального либо горизонтального.
Тексты для анализа берутся из Internet либо добываются иным способом, вплоть до ручного набора текста.
Во время работы программы анализируемый текст и словарь хранятся в оперативной памяти в виде списков (статических либо динамических).
Созданные словари сохраняются в виде файлов. Формат файла для хранения словаря определяется вариантом либо самостоятельно.
Автоматизация создания словаря заключается в следующем:
Анализируемый текст выводится на экран. Цветом, фоном или морганием выделяется одно из слов. Навигационной клавиатурой можно выбрать любое слово (необходимо предусмотреть промотку страниц - для текстов, не помещающихся на одной странице). При нажатии клавиши <Enter> либо другой (заданной вариантом) на экран выводится окно диалога добавления слова к словарю. Диалог зависит от типа составляемого словаря. В диалоге необходимо предусмотреть возможность отмены действия. После окончания ввода информации по словарной статье пользователь должен подтвердить ее нажатием определенной клавиши (задается вариантом). После этого на экран снова выводится анализируемый текст. Пользователь выбирает следующее слово для анализа. И так до тех пор, пока он не обработает весь текст. В любой момент пользователь должен иметь возможность выйти в главное меню.
Замечание 1. Для сохранности информации необходимо предусмотреть сохранение словаря в файле после добавления каждой новой словарной статьи.
Замечание 2. Словарные статьи должны хранить слова во всех формах, встреченных в исходном тексте. Поэтому необходимо предусмотреть не только добавление к словарю новой словарной статьи, но и нового варианта написания слова, ранее уже внесенного в словарь.
Структура словаря:
Словарь представляет собой список (тип списка - по вариантам). Записями списка являются словарные статьи.
Структура словарной статьи:
- слово (выражение) в начальной форме;
- морфологическая характеристика (склонение, род, спряжение, вид и т.д.);
- толкование (для толкового словаря), список синонимов (для словаря синонимов), антонимы (для словаря антонимов), значение фразеологизма (для словаря фразеологизмов);
- слово (выражение) в формах, извлеченных из исходного текста.
1. Описание программы
Меню:
1. О программе:
-автор
-номер варианта
-полный текст задания
2. Выбрать обрабатываемый файл:
-для простых вариантов - ввод имени файла строкой
-для сложных вариантов - выбор имени файла из списка файлов текущей папки (используя процедуры FindFirst/FindNext)
3. Обработка файла:
-в соответствии с вариантом
4. Выбрать файл словаря (аналогично обрабатываемому файлу).
5. Работа со словарем
-в соответствии с вариантом
6. Сравнительный анализ словарей (с выводом графической диаграммы).
7. Выход.
Вариант 8 (4 3 4 2 2 6 2 8 8)
Тип текста:
4. Сравнение текстов разных стилей: художественного, научного, публицистического, официально-делового.
Тип словаря:
3. Словарь антонимов.
Анализ словаря:
4.По количеству толкований слова (для толкового словаря);
по количеству синонимов (для словаря синонимов).
по количеству антонимов (для словаря антонимов).
по количеству фразеологизмов (для словаря фразеологизмов).
Сравнительный анализ словарей:
2.По совпадению слов в разных словарях.
Вариант словаря.
6. Причастия.
Варианты меню.
2. Вертикальное меню
Вариант типа диаграммы.
8. Объемная круговая со сдвинутым сектором
Вариант используемой функциональной клавиши
F8
Описание программы.
1.1 Алгоритм программы
Программа начинается с инициализации строк меню.
Главное меню содержит 3 пункта:
- Меню
- Справка
- Выход
Каждая опция становится доступным с нажатия клавиши < END>, перемещение по остальным пунктам главного меню, и меню списка осуществляется с помощью клавиш `# 24,' `#25,` `#26,' `#27,' активизация пунктов меню осуществляется с помощью нажатия клавиши <ENTER>.
Опция «Меню» состоит из:
- Выбор текста Редактирование текста
-Выбор словаря
-Работа со словарем
-Сравнительный анализ словарей
-Выход в верхнее меню
Первый пункт меню - «Выбор текста» содержит список каталогов, в которых находятся тексты. При указании нужного каталога появляется список текстов, находящихся в данном каталоге. Пользователь набирает имя нужного ему текста.
Второй пункт меню - «Редактирование текста» состоит из имен файлов, в которых находятся тексты предназначенные для редактирования. При указании имени файла и ее активизации на экране появляется текст. При выделении слова и нажатии функциональной клавиши F8 на экране появляется окно словарной статьи.
Третий пункт меню - «Выбор словаря» содержит список словарей. Пользователь выбирает нужный ему словарь для просмотра или редактирования.
Четвертый пункт меню - «Работа со словарем» содержит вертикальное меню из следующих пунктов:
-Редактирование словаря
-Анализ словаря
-Вывод диаграммы
При выборе пункта «Редактирование словаря» пользователь может просмотреть структуру словарной статьи, изменить его или удалить.
При выборе пункта «Анализ словаря» появляется окно, где указано, сколько антонимов имеет каждое слово, выбранного словаря.
При выборе пункта «Вывод диаграммы» пользователь может просмотреть графическую диаграмму анализа словаря.
Пятый пункт меню - «Сравнительный анализ словарей» содержит текстовую и графическую информацию о сравнительном анализе словарей (по совпадению слов в разных словарях).
Шестой пункт меню - «Выход в верхнее меню» предназначен для выхода в главное меню.
Опция «Справка» содержит информацию о разработчике и номере варианта. При нажатии любой клавиши появляется окно с подсказкой, при нажатии F8 появляется полный текст задания.
Опция «Выход» предназначен для завершения работы.
1.2 Описание модулей
Данная программа написана на языке программирования высокого уровня Turbo Pascal 7.0 с использованием стандартных модулей как System, Graph (графическая библиотека), Crt и Dos.
Модуль System - является фактически основной библиотекой Turbo Pascal 7.0. он реализует подпрограммы для всех встроенных возможностей, таких как ввод / вывод, обработка строк, динамическое распределение памяти. Модуль System используется автоматически любым модулем или программой и не следует упоминать в разделе объявления используемых модулей USES.
В данной программе мной использовались следующие процедуры и функции модуля System:
Ord - порядковый номер значения порядкового типа
Trunc - округляет значение вещественного типа к ближайшему целому
Inc - увеличение переменной
Dec - уменьшение переменной
Str - преобразует численное значение аргумента в его строковое значение
Eof - конец файла
Assign - связь файловой переменной с внешним файлом
New -создание новой динамической переменной
Dispose -освобождение динамической памяти
Read - чтение информации в файл
Write - запись информации в файл
Reset - открытие существующего файла
Rewrite - открытие нового файла
Модуль Crt содержит подпрограммы управления текстовым выводом на экран дисплея, использования цветов, окон и звука. При работе с экраном через модуль Crt весь экран разбивается на отдельные строки, а каждая строка на отдельные позиции, в каждую из которых можно поместить один символ.
В режиме текстового вывода используются следующие координаты экрана: левый верхний угол экрана имеет координаты 1,1: горизонтальная координата возрастает слева направо, вертикальная - сверху вниз. Если на экране определено окно, все координаты определяются относительно границ окна. Исключением являются координаты процедуры Window установки границ окна, которые всегда задаются относительно границ экрана.
При работе с окнами я использовала такие переменные как WindMin (содержит координаты верхнего левого угла текущего окна) и WindMax (содержит координаты нижнего правого угла текущего окна).
Для опроса клавиатуры использовались функции KeyPressed и Readkey.
Также в данной программе использовались след. процедуры и функции:
Clrscr -очистка экрана
GotoXY - перемещение курсора в задную позицию
Window - задание размеров окна
Модуль Graph представляет собой мощную библитотеку графических подпрограмм универсального назначения, рассчитанную на работу с наиболее распространенными графическими адаптерами IBM- совместимых ПК. Под программой модуля Graph обеспечивают различные режимы работы многорежимных адаптеров, полностью используют их цветовые возможности и разрешающую способность.Модуль Graph находится в файле graph.tpu. Модуль содержит типы, константы, переменные и подпрограммы, позволяющие программисту создавать графические изображения.
При работе с адаптером весь экран разбивается на отдельные '' точки '' - пиксели, которые можно закрасить в тот или иной цвет. Каждый пиксель имеет две координаты: Х и Y. Координата Х увеличивается по горизонтали, слева направо начиная от нуля, координата Y увеличивается по вертикали сверху вниз также начиная от нуля. Таким образом, левый верхний пиксель имеет координаты (0,0).
В модуле Graph имеется ряд процедур для рисования элементарных графических фигур - точек, линий, окружностей, дуг и т.п. При необходимости замкнутые фигуры могут быть закрашены различными цветами и стилями (образец закраски).
Стандартные типы, используемые в модуле, позволяют компактно представить информацию, необходимую для графических изображений.
При разработке данной программы были использованы след. процедуры и функции модуля Graph:
InitGraph - инициализация графического режима
CloseGraph - прекращение работы графического режима и т. д.
Модуль dos содержит ряд подпрограмм для работы с файлами и доступа к средствам операционной системы. Ни одна из программ модуля dos не определена в стандартном Паскале, поэтому они помещены в отдельный модуль.
Мной использовались следующие процедуры для работы с файлами:
FindFirst - поиск первого файла с заданным именем и атрибутами
FindNext - поиск следующего файла с заданным именем и атрибутами
Обе эти процедуры используют переменную типа Search Rec, которая определена данным модулем как запись, для просмотра каталога.
1.3 Описание структур данных
1. Описание типов.
MasSW = record
WSName: string [7]; {массив имен словарей}
MasWF: array [1..20] of string [20]; {массив начальных форм}
W_Max: integer; {число словарных статей в словаре}
end;
Тип словаря, для сравнительного анализа нескольких словарей
2. WordRP = ^wordR;
wordR = record
Next: WordRP; {указатель на след. запись}
Back: WordRP; {указатель на пред. запись}
First_Word: string; {начальная форма}
Morf: string; {морфолог. характеристики}
Anton1: string; {антонимы}
Change_Word: string; {изменяемые формы}
end;
Структура записи словарной статьи с динамическими переменными
3. wordPi = record
First_Word: string[20];
Change_Word: string[50];
morf:string[100];
Anton1: string[100];
end;
Структура записи словарной статьи со статическими переменными
num = record
N_ant: integer; {кол-во антонимов 1,2,3 и т.д.}
N: integer; {кол-во статей с данным количеством
end; антонимов}
Кол-во антонимов для каждой статьи.
5. Result_Mas = record
Ncoinc: integer; {количество совпадений}
Nam: string[16]; {имена 2х проверяемых словарей}
end;
Результат сравнительного анализа словарей.
2.Описание констант.
CheckChangeWordR: boolean=false;
{были ли изменения в словарной статье}
CheckEquivWordAndChange_Word: boolean=false;
{было ли совпадение выд.слова и изменяемых форм}
Check_Be_Word: boolean=false;
{является ли данное слово какой нибудь формой слов словаря}
Check_No_ChangeFile: boolean=false;
{нет изменений в файле}
Check_Text: boolean=false;
{Был ли произведён выбор текста}
Check_MassWord: boolean=false;
{Был ли произведен выбор словаря}
No_BeEsc: boolean=false;
{не была выполнена процедура выход}
No_ShowGraph: boolean=false;
{не показывать диаграмму срав. анализа словарей}
3.Описание глобальных переменных.
Path:string; {каталог, где содержится нужный нам текст}
MasR:array[1..3] of Result_Mas;
{Массив результата срав. анализа словарей}
An,masg:array[1..40] of num;
{массив содерж.кол-во статей с данным количеством антонимов}
4. CheckExit {флаг выхода из программы}
5. Check_RK {флаг нажатия клавиши <END> для перехода к главному меню}
6. sm:array[1..4]of string; {для хранения надписей пунктов верхнего меню}
7. masWord:array[1..3] of MasSW;{массив, содержащий нач. формы слов всех словарей}
8. s,s1: SearchRec; {записи модуля dos для файлов}
9. Str_NumT {номер строки, на которой стоит курсор в Текстовом Редакторе}
10. Str_NumW {номер строки, на которой стоит курсор в Редакторе Словаря}
11. k2, k1 {координаты пробелов до и после слова в ТР, чтобы выделить слово}
:integer;
12. str {вспомогательная строка}
str1 {выделенное в тексте слово}
str2 {выделенная словарная статья}
13. Change_Word1 {переменная для хранения при записи изменяемых форм}
morf1 {для хранения морфологических характеристик}
anton1 {для хранения антонимов}
First_Word1 {для хранения начальной формы}
:string;
14. Ch: char; {переменные для хранения кода клавиши при опросе}
словарь создание автоматизация программа
1.4 Описание процедур
1.procedure Main_Window;
Процедура вывода окна главного меню
2.procedure Exit_Program;
3.procedure Main_Menu;
Процедура работы в главном меню, для перемещения по пунктам и его выбора
j номер светящегося пункта
bj номер прежде светящегося пункта
rk:integer; хранит код нажатой клавиши
procedure Nice_Window
(LGoriz,LVert,Color,Dl:integer; CheckDemo,Chek_MW:boolean);
Процедура демонстрации красивого вывода окон LGoriz-длина окна, LVert-ширина, Color-цвет окна,Dl-задержка в иллисекундах, CheckDemo-флаг увеличения окна, Chek_MW-флаг использования процедуры Main_Window
LongG счётчик длины окна (изменяется от 1 до LGoriz)
LongV аналогично с шириной окна
b,p счётчики
CD:integer; значение зависит от CheckDemo
5. procedure Information;
Процедура вывода окон information
6. procedure Menu;
Процедура работы меню для перемещения по пунктам и его выбора
g номер светящегося пункта
bg номер прежде светящегося пункта
i:integer; счётчик
s:array[2..7]of string;
массив строк меню
rk:integer; переменная для хранения кода нажатой клавиши
WinMin,WinMax:integer;переменные для хранения координат левого верхнего и правого нижнего углов окна cоответственно
7. procedure Choice_MW;
Процедура выбора для меню для активизации выбранного пункта меню, т.е., в зависимости от выбора пункта, передаёт работу процедуре соответствующей данному пункту i-номер пункта (по счёту слева)}
procedure ExitM;
Процедура выхода из меню списка
9. procedure MenuW;
Процедура работы меню словаря
g номер светящегося пункта
bg номер прежде светящегося пункта}
i:integer; счётчик
s:array[2..4]of string;
массив строк меню словаря
rk:integer; переменная для хранения код нажатой клавиши
WinMin,WinMax:integer;переменные для хранения координат левого верхнего и правого нижнего углов окна соответственно
10. procedure Graph1;
Выводит сколько слов в словаре определенным
числом антонимов
Driver,Mode:integer; графические модули
max общее число слов
t,init_ang,end_ang,ang,col,sdvig,sdvig1,init_x,init_y вспомогательные переменные
max2 количество секторов:integer;
my_str,my_str1:string[11];вспомогательная переменная
Koord1:ArcCoordsType;
procedure Analis;
Процедура анализа словаря
12. procedure Option;
Процедура выбора для меню списка
13. procedure Choice_W;
Процедура выбора для меню словарной работы списка
procedure WordP;
Активизируется при выделении слова
procedure FINDWord;
Поиск файлов с расширением WRD
Path1:string;
procedure Help_Text;
Полный текст задания
WinMin,WinMax:integer;
Переменные для хранения координат левого и верхнего
Str_NumT номер строки в тексте
maxN:integer; количество строк в помощи
str0:string[80]; строка текста
procedure Redact_Text;
Редактор текстов
procedure Find_Word;
Процедура выбора словаря
procedure Find_Text;
Процедура выбора текста и запись его память
procedure Red_WordR;
Редактирование словарной статьи
masW:array[1..10] of string;
массив изменяемых форм
procedure AtWord;
Процедура показа атрибутов файла и выбор действия
procedure Redact_Word;
Процедура редактирование словаря
23. procedure Graph2(n:integer);
Вывод диаграммы показа количества одинаковых слов в разных словарях
Driver,Mode:integer;для хранения драйвера
max,init_x,init_y,ang,init_ang,end_ang,
sdvig,sdvig1,col,вспомогательные переменные
max2:integer; кол-во секторов
Koord1:ArcCoordsType;
Smax:string[20]; вспомогательная переменная
my_str,my_str1:string[11];вспомогательная переменная
procedure To_Comp_Anal
(N:integer{количесво словарей});
Процедура чтение начальных форм в память
i,j,k:integer;
word:array[1..3] of text;
WinMin,WinMax:integer; переменные для хранения координат левого верхнего и правого нижнего углов окна соответственно
procedure Comp_Anal;
Процедура сравнительного анализа словарей
procedure Comp_Anal;
Процедура сравнительного анализа словарей
bool:boolean; Выход или нет
n:integer;
WinMin,WinMax:integer;{переменные для хранения координат левого верхнего и правого нижнего углов окна соответственно
2. Тестирование
При разработке данной программы возникали сообщения об ошибках, которые приходилось исправлять, т.е. делать отладку программы.
В любой пользовательской программе могут быть разнообразные ошибки: синтаксические, семантические, логические. При каждой ошибке возникало сообщение о ней в верхней строке экрана и автоматически выставлялся курсор на нужную строку для исправления.
Возникали такие ошибки как:
-неправильный вызов процедуры;
-неправильная ссылка на переменную;
-ожидание зарезервированного слова END
-неописанные переменные
Эти ошибки устранялись путем тщательного тестирования и пошагового просмотра процедур, в которых велась обработка данных.
С помощью программы были обработаны четыре текста и созданы словари, также проведен сравнительный анализ словарей. Программа выводит предупреждение об ошибках и не приводит к неккоректной работе и завершению работы программы. Предпринимались попытки ввода некорректных данных и информаций, программа прекрасна спралялась с ними и не “вылетала”.
Приложение 1
The general task
In course work on programming it is required:
1. To develop and to debug the program according to variant.
2. Using the developed program to process 3-4 groups of texts (each text it is not less 6 Кб). For each group of the texts to form the dictionary.There should be 3-4 dictionaries.
3. Using the developed program to make the analysis of the received dictionaries according to variant.
4. To present results of work on items 1-3 to the teacher on check.
5. To defend course work.
The developed program should provide the following operations:
1. Choice of the text for the analysis.
2. Automated creation of the dictionary.
3. Editing the dictionary.
4. Analysis of the dictionary.
5. Comparative analysis of the several dictionaries.
6. Display of results of the analysis as the graphic diagrams.
Structure of the dictionary:
The dictionary represents the list (type of the list - on variants). Records of the list are the entries.
Structure of an entry:
- Word (expression) in the initial form;
- Morphological characteristic;
- Explanation (for an explanatory dictionary), list of synonyms (for the dictionary of synonyms), antonyms (for the dictionary of antonyms), meaning of set - phrase (for the dictionary of set-phrases);
- Word (expression) in the forms taken from the text.
The menu:
1. About the program:
- author
- number of variant
-the whole text of the task
2. To choose a processable file:
- for simple variants - input of a name of a file by a line
- for difficult variants - choice of a name of a file from the list of files of the current folder (using procedures FindFirst/FindNext)
3. Processing a file:
- according to variant
4. To choose a file of the dictionary
5. Work with the dictionary
- according to variant
6. Comparative analysis of the dictionaries (with a conclusion of the graphic diagram).
7. Exit.
Variant 8 (4 3 4 2 2 6 2 8 8)
Type of the text:
4. Texts of different styles: art, scientific, publicistic, officially - business.
Type of the dictionary:
3. Dictionary of antonyms.
The analysis of the dictionary:
4 By quantity of antonyms (for the dictionary of antonyms).
The comparative analysis of the dictionaries:
2. On words coincidence in the different dictionaries.
Variant of the dictionary.
6. Participle.
Variant of the menu.
2. Vertical menu
Variant of the diagrams
8. Volumetric round with shifted sector
Variant of a used function key
F8
User's guide.
The start of the program is loaded from the file my work.pas which is on the floppy disk A. Before starting the program it is necessary to place in one directory some files of BGI. After start of the program you can activate it by pressing END, choose the necessary option and then press Enter. There are 3 basic options of the upper menu: The Menu, the Information and the Exit. If choosing the option “Exit” the program finishes its work. If choosing the option “Information” the window with the information about variant and author of the course work appears.
When we activate the option “The Menu” vertical menu with the following options appears:
-Choice of the text
-Editing of the text
-Choice of the dictionary
-Work with dictionary
-The comparative analysis of several dictionaries
-Exit to the main menu
When choosing “Choice of the text” the window with the list of the directories with texts appears. Then user types a name of the necessary directory. After choice of the directory the list of the texts from directory appears. And the user types a name of the text he wanted.
Choosing the option "Text editing" the selected text appears in the window, and it can be edit. When choosing any word and pressing the key F8 the dictionary creates.
When choosing “the Choice of the dictionary” the list of the dictionaries appears. And the user types a name of the dictionary.
If activating the option " the Work with the dictionary " we can see the vertical menu with the following options:
-Editing of the dictionary.
-The analysis of the dictionary.
-The diagram.
When we choose the option " Editing of the dictionary " the user can edit the list of articles. He can change any word characteristic of any article, and even delete it.
When activating the option " the Analysis of the dictionary " the window appears, in which we can see the words with number of antonym in the dictionary.
If we want to look at the graphic diagram, we choose the option " the Diagram", this diagram reflects the result of the analysis of the dictionary.
When choosing the option " the Comparative analysis of several dictionaries " the user can get text or graphics information on the comparative analysis of the dictionaries.
If choosing the option “Information” the window with the information about variant and author of the course work appears.
If choosing the option “Exit” the program finishes its work.
All hints appears in the bottom of the screen.
Keys, which necessary to use in this program:
<ENTER>, <END>,,,, ,BACKSPACE and
F8 if you want to put the word in antonym dictionary.
Приложение 2
program MY_WORK;
uses crt,dos,graph;
type
MasSW=record {тип словаря, для сравнительного анализа нескольких словарей}
WSName:string[7];{массив имен словарей}
MasWF:array[1..20] of string[20];{массив начальных форм}
W_Max:integer;{число словарных статей в словаре}
end;
WordRP=^wordR;{Структура записи словаря}
wordR=record {с динамическими переменными}
Next:WordRP; {указатель на следующую запись}
Back:WordRP; {указатель на предыдущую запись}
First_Word:string;{начальная форма}
Morf:string; {морфологические характеристики}
anton1:string; {антонимы}
Change_Word:string;{изменяемые формы}
end;
wordPi=record {Структура записи словаря}
First_Word:string[20]; {со статическими переменными}
Change_Word:string[50];
Morf:string[100];
anton1:string[100];{антонимы}
end;
type
num=record {кол-во антонимов для каждой статьи}
N_ant:integer;{количество антонимов 1,2,3 и т.д.}
N:integer;{количество статей с данным количеством антонимов}
end;
type
Result_Mas=record {результат сравнительного анализа словарей}
N_coinc:integer; {количество совпадений}
Nam:string[16]; {имена 2х проверяемых словарей}
end;
const
CheckChangeWordR:boolean=false;{были ли изменения в словарной статье}
CheckEquivWordAndChange_Word:boolean=false;{было ли совпадение выд. слова и изменяемых форм}
Check_Be_Word:boolean=false;{является ли данное слово какой нибудь формой слов словаря}
Check_No_ChangeFile:boolean=false;{нет изменений в файле}
Check_Text:boolean=false;{Был ли произведён выбор текста}
Check_MassWord:boolean=false; { словаря}
No_BeEsc:boolean=false;{не была выполнена процедура выход}
No_ShowGraph:boolean=false;{не показывать диаграмму срав. анализа словарей}
var
Path:string;{каталог где содержится нужный нам текст}
Path1:string;{текущий каталог}
MasR:array[1..3] of Result_Mas; {Массив результата срав.анализа словарей}
An,masg:array[1..10] of num;{массив содерж.кол-во статей с данным количеством антонимов}
CheckExit, {флаг выхода из программы}
Check_RK, {флаг нажатия клавиши <END> для перехода к главному меню}
CheckExitMenuList,{флаг выхода из главного меню}
CheckMenuList:boolean;{флаг вывода окна главного меню }
sm:array[1..4]of string;{для хранения надписей пунктов верхнего мемю}
masWord:array[1..3] of MasSW;{массив содержащий нач формы слов всех словарей}
text_one:array[1..100] of string;{массив в котором хранится 1 текст}
textH:array[1..100] of string[80];{ помощь}
wordS:array[1..50] of wordpi; {массив в котором хранится 1 словарь}
WordSlow,temp,temp2:WordRP; {динамические переменные для описания словаря}
s,s1:SearchRec;{записи модуля dos для файлов}
i,j,k,{переменные для счетчика}
y,x,{переменные для хранения координат курсора }
Str_NumT,{номер строки на которой стоит курсор в Текстовом Редакторе}
Str_NumW,{номер строки на которой стоит курсор в Редакторе Словаря}
maxN,{количество строк в тексте}
W_Max,{количество словарных статей в словаре}
k2,k1:integer; {координаты пробелов до и после слова в текстовом редакторе, чтобы выделить слово}
NamT,{имя тектового файла}
NamW,{имя файла словаря}
str0,{вспомогательная строка}
str1,{выделенное в тексте слово}
str2,{выделенная словарная статья}
Change_Word1,{переменная для хранения при записи изменяемых форм}
morf1, {для хранения морфологических характеристик}
anton1,
First_Word1:string; {для хранения начальной формы}
TEXTF,word:text;{текстовые переменные (текста,словаря)}
Htext:text;{текстовый файл помощи}
Ch:char;{переменные для хранения кода клавиши при опросе}
procedure Find_text; forward;{следуют далее}
procedure Redact_Text; forward;
procedure Find_Word; forward;
procedure Redact_Word; forward;
procedure Help_Text;forward;
procedure Choice_MW(i:integer); forward;
{Процедура активизации выбранного пункта главного меню, т.е., в зависимости от выбора пункта, передаёт работу процедуре соответствующей данному пункту i-номер пункта (по счёту слева)}
procedure Option(i:integer); forward;
procedure Comp_Anal;forward;{процедура сравнительного анализа словарей}
procedure Choice_W(i:integer);forward;
procedure Main_Window;
{процедура вывода окна верхнего меню}
var i,j:integer;{счётчики}
begin
window(1,1,80,25);
TextBackground (Red);
clrscr;
TextColor(White);
TextBackground(white);
gotoxy(1,2);
{заполнение экрана}
for i:=1 to 23 do
write('--------------------------------------------------------------------------------');
textcolor(white);
gotoxy(1,1);
TextColor(white);
TextBackground(Red);
sm[1]:=' МЕНЮ ';
sm[2]:=' СПРАВКА ';
sm[3]:=' ВЫХОД ';
write(sm[1],'¦',sm[2],'¦',sm[3])
end;
procedure Exit_Program;
begin
TextBackground(15);
TextColor(0);
window(1,1,80,25);
ClrScr;
CheckExit:=true {флаг выхода из программы}
end;
procedure Main_Menu;
{Процедура работы в вер. меню, для перемещения по пунктам и его выбора}
var
j, {номер светящегося пункта}
bj, {номер прежде светящегося пункта}
rk:integer; {хранит код нажатой клавиши}
begin
repeat
window(1,1,80,25);
TextColor(15);
TextBackground(red);
if not Check_RK then begin{если не была нажата клавиша <END>}
GotoXY(2,25);
write('Нажмите <END>... ');
repeat
rk:=ord(readkey){ожидание нажатия <END>}
until rk=79; {код-END}
end;{if not Check_RK}
GotoXY(2,25);
Write('Выберите пункт главного меню с помощью ',#26,' ',#27,'и нажмите <Enter>... ');
Check_RK:=false;
{Вывод светящейся 1-ой строки меню списка}
GotoXY(1,1);
TextBackground(white);
write(sm[1]);
j:=1;
TextColor(15);
{цикл демонстрации перемещения по верхнему меню, т.е. если, например, с 1-го пункта перемещаешься на 2-ой, то 1-ый гаснет, 2-ой загорается}
repeat
rk:=ord(readkey);
if rk=77 then
begin {вправо}
bj:=j;
j:=j+1;
if j=4 then j:=1;{учитываем переход с 3-го на 1-ый }
GotoXY((bj-1)*16+1,1);
TextBackGround(red);
write(sm[bj]);
GotoXY((j-1)*16+1,1);
TextBackGround(white);
write(sm[j])
end
else
if rk=75 then begin {влево}
bj:=j;
j:=j-1;
if j=0 then j:=3;{учитываем переход с 1-го на 3-ый}
GotoXY((bj-1)*16+1,1);
TextBackGround(red);
write(sm[bj]);
GotoXY((j-1)*16+1,1);
TextBackGround(white);
write(sm[j])
end
until rk=13; { нажатие <Enter>}
Choice_MW(j);{Передаем переменную др. процедуре}
until CheckExit
end;
procedure Nice_Window(LGoriz,LVert,Color,Dl:integer;
CheckDemo,Chek_MW:boolean);
{Процедура демонстрации красивого вывода окон (окна центрируются по экрану) LGoriz-длина окна, LVert-ширина, Color-цвет окна, Dl-задержка в миллисекундах (чем меньше, тем быстрее увеличивается окно), CheckDemo-флаг увеличения окна, Chek_MW-флаг использования процедуры Main_Window}
var
LongG, {счётчик длины окна (изменяется от 1 до LGoriz)}
LongV, {аналогично с шириной окна}
b,p, {счётчики}
CD:integer; {значение зависит от CheckDemo}
begin
if Chek_MW then Main_Window;
LongV:=0;
CD:=2; {начальное значение длины}
if not CheckDemo then {если мы не хотим смотреть на расширение окна}
begin {то следующий сцикл выполнится 1 раз с конечными значениями}
CD:=LGoriz;
LongV:=LVert
end;
{Создание окна}
for LongG:=CD to LGoriz do
begin
if LongV<LVert then inc(LongV);
window(1,1,80,25);
TextColor(15);
window(40-round(LongG/2),13-round(LongV/2),40-round(LongG/2)+LongG, 13-round(LongV/2)+LongV-1);
TextBackGround(color);
write('г');
for b:=1 to LongG-2 do
write('=');
write('¬');
for p:=2 to LongV-1 do
begin
gotoxy(1,p);
write('¦');
for b:=1 to LongG-2 do write(' ');
writeln('¦');
end;
gotoxy(1,LongV);
write('L');
for b:=1 to LongG-2 do
write('=');
write('-');
window(40-round(LongG/2),13-round(LongV/2),40-round(LongG/2)+LongG, 13-round(LongV/2)+LongV-1);
delay(Dl)
end
end;
procedure Information;
{Процедура вывода окон information}
var rk:integer;{Код нажатой клавиши}
begin
{Создание окна с информацией об авторе и т.д.}
Nice_Window(35,10,Blue,1,true,true);
TextBackground(lightBlue);
textcolor(15);
GotoXY(2,2);
write(' Курсовая работа ');
GotoXY(2,3);
write(' Группа Лд-11 ');
GotoXY(2,4);
write(' Чаминой Олеси ');
gotoxy(2,5);
writeln(' Вариант-43426288 ');
{Вывод подсказки внизу экрана}
Window(1,1,80,25);
GotoXY(2,25);
TextColor(15);
TextBackGround(red);
ClrEol;
write('Нажмите <ENTER>...');
readkey;
{Создание окна с информацией о помощи}
Nice_Window(70,20,lightBlue,1,true,true);
Window(7,4,73,21);
TextColor(15);
TextBackGround(lightBlue);
Writeln ('Данная прогр. демонстрирует автоматизированное создание словарей');
Writeln ('а также разработку интерфейса с помощью модуля CRT. Все подсказки');
writeln ('по данной программе будут выводиться внизу экрана, главное меню');
writeln ('находится наверху и становится доступным с нажатием клавиши <END>,');
writeln ('перемещение по остальным пунктам главного меню, и меню списка');
writeln ('осуществляется с помощью клавиш '#24,' ',#25,' ',#26,' ',#27,', активизация пунктов меню');
writeln ('осуществляется с помощью нажатия клавиши <Enter>. После прочтения ');
writeln ('этой справки Вы можете вернуться к главному меню после нажатия ');
writeln ('<END>. Если вы хотите прочетать полный текст задания нажмите F8');
writeln ('Описание работы программы:');
writeln ('Программа демонстрирует автоматизированное создание словарей,');
writeln ('редактиравание текста/словаря, построение диаграмм');
writeln;
write (' Чамина Олеся V. 22.04.2000. ');
{Вывод подсказки внизу экрана}
window(1,1,80,25);
GotoXY(2,25);
TextColor(15);
TextBackGround(red);
ClrEol;
Write ('Нажмите F8 или <END>...');
repeat
rk:=ord(readkey)
until(rk=79)or(rk=066);
if rk=066 then Help_Text;
if rk=13 then
Main_Window {если был нажат <Enter>}
else
Check_RK:=true {если была нажата <END>}
end;
procedure Menu;
{Процедура работы главного меню для перемещения по пунктам и его выбора}
var g, {номер светящегося пункта}
bg, {номер прежде светящегося пункта}
i:integer;{счётчик}
s:array[2..7]of string;{массив строк главного меню}
rk:integer;{переменная для хранения кода нажатой клавиши}
WinMin,WinMax:integer;{переменные для хранния координат левого верхнего и правого нижнего углов окна оответственно}
begin
s[2]:='Выбор текста ';
s[3]:='Редактирование текста ';
s[4]:='Выбор словаря ';
s[5]:='Работа со словарем ';
s[6]:='Сравнительный анализ словарей';
s[7]:='Выход в верхнее меню ';
No_BeEsc:=false;{не была выполнена процедура выход}
CheckExitMenuList:=false;
repeat
if not CheckMenuList then
Nice_Window(40,15,red,1,true,true)
else {если мы уже находимся в меню списка, то делаем так, чтобы окно меню не увеличивалось}
Nice_Window(40,15,red,0,false,true);
WinMin:=WindMin;{Запоминаем координаты окна меню списка}
WinMax:=WindMax;
TextColor(15);
{Вывод подсказки внизу экрана}
Window(1,1,80,25);
GotoXY(2,25);
TextBackGround(red);
write('Выберите пункт меню списка с помощью ',#24,' ',#25,' и нажмите <Enter>...');
{Возврат к окну меню списка}
WindMin:=WinMin;
WindMax:=WinMax;
GotoXY(2,2);
TextBackGround(red);
{Вывод названий пунктов меню списка}
for i:=2 to 7 do begin
writeln(' '+s[i]);
GotoXY(2,i+1);
end;
if not CheckMenuList then begin
{Если мы входим в меню, тогда все строки выводятся негорящие, и ожидается нажатие либо стрелки вверх либо вниз, и затем загорается название 1-го пункта меню}
repeat
rk:=ord(readkey)
until(rk=80)or(rk=72);
g:=2
end;
{Загорание 1-го пункта меню}
g:=2;
GotoXY(2,g);
TextColor(white);
write('_');
TextBackGround(white);
TextColor(15);
write(s[g]);
CheckMenuList:=false;
repeat{Цикл работы в меню списка (активизация различных пунктов)}
rk:=ord(readkey);
if rk=80 then begin
{Если была нажата стрелка вниз, то предыдущий горящий пункт меню гаснет и загорается новый, причём учитывается перемещение с 5-го на 1-ый пункты меню}
bg:=g;
g:=g+1;
if g=8 then g:=2;
GotoXY(2,bg);
TextBackGround(red);
write(' '+s[bg]);
GotoXY(2,g);
TextColor(white);
write('_');
TextBackGround(white);
TextColor(15);
write(s[g])
end else
if rk=72 then begin
{Если была нажата стрелка вверх, то предыдущий горящий пункт меню гаснет и загорается новый, причём учитывается перемещение с 1-го на 5-ой пункты меню}
bg:=g;
g:=g-1;
if g=1 then g:=7;
GotoXY(2,bg);
TextBackGround(red);
write(' '+s[bg]);
GotoXY(2,g);
TextColor(white);
write('_');
TextBackGround(white);
TextColor(15);
write(s[g])
end
{Цикл перемещения по пунктам продолжается до нажатия <Enter> или <END>}
until(rk=13)or(rk=79);
if rk=13 then Option(g)
{Если <Enter> то управление програмой передаётся процедуре соответствующей анному пункту меню}
else begin
{Если <END> то переход к главному меню}
{Гашение горящего пункта меню}
GotoXY(2,2);
TextBackGround(red);
for i:=2 to 7 do begin
writeln(' '+s[i]);
gotoxy(2,i+1)
end;
{write(' '+s[8]);}
Check_RK:=true;
Exit{Выход из процедуры Menu осуществляет переход к главному меню}
end
{Цикл работы в меню списка, продолжается до выбора пункта " Выход из меню списка "}
until CheckExitMenuList
end;
procedure Choice_MW;
{Процедура выбора для главного меню}
begin
case i of
1: Menu;
2: Information;
3: Exit_Program
end
end;
procedure ExitM; {Процедура выхода из меню списка}
var
WinMin,WinMax:integer;{переменные для хранения координат левого верхнего и правого нижнего углов окна соответственно}
begin
Main_Window;
WinMin:=WindMin;{Запоминаем координаты окна меню списка}
WinMax:=WindMax;
TextColor(15);
{Вывод подсказки внизу экрана}
Window(1,1,80,25);
GotoXY(2,25);
TextBackGround(red);
write('Для активизации нажмите ENTER');
{Возврат к окну меню списка}
WindMin:=WinMin;
WindMax:=WinMax;
CheckExitMenuList:=true;
CheckMenuList:=false;
No_BeEsc:=true;{Была выполнена процедура выход}
end;
procedure MenuW;
{Процедура работы меню словаря}
var g, {номер светящегося пункта}
bg, {номер прежде светящегося пункта}
i:integer;{счётчик}
s:array[2..4]of string; {массив строк меню словаря}
rk:integer;{переменная для хранения код нажатой клавиши}
WinMin,WinMax:integer;{переменные для хранения координат левого верхнего и правого нижнего углов окна соответственно}
begin
s[2]:='Редактирование словаря ';
s[3]:='Анализ словаря ';
s[4]:='Вывод диаграммы ';
CheckExitMenuList:=false;
repeat
if not CheckMenuList then
Nice_Window(40,10,black,1,true,true)
else {если мы уже находимся в меню списка, то делаем так, чтобы окно меню не увеличивалось}
Nice_Window(40,10,black,0,false,true);
WinMin:=WindMin;{Запоминаем координаты окна меню списка}
WinMax:=WindMax;{
TextColor(15);
{Вывод подсказки внизу экрана}
Window(1,1,80,25);
GotoXY(1,24);
TextBackGround(red);
writeln('Выберите пункт меню списка с помощью ',#24,' ',#25,' и нажмите <Enter>... ');
write('Или END а после него ENTER для выхода');
{Возврат к окну меню списка}
WindMin:=WinMin;
WindMax:=WinMax;
GotoXY(2,2);
TextBackGround(black);
{Вывод названий пунктов меню списка}
for i:=2 to 4 do begin
writeln(' '+s[i]);
GotoXY(2,i+1);
end;
if not CheckMenuList then begin
{Если мы входим в меню, тогда все строки выводятся негорящие, и ожидается нажатие либо стрелки вверх либо вниз, и затем загорается название 1-го пункта меню}
repeat
rk:=ord(readkey)
until(rk=80)or(rk=72);
g:=2
end;
{Загорание 1-го пункта меню}
GotoXY(2,g);
TextColor(white);
write('_');
TextBackGround(white);
TextColor(15);
write(s[g]);
CheckMenuList:=false;
repeat{Цикл работы в меню списка (активизация различных пунктов)}
rk:=ord(readkey);
if rk=80 then begin
{Если была нажата стрелка вниз, то предыдущий горящий пункт меню гаснет и загорается новый, причём учитывается перемещение с 5-го на 1-ый пункты меню}
bg:=g;
g:=g+1;
if g=5 then g:=2;
GotoXY(2,bg);
TextBackGround(black);
write(' '+s[bg]);
GotoXY(2,g);
TextColor(white);
write('_');
TextBackGround(white);
TextColor(15);
write(s[g])
end else
if rk=72 then begin
{Если была нажата стрелка вверх, то предыдущий горящий пункт меню гаснет и загорается новый, причём учитывается перемещение с 1-го на 5-ой пункты меню}
bg:=g;
g:=g-1;
if g=1 then g:=4;
GotoXY(2,bg);
TextBackGround(black);
write(' '+s[bg]);
GotoXY(2,g);
TextColor(white);
write('_');
TextBackGround(white);
TextColor(15);
write(s[g])
end
{Цикл перемещения по пунктам продолжается до нажатия <Enter> или <END>}
until(rk=13)or(rk=79);
if rk=13 then Choice_W(g)
{Если <Enter> то управление програмой передаётся процедуре соответствующей данному пункту меню}
else begin
{Если <END> то переход к главному меню}
{Гашение горящего пункта меню}
GotoXY(2,2);
TextBackGround(black);
for i:=2 to 4 do begin
writeln(' '+s[i]);
gotoxy(2,i+1)
end;
{write(' '+s[8]);}
Check_RK:=true;
Exit{Выход из процедуры Menu осуществляет переход к главному меню}
end
{Цикл работы в меню списка, продолжается до выбора пункта " Выход из меню списка "}
until CheckExitMenuList
end;
procedure Graph1;{выводит сколько слов в словаре c определенным числом антонимов}
var
Driver,Mode:integer; {графические модули}
max, {общее число слов}
t,init_ang,end_ang,ang,col,sdvig,sdvig1,init_x,init_y,
{вспомогательные переменные}
max2 {количество секторов}
:integer;
my_str,my_str1:string[11];{вспомогательная переменная}
Koord1:ArcCoordsType;
begin
t:=0;
max:=0; {обнуление}
max2:=0;
col:=1; {начальный цвет}
if Check_MassWord<>true then Find_Word;
{Если не была сначала запущена процедура выбора словаря то она сначала запускается}
assign(word,Path1+'\'+namw);
reset(word);
j:=0;
repeat {чтение словаря в память}
j:=j+1;
readln(word,str0);
WordS[j].First_Word:=str0;
readln(word,str0);
WordS[j].Change_Word:=str0;
readln(word,str0);
WordS[j].anton1:=str0;
readln(word,str0);
WordS[j].morf:=str0;
until EOF(word); {пока не кончится файл}
W_Max:=j;
for i:=0 to 9 do {обнуляем}
begin
An[i].N_ant:=i; {an-массив (кол-во статей)} {N_ant-кол-во антон.}
An[i].N:=0; {N-кол-во статей}
end;
for i:=1 to W_Max do {все словарные статьи на проверку}
begin
{считаем число антонимов}
j:=0;{сначала 0}
for k:=1 to length(WordS[i].anton1) do {от 1 до конца строки}
begin
if (WordS[i].anton1[k]=' ') or
{если нашли пробел}
((k=length(WordS[i].anton1)) and (k>1)) then
{или конец строки не на первом символе}
j:=j+1;
{увеличиваем число антонимов на 1}
end;
An[j].N:=An[j].N+1;{число статей с данным количеством антонимов увеличиваем на 1}
end;
for i:=0 to 9 do
{Составляем новый массив из элементов массива An}
if An[i].N>0 then
{которые не равны 0 и считаем общее число антонимов}
begin
t:=t+1;{t-порядковый номер элемента массива MASG}
masg[t].N_ant:=An[i].N_ant;
masg[t].N:=An[i].N;
max:=max+An[i].N;
end;
max2:=t;{записываем количество элементов}
DetectGraph(Driver,Mode); {инициализируется графика}
initGraph(Driver,Mode,Path1+'\BGI\');
setfillstyle(3,3);
bar(1,1,640,480);
outtext(' АНАЛИЗ СЛОВАРЯ (сколько слов c данным числом антонимов) ');
init_y:=230;{начальная координата центра диаграммы по у}
init_x:=240;{начальная координата центра диаграммы по x}
init_ang:=0;{начальный угол сектора}
sdvig1:=5;{свдиг сектора относительно центра}
sdvig:=sdvig1;
for i:=1 to max2 do{рисуем нижний слой диаграммы}
begin
SetColor(White);
end_ang:=init_ang+Round(360/max*masg[i].N);
{конечный угол сектора}
setfillstyle(1,col);
ang:=Round((init_ang+end_ang)/2);
{угол в направлении которого сдвигаем сектор}
Sector(init_x+Round(sdvig*cos(ang/360*2*Pi)),init_y-
Round(sdvig*sin(ang/360*2*Pi)),init_ang,end_ang,200,100);
init_ang:=end_ang;
{теперь начальный угол равен конечному}
col:=col+1;{ изменяем цвет}
sdvig:=sdvig+3;{сдвиг для красоты увеличиваем}
end;
for j:=2 to 19 do {теперь рисуем диаграмммы прибавляя по 1 точке вверх для объемности}
begin
init_ang:=0;
col:=1;
sdvig:=sdvig1;
for i:=1 to max2 do
begin
SetColor(col);
end_ang:=init_ang+Round(360/max*masg[i].N);
{конечный угол сектора}
setfillstyle(1,col);
ang:=Round((init_ang+end_ang)/2);
Sector(init_x+Round(sdvig*cos(ang/360*2*Pi)),
init_y-j-Round(sdvig*sin(ang/360*2*Pi)),
init_ang,end_ang,200,100);
init_ang:=end_ang;
col:=col+1;
sdvig:=sdvig+3;
end;
end;
init_ang:=0;
col:=1;
sdvig:=sdvig1;
for i:=1 to max2 do{рисуем верхний слой и линии между краями}
begin
SetColor(White);
end_ang:=init_ang+Round(360/max*masg[i].N);
{конечный угол сектора}
setfillstyle(1,col);
ang:=Round((init_ang+end_ang)/2);
Sector(init_x+Round(sdvig*cos(ang/360*2*Pi)),
init_y-20-Round(sdvig*sin(ang/360*2*Pi)),
init_ang,end_ang,200,100);
GetArcCoords(Koord1);
MoveTo(Koord1.Xstart,Koord1.Ystart);
LineTo(Koord1.Xstart,Koord1.Ystart+20);
MoveTo(Koord1.Xend,Koord1.Yend);
LineTo(Koord1.Xend,Koord1.Yend+20);
if (end_ang-init_ang)<>180 then
begin
MoveTo(init_x+Round(sdvig*cos(ang/360*2*Pi)),
init_y-20-Round(sdvig*sin(ang/360*2*Pi)));
LineTo(init_x+Round(sdvig*cos(ang/360*2*Pi)),
init_y-Round(sdvig*sin(ang/360*2*Pi)));
end;
init_ang:=end_ang;
col:=col+1;
sdvig:=sdvig+3;
end;
init_ang:=0;
col:=1;
sdvig:=sdvig1;
for i:=1 to max2 do{еще раз нарисуем верхний слой чтобы закрасить лишние линии}
begin
end_ang:=init_ang+Round(360/max*masg[i].N);
{конечный угол сектора}
setfillstyle(1,col);
ang:=Round((init_ang+end_ang)/2);
Sector(init_x+Round(sdvig*cos(ang/360*2*Pi)),
init_y-20-Round(sdvig*sin(ang/360*2*Pi)),
init_ang,end_ang,200,100);
init_ang:=end_ang;
col:=col+1;
sdvig:=sdvig+3;
end;
init_x:=490;
init_y:=40;
outtextxy(init_x,init_y,'Число антонимов:');
init_x:=init_x+20;
col:=1;
SetColor(White);
for i:=1 to max2 do
begin
init_y:=init_y+30;
setfillstyle(1,col);
Bar3D(init_x,init_y,init_x+40,init_y+20,10,true);
FloodFill(init_x+40,init_y-2,White);
FloodFill(init_x+42,init_y,White);
Str(masg[i].N_ant,my_str);
outtextxy(init_x+60,init_y+5,'- '+my_str);
col:=col+1;
end;
init_x:=40;
init_y:=390;
outtextxy(init_x,init_y,'Число слов:');
init_y:=init_y+20;
init_x:=init_x-30;
col:=1;
SetColor(White);
for i:=1 to max2 do
begin
setfillstyle(1,col);
Bar3D(init_x,init_y,init_x+40,init_y+20,10,true);
FloodFill(init_x+40,init_y-2,White);
FloodFill(init_x+42,init_y,White);
Str(masg[i].N,my_str);
Str(masg[i].N/max*100:2:0,my_str1);
outtextxy(init_x+5,init_y+25,my_str+'('+my_str1+'%)');
init_x:=init_x+60;
col:=col+1;
end;
outtextxy(30,470,'Для выхода в меню словарей нажмите любую клавишу');
repeat until keypressed;
closeGraph; {закрываем графику}
menuw; {выходим в меню словаря}
end;
procedure Analis;{процедура анализа словаря}
var
WinMin,WinMax:integer;{переменные для хранения координат левого верхнего и правого нижнего углов окна соответственно}
begin
if Check_MassWord<>true then Find_Word;
{Если не была сначала запущена процедура выбора словаря то она сначала запускается}
assign(word,Path1+'\'+namw);
reset(word);
j:=0;
repeat {чтение словаря в память}
j:=j+1;
readln(word,str0);
WordS[j].First_Word:=str0;
readln(word,str0);
WordS[j].Change_Word:=str0;
readln(word,str0);
WordS[j].anton1:=str0;
readln(word,str0);
WordS[j].morf:=str0;
until EOF(word); {пока не кончится файл}
W_Max:=j;
for i:=0 to 9 do {обнуляем}
begin
An[i].N_ant:=i;
An[i].N:=0;
end;
for i:=1 to W_Max do {все словарные статьи на проверку}
begin
{считаем число антонимов}
j:=0;{сначала 0}
for k:=1 to length(WordS[i].anton1) do {конца}
begin
if (WordS[i].anton1[k]=' ') or
((k=length(WordS[i].anton1)) and (k>1)) then
{или конец строки не на первом символе}
j:=j+1;
{увеличиваем число антонимов на 1}
end;
An[j].N:=An[j].N+1;{число статей с данным оличеством}
{антонимов увеличиваем на 1}
end;
Nice_Window(40,20,black,1,false,true);
WinMin:=WindMin;
WinMax:=WindMax;
TextColor(white);
Window(1,1,80,25);
GotoXY(2,25);
TextBackGround(red);
write('Анализ словаря ');
WindMin:=WinMin;
WindMax:=WinMax;
textbackground(black);
window(21,4,80,22);
textcolor(white);
writeln('Число статей с количеством антонимов');
for i:=0 to 9 do {1}
writeln(An[i].N_ant,' ',An[i].N);
repeat until keypressed;
menuw;
end;
procedure Option;
{Процедура выбора для меню списка (описание дано выше)}
begin
if i<>8 then begin
if i<>5 then begin
{Вывод подсказки внизу экрана}
window(1,1,80,25);
GotoXY(1,25);
TextColor(15);
TextBackGround(red);
ClrEol;
Write(' Нажмите <Enter>...');
end;
case i of
2: Find_Text;
3: Redact_Text;
4: Find_Word;
5: menuW;
6: Comp_Anal;
7: ExitM;
end;
CheckMenuList:=true;
if No_BeEsc<>true then {не была выполнена процедура выход}
repeat
until ord(readkey)=13{Ожидание нажатия <Enter>}
end else
ExitM
end;
procedure Choice_W;
{Процедура выбора для меню словарной работы списка }
{подобное описание дано выше}
begin
{Вывод подсказки внизу экрана}
window(1,1,80,25);
GotoXY(1,25);
TextColor(15);
TextBackGround(red);
ClrEol;
Write(' Нажмите <Enter>... ');
case i of
2: Redact_Word;
3: Analis;
4: Graph1;
end;
CheckMenuList:=true;
if No_BeEsc<>true then repeat {не была выполнена процедура выход}
until ord(readkey)=13;{ <Enter>}
ExitM;
end;
{Конец подраздела меню}
procedure WordP;{активизируется при выделении слова}
const
Bool:Boolean=false;
No_Words:boolean=false;{небыло ввода новых слов}
var
WinMin,WinMax:integer;{переменные для хранения координат левого верхнего}
p,b:integer; {на сколько нужно знаков уменьшить слова}
выделенное в начальную форму}
str3,str4:string[20];
begin
No_Words:=false; {небыло ввода новых слов}
if Check_MassWord<>true then Find_Word;{Если не была сначала запущена процед.выбора словоря то она сначала запускается}
Bool:=false;{если bool=false то считается что текущая запись первая }
Check_Be_Word:=false;{выделенное слово явл.одной из форм слова которое есть в словаре}
assign(word,Path1+'\'+NamW); {открытие для чтения словаря}
reset(word);
k:=0;
j:=0;
CheckChangeWordR:=false;{в словарной статье нет изменений}
Подобные документы
Создание электронного филологического словаря. Использование не реляционной базы данных. Средства JavaScript для создания интерактивности на странице. Серверный язык программирования PHP. Специфика словарной статьи. Взаимодействие с базой данных.
курсовая работа [689,9 K], добавлен 26.02.2015Необходимость создания словаря по технологии для школьников. Основные этапы, требования и особенности создания электронного словаря. Использование морфологического анализа для оформления и дизайна. Принципы создания веб-страниц в Microsoft Publisher.
творческая работа [2,0 M], добавлен 17.11.2009Средства создания динамических структур данных. Формат описания ссылочного типа. Структура памяти во время выполнения программы. Линейные списки, стек, очередь. Организация списков в динамической памяти. Пример создания списка в обратном порядке.
лабораторная работа [788,2 K], добавлен 14.06.2009Разработка программы на языке программирования C++ с функциями считывания словаря в начале работы программы из текстового файла и записи словаря в файл перед завершением работы. Основные элементы программного продукта: данные абонента телефонной сети.
контрольная работа [12,9 K], добавлен 07.04.2015Назначение и цели создания системы автоматизации, ее устройство, принципы работы. Характеристика комплекса задач и функциональная структура, анализ входной и выходной информации. Логическая модель данных и алгоритм работы с ними. Инструкция пользователя.
курсовая работа [1,0 M], добавлен 06.07.2016Описание программного комплекса, его структура и общая характеристика составных модулей. Механизм создания набора данных, поиск элементов по номеру. Методика просмотра элементов и вычисление среднего, минимума и максимума из заданного диапазона.
курсовая работа [239,6 K], добавлен 12.12.2013Проектирование программы, реализующей синтаксический анализ простой программы на языке С: этапы создания, алгоритм ее функционирования, структура, технология обработки информации. Описание программных модулей, интерфейс; выбор инструментальных средств.
курсовая работа [1,6 M], добавлен 12.12.2011Структура автомата для сбора данных. Программы, реализующие заданный пользователем алгоритм автоматизации процедуры обработки журнальных данных. Описание микропроцессорной системы, ее упрощенная модель, система команд, блок-схема алгоритма обработки.
контрольная работа [65,8 K], добавлен 14.11.2010Описание использованных структур данных, характеристика процедур и функций. Структура приложения и интерфейс пользователя. Системные требования и имеющиеся ограничения. Тестирование приложения. Анализ временных характеристик и выводы по эффективности.
курсовая работа [3,3 M], добавлен 23.07.2012Особенности языка "Си шарп". Содержательная постановка программы. Описание классов и структур. Алгоритм и логики работы программы, переменные. Тестирование, инструкция пользователю. Пример удаления записи о читателе. Общий вид листинга программы.
курсовая работа [360,3 K], добавлен 21.11.2013