Обработка текстов. Автоматизация создания словарей

Главные особенности автоматизации создания словаря. Структура словаря и словарной статьи. Алгоритм программы, модуль System, Crt, Graph, dos. Описание структур данных. Структура записи словарной статьи с динамическими и статистическими переменными.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 15.05.2011
Размер файла 34,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Repeat {чтение словаря и занесение его в динамическую память}

j:=j+1; {счетчик статей}

new(wordslow);

readln(word,str0);

WordSlow^.First_Word:=str0;

readln(word,str0);

WordSlow^.Change_Word:=str0;

readln(word,str0);

WordSlow^.anton1:=str0;

readln(word,str0);

WordSlow^.morf:=str0;

if bool=false then WordSlow^.back:=nil {если bool=false то считается что текущая запись первая}

else

begin

temp^.next:=WordSlow; {если нет переход к следующей записи}

WordSlow^.back:=temp;

end;

temp:=WordSlow;

bool:=true;

until EOF(word); {пока не кончится фаил}

wordslow^.NEXT:=nil; {последняя запись является последней}

while WordSlow<>nil do

begin

CheckEquivWordAndChange_Word:=false;{было ли совпадение выд. слова и изменяемых форм}

str2:=''; {изменяемая форма}

str3:=''; {выделенное слово без окончания}

str4:=''; {начальная форма без окончания}

for k:=1 to length(wordslow^.Change_Word) do

if (wordslow^.Change_Word[k]<>' ')

{если знак не является пробелом}

or (k=length(wordslow^.Change_Word)){или конец строки}

then

begin

str2:=str2+wordslow^.Change_Word[k];

{запись изменяемой формы}

if (str1=str2) and

{если изменяемая форма равна выделению}

(k=length(wordslow^.Change_Word)){и конец строки}

then

CheckEquivWordAndChange_Word:=true

{совпадение выд. слова и изменяемых формы}

else

end

else

if str1=str2

then {если изменяемая форма равна выделению}

CheckEquivWordAndChange_Word:=true

{совпадение выд. слова и изменяемой формы}

else str2:=''; {очистка str2}

p:=0;

b:=0;

if length(wordslow^.First_Word)<>length(str1)

{длины слов не равны то}

then

begin

if length(wordslow^.First_Word)>length(str1){если длина нач формы больше чем выделенного слова}

then b:=1;

if length(wordslow^.First_Word)<length(str1){если длина выделенного слова бальше чем начальной}

then p:=1;

end;

for i:=1 to (length(str1)-2-p) do

str3:=str3+str1[i]; {выделенное слово без окончания}

for i:=1 to (length(wordslow^.First_Word)-2-b) do

str4:=str4+wordslow^.First_Word[i];

{начальная форма без окончания}

if (CheckEquivWordAndChange_Word=true) then

{совпадение выд.слова и изменяемых формы было}

begin

Check_Be_Word:=true;{выделенное слово явл.одной

из форм слова которое есть в словаре}

Nice_Window(50,20,black,60,false,true);

WinMin:=WindMin;{Запоминаем координаты окна меню списка}

WinMax:=WindMax;

TextColor(15);

{Вывод подсказки внизу экрана}

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Просмотр атрибутов слова ');

{Возврат к окну меню списка}

WindMin:=WinMin;

WindMax:=WinMax;

textbackground(black);

window(21,6,60,20);

textcolor(15);

writeln('Aтрибуты слова "',str1,'"');

{просмотр атрибутов слова}

writeln;

writeln('Начальная форма');

writeln(WordSlow^.First_Word);

writeln('Изменяемые формы');

writeln(WordSlow^.Change_Word);

writeln('Антонимы');

writeln(WordSlow^.anton1);

writeln('Морфологические характеристики');

writeln(WordSlow^.Morf);

str2:=''; {очистка str2}

repeat until keypressed;

end

else

if (CheckEquivWordAndChange_Word=false)

{Если выделенного слова нет в изменяемых формах}

and (str3=str4)

{но оно является одной из форм начальной формы}

then

begin

Check_Be_Word:=true;{выделенное слово явл.одной

из форм слова которое есть в словаре}

Nice_Window(50,20,black,1,false,true);

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

{Вывод подсказки внизу экрана}

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Просмотр атрибутов слова ');

{Возврат к окну меню списка}

WindMin:=WinMin;

WindMax:=WinMax;

GotoXY(2,2);

textbackground(black);

window(22,4,56,22);

textcolor(15);

writeln('атрибуты слова "',str1,'" ');

writeln('Начальная форма');

writeln(WordSlow^.First_Word);

