ИПР2 часть 1, вариант 11
.docБЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра программного обеспечения информационных технологий
Факультет ФНиДО
Специальность ПОИТ
Лабораторная работа № 2
по дисциплине «Основы алгоритмизации и программирования»
часть 1
Вариант № 11
Выполнила:
Минск 2012
1). Задание
Дана строка символов S, состоящая из латинских букв. Группы символов, разделенные пробелами и не содержащие пробелов внутри себя, будем называть словами. Преобразовать исходную строку в строки S1 и S2:
S1 – Напечатать слова, отличные от последнего слова, если в них есть повторяющиеся буквы.
S2 - Напечатать слова, отличные от последнего слова, удалив из них все последующие вхождения первой буквы.
2). Программа на языке Pascal
Program IPR2;
Uses crt;
Var
S,S1,S2,word,Sposl:string;
i,k1,k2,j,n,n1,n2: integer;
lenW: byte;
Begin
clrscr;
Writeln('Введите предложение S:');
readln(S);
writeln;
S1:='';
S2:='';
{Удалим однобуквенные слова}
For i:=1 to length(S) do
begin
if ((i=1) or (S[i-1]=' ')) and (S[i+1]=' ') then
delete (S,i,1)
else
if (i=length(s)) and (S[i-1]=' ') then
delete (S,i,1)
end;
{Удалим лишние пробелы}
i:=1;
repeat
begin
if copy(S,i,2)=' ' then
delete(S,i,1)
else
inc(i)
end
until i>=length(S);
{Добавим в конец пробел, если его нету}
i:=length(S);
if S[i]=' ' then
delete(S,i,1);
{Находим последнее слово}
i:=length(S);
Sposl:='';
while (i>0) and (S[i]<>' ') do
begin
Sposl:=S[i]+Sposl;
dec(i)
end;
{Находим слова в строке S}
i:=1;
n1:=0;
n2:=0;
S:=S+' ';
while i<length(S) do
begin
word:='';
while S[i]<>' ' do
begin
word:=word+S[i];
inc(i)
end;
i:=i+1;
{Проверим условие, явл-ся ли найденное слово отличным от последнего}
If Word<>Sposl then
begin
inc(n2); {Считаем кол-во слов в строке S2}
lenW:=length(Word);
{Проверим условие, есть ли повторяющиеся буквы}
n:=0;
for k1:=1 to lenW do
for j:=1 to lenW do
begin
if j>k1 then
if copy(Word,k1,1)=copy(Word,j,1) then
n:=n+1
end;
if n>0 then
begin
inc(n1); {Считаем кол-во слов в строке S1}
if S1 <> '' then S1:=S1+' ';
S1:=S1+Word;
end;
{Удалим последующее включение 1-ой буквы}
k2:=2;
while k2<=length(Word) do
begin
if copy(Word,1,1)=copy(Word,k2,1) then
delete(Word,k2,1)
else inc(k2)
end;
if S2 <> '' then S2:=S2+' ';
S2:=S2+Word;
end
end;
if n1>0 then
begin
writeln('Строка 1:');
writeln(S1)
end
else
writeln('Строка S1 является пустой');
if n2>0 then
begin
writeln('Cтрока 2:');
writeln(S2)
end
else
writeln('Строка S2 является пустой');
readln
end.
3). Тестовый набор данных