Программа: вывести все слова начинающиеся с согласных букв латнского алфавита

Так же ищут: с согласных букв, паскаль, алгоритм


Задача:
Дан текст. Вывести все слова, начинающиеся с согласных букв латинского алфавита.

Задача не сложная. Опишем процесс ее решения с помощью turbo pascal. Для начала нам нужен механизм определения является ли символ согласной буквой. Оптимальным вариантом, учитывая инструмент реализации (pascal) будет использование множества. В множестве мы перечислим все латинские буквы являющиеся согласными.
Так как пользуемся мы «голым» паскалем, без дополнительных модулей – перечисляем как прописные строчные, так и заглавные.  Конечно есть метод для преобразования строчной буквы в заглавную путем изменения кода символа на определенное число, но это сделает код не наглядным. Итак, у нас есть множество согласных и теперь проверить принадлежность символа этому множеству легко, с помощью оператора in.

Теперь собственно к основному алгоритму. Проходим по строке (тексту) циклом while пока не дойдем до конца. В цикле проверяем следующее условие: если символ первый в тексте или предыдущий символ был пробелом – значит текущий символ – начало слова; если символ начало слова и принадлежит множеству согласных – значит мы нашли начало нужного нам слова.  Когда мы нашли слово, нам нужно его вывести на экран. Делать это будем посимвольно во втором цикле пока не дойдем до знака препинания, пробела или конца строки. Проверку на пробел или знак препинания производим по тому же принципу вхождения во множество (множество символов препинания + пробел). Обратите внимание , что в обоих циклах мы работаем с одной переменной – счетчиком.

Алгоритм решения на turbo pascal 7:


program soglbukva;
var i:integer;
s:string;
const
sogl=['b','c','d','f','g','h','k','j','l','m',
      'n','p','r','q','s','t','v','w', 'x', 'z',
      'B','C','D','F','G','H','K','J','L','M','N',
      'P','R','Q','S','T','V','W', 'X', 'Z'];
begin
write ('Vvedite predlohenie: ');
readln (s);
i:=1;
while i<=length (s) do
      begin
           if ((i=1) or (s[i-1]=' ')) and (s[i] in sogl) then
           begin
              while not ((s[i] in ['.',',',';','!','?',':',' '])) and (i<=length (s)) do
                    begin
                         write (s[i]);
                         i:=i+1;
                    end;
              writeln;
           end;
           i:=i+1;
      end;
readln;
end.

Блок-схема:

Блок-схема вывода слов с согласной

Блок-схема вывода слов с согласной

Блок-схема создана с помощью редактора http://www.gliffy.com

Метки:

Комментарии запрещены.