Написать программу ** Паскале: Удалить все слова, начинающиеся и заканчивающиеся ** одну...

0 голосов
205 просмотров

Написать программу на Паскале: Удалить все слова, начинающиеся и заканчивающиеся на одну и ту же букву. (написать комментарий(что означает каждая переменная))


Информатика (228 баллов) | 205 просмотров
Дан 1 ответ
0 голосов

Var s: string;  // строка текста
    i,lf: integer;  // lf - номер первого символа отдельного слова в строке
                    // i - переменная цикла, для просмотра строки
begin
  write('строка: ');  readln(s);  // считывание слова
  i:=1; lf:=1;  // i:=1; - текущий символ слова - первый
                // lf:=1;  - lf указывает на первый символ слова   
  repeat       // цикл по строке 
    if s[i]=' ' then   // если очередной символ строки - пробел, то
    begin              // начало блока операторов
      if UpperCase(s[i-1])=UpperCase(s[lf]) then  // если последний символ

текущего
                            // слова равен первому символу слова без учета регистра,

то
      begin                 // начало блока операторов 
        delete(s,lf,i-lf+1);  // удаляем слово вместе с пробелом справа
        i:=lf;                // i:=lf;  - переменная i указывает на следующее слово
      end                     // конец блока операторов  
      else lf:=i+1;           // иначе, если первый символ слова не равен
                              // последнему символу слова, устанавливаем lf на
                              // первый символ следующего слова 
    end;                      // конец блока по условию, что очередной символ - пробел

    i:=i+1;                   // переходим к следующему символу в строке
  until  >length(s);          // если номер очередного символа строки больше
длины
                              // строки, то выход из цикла по строке
                              // если в последнем слове текста есть совпадения
                              // первого и последнего символа
  if s[length(s)] in ['.','?','!'] then   // если текст заканчивается одним из знаков
.?!
  
     if s[lf]=s[length(s)-1] then delete(s,lf-1,length(s)-lf+1) // сравниваем с
предпоследним
                              // если равны, то удаляем последнее слово  
     else                     // иначе ничего не делаем   
  else if s[lf]=s[length(s)] then delete(s,lf-1,length(s)-lf+2);   // если последний
                              // символ не .?!, то сравниваем первый символ
последнего
                              // слова с последним символом текста, если равны,
                              // то удаляем последнее слово
  writeln('новая строка: ',s);  // выводим новую строку на экран
end.     // конец программы

строка: Это озеро около заповедника.
новая строка: Это заповедника.

строка: Около этого заповедника находится озеро.
новая строка: этого заповедника находится.

строка: озеро около заповедника
новая строка: заповедника

(9.7k баллов)
0

В строке "until >length(s); // если номер очередного символа строки больше " требует выражение.

0

В строке "if s[i] = ' ' then" ошибка времени выполнения: Индекс находился вне границ массива

0

Приведите пример входной строки, где ошибка времени выполнения.

0

В строке "until >length(s)", естественно, должно быть until i>length(s);

0

Вы хотели комментарии, Вы их получили, теперь убирайте их все.

0

Заработало! Спасибо большое!

0

Пожалуйста.