Консультация № 161181
23.02.2009, 11:57
0.00 руб.
0 1 1
Дана непустая последовательность слов из строчных русских букв; между соседними словами – запятая, за последним словом – точка. Напечатать в алфавитном порядке множества, сформированные согласно

1. Все гласные буквы, которые входят в каждое слово;
2. Все звонкие согласные буквы, которые входят в каждое нечетное слово и не входят ни в одно четное слово.

Программа должна решаться через множества, множество всех звонких согласных: б, в, г, д, ж, з, л, м, н, р;
Первый пункт я решил, а вот второй не могу, прошу помочь.
Желательно, чтобы оба пункта были объединены в одну программу

Приложение:
Program lab5;
uses crt;
type mn= set of char;
const glas=[' ','Ґ','с','Ё','®','г','л','н','о','п'];
var a:string;
i,s:integer;
f:text;
b:mn;
begin
clrscr;
assign(f,'1.txt');
reset(f);
readln(f,a);
s:=length(a);
for i:=1 to s do
begin
write(a[i]:2);
end;
readkey;
i:=0;
b:=[];
repeat
begin
inc(i);
if a[i] in glas then
b:=b+[a[i]];
end;
until a[i]='.';
writeln;
for i:=0 to 255 do
if chr(i) in b then write(chr(i):2);
readln;
end.

Обсуждение

давно
Старший Модератор
31795
6196
23.02.2009, 19:51
общий
это ответ
Здравствуйте, Holden!

В приложении программа выполняющая обе задачи одновременно.
После ввода строки идет контроль правильности ввода т.е. последним символом в строке должна быть точка, если её нет, то она дописывается, если после точки есть ещё символы, то они удаляются.
Котрольная строка использовалась для проверки алгоритма и при работе её нужно убрать : InputString:='бвгджзаеу,джаеи,лмнрае.';
Множество гласных букв постоянно уменьшается остаются только те буквы, которые встретились в уже проверенных словах
SetOne:=SetOne * SetChar; .
Согласные буквы записываются в разные множества зависящие от четности слова и когда будет проверенна вся строка, множество букв четных слов вычитается из множества нечетных.
Вопросы по программе задавайте в мини-форум.

Удачи!

Приложение:
var
SetChet,SetNeChet,SetChar,SetOne,SetTwo:set of char;
WordCount:integer;
InputString:string;
begin
{ставим нужные множества: гласных и согластных}
SetOne:=['а','е','и','о','у','ы','э','ю','я'];{гластные}
SetTwo:=['б','в','г','д','ж','з','л','м','н','р'];{согласные}
{варианты на все случаи жизни:
гласные буквы - а, е, и, о, у, ы, э, ю, я;
звонкие согласные буквы - б, в, г, д, ж, з, л, м, н, р;
глухие согласные буквы - к, п, с, т, ф, х, ц, ч, ш, щ.}
write('Enter string :');readln(InputString);{вводим строку}
if pos('.',InputString)=0
then InputString := InputString + '.'{ставим точку если пользователь забыл}
else while InputString[length(InputString)]<>'.' do
delete(InputString,length(InputString),1);{удаляем все символы после точки, если ввел лишнее}
InputString:='бвгджзаеу,джаеи,лмнрае.';{контрольная строка для проверки- приработе она ненужна}
writeln('Result:',InputString);{выводим строку}
{сброс счетчиков букв и рабочих множеств}
WordCount:=1;{счетчик слов}
SetChet:=[];{множество согласных букв четных слов}
SetNechet:=[];{множество согластных букв нечетных слов}
SetChar:=[];{множество гласных букв в одном слове}
writeln;
While length(InputString)>0 do{}
begin
if (InputString[1]='.') or (InputString[1]=',')then{если точка или запятая - новое слово}
begin
inc(WordCount);{увеличиваем счетчик слов}
SetOne:=SetOne * SetChar;{пересечение множеств, остаются только те буквы, которые есть в обоих множествах}
SetChar:=[];{сбрасываем текущее множество}
end
else
begin
if InputString[1]in SetTwo then{если буква принадлежит множеству согласных букв}
begin
if odd(WordCount){буквы четных и нечентных слов записываем в разные множества}
then SetNechet:=SetNechet+[InputString[1]]
else SetChet:=SetChet+[InputString[1]];
end;
if InputString[1]in SetOne then
SetChar:=SetChar + [InputString[1]];{если буква принадлежит множеству гласных, записываем текущего слова}
end;
delete(InputString,1,1);{удаляем первый символ строки}
end;
SetNechet:=SetNechet-SetChet;{вычитаем из множества согласных букв нечетных слов, буквы которые встретились в четных словах}
writeln('Count:',WordCount);
write('One :');{выводим результат первой задачи}
for WordCount:=0 to 255 do
if chr(WordCount)in SetOne then write(chr(WordCount):2);
writeln;
write('Two :');{выводим результат второй задачи}
for WordCount:=0 to 255 do
if chr(WordCount)in SetNechet then write(chr(WordCount):2);
readln;
end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа