Добавил:
БГУИР ПОИТ Дистанционное Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ч1 ИПР2 В5 / ИПР2v2

.docx
Скачиваний:
1
Добавлен:
27.09.2021
Размер:
475.78 Кб
Скачать

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Кафедра программного обеспечения информационных технологий

Факультет ФИНО

Специальность ПОИТ

Индивидуальная практическая работа № 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

Схема алгоритма методом Насси-Шнейддермана:

Соседние файлы в папке Ч1 ИПР2 В5