Помощь - Поиск - Пользователи - Календарь
Полная версия: Множества. Русский текст.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
vi-rus
Помогите пжлст решить задачку: дан текст на русском языке. Напечатать в обратном алфавитном порядке все согласные буквы, которые входят хотя бы в одно слово, и все гласные, которые входят в каждое слово.
Ozzя
Поможет поиск по ключевым словам: "гласные", "согласные"
shutka
Тебе надо задать множество согласных: sogl:=['б','в','г'.....и т.д.] {это в теле программы можно сделать так}!!!
И в цикле от 1 до length(stroka) каждый символ проверять if stroka[i] in sogl then.....тут вносишь эти согласные в пустое множество!!!
vi-rus
Вот сделал, но нашел ошибку : введем для примера "не пришла ". Он должен выдать пустое множество, так как нет гласной, которая входит в каждое слово, но вместо этого выдает гласную "е". Помогите пожалуйста найти ошибку, и может быть это задание можно сделать другим способом ?
вот код программы :



uses crt;
const glas: set of char= ['а','е', 'и', 'о', 'у', 'ы' ,'э' ,'ю' ,'я'];
soglas =['б', 'в', 'г', 'д','ж' ,'з' ,'к', 'л', 'м', 'н', 'п', 'р', 'с','т', 'ф', 'ч', 'ц', 'ч', 'щ' ];
word_ch: set of char = [];
var text2,text: string;
s,i,j,k:byte;
in_all,found,found2: set of char;
mn2,z,gl,sogl: char;


begin
clrscr;
textcolor(15);
in_all:=glas;
writeln('Введите текст на русском языке');
readln(text);
text2:=text;
k:=length(text);
for i:=1 to k do
if text[i] in glas then found:=found+[text[i]] else
if text[i] in soglas then found2:=found2+[text[i]];

write('Все гласные, которые входят в каждое слово : ');
textcolor(10);
for i:=1 to k do
begin
if text[i] in [' '] then
begin
in_all:=in_all*word_ch;
word_ch:=[];
end
else
if text[i] in glas then word_ch:=word_ch+[text[i]];
end;
for i:=1 to k do
if text[i] in in_all then write (text[i]:3);



textcolor(15);
writeln;
write('Все согласные, которые входят хотя бы в одно слово : ');
writeln;
textcolor(12);
for sogl:= 'я' downto 'а' do if sogl in found2 then write(' ',sogl,'');
textcolor(15);

readln;



end.


volvo
У тебя последнее слово не обрабатывается по очень простой причине: перемножение множеств ты делаешь только тогда, когда очередная буква = пробелу, т.е., когда закончили читать еще одно слово... А когда достигнут конец строки? Пробела-то нет, вот последнее слово и не у дел...

Самый простой (но не совсем правильный) способ исправить -
writeln('Введите текст на русском языке');
readln(text);

{
осторожно! если будет введена длинная строка -
на этот пробел может не хватить места...
}
text := text + ' ';
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.