writeln('Изменяемые формы');

writeln(WordSlow^.Change_Word);

writeln('Антонимы');

writeln(WordSlow^.anton1);

writeln('Морфологические характеристики');

writeln(WordSlow^.Morf);

writeln('Хотите ли вы добавить форму ',str1);

writeln('слова ',wordslow^.First_Word);

writeln('Если да то нажмите любую клавишу кроме ESC');

ch:=readkey; {добавление выделенного слова как форма слова в словарь}

if ch<>#27 then {подтверждение сохранения}

begin

wordslow^.Change_Word:=wordslow^.Change_Word+str1;

CheckChangeWordR:=true; end;

end;

if wordslow^.back=nil then temp:=wordslow;

wordslow:=wordslow^.back; {переход к предыдущей записи}

end;

wordslow:=temp;

bool:=false;{если bool=false то считается что текущая запись первая }

if Check_Be_Word=false then {если выделенное слово не является формой никакого слова}

begin

clrscr;

Nice_Window(39,19,black,60,false,true);

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Заносим в словарь новое слово ');

{Возврат к окну}

WindMin:=WinMin;

WindMax:=WinMax;

GotoXY(2,2);

textbackground(black);

window(23,7,55,19);

textcolor(15);

CheckChangeWordR:=true;{изменения были}

writeln('Введите для слова ',str1);

writeln('Изменяемые формы через пробел');

readln(Change_Word1);

writeln('Начальная форма');

readln(First_Word1);

writeln('Морфологические характеристики');

readln(Morf1);

writeln('Антонимы');

readln(anton1);

No_Words:=true;{введено новое слово}

end;

if CheckChangeWordR=true then

begin

Nice_Window(30,10,black,0,false,true);

Check_Be_Word:=false;{выделенное слово не является формой никакого слова}

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Для сохранения изменений в файле нажмите не ESC');

{Возврат к окну}

WindMin:=WinMin;

WindMax:=WinMax;

GotoXY(2,2);

window(26,11,54,15);

textbackground(black);

textcolor(15);

writeln('Сохранить изменения ?');

writeln('Если да то нажмите любую');

writeln('клавишу кроме ESC');

ch:=readkey;

if ch<>#27 then

begin

close(word);

rewrite(word);

while wordslow<>nil do {если да то переписываем старое}

begin

writeln(word,wordslow^.First_Word);

writeln(word,wordslow^.Change_Word);

writeln(word,wordslow^.anton1);

writeln(word,wordslow^.Morf);

wordslow:=wordslow^.next;

end;

if No_Words=true then begin

writeln(word,First_Word1);{если было введено новое слово то мы его записываем}

writeln(word,Change_Word1);

writeln(word,anton1);

writeln(word,morf1);

end;

end;

close(word);{закрытие словаря}

str1:=''; {обнуление выделенного слова}

end;

str1:='';

end;

procedure FINDTEXT; {поиск файлов с расширением TXT}

begin

Check_Text:=true;

textcolor(black);

