Программа


Program Words;
{ Печать слов отличных от последнего }
Const ConstFileName='WORDS.TXT';               { Предопределенное имя файла }
Var Word:string;                               { Переменная "слово"}
    EndWord:string;                            { Переменная "последнее слово"}
    StringOfWords:string;                      { Переменная "строка слов" }
    FileOfWords:text;                          { Файловая переменная }
    FileName:string;                           { Имя файла }
Procedure DeleteWords(var Str:string;Word:string);
                                         { Процедура удаления слов из строки }
  Const Bukva=['A'..'Z','a'..'z','А'..'Я','а'..'я'];        { Множество букв }
  Var WordNumber:integer;                         { Переменная "Номер слова" }
  function QuantityWordsInString(Str:string):integer;
                                      { Функция подсчета числа слов в строке }
    var Quantity:integer; { Буферная переменная для подсчета количества слов }
        Meter:byte;       { Счетчик }
    begin
      Quantity:=0;                                   { Сброс количества слов }
      { Подсчет количества слов по количеству разделителей: }
      for Meter:=1 to Length(Str) do     { Цикл просмотра строки по символам }
        if not(Str[Meter] in Bukva)      { Если текущий символ "небуква" }
          then Quantity:=Quantity+1;     { то - увеличение количества слов }
      if Str[Length(Str)]<>'.'    { Если последний символ в строке "неточка" }
        then Quantity:=Quantity+1;{ то - доопределение количества слов }
      QuantityWordsInString:=Quantity         { Определение значения функции }
    end;
  function WordFromString(Str:string;Number:integer):string;
  { Функция выделения слова из строки по номеру слова }
    var MeterWord:integer;                          { Счетчик слов }
        MeterSymbol:byte;                           { Счетчик символов }
        Buf:string;                                 { Буфер для набора слова }
        EndPosition:byte;
        { Вспомогательная переменная - указатель на последний символ }
    begin
      MeterWord:=1;             { Сброс счетчика слов }
      MeterSymbol:=1;           { Сброс счетчика символов }
      while MeterWord<Number do { Цикл просмотра строки до получения
                                  указателя на первый символ искомого слова }
        begin
          if Str[MeterSymbol]=','        { Если текущий символ - разделитель}
            then MeterWord:=MeterWord+1; { то переопределение числа слов }
          MeterSymbol:=MeterSymbol+1     { Переопределение счетчика }
        end;
      Buf:=Copy(Str,MeterSymbol,255);
                                   { Выделение подстроки от текущего символа }
      EndPosition:=Pos(',',Buf)-1;
              { Определение номера последнего символа в слове по разделителю }
      if EndPosition=0 { Если на предыдущей операции разделитель необнаружен }
        then           { то - переопределение указателя на последний символ }
          EndPosition:=Length(Buf);
      Buf:=Copy(Buf,1,EndPosition);          { Выделение искомого слова }
      if Buf[Length(Buf)]='.'                { Если последний символ - точка }
        then Delete(Buf,Length(Buf),1);      { то - отсечение ее }
      WordFromString:=Buf                    { Определение значения функции }
    end;
  procedure DeleteWord(var Str:string; Number:integer);
                                        { Процедура удаления слова из строки }
    var MeterWord:byte;                 { Счетчик слов }
        MeterSymbol:byte;               { Счетчик символов }
        Buf:string;                     { Буфер для набора строки }
    begin
      MeterWord:=1;                     { Сброс счетчика слов }
      Buf:='';                          { Сброс буфера }
      for MeterSymbol:=1 to Length(Str) do
                                     { Цикл посимвольного копирования строки }
        begin
          if Str[MeterSymbol]=','       { Если текущий символ - разделитель }
            then MeterWord:=MeterWord+1;{ то - переопределение счетчика слов }
          if (MeterWord<>Number) or (Str[MeterSymbol]='.') { Если текущее
          слово неотносится к исключаемому или текущий символ символ - точка }
            then Buf:=Buf+Str[MeterSymbol]
                                 { то - копирование текущего символа в буфер }
        end;
      Str:=Buf                                  { Переопределение переменной }
    end;
  Begin
    for WordNumber:=1 to QuantityWordsInString(Str) do
                                               { Цикл перебора слов в строке }
      if WordFromString(Str,WordNumber)=Word
                                       { Если текущее слово равно последнему }
        then DeleteWord(Str,WordNumber) { то - удаление текущего слова }
  End;
BEGIN
  WriteLn;                                                  { Пропуск строки }
  { Ввод имени файла: }
  WriteLn('Введите имя внешнего файла [',ConstFileName,']');{ Вывод
     приглашения ввести имя файла со словами и указание имени "по умолчанию" }
  ReadLn(FileName); { Чтение имени файла }
  If FileName='' then FileName:=ConstFileName;
                                       { Переопределение пустого имени файла }

  { Поиск последнего слова: }
  Assign(FileOfWords,FileName);
                             { Связывание файловой переменной с именем файла }
  Reset(FileOfWords);        { Открытие файла для чтения }
  while not EOF(FileOfWords) do            { Цикл просмотра файла }
    ReadLn(FileOfWords,StringOfWords);        { Чтение строки из файла }
  Close(FileOfWords);                      { Закрытие файла }
  while Pos(',',StringOfWords)<>0 do       { Цикл выделяющий последнее слово }
    StringOfWords:=Copy(StringOfWords,Pos(',',StringOfWords)+1,255);
  Delete(StringOfWords,Pos('.',StringOfWords),1);
                                         { Удаление последней точки из слова }
  EndWord:=StringOfWords;                { Определение последнего слова }

  { Печать слов отличных от последнего: }
  Reset(FileOfWords);                            { Открытие файла для чтения }
  while not EOF(FileOfWords) do                  { Цикл просмотра файла }
    Begin
      ReadLn(FileOfWords,StringOfWords);            { Чтение строки из файла }
      DeleteWords(StringOfWords,EndWord);
                               { Удаление последнего слова из текущей строки }
      WriteLn(StringOfWords)   { Печать строки }
    End;
  Close(FileOfWords);                            { Закрытие файла }
END.

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