Обработка текстов. Автоматизация создания словарей
Главные особенности автоматизации создания словаря. Структура словаря и словарной статьи. Алгоритм программы, модуль 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