Основы алгоритмизации и программирования
.docx
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра программного обеспечения информационных технологий
Факультет ФНиДО
Специальность ПОИТ
Лабораторная работа № 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.