findfirst(Path1+'\'+Path+'\*.TXT',AnyFile,S);

WHILE DosError=0 do

begin

write('имя-',s.name,' размер-',s.size);

writeln;

findNext(s);

end;

end;

procedure FINDWord; {поиск файлов с расширением WRD}

var Path1:string;

begin

textcolor(black);

Check_MassWord:=true;

GetDir(0,Path1);

findfirst(Path1+'\*.wrd',AnyFile,S1);

WHILE DosError=0 do

begin

write('имя-',s1.name,' размер-',s1.size);

writeln;

findNext(s1);

end;

end;

procedure Help_Text;{полный текст задания}

var

WinMin,WinMax:integer;{переменные для хранения координат левого верхнего}

Str_NumT,{номер строки в тексте}

maxN:integer;{количество строк в помощи}

str0:string[80];{строка текста}

begin

assign(Htext,Path1+'\help.txt');

reset(Htext);

repeat {запись текста в память}

j:=j+1;

readln(Htext,str0);

textH[j]:=str0;

until EOF(Htext);

close(Htext);

maxN:=j;

Nice_Window(70,21,blue,60,false,true);

WinMin:=WindMin;{Запоминаем координаты окна меню списка}

WinMax:=WindMax;

TextColor(white);

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Просмотр с помощью клавиш '#24,' ',#25,' полного текста задания. Для выхода нажмите END');

WindMin:=WinMin;

WindMax:=WinMax;

TextColor(15);

GotoXY(2,2);

TextBackGround(11);

textbackground(blue);

window(6,3,73,21);

textcolor(15);

for j:=1 to 18 do {Вывод первых 18 строк текста}

begin

writeln(textH[j]);

end;

Str_NumT:=1; {текущяя строка первая}

gotoxy(1,1); {координаты 1-1}

x:=1; {x=1,y=1}

y:=1;

repeat

Ch:=readkey; {опрос клавиш}

if ch=#0 then {если была нажата спец клавиша}

Ch:=readkey;

case ch of

#080:if y=18 then {если была нажата стрелка вниз а курсор стоит на 18 позиции}

begin

Str_NumT:=Str_NumT+1; {номер строки увеличивается}

clrscr;

for k:=Str_NumT-18+1 to Str_NumT-1 do {печать}

begin

writeln(texth[k]);

end;

end

else

begin

y:=y+1;{если не на 18 позиции то просто увеличиваем y и кол-во строк}

Str_NumT:=Str_NumT+1;

end;

#072:begin

if Y>1 then {если нажата клавиша стрелка вверх}

begin {и y>1}

Str_NumT:=Str_NumT-1;

y:=y-1;

end

else {если y=1 }

if Str_NumT>1 then

begin

clrscr;

for k:=Str_NumT-1 to Str_NumT+16-1 do {печать}

writeln(texth[k]);

Str_NumT:=Str_NumT-1; {уменьшение на 1 текущей строки}

end;

end;

end;

gotoxy(1,y);

until cH=#79; {код END}

end;

procedure Redact_Text; {редактор текстов}

var

WinMin,WinMax:integer;

SpKey:boolean; {спец клавиша или нет}

begin

if Check_Text<>true then Find_Text;{Если не была сначала запущена процедура выбора текста то она сначала запускается}

Check_No_ChangeFile:=false; {изменения в тексте нет}

window(1,1,80,25);

clrscr;

Nice_Window(70,21,0,1,false,true);

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('F8-выделение слова и обращение с ним к словарю ');

WindMin:=WinMin;

WindMax:=WinMax;

GotoXY(2,2);

textbackground(0);

window(6,3,73,21);

textcolor(white);

for j:=1 to 16 do {Вывод первых 16 строк текста}

begin

writeln(text_one[j]);

end;

Str_NumT:=1; {текущяя строка первая}

gotoxy(1,1);

x:=1;

y:=1;

repeat

SpKey:=false;

Ch:=readkey; {опрос клавиш}

if ch=#0 then {если была нажата спец клавиша}

BEGIN

Ch:=readkey;

SpKey:=true;

END;

case ch of

#080:if y=18 then {если была нажата стрелка вниз а курсор стоит}

begin {на 18 позиции}

Str_NumT:=Str_NumT+1; {номер строки увеличивается}

clrscr;

for k:=Str_NumT-18+1 to Str_NumT-3 do {печать}

begin

writeln(text_one[k]);

end;

end

else

begin

y:=y+1;{если не на 18 позиции, то просто увеличиваем y и кол-во строк}

Str_NumT:=Str_NumT+1;

end;

#075:if x>1 then x:=x-1; {если нажата клавиша стрелка влево}

#077:x:=x+1; {если нажата клавиша стрелка вправо}

#072:begin

if Y>1 then {если нажата клавиша стрелка вверх}

begin {и y>1}

Str_NumT:=Str_NumT-1;

y:=y-1;

end

else {если y=1 }

if Str_NumT>1 then

begin

clrscr;

for k:=Str_NumT-1 to Str_NumT+16-1 do {печать}

writeln(text_one[k]);

Str_NumT:=Str_NumT-1; {уменьшение на 1 текущей строки}

end;

end;

#13:begin {если нажата клавиша Enter}

clrscr;

Check_No_ChangeFile:=true; {изменения в тексте есть}

str0:=''; {элементы строки до курсора}

maxN:=maxn+1;{увеличение макс кол-ва строк}

i:=maxn+1;

repeat{перестановка нижестоящих строк дальше на 1 позицию}

if (i-1)<(Str_NumT+2)

then i:=i

else i:=i-1; {следующая строка}

text_one[i]:=text_one[i-1]; {перестановка}

until i=Str_NumT+2; {пока все не переставятся}

text_one[Str_NumT+1]:=''; {строка ниже курсора является пустой}

for k:=x to length(text_one[Str_NumT]) do

{строка ниже курсора заполняется}

text_one[Str_NumT+1]:=text_one[Str_NumT+1]+

Тext_one[Str_NumT][k];

{символами стоящими после крусора}

for i:=1 to x-1 do

str0:=str0+text_one[Str_NumT][i];

{формирование строки и символов до курсора}

text_one[Str_NumT]:=str0;

x:=1;

for i:=Str_NumT-y+1 to 18+Str_NumT-y do {печать}

writeln(text_one[i]);

y:=y+1;

Str_NumT:=Str_NumT+1; {увеличение номера текущей строки}

end;

#066:begin{если нажата клавиша F8-выделение слова}

clrscr;

k1:=0; {начальное условное-положение пробела}

for i:=1 to x do {поиск первого пробела}

if text_one[Str_NumT][i]=' ' then K1:=i;

repeat {поиск второго пробела}

i:=i+1;

if (text_one[Str_NumT][i]=' '){если пробел}

or (i=length(text_one[Str_NumT])+1) then

{если конец строки}

begin

K2:=i;

if i=length(text_one[Str_NumT]){если конец строки}

then

k2:=i+1;{чтобы отнять единицу и условия были }

end; {одинаковы как для пробела так и для конца строки}

until (text_one[Str_NumT][i]=' ') or (i=length(text_one[Str_NumT])+1); {пока не найдутся пробелы}

for k:=k1+1 to k2-1 do

begin

str1:=str1+text_one[Str_NumT][k];{заносим в str1 выделенное слово}

end;

for i:=Str_NumT-y+1 to Str_NumT-1 do

writeln(text_one[i]); {печать текста с выделением}

for i:=1 to k1 do

write(text_one[Str_NumT][i]);

textcolor(15);

for i:=k1+1 to k2-1 do {выделение }

write(text_one[Str_NumT][i]);

textcolor(3);

for i:=k2 to length(text_one[Str_NumT]) do

write(text_one[Str_NumT][i]);

writeln;

for i:=Str_NumT+1 to Str_NumT-y+18 do

writeln(text_one[i]);

wordP; { процедура актив.выделен.слова}

Nice_Window(70,21,0,60,false,true);

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('F8-выделение слова и обращение с ним к словарю ');

WindMin:=WinMin;

WindMax:=WinMax;

GotoXY(2,2);

TextBackGround(black);

textbackground(0);

window(6,3,73,21);

textcolor(white);

for j:=Str_NumT-y+1 to 16+Str_NumT-y do {печать текста}

begin

writeln(text_one[j]);

end;

end;

#8:begin {клавиша Backspase}

clrscr;

Check_No_ChangeFile:=true;{записываем что есть изменения}

str0:='';

if x>1 then {если курсор стоит не на первой позиции}

begin

clrscr;

for k:=Str_NumT-y+1 to Str_NumT-1 do

{печть текста до строки на которой стоит курсор}

writeln(text_one[k]);

for k:=1 to x-2 do {str0=текст на 2 символа ближе курсора}

str0:=str0+text_one[Str_NumT][k];

for k:=x to Length(text_one[Str_NumT]) do

{str0=str0+текст от курсора до конца строки}

str0:=str0+text_one[Str_NumT][k];

text_one[Str_NumT]:=str0; {строка на которой стоит курсор=str0}

for k:=Str_NumT to Str_NumT+18-y do{печать текста от строки на которой стоит курсор до конца экрана}

writeln(text_one[k]);

x:=x-1;

end

else {если курсор стоит на первой позиции}

begin

text_one[Str_NumT-1]:=text_one[Str_NumT- 1]+text_one[Str_NumT];

{стороке которая стоит выше курсора присоеденяется строка на которой стоит курсор }

for i:=Str_NumT to maxn do

{перестановка всех строк на 1 позицию меньше}

text_one[i]:=text_one[i+1];

maxN:=maxN-1; {уменьшение общего числа строк}

for i:=Str_NumT-y+1 to Str_NumT+18-y do{печать тек.}

writeln(text_one[i]);

y:=y-1; {установка координат}

x:=length(text_one[Str_NumT-1]);

Str_NumT:=Str_NumT-1; {номер строки уменьшается}

end

end;

else {если описанные выше клавиши не нажимались и}

if ch<>#79 then {не нажималась клавиша END}

begin

clrscr;

str0:='';

Check_No_ChangeFile:=true; {записываем, что есть изменения}

for i:=1 to x-1 do {переменной str0 присваивам символы до курсора}

str0:=str0+text_one[Str_NumT][i];

str0:=str0+ch; {+значени сh }

for i:=x to length(text_one[Str_NumT]) do{+после курсора}

str0:=str0+text_one[Str_NumT][i];

text_one[Str_NumT]:=str0;

x:=x+1;

for i:=Str_NumT-y+1 to Str_NumT+16-y do {печать}

writeln(text_one[i]);

end;

end;

gotoxy(x,y); {перемещение курсора}

until Ch=#79; {пока не нажата кнопка END}

if Check_No_ChangeFile=true then {если были изменения}

begin

Nice_Window(30,5,4,60,false,true);

textbackground(red);

window(26,11,55,15);

textcolor(black);

writeln('Сохранить изменения?');

writeln('Если да то нажмите любую');

writeln('клавишу кроме ESC');

ch:=readkey;

if ch<>#27

then

begin

rewrite(textf);

i:=1;

repeat {сохранение изменений}

writeln(textf,text_one[i]);

i:=i+1;

until maxN=i;

Nice_Window(30,9,1,60,false,true);

textbackground(1);

window(28,12,52,14);

textcolor(10);

writeln('Файл сохранен');

end;

end;

end;

procedure Find_Word;{процедура выбора словаря}

begin

Nice_Window(35,10,white,60,false,true);

textbackground(white);

window(23,9,55,17);

textcolor(black);

FINDword;

textcolor(3);

writeln('введите имя файла -');

textcolor(black);

readln(NamW);

end;

procedure Find_Text; {процедура выбора текста и запись его в память}

begin

j:=0;

Nice_Window(35,11,white,60,false,true);

textbackground(white);

window(23,8,55,16);

writeln('Выберите каталог');

writeln('art');

writeln('science');

writeln('public');

writeln('business');

writeln('Перепешите точно ');

writeln('название нужного вам раздела');

readln(Path);

clrscr;

textcolor(black);

FINDTEXT;

textcolor(3);

writeln('введите имя файла -');

textcolor(black);

readln(NamT);

assign(TEXTF,Path1+'\'+Path+'\'+NamT);

reset(TEXTF);

repeat {запись текста в память}

j:=j+1;

readln(TextF,str0);

text_one[j]:=str0;

until EOF(textf);

close(textf);

maxN:=j; {количество строк в тексте}

end;

procedure Red_WordR;{редактирование словарной статьи}

var

masW:array[1..10] of string;{массив изменяемых форм}

WinMin,WinMax:integer;{переменные для хранения координат левого верхнего}

begin

for i:=1 to 10 do

masw[i]:='';{обнуляем все ячейки}

case ch of {чему равно ch}

'1':begin {если 1}

clrscr;

Nice_Window(50,10,blue,1,false,true);

WinMin:=WindMin;{Запоминаем координаты окна}

WinMax:=WindMax;

TextColor(15);

{Вывод подсказки внизу экрана}

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Удаление слова ',words[Str_NumW].First_Word);

{Возврат к окну}

WindMin:=WinMin;

WindMax:=WinMax;

textbackground(blue);

window(26,10,55,16);

textcolor(15);

writeln('Coхранить иэменения? ');

writeln('Если да то нажмите');

writeln('любую клавишу кроме ESC');

ch:=readkey;{удаление}

if ch<>#27 then

begin

for i:=Str_NumW to W_Max-1 do

{удаление словарной статьи}

words[i]:=words[i+1];

W_Max:=W_Max-1;

words[W_Max+1].First_Word:='';

{обнуление последнего элемента}

words[W_Max+1].Change_Word:='';

words[W_Max+1].morf:='';

words[W_Max+1].anton1:='';

CheckChangeWordR:=true;

{были изменения в словарной статье}

end;

end;

'2':begin {если ch равно 2}

Nice_Window(50,10,blue,1,false,true);

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

Write ('Изменение начальной формы слова ',words[Str_NumW].First_Word);

{Возврат к окну меню списка}

WindMin:=WinMin;

WindMax:=WinMax;

textcolor(15);

textbackground(blue);

window(26,10,55,17);

textcolor(15);

writeln('Старая начальная форма-');

writeln(words[Str_NumW].First_Word);

writeln('Введите новую форму');

readln(str0);

CheckChangeWordR:=true

writeln('Хотите ли вы сохра-');

writeln('нить иэменения не ESC-да');

ch:=readkey;

if ch<>#27 then

words[Str_NumW].First_Word:=str0; {изменения}

end;

'3':begin {если ch равно 3}

CheckChangeWordR:=true; {изменения были}

j:=1;{номер элемента в массиве}

for i:=1 to length(words[Str_NumW].Change_Word) do

{от 1 до конца строки}

begin

if (words[Str_NumW].Change_Word[i]<>' ') or

{если не пробел}

(i=length(words[Str_NumW].Change_Word)) then {или конец строки}

masW[j]:=masw[j]+words[Str_NumW].Change_Word[i]

{J-элементы массива masW добавляем текущий символ}

else

j:=j+1;

end;

clrscr;

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Выбор изменяемой формы слова ',words[Str_NumW].First_Word);

{Возврат к окну меню списка}

WindMin:=WinMin;

WindMax:=WinMax;

textbackground(blue);

window(21,6,58,17);

textcolor(15);

writeln('Изменяемые формы:');

for i:=1 to j do

writeln(i,'-',masw[i]);

writeln('Какую вы хотите удалить либо изменить');

readln(i);{выбор}

str0:='';

clrscr;

writeln('что вы хотите сделать:');

writeln(' 1-изменить 2-удалить');

ch:=readkey;{выбор действия}

case ch of

'1':begin{если ch=1}

clrscr;

Nice_Window(50,10,blue,1,true,true);

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

{Вывод подсказки внизу экрана}

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Изменение изменяемой формы ',masW[i],' слова ',words[Str_NumW].First_Word);

{Возврат к окну меню списка}

WindMin:=WinMin;

WindMax:=WinMax;

textbackground(blue);

window(26,10,55,15);

textcolor(15);

writeln('Старая форма');

writeln(masw[i]);

writeln('Введите новую форму');

readln(str0);

writeln('Хотите ли вы сохранить изменения');

writeln(' ESC-нет,любая-да');

ch:=readkey;

if ch<>#27 then

begin

masw[i]:=str0;

words[Str_NumW].Change_Word:=masw[1];

{изменение: массиву изм. форм присваиваем}

for i:=2 to j do

{сначала первую и затем через пробел добавляем следующие}

words[Str_NumW].Change_Word:=words[Str_NumW].Change_Word+' '+masw[i];

end;

end;

'2':begin{если ch=2 (удаление)}

Nice_Window(50,10,blue,1,true,true);

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

{Вывод подсказки внизу экрана}

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Удаление изменяемой формы ',masW[i],' слова ',words[Str_NumW].First_Word);

{Возврат к окну меню списка}

WindMin:=WinMin;

WindMax:=WinMax;

textbackground(blue);

window(26,10,55,15);

textcolor(15);

writeln('Хотите ли вы сохранить изменения');

writeln(' ESC-нет,любая-да');

ch:=readkey; {подтверждение удаления}

if ch<>#27 then

begin

for k:=i to j-1 do

{перестановка форм:все формы которые находились }

masw[k]:=masw[k+1];

{после удаляемого слова уменьшают свой номер на 1}

masw[j]:='';

words[Str_NumW].Change_Word:=masw[1];

{изменение: массиву изм. форм присваиваем}

for i:=2 to j do

{сначала первую и затем через пробел добавляем следующие} words[Str_NumW].Change_Word:=words[Str_NumW].Change_Word+' '+masw[i];

end;

end;

end;

end;

'4':begin{если ch=4 (изменение антонимов)}

CheckChangeWordR:=true; {изменения были}

j:=1;{номер элемента в массиве}

for i:=1 to length(words[Str_NumW].anton1) do{конца}

begin

if (words[Str_NumW].anton1[i]<>' ') or {если не пробел}

(i=length(words[Str_NumW].anton1)) then

{или конец строки}

masW[j]:=masW[j]+words[Str_NumW].anton1[i]

{J-элементы массива masW добавляем текущий символ}

else

j:=j+1;

end;

clrscr;

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Выбор антонима слова ',words[Str_NumW].First_Word);

{Возврат к окну меню списка}

WindMin:=WinMin;

WindMax:=WinMax;

textbackground(blue);

window(21,6,58,17);

textcolor(15);

writeln('Антонимы:');

for i:=1 to j do{вывод какие есть антонимы}

writeln(i,'-',masw[i]);

writeln('Какой вы хотите удалить либо изменить');

readln(i);{выбор}

str0:='';

clrscr;

writeln('что вы хотите сделать:');

writeln('1-изменить, 2-удалить');

ch:=readkey;

case ch of

'1':begin{если ch=1}

clrscr;

Nice_Window(50,10,blue,1,true,true);

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

{Вывод подсказки внизу экрана}

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Изменение антонима ',masW [i],' слова ',words[Str_NumW].First_Word);

{Возврат к окну меню списка}

WindMin:=WinMin;

WindMax:=WinMax;

textbackground(blue);

window(26,10,55,15);

textcolor(15);

writeln('Старый антоним');

writeln(masw[i]);

writeln('Введите новый антоним');

readln(str0);

writeln('Хотите ли вы сохранить изменения');

writeln('ESC-нет, любая-да');

ch:=readkey;

if ch<>#27 then

begin

masw[i]:=str0;

words[Str_NumW].anton1:=masw[1];

{изменение: массиву антонимов присваиваем}

for i:=2 to j do

{сначала первую и затем через пробел

добавляем следующие} words[Str_NumW].anton1:=words[Str_NumW].anton1+' '+masw[i];

end;

end;

'2':begin{если ch=2 (удаление)}

Nice_Window(50,10,blue,1,true,true);

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

{Вывод подсказки внизу экрана}

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Удаление антонима ',masW[i],' слова ',words[Str_NumW].First_Word);

{Возврат к окну меню списка}

WindMin:=WinMin;

WindMax:=WinMax;

textbackground(blue);

window(26,10,55,15);

textcolor(15);

writeln('Хотите ли вы сохранить изменения');

writeln(' ESC-нет,любая-да');

ch:=readkey;

if ch<>#27 then

begin

for k:=i to j-1 do

{перестановка форм:все формы которые находились }

masw[k]:=masw[k+1];

{после удаляемого слова уменьшают свой номер на 1}

masw[j]:='';

words[Str_NumW].anton1:=masw[1];

{изменение: массиву изм. форм присваиваем}

for i:=2 to j do {сначала первую и затем через пробел добаляем следующие} words[Str_NumW].anton1:=words[Str_NumW].anton1+' '+masw[i];

end;

end;

end;

end;

'5':begin{если ch=5(изменение морфологических характеристик)}

Nice_Window(50,10,blue,1,true,true);

CheckChangeWordR:=true;

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Ввод новых морфологических хорактеристик ');

{Возврат к окну меню списка}

WindMin:=WinMin;

WindMax:=WinMax;

textbackground(blue);

window(17,10,58,14);

textcolor(15);

clrscr;

writeln('Морфологические характеристики-');

writeln(words[Str_NumW].morf);

writeln('Введите новое морфологические характеристики-');

readln(str0);

writeln('Хотите ли вы сохранить иэменения не ESC-да');

ch:=readkey;

if ch<>#27 then

words[Str_NumW].morf:=str0; {изменения}

end; {новое}

end;

end;

procedure Graph2(n:integer);

{Вывод диаграммы показа количества одинаковых слов в разных словарях}

var

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];{вспомогательная переменная}

begin

max:=0;

col:=1;

for i:=1 to 3 do {Находим максимальное количество совпадений}

begin

max:=max+MasR[i].N_coinc;

end;

if n=2 then max2:=1 else max2:=3;

DetectGraph(Driver,Mode);{инициализируется графика}

initGraph(Driver,Mode,Path1+'\bgi\');

setfillstyle(3,3);

bar(1,1,640,480);

Outtextxy(30,470,'Для выхода нажмите любую клавишу');

outtext(' СРАВНИТЕЛЬНЫЙ АНАЛИЗ СЛОВАРЕЙ ');

outtext(' (сколько совпадений и в каких словарях) ');

if max>0 then

begin

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*MasR[i].N_coinc);

{конечный угол сектора}

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*MasR[i].N_coinc);

