Содержание
1. Описание постановки задачи
1.1 Характеристика задачи
1.2 Выходная информация
1.3 Входная информация
2. Описание алгоритма
2.1 Функциональная структура задачи
2.2 Алгоритм решения
3. Описание программы
3.1 Общие сведения
3.2 Функциональное назначение
3.3 описание логической структуры
3.4 Используемые технические средства
3.5 Вызов и загрузка
3.6 Входные данные
3.7 Выходные данные
4. Текст программы
5. Описание результатов испытаний программы
Приложение 1
Приложение 2
Приложение 3
Приложение 4
Приложение 5
Приложение 6
Приложение 7
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 ((symbol>='р') and (symbol else is_rus_alpha:=false;
end;
function to_upper(symbol:char):char;
begin
if ((symbol>='а') and (symbolto_upper:=chr(ord(symbol)-32)
else
if ((symbol>='р') and (symbol else
if ((symbol>='a') and (symbol 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 lenlength(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 ('Слова нет в словаре (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 (ioresult0) 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.
Блок-схема исходного текста программы.
нет
да 0 or in_file_name=’’">
reset(input_file)
assign(input_file, in_file_name)
tmp_file_name= ’ответ’