Строки - Pascal ABC (14175)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста с задачей. В произвольном тексте содержащем не более 10 строк в каждой строке не более 80 символов выбрать и напечатать слова по данному образцу *#*#* где * - СОГЛАСНАЯ # - ГЛАСНАЯ) Вот мой код. Не могу сделать цикл.

Решение задачи: «Строки»

textual
Листинг программы
program n3;
const
sogl = ['Й','й','Б','б','В','в','Г','г','Д','д','Ж','ж','З','з','К','к','Л','л','М','м','Н','н','П','п','Р','р','С','с','Т','т','Ф','ф','Х','х','Ч','ч','Ш','ш','Ц','ц','Щ','щ'];
glasn = ['А','а','Е','е','Ё','ё','И','и','О','о','У','у','Ы','ы','Э','э','Ю','ю','Я','я'];
rz=[' ',',','.','?','!'];
n=1;
type strk=string[80];
function maska(s:strk):boolean;
begin
maska:=(length(s)=5)and(s[1] in sogl)and(s[3] in sogl)
and(s[5] in sogl)and(s[2] in glasn)and(s[4] in glasn);
end;
var  fullstr,s,s1: string[80];
     i,j,k,q: integer;
begin
q:=0;
for i:=1 to n do
 begin
   writeln('Введите строку на русском языке до 80 символов:');
   readln(fullstr);
   j:=1;
   while(j<=length(fullstr)) do
   if not(fullstr[j] in rz)and((j=1)or(fullstr[j-1] in rz))then
    begin
     s:='';
     k:=j;
     while(k<=length(fullstr))and not(fullstr[k] in rz) do
      begin
       s:=s+fullstr[k];
       k:=k+1;
      end;
     if maska(s) then
      begin
       write(' ',s);
       q:=1;
      end;
    j:=j+length(s);
   end
  else j:=j+1;
 end;
 if q=0 then write('Нет слов, соответствующих маске');
 end.

Объяснение кода листинга программы

  1. Создается программа n3.
  2. Определяются константы sogl и glasn, которые представляют собой массивы символов, соответствующие буквам русского алфавита.
  3. Определяется переменная n, которая представляет собой количество введенных строк.
  4. Определяется тип strk, который представляет собой строку длиной до 80 символов.
  5. Определяется функция maska, которая принимает на вход строку s и возвращает true, если все символы в строке соответствуют заданной маске, и false в противном случае. Маска задается с помощью условий, которые проверяют, что длина строки равна 5, первый символ является буквой из sogl, третий и пятый символы также являются буквами из sogl, а второй и четвертый символы являются буквами из glasn.
  6. Определяются переменные fullstr, s и s1, которые представляют собой строки, в которые будет заполнена маска.
  7. Определяются переменные i, j, k и q, которые будут использоваться для итерации по строке и подсчета количества заполненных символов.
  8. Запускается цикл for, который обрабатывает каждую строку, введенную пользователем.
  9. Внутри цикла происходит чтение строки из ввода пользователя и сохранение ее в переменной fullstr.
  10. Инициализируется счетчик j=1 и цикл while, который выполняется, пока j меньше или равно длине строки fullstr.
  11. Внутри цикла while происходит проверка каждого символа строки fullstr на принадлежность к маске. Если символ не принадлежит маске, то он пропускается.
  12. Если найден символ, соответствующий маске, то создается новая строка s, заполняемая символами из fullstr, начиная с индекса k.
  13. Если маска соответствует строке s, то выводится пробел и строка s, а счетчик q устанавливается в 1.
  14. После завершения цикла while увеличивается значение счетчика j на длину строки s.
  15. Если после обработки всех строк счетчик q равен 0, то выводится сообщение Нет слов, соответствующих маске.
  16. Завершается программа.

Оцени полезность:

14   голосов , оценка 3.786 из 5
Похожие ответы