{конечный угол сектора}

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*MasR[i].N_coinc);

{конечный угол сектора}

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*MasR[i].N_coinc);

{конечный угол сектора}

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(MasR[i].N_coinc,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;

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);

outtextxy(init_x-30,init_y+25,MasR[i].Nam);

init_x:=init_x+190;

col:=col+1;

end;

end

else

begin

settextstyle(0,0,2);

outtextxy(80,200,'Извините! Совпадений нет.');

end;

{изменяем цвет фона}

repeat until keypressed;

closeGraph; {закрываем графику}

end;

procedure COINC(N:integer);{Процедуру проверки на совпадения}

var

WinMin,WinMax:integer;

begin

for i:=1 to 4 do

begin

MasR[i].Nam:=''; {Обнуление всех данных масива результата}

MasR[i].N_coinc:=0;

end;

case n of

2:begin

MasR[1].Nam:=MasWord[1].WSName+MasWord[2].WSName;

{внесли имена проверяемых словарей}

for i:=1 to MasWord[1].W_Max do

{Проверка на сходство}

for j:=1 to MasWord[2].W_Max do

if MasWord[1].MasWF[i]=MasWord[2].MasWF[j]

then

MasR[1].N_coinc:=MasR[1].N_coinc+1;

{Если одинаковы то к кол-ву совпадений прибавляем 1}

