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

Основы алгоритмизации и программирования

.docx
Скачиваний:
18
Добавлен:
01.04.2014
Размер:
17.98 Кб
Скачать

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

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

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

Факультет ФНиДО

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

Лабораторная работа № 2

по дисциплине «Основы алгоритмизации и программирования»

часть 1

Вариант № 28

Выполнил студент:

группа

Зачетная книжка №

Минск 2012

Задача:

Дана строка символов S, состоящая из латинских букв. Группы символов, разделенные пробелами и не содержащие пробелов внутри себя, будем называть словами. Преобразовать исходную строку в строки S1 и S2 в соответствии с пунктами 1 и 2 (п.1, п.2) заданий № 1 - 30. Если какая-либо из итоговых строк окажется пустой, выводить соответствующее сообщение.

Задание №28

п.1. - Напечатать все слова, отличные от последнего слова. Для каждой согласной буквы указать сколько раз она встречается в полученном предложении. Сообщение об одной и той же букве должно печататься не более одного раза.

program task28_1;

function notglasn(c:char):boolean;

begin

if (c in ['a','e','i','u','o','1','2','3','4','5','6','7','8','9','0',' ']) then

notglasn:=false

else

notglasn:=true;

end;

var s:string;

last,one:string;

j,i,n,k,o:integer;

f,flag:boolean;

count:integer;

c:char;

begin

writeln('vvedite text: ');

readln(s);

k:=length(s);

while (k>0) and (s[k]=' ') do

k:=k-1;

if (k=0) then

begin

writeln('v texte net slov');

readln;

halt;

end;

n:=k;

while (n>0) and (s[n]<>' ') do

n:=n-1;

if (n=0) then

begin

writeln('v text tolko odno slovo');

readln;

halt;

end;

last:=copy(s,n+1,k-n);

writeln('poslednee slovo: ',last);

writeln('slova <> poslodnemu slovu: ');

k:=1;

while (k<n+1) do

begin

while (s[k]=' ') and (k<n+1) do

k:=k+1;

i:=k;

while (s[i]<>' ') and (i<n+1) do

i:=i+1;

one:=copy(s,k,i-k);

if (one<>last) then

writeln(one);

k:=i+1;

end;

writeln('Soglasnie bukvi:');

c:=s[1];

count:=0;

if (notglasn(c)) then

begin

count:=count+1;

for i:=2 to length(s) do

if (s[i]=c) then

count:=count+1;

writeln(c,': ',count);

end;

for i:=2 to length(s) do

begin

if (s[i]<>c) and (notglasn(s[i])) then

begin

count:=1;

for j:=i+1 to length(s) do

if (s[i]=s[j]) then

begin

count:=count+1;

s[j]:=c;

end;

writeln(s[i],': ',count);

end;

end;

readln;

end.

п.2. - Напечатать все слова, отличные от последнего слова, удаляя те слова, которые целиком составлены из вхождений не более чем двух букв.

Пример: AKKA KNOBIKA → KNOBIKA

program task28_1;

function diff(s:string):integer;

var count,i,j:integer;

begin

count:=1;

for i:=2 to length(s) do

if (s[i]<>s[1]) then

begin

count:=count+1;

for j:=i+1 to length(s) do

if (s[j]=s[i]) then

s[j]:=s[1];

end;

diff:=count;

end;

var s:string;

last,one:string;

j,i,n,k,o:integer;

f,flag:boolean;

count:integer;

c:char;

begin

writeln('vvedite text: ');

readln(s);

k:=length(s);

while (k>0) and (s[k]=' ') do

k:=k-1;

if (k=0) then

begin

writeln('v texte net slov');

readln;

halt;

end;

n:=k;

while (n>0) and (s[n]<>' ') do

n:=n-1;

if (n=0) then

begin

writeln('v text tolko odno slovo');

readln;

halt;

end;

last:=copy(s,n+1,k-n);

writeln('poslednee slovo: ',last);

writeln('slova <> poslodnemu slovu i ne bolee 2 bukv: ');

k:=1;

while (k<n+1) do

begin

while (s[k]=' ') and (k<n+1) do

k:=k+1;

i:=k;

while (s[i]<>' ') and (i<n+1) do

i:=i+1;

one:=copy(s,k,i-k);

if (one<>last) and (diff(one)<=2) then

writeln(one);

k:=i+1;

end;

readln;

end.