Создание программы, проверяющей синтаксис слов (по пополняемому словарю)
Описание использованных структур данных. Функциональное описание процедур и функций. Характеристика структуры приложения и интерфейса пользователя. Анализ временных характеристик и выводы. Особенности работы программы по проверке синтаксиса слов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 07.07.2012 |
Размер файла | 1,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Создание программы, проверяющей синтаксис слов (по пополняемому словарю)
Содержание
Задание
1. Теоретическая часть
2. Описание использованных структур данных
3. Функциональное описание процедур/функций
4. Описание структуры приложения и интерфейса пользователя
5. Результаты тестирования приложения на разных объемах данных
6. Анализ временных характеристик и выводы
Список использованных источников
ПРИЛОЖЕНИЕ
Задание
Написать программу, которая должна проверять синтаксис слов (список таких слов и список разделителей содержатся в отдельных файлах) содержащихся в тексте.
1. Теоретическая часть
Проверка синтаксиса обычно применяется в текстовых редакторах для проверки написания исходного текста. Также часто применяется при публикации исходных кодов в Интернете.
Суть метода заключается в следующем, создается строковая переменная text, ей присваивается текст из Edit1, проверяется, длина текста, если она не равна нулю, то тогда выполняем над текстом операции. Осуществляем поиск первого пробела, если пробел стоит вначале текста, то мы его удаляем. Далее вызываем функцию, которая удаляет из текста все возможные знаки типа %,?,! и т.д. Дальше проверяем наличие пробела в конце текста, если его нет, то мы его добавляем. В качестве разделителя между словами выступает пробел, поэтому дальше ищем первый пробел и получаем его индекс в тексте. Все символы, которые находятся до пробела, считаем за слово и поэтому весь этот отрывок до пробела кладем в другую переменную newslovo. Ищем в этом наличие точек или запятых, или других знаков и если они есть, то мы их удаляем, таким образом, мы получаем только набор букв, то есть слово. Перебираем в словаре все слова и, ищем, есть ли такое слово в словаре, если оно уже есть то выдаем сообщение о том, что такое слово существует, если такого слова не существует, то мы добавляем его в словарь. Тот отрывок, который мы добавили в словарь, удаляем из начального текста. Добавляются слова до тех пор, пока пробелы еще находятся, то есть переменная с текстом не пуста.
Процедура FormCreate - добавляет несколько базовых символов в словарь. А там где слово «первоначально» - это место, куда можно вбивать слова через пробел и это будут базовые слова в словаре. Здесь добавление просто ищет первый пробел все, что до него записывает как новое слово в словарь и удаляет добавленное из переменной, в которой хранится текст до тех пор, пока пробелы еще находятся, то есть переменная с текстом не пуста.
Удаление слова из словаря. Сначала , так же выполняем проверку наличия пробела в конце и если его нет то добавляем, потом выполняем очистку «слова на удаление» от всяких знаков, потом идем циклом по словарю и ищем там «слово на удаление» если находим то удаляем запись, если не находим то пишем что такого слова в словаре нет.
Проверка текста, сначала обрабатываем текст как процедуру добавления, так же ищем пробел в конце, если его нет, добавляем, потом очищаем от знаков, чтобы остались только слова. Ищем первое слово по пробелу как в добавлении. Циклом перебираем весь словарь и ищем там первое выбранное слово, если мы его находим то выходим из цикла, удаляем из изначального текста проверенное слово, выбираем следующее, опять циклом ищем его в словаре и так пока все слова из проверяемого текста не переберем. Если какое ни будь слово, не будет найдено в словаре, то появится сообщение о том что «ошибка, слова нет словаре». Поиск схожих слов. Когда программа при проверке натыкается на слово, которого нет в словаре, она начинает побуквенно сравнивать каждое слово словаря с проверяемым словом. При проверке схожести букв включается счетчик, который считает, сколько было совпадений, так же если две проверяемые буквы не совпадут, программа проверяет, не совпадает ли следующая буква и проверяет, не совпадает ли предыдущая на тот случай если была пропущена буква или добавлена лишняя, если предыдущая или следующая буква совпадут то ,тогда побуквенное сравнение будет сдвинуто влево или вправо на единицу. Когда все буквы проверяемого слова будут проверены, то запускается условие, при котором если длина проверяемого слова не больше слова из словаря минус один символ на тот случай если была добавлена лишняя, и количество не совпавших букв не больше 3, то тогда это слово выдается как предполагаемое правильное.
2. Описание использованных структур данных
В данной работе используются такие структуры данных как строки.
1) AnsiString import="";
Переменная для имени файла импорта.
2) AnsiString NomerSlovara="";
Номер словаря.
3) AnsiString SL1="1.txt";
Файл первого словаря.
4) AnsiString SL2="2.txt";
Файл второго словаря.
5) AnsiString SL3="3.txt";
Файл третьего словаря.
6) int css;
Количество строк словаря.
7) bool imp=false;
Логическая переменная для получения сведения о том был ли импорт.
8) AnsiString protext;
Переменная для хранения текста.
9) AnsiString obnovlenie;
Переменная для хранения текста.
10) AnsiString proverka;
3. Функциональное описание процедур и функций
1) AnsiString Vax(AnsiString d);
Функция обработки текста.
2) void __fastcall TForm1::Button2Click(TObject *Sender);
Функция проверки текста.
3) protext=Vax(protext);
Вызов функции, возвращает обратный текст.
4) void __fastcall TForm1::Button3Click(TObject *Sender);
Функция добавления в словарь.
5) void __fastcall TForm1::FormCreate(TObject *Sender)
Функция создания формы.
6) void __fastcall TForm1::Button1Click(TObject *Sender)
Функция удаления из словаря.
7) void __fastcall TForm1::Button4Click(TObject *Sender)
Функция импорта словаря.
8) preob=Vax(preob)
Вызов функции, возвращает обратный текст.
4. Описание структуры приложения и интерфейса пользователя
Общий вид программы (Рис.1):
Edit1 MainMenu1
Label1 Label2
Рис.1. Основная форма программы
5. Результаты тестирования приложения на разных объемах данных
6. Анализ временных характеристик и выводы
Количество слов |
Количество слов словаря |
Количество ошибок |
Время работы программы, мс |
|
300 |
500 |
4 |
326 |
|
300 |
500 |
8 |
321 |
|
300 |
700 |
8 |
438 |
Количество слов |
Количество слов словаря |
Количество ошибок |
Время работы программы, мс |
|
500 |
500 |
10 |
414 |
|
500 |
500 |
50 |
420 |
|
500 |
700 |
50 |
523 |
Количество слов текста
Как показывает временной график, время работы программы не зависит от количества ошибок, а зависит от количества слов в проверяемом тексте, и количества слов в словаре. чем больше слов, тем дольше выполнение программы. Причем количество слов словаря более ресурсоемкое по времени, нежели количество слов текста.
Список использованных источников
1. А.Я. Архангельский «Builder 6»».Справочное пособие. Язык C++.--М.:Бином-Пресс, 2002 г. - 544 с.:ил.
Приложение
программа синтаксис интерфейс
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
extern PACKAGE bool __fastcall InputQuerry(
const AnsiString ACaption,
const AnsiString APrompt,
int &Value);
//---------------------------------------------------------------------------
AnsiString import="";
AnsiString NomerSlovara="";
AnsiString SL1="1.txt";
AnsiString SL2="2.txt";
AnsiString SL3="3.txt";
int css;
bool imp=false;
AnsiString protext;
AnsiString obnovlenie;
AnsiString Vax(AnsiString d)
{
while (d.Pos("<")!=0)
{
d.Delete(d.Pos("<"),1);
}
while (d.Pos(". ")!=0)
{
d.Delete(d.Pos(". "),1);
}
while (d.Pos(", ")!=0)
{
d.Delete(d.Pos(", "),1);
}
while (d.Pos(">")!=0)
{
d.Delete(d.Pos(">"),1);
}
while (d.Pos('"')!=0)
{
d.Delete(d.Pos('"'),1);
}
while (d.Pos("'")!=0)
{
d.Delete(d.Pos("'"),1);
}
while (d.Pos(")")!=0)
{
d.Delete(d.Pos(")"),1);
}
while (d.Pos("(")!=0)
{
d.Delete(d.Pos("("),1);
}
while (d.Pos("!")!=0)
{
d.Delete(d.Pos("!"),1);
}
while (d.Pos("?")!=0)
{
d.Delete(d.Pos("?"),1);
}
while (d.Pos("\r\n")!=0)
{
d.Insert(" ",d.Pos("\r\n"));
d.Delete(d.Pos("\r\n"),2);
}
while (d.Pos(" ")!=0)
{
d.Delete(d.Pos(" "),1);
}
return d;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
css=Memo1->Lines->Count;
ProgressBar1->Visible=true;
ProgressBar1->Max=css;
if(obnovlenie!=Memo2->Text){obnovlenie=Memo2->Text; protext=Memo2->Text;}
//protext=Memo2->Text;
AnsiString proverka;
if(protext.SubString(protext.Length(),1)!=" ")//проверка наличия пробела в конце проверяемого текста
{
protext.Insert(" ",protext.Length()+1); //вставка пробела если его нет
}
protext=Vax(protext);
int inde=-1; //индекс нахождения пробела, в качестве разделителя используется пробел
while (inde!=0) //цикл работающий пока не закончатся все слова
{
inde=protext.Pos(" "); //нахождение первого разделителя
if(inde==0)ShowMessage("No Errors");
proverka=protext.SubString(1,inde);//присваение переменной первого слова из текста
if(proverka.SubString(inde-1,1)=="."||proverka.SubString(inde-1,1)==","||
proverka.SubString(inde-1,1)=="-"||proverka.SubString(inde-1,1)==":")
{
proverka=proverka.SubString(1,inde-2);
proverka.Insert(" ", inde-1);
}
int i=0;
while (i<=css) //цикл поиска ошибок
{
ProgressBar1->Position=i;
if (proverka==Memo1->Lines->Strings[i]) //проверка совпадают ли проверяемое слово с текуще выбранным словом из словаря
{
i=css+1;
protext.Delete(1,inde);//удаление проверенного слова
}
else
{
if (i==css)
{
if(protext==" ")ShowMessage("No errors");
else
{
ShowMessage("Слово "+proverka+ " написано не правильно, или его нет в словаре");
protext.Delete(1,inde);
i=css+1;///
}
inde=0;
}
}
i+=1;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (imp==true)ShowMessage
("Внимание текущий выбранный словарь будет перезаписан импортированным словарем");
css=Memo1->Lines->Count;
ProgressBar1->Max=css;
ProgressBar1->Visible=true;
AnsiString text=Edit1->Text;
if (text.Length()!=0)
{
AnsiString newslovo;
while (text.Pos(" ")==1)
{
text=text.Delete(1,1);
}
text=Vax(text);
if(text.SubString(text.Length(),1)!=" ")//проверка пробела в конце строки
{
text.Insert(" ",text.Length()+1); //добавление пробела
}
int ind=text.Pos(" ");//индекс первого пробела
newslovo=text.SubString(1,ind);
if(newslovo.SubString(ind-1,1)=="."||newslovo.SubString(ind-1,1)==","||
newslovo.SubString(ind-1,1)=="-"||newslovo.SubString(ind-1,1)=="?"||
newslovo.SubString(ind-1,1)==":"|| newslovo.SubString(ind-1,1)=="!")
{
newslovo=newslovo.SubString(1,ind-2);
newslovo.Insert(" ", ind-1);
}
int i=0;
while (i<=css)
{
ProgressBar1->Position=i;
AnsiString d=Memo1->Lines->Strings[i]; ///###################
if(Memo1->Lines->Strings[i]==newslovo)
{
i=css+1;
text.Delete(1,ind); //удаление добавленного слова из текста
Edit1->Text=text;
Edit2->Text="Слово " + newslovo + "уже существует";
}
else
{
if (i==css)
{
Memo1->Lines->Add(newslovo);//добавление нового слова в слоаврь
text.Delete(1,ind); //удаление добавленного слова из текста
Edit1->Text=text;
Edit2->Text=Memo1->Lines->Strings[css];
if (NomerSlovara=="1")
Memo1->Lines->SaveToFile(SL1);
if (NomerSlovara=="2")
Memo1->Lines->SaveToFile(SL2);
if (NomerSlovara=="3")
Memo1->Lines->SaveToFile(SL3);
css+=1;
i+=1;
}
i+=1;
}
}
}
if (NomerSlovara=="1")
Memo1->Lines->SaveToFile(SL1);
if (NomerSlovara=="2")
Memo1->Lines->SaveToFile(SL2);
if (NomerSlovara=="3")
Memo1->Lines->SaveToFile(SL3);
}
//---------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo2->Lines->Clear();
AnsiString preob;
if(! InputQuery("Выбор словаря",
"Укажите номер словаря из возможных 1, 2, 3", NomerSlovara))
ShowMessage("Вы не выбрали словарь");
else ShowMessage("Словарь выбран");
if (NomerSlovara=="1")
Memo1->Lines->LoadFromFile(SL1);
if (NomerSlovara=="2")
Memo1->Lines->LoadFromFile(SL2);
if (NomerSlovara=="3")
Memo1->Lines->LoadFromFile(SL3);
AnsiString newword;
preob=Memo1->Text;
Memo1->Lines->Clear();
if(preob.SubString(preob.Length(),1)!=" ")//проверка пробела в конце строки
{
preob.Insert(" ",preob.Length()+1); //добавление пробела
}
preob=Vax(preob);
int i=0;
while (i!=1)
{
int index=preob.Pos(" ");
if (index==0)
{
i=1;
}
else
{
newword=preob.SubString(1,index);
Memo1->Lines->Add(newword);
css=Memo1->Lines->Count;
preob.Delete(1,index);
newword.Insert(" ",1);
if (preob.Pos(newword))
{
Memo1->Lines->Delete(css-1);
//css=css-1;
}
}
}
css=Memo1->Lines->Count;
if (NomerSlovara=="1")
Memo1->Lines->SaveToFile(SL1);
if (NomerSlovara=="2")
Memo1->Lines->SaveToFile(SL2);
if (NomerSlovara=="3")
Memo1->Lines->SaveToFile(SL3);
ProgressBar1->Max=css;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (imp==true)ShowMessage
("Внимание текущий выбранный словарь будет перезаписан импортированным словарем");
css=Memo1->Lines->Count;
ProgressBar1->Max=css;
ProgressBar1->Visible=true;
AnsiString deletslovo=Edit3->Text;
AnsiString oldslovo;
if(deletslovo.SubString(deletslovo.Length(),1)!=" ")
{
deletslovo.Insert(" ",deletslovo.Length()+1);
}
int indeks=deletslovo.Pos(" ");
oldslovo=deletslovo.SubString(1,indeks);
if(oldslovo.SubString(indeks-1,1)=="."||oldslovo.SubString(indeks-1,1)==","||
oldslovo.SubString(indeks-1,1)=="-"||oldslovo.SubString(indeks-1,1)=="?"||
oldslovo.SubString(indeks-1,1)==":"|| oldslovo.SubString(indeks-1,1)=="!")
{
oldslovo=oldslovo.SubString(1,indeks-2);
oldslovo.Insert(" ", indeks-1);
}
int i=0;
ProgressBar1->Position=i;
while (i<=css)
{
ProgressBar1->Position=i;
if (Memo1->Lines->Strings[i]==oldslovo)
{
Memo1->Lines->Delete(i); //Strings[i]=" ";
i=css+1;
ShowMessage("Слово удалено");
Edit3->Text="Введите слово для удаления";
}
i+=1;
if (i==css)
{
ShowMessage("Слова " +oldslovo+ "нет в словаре");
Edit3->Text="Введите слово для удаления";
i+=1;
}
}
if (NomerSlovara=="1")
Memo1->Lines->SaveToFile(SL1);
if (NomerSlovara=="2")
Memo1->Lines->SaveToFile(SL2);
if (NomerSlovara=="3")
Memo1->Lines->SaveToFile(SL3);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit3Click(TObject *Sender)
{
Edit3->Text="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
imp=true;
if (NomerSlovara=="1")
Memo1->Lines->SaveToFile(SL1);
if (NomerSlovara=="2")
Memo1->Lines->SaveToFile(SL2);
if (NomerSlovara=="3")
Memo1->Lines->SaveToFile(SL3);
if(OpenDialog1->Execute())
{
import=OpenDialog1->FileName;
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
AnsiString preob;
AnsiString newword;
preob=Memo1->Text;
Memo1->Lines->Clear();
if(preob.SubString(preob.Length(),1)!=" ")//проверка пробела в конце строки
{
preob.Insert(" ",preob.Length()+1); //добавление пробела
}
preob=Vax(preob);
int i=0;
while (i!=1)
{
int index=preob.Pos(" ");
if (index==0)
{
i=1;
}
else
{
newword=preob.SubString(1,index);
Memo1->Lines->Add(newword);
css=Memo1->Lines->Count;
preob.Delete(1,index);
newword.Insert(" ",1);
if (preob.Pos(newword))
{
Memo1->Lines->Delete(css-1);
//css=css-1;
}
css+=1;
}
}
css=Memo1->Lines->Count;
}
}
Размещено на Allbest.ru
Подобные документы
Описание использованных структур данных, характеристика процедур и функций. Структура приложения и интерфейс пользователя. Системные требования и имеющиеся ограничения. Тестирование приложения. Анализ временных характеристик и выводы по эффективности.
курсовая работа [3,3 M], добавлен 23.07.2012Описание использованных структур данных и разработка программы, обеспечивающей сжатие данных по алгоритму LZ77 с пошаговой визуализацией. Описание процедур, функций, структуры приложения и интерфейса пользователя. Тест и анализ работы алгоритма LZ77.
курсовая работа [537,9 K], добавлен 28.06.2011Теоретические основы разработки приложения, реализующего подсвечивание ключевых слов. Описание используемых процедур и функций, структуры программы, интерфейса пользователя. Системные требования для работы приложения, анализ результаты его тестирования.
курсовая работа [1,2 M], добавлен 07.07.2012Разработка программного продукта - приложения, позволяющего заносить данные анкетирования в базу данных MS SQL. Описание логики работы приложения, особенности пользовательского интерфейса. Формы просмотра анкет, описание процедур и функций программы.
курсовая работа [1,2 M], добавлен 16.08.2012Описание языка программирования Java: общие характеристики, главные свойства, краткий обзор. Надежность и безопасность, производительность и базовая система программы. Разработка программы поиска по словарю, алгоритм её работы. Общий вид кода программы.
курсовая работа [20,3 K], добавлен 28.10.2012Описание разрабатываемой программы с точки зрения пользователя и программиста. Поэтапная разработка программной системы. Создание базы данных в Access. Разработка структуры классов. Создание структуры для хранения данных. Проектирование интерфейса.
курсовая работа [1,4 M], добавлен 07.08.2013Анализ и описание алгоритма. Основные характеристики выбранного компьютера, программных сред (операционная система и среда программирования). Описание компонентов и интерфейса программы, а также модулей, процедур и функций. Вызов и загрузка программы.
курсовая работа [1,3 M], добавлен 26.04.2015Особенности работы с SQL-базами данных. Установка и настройка локального сервера СУБД Interbase. Создание приложения "Торговая фирма", состоящее из серверной части и клиентской. Разработка спецификаций и описание интерфейса пользователя программы.
курсовая работа [634,5 K], добавлен 14.07.2012Описание предметной области. Характеристика программных средств. Описание компонентов, интерфейс программы. Описание процедур и функций. Вызов и загрузка программы. Испытание методом белого и черного ящика на ошибки кода программного приложения.
курсовая работа [2,2 M], добавлен 26.04.2015Разработка программного приложения, производящего проверку синтаксиса простой программы: выбор метода создания синтаксического анализатора, описание требований к программному обеспечению, написание алгоритмов решения и тестирование конечного продукта.
курсовая работа [579,7 K], добавлен 03.07.2011