end;

3:begin

MasR[1].Nam:=MasWord[1].WSName+'-'+MasWord[2].WSName;

{внесли имена проверяемых словарей}

MasR[2].Nam:=Masword[1].WSName+'-'+MasWord[3].WSName;

MasR[3].Nam:=Masword[2].WSName+'-'+MasWord[3].WSName;

for I:=1 to masword[1].W_Max do

{проверка на совпадение}

for j:=1 to masword[2].W_Max do

{в 1 и во 2 cловаре}

if masword[1].MasWF[i]=masword[2].MasWF[j]

then MasR[1].N_coinc:=MasR[1].N_coinc+1;

for I:=1 to masword[1].W_Max do {1и3}

for j:=1 to masword[3].W_Max do

if masword[1].MasWF[i]=masword[3].MasWF[j]

then MasR[2].N_coinc:=MasR[2].N_coinc+1;

for I:=1 to masword[2].W_Max do {2 и 3}

for j:=1 to masword[3].W_Max do

if masword[2].MasWF[i]=masword[3].MasWF[j]

then MasR[3].N_coinc:=MasR[3].N_coinc+1;

end;

end;

clrscr;

Nice_Window(35,12,1,60,false,true);

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

Write ('Совпaдение слов в ',N,' словарях');

WindMin:=WinMin;

