zadach303.PAS

{* Задача 303 *}

Unit ZADACH303;
Interface
Implementation
Begin
 writeln('Даны два текстовых файла f1 и f2. Файл f1 содержит произвольный текст. Слова в тексте разделены пробелами и знаками препинания. Файл f2 содержит не более 30 слов, которые разделены запятыми. Эти слова образуют пары: каждое второе является синонимом первого. Заменить в файле f1 те слова, которые можно, их синонимами. Результат поместить в новый файл. ');
End.

Program zadach303;

Uses zadach303.pas; {* Эту строку можно удалить *}
Uses crt; {* Вызов внешних функций *}
Const {* Постоянные значения *}
  pr = [' ''.'', ''?''!'':''('')',#9,#10,#13];
Var {* В работе нам потребуются переменные: *}
  s     : char;
  f1    : text;
  f2    : text;
  f3    : text;
  slovo : String;
  sin1  : Array [1..15] Of String;
  sin2  : Array [1..15] Of String;
  i     : integer;
  k     : integer;
Begin
  clrscr; {* Стираем всё с экрана *}
  assign(f1, 'c:f1.txt'); {* Подключение к файлу 'c:f1.txt' через переменную f1 *}
  reset(f1); {* Открытие файла для чтения *}
  assign(f2, 'c:f2.txt'); {* Подключение к файлу 'c:f2.txt' через переменную f2 *}
  reset(f2); {* Открытие файла для чтения *}
  assign(f3, 'c:f3.txt'); {* Подключение к файлу 'c:f3.txt' через переменную f3 *}
  rewrite(f3); {* Открытие файла для записи *}
  i := 1;
  While Not(EOF(f2)) Do
  Begin
    read(f2, s);
    If ord(s) In [128..143] Then
      s := chr(ord(s) + 32);
    If ord(s) In [144..159] Then
      s := chr(ord(s) + 80);
    If Not(s In pr) And Not EOF(f2) Then
      slovo := slovo + s
    Else Begin
      If slovo'' Then
      Begin
        If (i Mod 2)  0 Then
          sin1[round(i / 2 + 0.5)] := slovo
        Else sin2[round(i / 2)] := slovo;
          i := i + 1;
        slovo := '';
      End;
    
  End;
  
End;
While Not(EOF(f1)) Do
Begin
  read(f1, s);
  If ord(s) In [128..143] Then
    s := chr(ord(s) + 32);
  If ord(s) In [144..159] Then
    s := chr(ord(s) + 80);
  If Not(s In pr) And Not EOF(f1) Then
    slovo := slovo + s
  Else Begin
    For i := 1 To 15 Do {* Цикл для i => [1 .. 15] *}
    Begin
      If slovo = sin1[i] Then
      Begin
        slovo := sin2[i];
        k := 1;
      End;
      Else k := 0;
        If (slovo = sin2[i]) And (k = 0) Then
          slovo := sin1[i];
    End;
  write(f3, slovo, s);
  slovo := '';
End;

End;
close(f1); {* Файл f1 будет закрыт *}
close(f2); {* Закрыть файл f2 *}
close(f3); {* Файл f3 будет закрыт *}
End.....