Программа


/* Вставить в текст заданную строку после каждой строки в которой
   заданное слово не обнаружено */
#include <stdio.h>
#include <string.h>
int CheckLetter(char Ch)  /* Функция проверки принадлежности символа множеству букв */
{
  return 'A'<=Ch && Ch<='Z'||'a'<=Ch && Ch<='z'||
	 'А'<=Ch && Ch<='Я'||'а'<=Ch && Ch<='п'||'р'<=Ch && Ch<='я';
}
int EOLn(FILE *F, char *Buf) /* Проверка достижения конца строки в файле
				и пропуска конца строки */
{
  if (*Buf==13)             /* Проверка достижения конца строки */
  { *Buf=getc(F);           /* Пропуск маркера конца строки */
    return 1;               /* Определение значения функции "ИСТИННО" */
  }
  else return *Buf==EOF || *Buf==10;
	/* Определение значения функции по маркеру конца файла или строки */
}
void Filter(FILE *Fin, FILE *Fout, char Word[], char Str[]) /* Функция модификации текста */
{
  int Coinsidence=0; /* Счетчик совпадений символов строки текста и контрольного слова */
  int PushWord=0;              /* Флаг пропуска текущего слова */
  int InsertString=1;          /* Флаг вставки строки */
  char Buf;                    /* Буфер для чтения файла */
  while(!feof(Fin))            /* Цикл просмотра файла */
  { do                            /* Цикл просмотра строки */
    { Buf=getc(Fin);              /* Чтение символа из файла */
      putc(Buf,Fout);             /* Запись символа в файл */
      if (CheckLetter(Buf))       /* Проверка принадлежности текущего символа множеству букв */
	if ((Word[Coinsidence]==Buf) && (Coinsidence<strlen(Word)) && !PushWord)
	  /* Проверка совпадения текущего символа с соответствующим символом контрольного слова
	     и учет режима пропуска слова */
	  Coinsidence=Coinsidence+1; /* Переопределение счетчика совпадений */
	else PushWord=1;       /* Подъем флага пропуска слова */
      else { if ((Coinsidence==strlen(Word)) && !PushWord) InsertString=0;
	     /* Проверка условия совпадения последовательности символов
		с контрольным словом и сброс флага вставки слова */
	     Coinsidence=0; /* Сброс счетчика совпадений */
	     PushWord=0;    /* Сброс флага пропуска слова */
	   }
    }
    while(!EOLn(Fin,&Buf)); /* Выход из цикла при достижении конца строки */
    if (InsertString) /* Проверка флага вставки строки */
    { if (feof(Fin)) fprintf(Fout,"\n"); /* Вставка конца строки после последней
	    строки при отсутствии маркера конца строки перед концом файла */
      fprintf(Fout,"%s\n",Str); /* Вывод в файл вставляемой строки */
    }
    else InsertString=1; /* Подъем флага вставки строки */
  }
}
void main()
{
  char FileNameIn[80],FileNameOut[80];  /* Имена входного и выходного файлов */
  char Word[129],Str[129];         /* Контрольное слово и вставляемая строка */
  FILE *Fin,*Fout;                 /* Указатели на файлы */
  printf("\n");                                /* Вывод конца строки */
  printf("Введите имя входного файла ");       /* Вывод приглашения */
  gets(FileNameIn);                            /* Ввод имени входного файла */
  printf("Введите имя выходного файла ");      /* Вывод приглашения */
  gets(FileNameOut);                           /* Ввод имени выходного файла */
  printf("Введите контрольное слово ");        /* Вывод приглашения */
  gets(Word);                                  /* Ввод контрольного слова */
  printf("Введите вставляемую строку ");       /* Вывод приглашения */
  gets(Str);                            /* Ввод вставляемой в текст строки */
  Fin=fopen(FileNameIn,"r");                /* Открытие файла для чтения */
  Fout=fopen(FileNameOut,"w");              /* Открытие файла для записи */
  Filter(Fin,Fout,Word,Str);                /* Обработка файлов */
  /* Закрытие файлов: */
  fclose(Fin);
  fclose(Fout);
}