WindMax:=WinMax;

textbackground(1);

window(25,8,60,18);

textcolor(white);

writeln('Совпало слов в словарях-');

writeln(MasR[1].Nam);

writeln(MasR[1].N_coinc:2);

if N>2 then {Если подключенно больше 2х словарей}

begin

writeln(MasR[2].Nam);

writeln(masR[2].N_coinc:2);

writeln(MasR[3].Nam);

writeln(MasR[3].N_coinc:2);

end;

No_ShowGraph:=false;

writeln('Ecли хотите посмотреть');

writeln('диаграмму нажмите F8');

ch:=readkey;

ch:=readkey;

if ch=#066 then No_ShowGraph:=true;

end;

procedure To_Comp_Anal(N:integer{количесво словарей});

{процедура чтение начальных форм в память}

var i,j,k:integer;

word:array[1..3] of text;

WinMin,WinMax:integer;

begin

for i:=1 to N do

begin

Nice_Window(35,10,7,60,false,true);

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Введите ',i,' словарь');

WindMin:=WinMin;

WindMax:=WinMax;

textbackground(white);

window(23,9,55,17);

textcolor(10);

findfirst(Path1+'\*.wrd',AnyFile,S1);

{список всех доступных словарей}

WHILE DosError=0 do

begin

write('имя-',s1.name,' размер-',s1.size);

