Вот код этой программы:
| Код | ОТДЕЛ Разбор+; ИСПОЛЬЗУЕТ АБВ, Знак ИЗ "...\Отделы\Иное\", Вывод ИЗ "...\Отделы\Обмен\", Параметр ИЗ "...\Отделы\Обмен\";
ПЕР Слово: РЯД 30 ИЗ ЗНАК; Букв, Звуков: УЗКЦЕЛ;
ЗАДАЧА ВывестиЗвук(Звук: ЗНАК; Ударный, Мягкий: КЛЮЧ); ПЕР МинЦепь: ЦЕПЬ[1]; УКАЗ МинЦепь[0] := Звук; Вывод.Цепь(МинЦепь); ЕСЛИ Мягкий ТО Вывод.Цепь("'") КОН КОН ВывестиЗвук;
ЗАДАЧА Строка(Буква, Звук: ЗНАК; Гласный, Ударный, Мягкий, Глухой, Непарный: КЛЮЧ; Пара: ЗНАК); ПЕР МинЦепь: ЦЕПЬ[1]; УКАЗ МинЦепь[0] := Буква; ЕСЛИ Гласный ТО Вывод.Цепь(МинЦепь); МинЦепь[0] := Звук; Вывод.Цепь(" ["); Вывод.Цепь(МинЦепь); ЕСЛИ Ударный ТО Вывод.Цепь("`] - гласный, ударный.^") ИНАЧЕ Вывод.Цепь("] - гласный.^") КОН ИНАЧЕ Вывод.Цепь(МинЦепь); Вывод.Цепь(" ["); МинЦепь[0] := Звук; Вывод.Цепь(МинЦепь); ЕСЛИ Мягкий ТО Вывод.Цепь("'] - согласный, мягкий, ") ИНАЧЕ Вывод.Цепь("] - согласный, твёрдый, ") КОН; ЕСЛИ Глухой ТО Вывод.Цепь("глухой, ") ИНАЧЕ Вывод.Цепь("звонкий, ") КОН; ЕСЛИ Непарный ТО Вывод.Цепь("непарный.^") ИНАЧЕ Вывод.Цепь("парный ("); Вывод.Цепь(МинЦепь); Вывод.Цепь("/"); МинЦепь[0] := Пара; Вывод.Цепь(МинЦепь); Вывод.Цепь(").^") КОН КОН КОН Строка;
ЗАДАЧА Пустая(Буква: ЗНАК); ПЕР МинЦепь: ЦЕПЬ[1]; УКАЗ МинЦепь[0] := Буква; Вывод.Цепь(МинЦепь); Вывод.Цепь(" [-]^"); КОН Пустая;
ЗАДАЧА ОпределитьЗвук(ПредБуква, Буква, СледБуква: ЗНАК); УКАЗ ЕСЛИ АБВ.Гласный В АБВ.Азбука[АБВ.Номер(Буква)] ТО ЕСЛИ НЕ (АБВ.Йотированный В АБВ.Азбука[АБВ.Номер(Буква)]) ТО ЕСЛИ ПредБуква # 0X ТО ЕСЛИ (АБВ.Номер(Буква) = АБВ.Номер("И")) И (АБВ.ВсегдаТвёрдый В АБВ.Азбука[АБВ.Номер(ПредБуква)]) ТО ВывестиЗвук("Ы", ОТКЛ, ОТКЛ); УВЕЛИЧИТЬ(Звуков) ИНАЧЕ ВывестиЗвук(Буква, ОТКЛ, ОТКЛ); УВЕЛИЧИТЬ(Звуков) КОН ИНАЧЕ ВывестиЗвук(Буква, ОТКЛ, ОТКЛ); УВЕЛИЧИТЬ(Звуков) КОН ИНАЧЕ ЕСЛИ ПредБуква # 0X ТО ЕСЛИ АБВ.Согласный В АБВ.Азбука[АБВ.Номер(ПредБуква)] ТО ВывестиЗвук(АБВ.Алфавит[АБВ.Нейотированный(АБВ.Номер(Буква))], ОТКЛ, ОТКЛ); УВЕЛИЧИТЬ(Звуков) ИНАЧЕ ВывестиЗвук("Й", ОТКЛ, ВКЛ); ВывестиЗвук(АБВ.Алфавит[АБВ.Нейотированный(АБВ.Номер(Буква))], ОТКЛ, ОТКЛ); УВЕЛИЧИТЬ(Звуков, 2) КОН ИНАЧЕ ВывестиЗвук("Й", ОТКЛ, ВКЛ); ВывестиЗвук(АБВ.Алфавит[АБВ.Нейотированный(АБВ.Номер(Буква))], ОТКЛ, ОТКЛ); УВЕЛИЧИТЬ(Звуков, 2) КОН КОН АЕСЛИ АБВ.Согласный В АБВ.Азбука[АБВ.Номер(Буква)] ТО ЕСЛИ АБВ.ВсегдаТвёрдый В АБВ.Азбука[АБВ.Номер(Буква)] ТО ВывестиЗвук(Буква, ОТКЛ, ОТКЛ); УВЕЛИЧИТЬ(Звуков) АЕСЛИ АБВ.ВсегдаМягкий В АБВ.Азбука[АБВ.Номер(Буква)] ТО ВывестиЗвук(Буква, ОТКЛ, ВКЛ); УВЕЛИЧИТЬ(Звуков) ИНАЧЕ ЕСЛИ СледБуква # 0X ТО ЕСЛИ (АБВ.Йотированный В АБВ.Азбука[АБВ.Номер(СледБуква)]) ИЛИ (АБВ.Номер(СледБуква) = АБВ.Номер("Ь")) ИЛИ (АБВ.НейотирСмягчающий В АБВ.Азбука[АБВ.Номер(СледБуква)]) ТО ВывестиЗвук(Буква, ОТКЛ, ВКЛ); УВЕЛИЧИТЬ(Звуков) ИНАЧЕ ВывестиЗвук(Буква, ОТКЛ, ОТКЛ); УВЕЛИЧИТЬ(Звуков) КОН ИНАЧЕ ВывестиЗвук(Буква, ОТКЛ, ОТКЛ); УВЕЛИЧИТЬ(Звуков) КОН КОН КОН; УВЕЛИЧИТЬ(Букв) КОН ОпределитьЗвук;
ЗАДАЧА Определить(ПредБуква, Буква, СледБуква: ЗНАК); УКАЗ ЕСЛИ АБВ.Гласный В АБВ.Азбука[АБВ.Номер(Буква)] ТО ЕСЛИ НЕ (АБВ.Йотированный В АБВ.Азбука[АБВ.Номер(Буква)]) ТО ЕСЛИ ПредБуква # 0X ТО ЕСЛИ (АБВ.Номер(Буква) = АБВ.Номер("И")) И (АБВ.ВсегдаТвёрдый В АБВ.Азбука[АБВ.Номер(ПредБуква)]) ТО Строка(Буква, "Ы", ВКЛ, ОТКЛ, ОТКЛ, ОТКЛ, ОТКЛ, 0X) ИНАЧЕ Строка(Буква, Буква, ВКЛ, ОТКЛ, ОТКЛ, ОТКЛ, ОТКЛ, 0X) КОН ИНАЧЕ Строка(Буква, Буква, ВКЛ, ОТКЛ, ОТКЛ, ОТКЛ, ОТКЛ, 0X) КОН ИНАЧЕ ЕСЛИ ПредБуква # 0X ТО ЕСЛИ АБВ.Согласный В АБВ.Азбука[АБВ.Номер(ПредБуква)] ТО Строка(Буква, АБВ.Алфавит[АБВ.Нейотированный(АБВ.Номер(Буква))], ВКЛ, ОТКЛ, ОТКЛ, ОТКЛ, ОТКЛ, 0X) ИНАЧЕ Строка(Буква, "Й", ОТКЛ, ОТКЛ, ВКЛ, ОТКЛ, ВКЛ, 0X); Строка(" ", АБВ.Алфавит[АБВ.Нейотированный(АБВ.Номер(Буква))], ВКЛ, ОТКЛ, ОТКЛ, ОТКЛ, ОТКЛ, 0X) КОН ИНАЧЕ Строка(Буква, "Й", ОТКЛ, ОТКЛ, ВКЛ, ОТКЛ, ВКЛ, 0X); Строка(" ", АБВ.Алфавит[АБВ.Нейотированный(АБВ.Номер(Буква))], ВКЛ, ОТКЛ, ОТКЛ, ОТКЛ, ОТКЛ, 0X) КОН КОН АЕСЛИ АБВ.Согласный В АБВ.Азбука[АБВ.Номер(Буква)] ТО ЕСЛИ АБВ.ВсегдаТвёрдый В АБВ.Азбука[АБВ.Номер(Буква)] ТО ЕСЛИ АБВ.Непарный В АБВ.Азбука[АБВ.Номер(Буква)] ТО Строка(Буква, Буква, ОТКЛ, ОТКЛ, ОТКЛ, АБВ.Глухой В АБВ.Азбука[АБВ.Номер(Буква)], ВКЛ, 0X) ИНАЧЕ Строка(Буква, Буква, ОТКЛ, ОТКЛ, ОТКЛ, АБВ.Глухой В АБВ.Азбука[АБВ.Номер(Буква)], ОТКЛ, АБВ.Алфавит[АБВ.Пара(АБВ.Номер(Буква))]) КОН АЕСЛИ АБВ.ВсегдаМягкий В АБВ.Азбука[АБВ.Номер(Буква)] ТО ЕСЛИ АБВ.Непарный В АБВ.Азбука[АБВ.Номер(Буква)] ТО Строка(Буква, Буква, ОТКЛ, ОТКЛ, ВКЛ, АБВ.Глухой В АБВ.Азбука[АБВ.Номер(Буква)], ВКЛ, 0X) ИНАЧЕ Строка(Буква, Буква, ОТКЛ, ОТКЛ, ВКЛ, АБВ.Глухой В АБВ.Азбука[АБВ.Номер(Буква)], ОТКЛ, АБВ.Алфавит[АБВ.Пара(АБВ.Номер(Буква))]) КОН ИНАЧЕ ЕСЛИ СледБуква # 0X ТО ЕСЛИ (АБВ.Йотированный В АБВ.Азбука[АБВ.Номер(СледБуква)]) ИЛИ (АБВ.Номер(СледБуква) = АБВ.Номер("Ь")) ИЛИ (АБВ.НейотирСмягчающий В АБВ.Азбука[АБВ.Номер(СледБуква)]) ТО ЕСЛИ АБВ.Непарный В АБВ.Азбука[АБВ.Номер(Буква)] ТО Строка(Буква, Буква, ОТКЛ, ОТКЛ, ВКЛ, АБВ.Глухой В АБВ.Азбука[АБВ.Номер(Буква)], ВКЛ, 0X) ИНАЧЕ Строка(Буква, Буква, ОТКЛ, ОТКЛ, ВКЛ, АБВ.Глухой В АБВ.Азбука[АБВ.Номер(Буква)], ОТКЛ, АБВ.Алфавит[АБВ.Пара(АБВ.Номер(Буква))]) КОН ИНАЧЕ ЕСЛИ АБВ.Непарный В АБВ.Азбука[АБВ.Номер(Буква)] ТО Строка(Буква, Буква, ОТКЛ, ОТКЛ, ОТКЛ, АБВ.Глухой В АБВ.Азбука[АБВ.Номер(Буква)], ВКЛ, 0X) ИНАЧЕ Строка(Буква, Буква, ОТКЛ, ОТКЛ, ОТКЛ, АБВ.Глухой В АБВ.Азбука[АБВ.Номер(Буква)], ОТКЛ, АБВ.Алфавит[АБВ.Пара(АБВ.Номер(Буква))]) КОН КОН ИНАЧЕ ЕСЛИ АБВ.Непарный В АБВ.Азбука[АБВ.Номер(Буква)] ТО Строка(Буква, Буква, ОТКЛ, ОТКЛ, ОТКЛ, АБВ.Глухой В АБВ.Азбука[АБВ.Номер(Буква)], ВКЛ, 0X) ИНАЧЕ Строка(Буква, Буква, ОТКЛ, ОТКЛ, ОТКЛ, АБВ.Глухой В АБВ.Азбука[АБВ.Номер(Буква)], ОТКЛ, АБВ.Алфавит[АБВ.Пара(АБВ.Номер(Буква))]) КОН КОН КОН ИНАЧЕ Пустая(Буква) КОН КОН Определить;
ЗАДАЧА Верхушка; ПЕР Счётчик: УЗКЦЕЛ; УКАЗ Вывод.Цепь(Слово); Вывод.Цепь(" - ["); ОпределитьЗвук(0X, Знак.ВЗагл(Слово[0]), Знак.ВЗагл(Слово[1])); ОТ Счётчик := 1 ДО ДЛИНА(Слово)-2 ВЫП ОпределитьЗвук(Знак.ВЗагл(Слово[Счётчик-1]), Знак.ВЗагл(Слово[Счётчик]), Знак.ВЗагл(Слово[Счётчик+1])) КОН; ОпределитьЗвук(Знак.ВЗагл(Слово[ДЛИНА(Слово)-2]), Знак.ВЗагл(Слово[ДЛИНА(Слово)-1]), 0X); Вывод.Цепь("];^") КОН Верхушка;
ЗАДАЧА Середина; ПЕР Счётчик: УЗКЦЕЛ; УКАЗ Определить(0X, Знак.ВЗагл(Слово[0]), Знак.ВЗагл(Слово[1])); ОТ Счётчик := 1 ДО ДЛИНА(Слово)-2 ВЫП Определить(Знак.ВЗагл(Слово[Счётчик-1]), Знак.ВЗагл(Слово[Счётчик]), Знак.ВЗагл(Слово[Счётчик+1])) КОН; Определить(Знак.ВЗагл(Слово[ДЛИНА(Слово)-2]), Знак.ВЗагл(Слово[ДЛИНА(Слово)-1]), 0X) КОН Середина;
ЗАДАЧА СклонениеЧ(Число: УЗКЦЕЛ; сл1-, сл2-, сл3-: РЯД ИЗ ЗНАК); УКАЗ Вывод.ЧЦел("%d ", Число, 0, 0, 0); ЕСЛИ (Число ОСТАТОК 100 >= 5) И (Число ОСТАТОК 100 <= 20) ТО Вывод.Цепь(сл3) ИНАЧЕ ЕСЛИ Число ОСТАТОК 10 = 1 ТО Вывод.Цепь(сл1) АЕСЛИ (Число ОСТАТОК 10 >= 2) И (Число ОСТАТОК 10 <= 4) ТО Вывод.Цепь(сл2) ИНАЧЕ Вывод.Цепь(сл3) КОН КОН КОН СклонениеЧ;
ЗАДАЧА Конец; УКАЗ Вывод.Цепь("----------^"); СклонениеЧ(Букв, "буква", "буквы", "букв"); Вывод.Цепь(", "); СклонениеЧ(Звуков, "звук", "звука", "звуков"); Вывод.Цепь(".") КОН Конец;
ЗАДАЧА Проверка; ПЕР Счётчик: УЗКЦЕЛ; УКАЗ ЕСЛИ ДЛИНА(Слово) <= 0 ТО Вывод.Цепь("Не указано слово."); СТОП(0) АЕСЛИ ДЛИНА(Слово) < 2 ТО Вывод.Цепь("Слишком короткое слово."); СТОП(0) ИНАЧЕ ОТ Счётчик := 0 ДО ДЛИНА(Слово)-1 ВЫП ЕСЛИ АБВ.Номер(Знак.ВЗагл(Слово[Счётчик])) = -1 ТО Вывод.Цепь("Слово содержит знаки, не являющиеся русскими буквами."); СТОП(0) КОН КОН КОН КОН Проверка;
УКАЗ Параметр.Текст(1, Слово); Проверка; Верхушка; Середина; Конец
КОН Разбор. |
|