/* Блок-схема функции "main"
  ***************
 *               *
 *    П У С К    *
 *               *
  ***************
         :
         :            ┌─
         :            │  Вывод конца строки
   *****************  │  Вывод приглашения ввода имени входного файла
                      │  Ввод имени входного файла
  *               *   │  Вывод приглашения ввода имени выходного файла
                  ∙∙∙∙│  Ввод имени выходного файла
 *               *    │  Вывод приглашения ввода контрольного слова
                      │  Ввод контрольного слова
*****************     │  Вывод приглашения ввода вставляемой в текст строки
         :            │  Ввод вставляемой в текст строки
         :            └─
         :
 *****************    ┌─
 *               *    │
 *               *    │  Открытие файла для чтения
 *               *∙∙∙∙│
 *               *    │  Открытие файла для записи
 *               *    │
 *****************    └─
         :
         :
 *****************    ┌─
 * *           * *    │
 * *           * *    │
 * *  Filter   * *∙∙∙∙│  Обработка файлов
 * *           * *    │
 * *           * *    │
 *****************    └─
         :
         :
 *****************    ┌─
 *               *    │
 *               *    │
 *               *∙∙∙∙│  Закрытие файлов
 *               *    │
 *               *    │
 *****************    └─
         :
         :
         :
  ***************
 *               *
 *   К О Н Е Ц   *
 *               *
  ***************

Блок-схема функции "Filter"
  ***************
 *               *
 *    П У С К    *
 *               *
  ***************
         :
         :∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙.
         :                                                                     :
    ***********               ┌─                                               :
   *           *              │                                                :
  *             * Нет         │ Проверка                                       :
 *               *∙∙∙∙∙∙∙.∙∙∙∙│ достижения                                     :
  *             *        :    │ конца файла                                    :
   *           *         :    │                                                :
    ***********          :    └─                                               :
         :Да             :                                                     :
         :               :∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙. :
         :               :                                                   : :
         :         *****************  ┌─                                     : :
         :                            │  Чтение символа                      : :
         :        *               *   │  из файла                            : :
         :                        ∙∙∙∙│                                      : :
         :       *               *    │  Запись символа                      : :
         :                            │  в файл                              : :
         :      *****************     └─                                     : :
         :               :                                                   : :
         :               *                                                   : :
         :             *   *                ┌─                               : :
         :           *       *              │ Проверка                       : :
         :         *           *   Да       │ принадлежности                 : :
         :       *  CheckLetter  *∙∙∙∙∙∙.∙∙∙│ текущего                       : :
         :         *           *        :   │ символа                        : :
         :           *       *          :   │ множеству букв                 : :
         :             *   *            :   └─                               : :
         :               *              *             ┌─                     : :
         :               : Нет        *   *           │ Проверка совпадения  : :
         :               :          *       *         │ текущего символа с   : :
         :               :        *           *   Нет │ соответствующим      : :
         :               :      *               *∙∙.∙∙│ символом контрольного: :
  ***************        :        *           *    :  │ слова и учет режима  : :
 *               *       :          *       *      :  │ пропуска слова       : :
 *   К О Н Е Ц   *       :            *   *        :  └─                     : :
 *               *       :              *          :                         : :
  ***************        :              : Да       :                         : :
                         :              :          :                         : :
                         :              :          :                         : :
                         :              :  *****************  ┌─             : :
                         :              :  *               *  │              : :
                         :              :  * Coinsidence=  *  │ Переопреде-  : :
                         :              :  *               *∙∙│ ление        : :
                         :              :  * Coinsidence+1 *  │ счетчика     : :
                         :              :  *               *  │ совпадений   : :
                         :              :  *****************  └─             : :
                         :              :          :                         : :
                         :              :          `∙∙∙∙∙∙∙∙∙∙∙.             : :
                         :      *****************  ┌─          :             : :
                         :      *               *  │ Подъем    :             : :
                         :      *               *  │ флага     :             : :
                         :      *  PushWord=1   *∙∙│ пропуска  ;             : :
                         :      *               *  │ слова     :             : :
                         :      *               *  │           ;             : :
                         :      *****************  └─          :             : :
                         :              :                      :             : :
                         `∙∙∙∙∙∙>∙∙∙∙∙∙∙`∙∙>∙∙∙.∙∙∙∙∙∙∙∙<∙∙∙∙∙∙'             : :
                                               :                             : :
                                               :                             : :
                                   ─┐     ***********                        : :
                                    │    *           *                       : :
                       Проверка     │   *             *  Нет                 : :
                       достижения   │∙∙*     EOLn      *∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙' :
                       конца строки │   *             *                        :
                                    │    *           *                         :
                                   ─┘     ***********                          :
                                               : Да                            :
                                               :                               :
                                               *                               :
                                             *   *                             :
                                           *       *                           :
                                     Да  *           *   Нет                   :
                             .∙∙∙∙∙∙∙∙∙* InsertString  *∙∙∙∙∙∙∙.               :
                             :           *           *         :               :
                             *             *       *   *****************       :
                 ─┐        *   *             *   *     *               *       :
                  │      *       *             *       *               *       :
         Проверка │    *           *   Нет             * InsertString=1*       :
       достижения │∙∙*               *∙∙∙∙∙∙.          *               *       :
            конца │    *           *        :          *               *       :
            файла │      *       *          :          *****************       :
                 ─┘        *   *            :                  :               :
                             *              :                  `∙∙∙∙∙∙∙∙∙∙>∙∙∙∙:
                             : Да           :                                  :
                             :              :                                  :
                 ─┐    *****************    :                                  :
                  │                         :                                  :
          Вставка │   *               *     :                                  :
          маркера │∙∙∙                      :                                  :
            конца │  *               *      :                                  :
           строки │                         :                                  :
                 ─┘ *****************       :                                  :
                             :              :                                  :
                             :∙∙∙∙∙<∙∙∙∙∙∙∙∙'                                  :
                             :                                                 :
                       *****************  ┌─                                   :
                                          │  Вывод                             :
                      *               *   │  в файл                            :
                                      ∙∙∙∙│  вставляемой                       :
                     *               *    │  строки                            :
                                          │                                    :
                    *****************     └─                                   :
                             :                                                 :
                             `∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙>∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙'

Блок-схема функции "EOLn"
                          ***************
                         *               *
                         *    П У С К    *
                         *               *
                          ***************
                                 :
                                 :
                                 *
                               *   *                         ┌─
                             *       *                       │
                      Нет  *           *   Да                │ Проверка
          .∙∙∙∙∙∙∙∙∙∙∙∙∙∙*               *∙∙∙∙∙∙.∙∙∙∙∙∙∙∙∙∙∙∙│ достижения
          :                *           *        :            │ конца строки
          :                  *       *          :            │
          :                    *   *            :            └─
          :                      *        *****************  ┌─
  *****************  ┌─                                      │ Пропуск
  *               *  │  Определение      *               *   │ маркера
  *   *Buf==EOF   *  │  значения                         ∙∙∙∙│ конца
  *       ||      *∙∙│  функции по      *               *    │ строки
  *   *Buf==10    *  │  маркеру                              │
  *               *  │  конца файла    *****************     └─
  *****************  │  или строки              :
          :          └─                         :
          :                                     :
          :                             *****************    ┌─
          :                             *               *    │  Определение
          :                             *               *    │  значения
          :                             *       1       *∙∙∙∙│  функции
          :                             *               *    │  "ИСТИННО"
          :                             *               *    │
          :                             *****************    └─
          :                                     :
          `∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙.∙∙∙∙∙∙∙∙∙∙∙∙∙∙'
                                 :
                                 :
                          ***************
                         *               *
                         *   К О Н Е Ц   *
                         *               *
                          ***************

Блок-схема функции "CheckLetter"
  ***************
 *               *
 *    П У С К    *
 *               *
  ***************
         :
         :
 *****************    ┌─
 * 'A'<=Ch<='Z'||*    │
 * 'a'<=Ch<='z'||*    │  Определение
 * 'А'<=Ch<='Я'||*∙∙∙∙│  значения
 * 'а'<=Ch<='п'||*    │  функции
 * 'р'<=Ch<='я'  *    │
 *****************    └─
         :
         :
  ***************
 *               *
 *   К О Н Е Ц   *
 *               *
  ***************    */

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию