
Ч1 ИПР2 В5 / ИПР2v2
.docxБЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра программного обеспечения информационных технологий
Факультет ФИНО
Специальность ПОИТ
Индивидуальная практическая работа № 2
по дисциплине «Основы алгоритмизации и программирования»
часть 1
Вариант № 5
Выполнил студент: Бордон Е.С.
группа 991051
Зачетная книжка № 99105004
Минск 2020
Дана строка символов S, состоящая из латинских букв. Группы символов, разделенные пробелами и не содержащие пробелов внутри себя, будем называть словами. Преобразовать исходную строку в строки S1 и S2 в соответствии с пунктами 1 и 2 (п.1, п.2) заданий № 1 - 30. Если какая-либо из итоговых строк окажется пустой, выводить соответствующее сообщение
Задание №5
п.1. - Напечатать все слова, отличные от последнего слова, в которые последняя буква входит еще раз.
п.2. - Напечатать все слова, отличные от последнего слова, преобразовав их таким образом: после каждой буквы q добавить букву u.
Листинг:
program l2v2;
uses crt;
var
s, itog1, itog2, itog3, e, posl: string;
i, mp, z, x: integer;
b, b1, b2 :boolean;
BEGIN ClrScr;
{ввод строки}
write('Введите текст:');readln(s);
{удаление лишних пробелов в конце строки}
for i:=(length(s)) downto 1 do
if s[i]=' ' then delete(s, i,1)
else break;
{поиск последнего слова строки}
for i:=length(s) downto 1 do
if s[i]=' ' then
begin
posl:=copy(s,i+1,(length(s)-i)); {копируется последнее слово до пробела}
mp:=i; {место последнего пробела}
break;
end;
{Преобразовываем строку для п.1. Находим слова в строке, сравниваем с последним, проверяем на вхождение последней буквы}
e:=''; {e-вспомогательная строка для формирования слова }
for i:=1 to mp do {цикл выполняется с первого символа начальной строки до пробела перед последним словом}
begin
if (s[i] <>' ') then e:=e+s[i] {если проверяемый символ не является пробелом, добавляем его в слово}
else begin
b:=e<>posl; {сравниваем найденное слово с последним}
b1:=pos(e[length(e)], e) < length(e); {проверка вхождения последней буквы}
if b=true and b1=true then {если оба условия верны}
begin e:=concat(e, ' '); itog1:= concat(itog1, e); delete(e, 1, 255);end {добавляем слово в итоговую строку 'itog1' и стираем переменную е}
else delete(e, 1, 255); {иначе стираем переменную (слова без вхождения посл. буквы не выводятся)}
end;
end;
{если итоговая переменная не пуста, выводим ее значение, иначе выводим сообщение}
if itog1<>('') then
writeln('Строка 1: ',itog1) else writeln('Строка 1 пуста');
{выбираем слова для второй строки в соответствии с п.2.}
e:=''; {e-вспомогательная строка для формирования слова}
for z:=1 to mp do {цикл выполняется с первого символа начальной строки до пробела перед последним словом}
begin if (s[z] <>' ') then e:=e+s[z] else {если проверяемый символ не является пробелом, добавляем его в слово}
begin
if e=posl then delete(e, 1, 255); {если сформированное слово равно последнему, удаляем его}
b2:=e<>''; {слово не пустое}
b:=e<>posl; {слово не равно последнему}
b1:=pos('q', e) > 0; {наличие буквы q в слове}
if b=true and b1=true then {если есть буква q и слово не равно последнему}
begin
x:=0; {вспомогательная перем. для нахождения длины слова с учетом добавления буквы u после q}
for i:=1 to length(e) do
begin if e[i]='q' then x:=x+1;end;
x:=x+length(e); {увеличиваем длину слова на количество найденных букв q}
{пишем u после каждой буквы q}
for i:=1 to x do
begin if e[i]='q' then insert('u', e, i+1); end;
{записываем полученное слово в переменную itog2 и очищаем переменную со словом е}
itog2:=concat(e, '');delete(e, 1, 255);
end;
{если слово не равно последнему и не пусто, оставляем его в той же форме и добавляем в конце пробел}
if b =true and b2=true then e:=concat(e, ' ') else continue;
{формируем итоговую строку, стираем переменные e, itog2; для b, b1, b2 устанавливаем значение false }
itog3:=concat(itog3, itog2, e); delete(e, 1, 255); delete(itog2, 1, 255);b:=false;b1:=false;b2:=false;
end;
end;
{если итоговое количество символов во второй полученной строке более 0, выводим ее значение, иначе выводим сообщение}
if length(itog3)>0 then writeln('Строка 2: ', itog3) else writeln('Строка 2 пуста');
readln;
END.
Тестовый набор данных:
queq qiwi very good day that queq
Схема алгоритма методом Насси-Шнейддермана: