Создать текст. Вывести те слова текста, которые отличны от последнего слова и удовлетворяют следующему свойству: а) слово симметрично; б) первая буква слова входит в него еще раз — Pascal(Паскаль)

а)

program Project1;

const
  // Разделители слов.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];

var
  S, Sw, Sw1: String;
  i, j, k, Pos2, Len, LenW: Integer;
  F, FRes: Boolean;

begin
  repeat
    Writeln('Задайте строку:');
    Readln(S);

    Writeln('Список симметричных слов, отличных от последнего слова:');
    Len := Length(S);
    Pos2 := 0;
    F := True;
    for i := Len downto 1 do
    begin
      // Пропускаем разделители.
      if S[i] in D then
        Continue;
      // Отслеживаем конец слова.
      if (i = Len) or (S[i + 1] in D) then
        Pos2 := i;
      // Отслеживаем начало слова.
      if (i = 1) or (S[i - 1] in D) then
      begin
        // Выделяем очередное слово из строки.
        LenW := Pos2 - i + 1;
        Sw := Copy(S, i, LenW);
        if F then
        begin
          // Это последнее слово в строке.
          F := False;
          Sw1 := Sw;
        end
        else if Sw <> Sw1 then
        begin
          // Это не последнее слово, отличное от последнего в строке.
          // Проверка симметричности.
          k := LenW;
          FRes := True;
          for j := 1 to LenW div 2 do
          begin
            if Sw[j] <> Sw[k] then
            begin
              FRes := False;
              Break;
            end;
            k := k - 1;
          end;
          if FRes then
            Writeln(Sw);
        end;
      end;
    end;

    Writeln('Повторить - Enter, выход - любой символ + Enter.');
    Readln(S);
  until S <> '';

end.

б)

program Project1;

const
  // Разделители слов.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];

var
  S, Sw, Sw1: String;
  i, j, Pos2, Len, LenW: Integer;
  F, FRes: Boolean;

begin
  repeat
    Writeln('Задайте строку:');
    Readln(S);

    Writeln('Список слов, отличных от последнего слова, в которых');
    Writeln('первая буква встречается хотябы ещё один раз:');
    Len := Length(S);
    Pos2 := 0;
    F := True;
    for i := Len downto 1 do
    begin
      // Пропускаем разделители.
      if S[i] in D then
        Continue;
      // Отслеживаем конец слова.
      if (i = Len) or (S[i + 1] in D) then
        Pos2 := i;
      // Отслеживаем начало слова.
      if (i = 1) or (S[i - 1] in D) then
      begin
        // Выделяем очередное слово из строки.
        LenW := Pos2 - i + 1;
        Sw := Copy(S, i, LenW);
        if F then
        begin
          // Это последнее слово в строке.
          F := False;
          Sw1 := Sw;
        end
        else if Sw <> Sw1 then
        begin
          // Это не последнее слово, отличное от последнего в строке.
          // Проверка встречается ли первая буква в слове хотябы ещё один раз.
          FRes := False;
          for j := 2 to LenW do
          begin
            if Sw[j] = Sw[1] then
            begin
              FRes := True;
              Break;
            end;
          end;
          if FRes then
            Writeln(Sw);
        end;
      end;
    end;

    Writeln('Повторить - Enter, выход - любой символ + Enter.');
    Readln(S);
  until S <> '';

end.

Leave a Comment

83 + = 92