{ begin end & FUCK} { Задача 2: - Первые буквы служебных слов сделать заглавными. - Убрать "лишние" пробелы - Заменить комментарии на {1} {2} {...} program FileJob; uses Crt; const {Служебные слова.11 групп. 65 слов} Res2:array[1..6] of String[2] = ('TO','OF','IF','OR','IN','DO'); Res3:array[1..14] of String[3] = ('SET','MOD','SHL','AND','FAR','SHR', 'NIL','ASM','FOR','NOT','VAR','DIV', 'XOR','END'); Res4:array[1..11] of String[4] = ('NAME','FILE','NEAR','THEN','TYPE', 'CASE','GOTO','UNIT','USES','WITH', 'ELSE'); Res5:array[1..7] of String[5] = ('ARRAY','BEGIN','CONST','UNTIL', 'INDEX','WHILE','LABEL'); Res6:array[1..9] of String[6] = ('STRING','OBJECT','PACKED','DOWNTO', 'INLINE','PUBLIC','RECORD','REPEAT', 'EXPORT'); Res7:array[1..6] of String[7] = ('LIBRARY','EXPORTS','FORWARD', 'PRIVATE','VIRTUAL','PROGRAM'); Res8:array[1..4] of String[8] = ('ABSOLUTE','EXTERNAL','FUNCTION', 'RESIDENT'); Res9:array[1..5] of String[9] = ('ASSEMBLER','PROCEDURE','INHERITED', 'INTERFACE','INTERRUPT'); Res10:String[10] = 'DESTRUCTOR'; Res11:String[11] = 'CONSTRUCTOR'; Res14:String[14] = 'IMPLEMENTATION'; Var F,O:Text; {Рабочий файл} K,S,St:String; A:array[1..30,1..2] of Byte; {Смещение и длина слова} X,M,i,j:Byte; N:LongInt; Fnd:Boolean; Begin ClrScr; {Связываем с переменной} Write('Введите имя файла или "Ввод" для текущего (*.pas): '); ReadLn(S); If Length(S)=0 then begin S:=ParamStr(0); {Ввод} S:=Copy(S,1,Pos('.',S))+'PAS'; end; If Pos('.',S)=0 then Insert('.pas',S,Length(S)+1); {Нет расширения} If Length(S)>12 then Halt; {Многовато для имени} St:=Copy(S,1,Pos('.',S))+'NEW'; Assign(F,S); Reset(F); Assign(O,St); ReWrite(O); N:=0; {Основной цикл} While not Eof(F) do begin ReadLn(F,S); {Если ненулевая строка} St:=S; If (Length(S)<>0) and (Length(S)<>1) then begin {Удаляем "лишние" пробелы} While Pos(' ',S)<>0 do Delete(S,Pos(' ',S),1); St:=S; {Предохраняемся} For i:=1 to Length(S) do S[i]:=UpCase(S[i]); {64..91 - английский алфавит} {Убираем все остальные символы} For i:=1 to Length(S) do If (Ord(S[i])<=64) or (Ord(S[i])>=91) then S[i]:=#32; {} j:=0; Repeat i:=j+1; K:=''; {Пропускаем пробелы} While (S[i]=' ') and (i' ') and (j' ') then Inc(j); K:=Copy(S,i,j-i); X:=1; {От I до J} {Ищем по размеру} If K<>'' then Case (j-i) of 2:For X:=1 to 6 do If (K=Res2[X]) then St[i]:=UpCase(St[i]); 3:For X:=1 to 14 do If (K=Res3[X]) then St[i]:=UpCase(St[i]); 4:For X:=1 to 11 do If (K=Res4[X]) then St[i]:=UpCase(St[i]); 5:For X:=1 to 7 do If (K=Res5[X]) then St[i]:=UpCase(St[i]); 6:For X:=1 to 9 do If (K=Res6[X]) then St[i]:=UpCase(St[i]); 7:For X:=1 to 6 do If (K=Res7[X]) then St[i]:=UpCase(St[i]); 8:For X:=1 to 4 do If (K=Res8[X]) then St[i]:=UpCase(St[i]); 9:For X:=1 to 5 do If (K=Res9[X]) then St[i]:=UpCase(St[i]); 10:If Res10=K then St[i]:=UpCase(St[i]); 11:If Res11=K then St[i]:=UpCase(St[i]); 14:If Res14=K then St[i]:=UpCase(St[i]); end; {Счетчик} Inc(N); GotoXY(1,2); Write(N); end; {Пока строка не кончится} Until (i>=Length(S)); end; WriteLn(O,St); end; Close(F); Close(O); WriteLn(#13#10'Подходящих слов обработано: ',N); End.