Каталог :: Программирование и комп-ры

Курсовая: Автокорректор

     Автокорректор
                                Аннотация                                
В настоящей пояснительной записке приводятся результаты разработки программы
решения задачи автокоррекции, выполненной в соответствии с заданием по
индивидуальной работе по дисциплине «Введение в информатику», - постановка
указанной задачи, алгоритм и программа (на языке Турбо-Паскаль) её решения на
ПЭВМ, результаты испытания (тестирования) программы.
                                                        Содержание
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. Блок-схема исходного текста программы. Двойные круглые скобки: Ошибка при от-крытии файла
нет
да
Двойные круглые скобки: Ioresult<>0 or in_file_name=’’
reset(input_file)
assign(input_file, in_file_name)
Двойные круглые скобки: Введите имя обраба-тываемого файлаБлок-схема: данные: in_file_ name
tmp_file_name= ’ответ’
Блок-схема: знак завершения:         Н