Автокорректор

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= ’ответ’

Блок-схема: знак завершения: Н


Страница: