Курсовая: Автокорректор
Автокорректор
Аннотация
В настоящей пояснительной записке приводятся результаты разработки программы
решения задачи автокоррекции, выполненной в соответствии с заданием по
индивидуальной работе по дисциплине лВведение в информатику, - постановка
указанной задачи, алгоритм и программа (на языке Турбо-Паскаль) её решения на
ПЭВМ, результаты испытания (тестирования) программы.
Содержание
1. Описание постановки задачи..................................................4
1.1 Характеристика задачи......................................................4
1.2 Выходная информация........................................................4
1.3 Входная информация.........................................................4
2. Описание алгоритма........................................................4
2.1 Функциональная структура задачи............................................4
2.2 Алгоритм решения...........................................................4
3. Описание программы........................................................5
3.1 Общие сведения.............................................................5
3.2 Функциональное назначение..................................................5
3.3 описание логической структуры..............................................5
3.4 Используемые технические средства..........................................5
3.5 Вызов и загрузка...........................................................5
3.6 Входные данные.............................................................5
3.7 Выходные данные............................................................6
4. Текст программы...........................................................6
5. Описание результатов испытаний программы..................................6
Приложение 1...................................................................7
Приложение 2........................9
Приложение 3.......................10
Приложение 4.......................10
Приложение 5......................11
Приложение 6.......................12
Приложение 7.......................14
1. Описание постановки задачи.
1.1 Характеристика задачи.
Задача автокоррекции решается с целью проверки орфографии в текстах на
русском языке. Исходными для решения задачи данными является словарь,
содержащий русские слова. В начале решения задачи пользователем задаётся
файл, содержащий текст на русском языке и нуждающийся в проверке.
1.2 Выходная информация.
Выходной информацией при решении задачи является текстовый файл лОТВЕТ,
содержащий проверенный текст.
1.3 Входная информация.
Исходная для решения задачи информация содержится в текстовых наборах данных
на магнитном диске и в указываемом (вводимом в ЭВМ) в начале решения задачи
запросе пользователя.
Запрос пользователя представляет собой:
лВведите имя обрабатываемого файла:
лСлова <.> нет в словаре (ENTER-пропустить, лПробел-изменить)
лВведите правильное слово --
2. Описание алгоритма.
2.1 Функциональная структура задачи.
На рисунке (2.1) представлена схема иерархии процедур задачи лавтокоррекции,
полученная в результате её декомпозиции.
Рис. 2.1
2.2 Алгоритм решения.
В приложение 1 представлены схемы обобщённого алгоритма задачи лполучения
информации о студенте и алгоритмов отдельных процедур её.
3. Описание программы.
3.1 общие сведения.
Программа получения информации обеспечивает решения задачи лполучения
информации о студенте (или лодноимённой задачи). Программа исполняется в
операционной системе программирования MS-DOS 6.22. Исходный текст программы
на языке Turbo Pascal 7.0.
3.2 Функциональное назначение.
Программа предназначена для решения задачи, постановка которой описана в
разделе 1 настоящей пояснительной записки.
3.3 Описание логической структуры.
Программа получения информации обеспечивает решения задачи автокоррекции по
алгоритму, описанному в разделе 2 настоящей пояснительной записки.
Структура исходного текста программы (состав и взаимосвязь модулей) приведена
в приложение 1. Функциональная структура программы (состав и взаимосвязь
программ) приведена на рисунке 2.1. Ниже указано содержание модулей программы
и их взаимосвязь (модульная структура).
Модуль ас содержит текст основной программы (и обеспечивает вызов последующих
модулей).
Модуль dic.txt Ц словарь.
3.4 Используемые технические средства.
Для исполнения программы получения информации необходима ПЭВМ типа 486DX с
монитором, клавиатурой.
3.5 Вызов и загрузка.
Программа получения информации вызывается для исполнения стандартными
средствами. Имя исполняемого модуля Ц ac.
3.6 Входные данные.
До начала исполнения программы должны быть сформированы на магнитном диске
наборы данных (файлы) с именем dic.txt. В начале исполнения программы
предусматривается ввод пользователем запроса, конкретизирующего вариант
(условия) решения задачи (см. раздел 1 настоящей пояснительной записки
(подраздел)).
3.7 Выходные данные.
Результат выполнения программы получения информации Ц текстовые данные.
Возможен вывод на экран монитора следующих сообщений:
лОшибка при открытии файла:
4. Текст программы.
Исходный текст программы получения информации (её модулей) приведён в
приложении 1.
5. Описание результатов испытаний программы.
В ходе испытания (тестирования) программы автокоррекции использовался
тестовый набор текстовых данных (текстовый файл) на магнитном диске с именем
lena текст которого приведён в приложении 2. Результат испытания приведён в
приложении 2.
Сопоставление исходных данных с полученными по программе результатами
свидетельствуют и правильности программы.
Приложение 1.
Исходный текст программы:
program ac;
uses crt;
var input_file,output_file,dictionary:text;
in_file_name,tmp_file_name,line:string;
i:word;
function is_rus_alpha(symbol:char):boolean;
begin
if ((symbol>='А') and (symbol<='п')) or
((symbol>='р') and (symbol<='я')) then is_rus_alpha:=true
else is_rus_alpha:=false;
end;
function to_upper(symbol:char):char;
begin
if ((symbol>='а') and (symbol<='п')) then
to_upper:=chr(ord(symbol)-32)
else
if ((symbol>='р') and (symbol<='я')) then to_upper:=chr(ord(symbol)-80)
else
if ((symbol>='a') and (symbol<='z')) then to_upper:=chr(ord(symbol)-32)
else to_upper:=symbol;
end;
function str_to_upper(s:string):string;
var pos:byte; rs:string;
begin
rs:='';
if s>'' then
for pos:= 1 to ord(s[0]) do
rs:=rs+to_upper(s[pos]);
str_to_upper:=rs;
end;
function str_equal(s1:string; s2:string):boolean;
var equal:boolean; pos,len:byte;
begin
equal:=true;
len:=length(s1);
if len<>length(s2) then equal:=false
else begin
if len>0 then begin
for pos:=1 to len do begin
if s1[pos]<>s2[pos] then begin
equal:=false;
break;
end;
end;
end;
end;
str_equal:=equal;
end;
function is_in_dictionary(w:string):boolean;
var found:boolean; dw:string;
begin
found:=false;
reset(dictionary);
w:=str_to_upper(w);
while (not eof (dictionary)) do begin
readln (dictionary,dw);
if dw>'' then begin
dw:=str_to_upper(dw);
if str_equal(w,dw) then begin
found:=true;
break;
end;
end
end;
close(dictionary);
is_in_dictionary:=found;
end;
function correct_word(w:string):string;
var answer:char; new_word:string;
begin
if not is_in_dictionary(w) then begin
writeln;
writeln ('Слова <',w,'> нет в словаре (ENTER-пропустить, "Пробел"-изменить)');
answer:=readkey;
case ord(answer) of
13: correct_word:=w;
ord(' '):
begin
write('Введите правильное слово -- ');
readln(new_word);
correct_word:=new_word;
end;
end;
end
else correct_word:=w;
end;
function correct_string(s:string):string;
var pos,len:integer; in_word:boolean; result,w:string;
begin
len:=length(s);
in_word:=false;
w:='';
result:='';
for pos:=1 to len do begin
if is_rus_alpha(s[pos]) then begin
in_word:=true;
w:=w+s[pos];
end
else begin
if in_word then begin
w:=correct_word(w);
write(w);
result:=result+w;
in_word:=false;
w:='';
end;
result:=result+s[pos];
write(s[pos]);
end;
end;
correct_string:=result;
end;
{$I-}
begin
tmp_file_name:='ОТВЕТ';
write('Введите имя обрабатываемого файла: '); readln(in_file_name);
assign(input_file,in_file_name); reset(input_file);
if (ioresult<>0) or (in_file_name='') then begin
writeln ('Ошибка при открытии файла: ',in_file_name);
readln;
halt;
end;
assign(output_file,tmp_file_name); rewrite(output_file);
assign(dictionary,'dic.txt');
while (not EOF(input_file)) do begin
readln(input_file,line);
line:=correct_string(line);
writeln(output_file,line);
end;
close(input_file);
close(output_file);
end.
Приложение 2
Исходный текст:
По мере роспросттранения кйомпютеров и ускорения их цнтральных процесров стал
популярнмы дилаоговый режим работы. Уедельные затраты машиных рисурсов
аказывались нескалько выше зато ползователю предаставлялась возможность снять
очереднное затруденение.
Текст после проверки:
По мере распространения компьютеров и ускорения их центральных процессов стал
популярным диалоговый режим работы. Удельные затраты машинных ресурсов
оказывались несколько выше зато пользователю предоставлялась возможность
снять очередное затруднение.
Приложение 3.
Текст словаря (dic.txt):
по
мере
и
их
снять
ускорения
стал
режим
работы
затраты
зато
выше
возможность
снять
Приложение 4.
Блок-схема исходного текста программы.
assign(input_file, in_file_name) |
|