writeln;

findNext(s1);

end;

writeln('введите имя ',i,' словаря -');

readln(NamW);

assign(word[i],path1+'\'+namW);

masword[i].WSName:=namW;

reset(word[i]);

j:=0; {чтение начальных форм в память}

while not EOF(word[i]) do {пока не закончится файл}

begin

j:=j+1;

readln(word[i],str0);

masword[i].MasWF[j]:=str0;

for k:=1 to 3 do {прокрутка 3х строк}

readln(word[i],str0);

end;

Masword[i].W_Max:=j;

end;

COINC(N);

end;

procedure Comp_Anal;{процедура сравнительного анализа словарей}

var

bool:boolean; {Выход или нет}

n:integer;

WinMin,WinMax:integer;

begin

repeat

if No_ShowGraph=true then

Graph2(n);

{если перед этим мы подтвердили просмотр диаграммы}

No_ShowGraph:=false;

bool:=false;

Nice_Window(50,10,1,60,false,true);

WinMin:=WindMin;

WinMax:=WindMax;

TextColor(15);

Window(1,1,80,25);

GotoXY(2,25);

TextBackGround(red);

write('Сколько вы хотите подключить словарей? ');

{Возврат к окну меню списка}

WindMin:=WinMin;

WindMax:=WinMax;

window(16,9,76,15);

textcolor(15);

textbackground(1);

writeln('Выберите количество словарей для сравнения');

writeln(' нажмите 2 или 3 ');

writeln(' для выхода нажмите ESC ');

ch:=readkey;

case ch of

'2':begin n:=2;To_Comp_Anal(n);end;

'3':begin n:=3;To_Comp_Anal(n);end;

#27:bool:=true;{Если ESC то выход}

end;

until bool=true;

end;

begin {основная программа}

GetDir(0,Path1);{получим строку с текущим каталогом}

Main_Window;

Main_Menu

end.

Размещено на Allbest.ru


Подобные документы

  • Создание электронного филологического словаря. Использование не реляционной базы данных. Средства 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.