Помогите пжлст решить задачку: дан текст на русском языке. Напечатать в обратном алфавитном порядке все согласные буквы, которые входят хотя бы в одно слово, и все гласные, которые входят в каждое слово.
Ozzя
18.05.2007 11:23
Поможет поиск по ключевым словам: "гласные", "согласные"
shutka
18.05.2007 13:34
Тебе надо задать множество согласных: sogl:=['б','в','г'.....и т.д.] {это в теле программы можно сделать так}!!! И в цикле от 1 до length(stroka) каждый символ проверять if stroka[i] in sogl then.....тут вносишь эти согласные в пустое множество!!!
vi-rus
18.05.2007 19:30
Вот сделал, но нашел ошибку : введем для примера "не пришла ". Он должен выдать пустое множество, так как нет гласной, которая входит в каждое слово, но вместо этого выдает гласную "е". Помогите пожалуйста найти ошибку, и может быть это задание можно сделать другим способом ? вот код программы :
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
18.05.2007 20:11
У тебя последнее слово не обрабатывается по очень простой причине: перемножение множеств ты делаешь только тогда, когда очередная буква = пробелу, т.е., когда закончили читать еще одно слово... А когда достигнут конец строки? Пробела-то нет, вот последнее слово и не у дел...
Самый простой (но не совсем правильный) способ исправить -
writeln('Введите текст на русском языке'); readln(text);
{ осторожно! если будет введена длинная строка - на этот пробел может не хватить места... } text := text + ' ';
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.