Сформировать новую строку, в которую включить слова, состоящие только из латинских букв - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Есть задача: Задан текст, состоящий из слов, записанных через пробелы или запятые. Длина текста не больше 255 символов. В тексте могут быть использованы любые символы. Словом считать последовательность символов, не содержащую пробел. Необходимо введенный текст вывести на экран до и после его преобразования. Сформировать новую строку, в которую включить слова, состоящие только из латинских букв и не содержащие букв 'q', 'r' и 'u'. Найти два первых цифровых слова и найти разность их кубов. Помогите пожалуйста довести код до ума, я как мог пытался, но смотрится кривовато и я теперь не знаю как сделать фильтры, что бы только латинские буквы были(

Решение задачи: «Сформировать новую строку, в которую включить слова, состоящие только из латинских букв»

textual
Листинг программы
program Project1;
 
const
  {Множество разделителей слов.}
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
  {Множество букв ланитнского алфавита.}
  Da = ['A'..'Z', 'a'..'z'];
  {Множество дейсятичных цифр.}
  Dd = ['0'..'9'];
  {Множество запрещённых символов.}
  Dm = ['Q', 'q', 'R', 'r', 'U', 'u'];
var
  S, SRes : String;
  Dw : set of Char;
  i, Len, LenW, Cnt, Code : Integer;
  N, NRes : Extended;
begin
  repeat
    Writeln('----------');
    Writeln('Задайте строку:');
    Readln(S);
 
    {Решение.}
    Len := Length(S);
    LenW := 0;  {Длина текущего слова.}
    Dw := [];   {Множество символов из которых состоит текущее слово.}
    SRes := ''; {Результирующая строка.}
    Cnt := 0;   {Счётчик цифровых слов.}
    NRes := 0;  {Разность кубов двух первых цифровых слов.}
    for i := 1 to Len do {Перебор всех символов строки слева-направо.}
      {Если символ не является разделителем, значит он принадлежит слову.}
      if not (S[i] in D) then
      begin
        Inc(LenW);         {Учитываем текущий символ в длине слова.}
        Dw := Dw + [S[i]]; {Добавляем символ во множество букв слова.}
        if (i = Len) or (S[i + 1] in D) then {Если обнаружен конец слова.}
        begin
          {Если слово состоит только из букв латиницы (Dw * Da = Dw) и не содержит
          запрещённых символов (Dw * Dm = []).}
          if (Dw * Da = Dw) and (Dw * Dm = []) then
          begin
            if SRes <> '' then
              SRes := SRes + ', '; {Разделяем слова запятыми.}
            SRes := SRes + Copy(S, i - LenW + 1, LenW); {Добавляем найденное слово.}
          end;
          {Если ранее было найдено менее двух цифровых слов и текущее слово является цифровым.}
          if (Cnt < 2) and (Dw * Dd = Dw) then
          begin
            Inc(Cnt); {Счётчик цифровых слов.}
            Val(Copy(S, i - LenW + 1, LenW), N, Code); {Получаем числовое значение текущего цифрового слова.}
            if Cnt = 1 then
              NRes := N * N * N         {Куб текущего (первого) цифрового слова.}
            else
              NRes := NRes - N * N * N; {Разность кубов первого и текущего (второго) цифрового слова.}
          end;
          LenW := 0; {Обнуление длины текущего слова.}
          Dw := [];  {Обнуление множества букв текущего слова.}
        end;
      end;
 
    {Ответ.}
    Writeln('Результирующая строка:');
    Writeln(SRes);
    if Cnt < 2 then
      Writeln('В строке менее двух цифровых слов. Расчёт разности кубов отменён.')
    else
      Writeln('Разность кубов двух первых цифровых слов: ', NRes:0:0);
 
    Write('Повторить - Enter. Выход - любой символ + Enter. ');
    Readln(S);
  until S <> '';
end.

Объяснение кода листинга программы

  1. В программе объявлены переменные S, SRes, Dw, Len, LenW, Cnt, Code, N, NRes.
  2. В строке ввода задается строка.
  3. Программа проверяет, состоит ли строка только из латинских букв. Если да, то формируется новая строка, включающая слова, состоящие только из латинских букв.
  4. Для каждого символа строки программа проверяет, является ли он разделителем или буквой. Если символ является буквой, то он добавляется в множество Dw.
  5. Если все символы строки являются буквами, то программа проверяет, состоит ли слово только из букв латиницы и не содержит запрещенных символов. Если это так, то программа добавляет слово в результирующую строку SRes и увеличивает счетчик Cnt.
  6. Если в строке меньше двух цифровых слов, программа выводит сообщение об этом и отменяет расчет разности кубов.
  7. Если в строке есть два или более цифровых слов, программа вычисляет разность кубов первых двух цифровых слов и выводит ее.
  8. Программа повторяет цикл до тех пор, пока строка не станет пустой.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы