Написать программу на Паскале: Удалить все слова, начинающиеся и заканчивающиеся на одну и ту же букву. (написать комментарий(что означает каждая переменная))
Answers & Comments
srzontmp
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. // конец программы
строка: Это озеро около заповедника. новая строка: Это заповедника.
строка: Около этого заповедника находится озеро. новая строка: этого заповедника находится.
строка: озеро около заповедника новая строка: заповедника
1 votes Thanks 2
a12345а
В строке "until >length(s); // если номер очередного символа строки больше " требует выражение.
a12345а
В строке "if s[i] = ' ' then" ошибка времени выполнения: Индекс находился вне границ массива
srzontmp
Приведите пример входной строки, где ошибка времени выполнения.
srzontmp
В строке "until >length(s)", естественно, должно быть until i>length(s);
srzontmp
Вы хотели комментарии, Вы их получили, теперь убирайте их все.
Answers & Comments
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. // конец программы
строка: Это озеро около заповедника.
новая строка: Это заповедника.
строка: Около этого заповедника находится озеро.
новая строка: этого заповедника находится.
строка: озеро около заповедника
новая строка: заповедника