Строки - 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.
Объяснение кода листинга программы
- Создается программа n3.
- Определяются константы sogl и glasn, которые представляют собой массивы символов, соответствующие буквам русского алфавита.
- Определяется переменная n, которая представляет собой количество введенных строк.
- Определяется тип strk, который представляет собой строку длиной до 80 символов.
- Определяется функция maska, которая принимает на вход строку s и возвращает true, если все символы в строке соответствуют заданной маске, и false в противном случае. Маска задается с помощью условий, которые проверяют, что длина строки равна 5, первый символ является буквой из sogl, третий и пятый символы также являются буквами из sogl, а второй и четвертый символы являются буквами из glasn.
- Определяются переменные fullstr, s и s1, которые представляют собой строки, в которые будет заполнена маска.
- Определяются переменные i, j, k и q, которые будут использоваться для итерации по строке и подсчета количества заполненных символов.
- Запускается цикл for, который обрабатывает каждую строку, введенную пользователем.
- Внутри цикла происходит чтение строки из ввода пользователя и сохранение ее в переменной fullstr.
- Инициализируется счетчик j=1 и цикл while, который выполняется, пока j меньше или равно длине строки fullstr.
- Внутри цикла while происходит проверка каждого символа строки fullstr на принадлежность к маске. Если символ не принадлежит маске, то он пропускается.
- Если найден символ, соответствующий маске, то создается новая строка s, заполняемая символами из fullstr, начиная с индекса k.
- Если маска соответствует строке s, то выводится пробел и строка s, а счетчик q устанавливается в 1.
- После завершения цикла while увеличивается значение счетчика j на длину строки s.
- Если после обработки всех строк счетчик q равен 0, то выводится сообщение
Нет слов, соответствующих маске
. - Завершается программа.