Консультация № 148407
25.10.2008, 00:41
0.00 руб.
0 4 2
Здравствуйте!Помогите пжл-ста)
Дана непустая последовательность слов из строчных русских букв, которая заканчивается точкой. Напечатать в алфавитном порядке все гласные буквы, которые встречаются больше двух раз.
Спасибо!!!

Обсуждение

давно
Профессор
401888
1232
25.10.2008, 13:13
общий
это ответ
Здравствуйте, Базыр Будаев!
Решение задачи с пояснениями в приложении.

Приложение:
uses crt;
const gl=['а','е','ё','и','о','у','ы','э','ю','я']; {гласные буквы}
dr=['б','в','г','д','ж','з','й','к','л','м','н','п','р','с','т','ф',
'х','ц','ч','ш','щ','ъ','ь','.',' ']; {другие допустимые символы}
var s,s1:string;
i,j,k:integer;
c:char; {переменная для сортировки строки}
begin
clrscr;
repeat {проверяем правильность ввода по условию(точка в конце,
русские маленькие буквы, пробел и точка)}
writeln('Введите последовательность слов из строчных русских букв,в конце точка.');
readln(s);
j:=0;
if pos('.',s)=0 then {если нет точки}
begin
writeln('Не введена точка в конце последовательности. Повторите ввод!');
j:=1;
end
else if pos('.',s)>0 then {если есть точка}
begin
k:=0;
for i:=1 to pos('.',s)do
if (not (s[i] in gl))and (not (s[i] in dr)) then
{если есть недопустимые символы}
begin
writeln('Последовательность введена неверно. Повторите ввод!');
k:=1;
break; {находим первый недопустимый и дальше не ищем}
end;
end;
until (j=0) and (k=0); {если все нормально, продолжаем}
s1:='';
for i:=1 to pos('.',s)-1 do {собираем все гласные в новую строку}
if s[i] in gl then
s1:=s1+s[i];
{сортируем строку по возрастанию, т.е. по алфавиту}
for j:=1 to length(s1)-1 do
for i:=1 to length(s1)-1 do
if s1[j]>s1[j+1] then
begin
c:=s1[j];
s1[j]:=s1[j+1];
s1[j+1]:=c;
end;
for i:=2 to length(s1) do
if (s1[i]=s1[i-1])and(s1[i]<>s1[i+1])
{если символ=предыдущему и неравен следующему, выводим его на экран}
then write(s1[i],' ');
readln
end.
Неизвестный
25.10.2008, 16:36
общий
это ответ
Здравствуйте, Базыр Будаев!
Для решения используем строку последовательности гласных букв в алфовитном порядке.
Примерный код - в приложении.

Приложение:
var
glas, stroka: string;
i, j, kol: integer;
begin
glas:='аеёиоуыэюя';
readln(stroka);
for i:= 1 to length(glas) do
begin
kol:= 0;
for j:= 1 to length(stroka) do
if stroka[j] = glas[i] then kol:= kol + 1;
if kol > 2 then writeln(glas[i], kol:5); {если количество совпадений больше 2 то выводим на экран}
end;
readln;

end.
давно
Профессор
401888
1232
26.10.2008, 06:51
общий
Базыр Будаев. Проверку ввода строки возьмите у меня, а решение у Шичко Игоря, а то я там наворотил много лишнего.
давно
Профессор
401888
1232
26.10.2008, 08:02
общий
Еще уточню. Поскольку по условию точка конец последовательности, а не всего текста, то после точки еще могут быть разные символы, поэтому строку нужно проверять не до конца, а до позиции точки, т.е. нужно заменить
kol:= 0;
for j:= 1 to length(stroka) do
на
kol:= 0;
for j:= 1 to pos('.',stroka) do
Форма ответа