
Пример № 2.
Задание
Дан текстовый файл, символами которого являются русские или латинские буквы. Распечатать его, заменив символами «-» латинские буквы четных строк и на символы «_» русские буквы каждой 3-ей строки. В начале каждой пятой строки вывести восклицательный знак.
Исходный текстовый файл:
проtyu
yнг
шlp
yui
щ
дuio
Текстовый файл после выполнения преобразования:
проtyu
-нг
_lp
---
!щ
_---
Исходная таблица решений (показана частично, столбцы с 11 по 31 пропущены).
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
… |
32 |
условия |
Русская /латинская буква |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
1 |
Четная / нечетная строка |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
|
1 |
|
Третья / иная строка |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
|
1 |
|
Пятая / иная строка |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
|
1 |
|
Начало строки |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
|
1 |
|
действия |
Печать «!» |
|
|
|
+ |
|
|
|
+ |
|
|
|
+ |
Печать «-» |
|
|
|
|
|
|
|
|
+ |
+ |
|
|
|
Печать «_» |
|
|
|
|
|
|
|
|
|
|
|
+ |
|
Печать исходного символа |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
|
|
|
Первое значение каждого условия соответствует знаку «1», второе – знаку «0».
Действия выполняются сверху вниз, т.е. для последнего столбца сначала будет напечатан «!», а потом «_».
Оптимизация таблицы решений.
Объединяем пары столбцов с одинаковыми действиями и комбинациями условий, которые отличаются в одной позиции.
Таблица решений с объединенными колонками. Первый этап (показана частично, столбцы с 11 по 31 пропущены).
|
|
1,2 |
2 |
3,7 |
4,8 |
5,6 |
6 |
7 |
8 |
9,10 |
10 |
… |
32 |
условия |
Русская /латинская буква |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
1 |
Четная / нечетная строка |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
|
1 |
|
Третья / иная строка |
0 |
0 |
(0)* |
(0)* |
1 |
1 |
1 |
1 |
0 |
0 |
|
1 |
|
Пятая / иная строка |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
|
1 |
|
Начало строки |
(0)* |
1 |
0 |
1 |
(0)* |
1 |
0 |
1 |
(0)* |
1 |
|
1 |
|
действия |
Печать «!» |
|
|
|
+ |
|
|
|
+ |
|
|
|
+ |
Печать «-» |
|
|
|
|
|
|
|
|
+ |
+ |
|
|
|
Печать «_» |
|
|
|
|
|
|
|
|
|
|
|
+ |
|
Печать исходного символа |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
|
|
|
Таблица решений с объединенными колонками. Второй этап (показана частично, столбцы с 11 по 31 пропущены).
|
|
1,2,5,6 |
3,7 |
4,8 |
5,6 |
9,10 |
… |
32 |
условия |
Русская /латинская буква |
0 |
0 |
0 |
0 |
0 |
|
1 |
Четная / нечетная строка |
0 |
0 |
0 |
0 |
1 |
|
1 |
|
Третья / иная строка |
(0)* |
* |
* |
1 |
0 |
|
1 |
|
Пятая / иная строка |
0 |
1 |
1 |
0 |
0 |
|
1 |
|
Начало строки |
* |
0 |
1 |
* |
* |
|
1 |
|
действия |
Печать «!» |
|
|
+ |
|
|
|
+ |
Печать «-» |
|
|
|
|
+ |
|
|
|
Печать «_» |
|
|
|
|
|
|
+ |
|
Печать исходного символа |
+ |
+ |
+ |
+ |
|
|
|
Столбцы 1,2 и 5,6 можно объединить, т.к. выполняются одинаковые действия, в пятом условии в обоих столбцах стоит знак безразличия (*), а третье условие имеет разные значения.
Таблица решений с объединенными колонками. Третий этап (показана частично, столбцы с 11 по 31 пропущены).
|
|
1,2,5,6 |
3,7 |
4,8 |
9,10 |
… |
32 |
условия |
Русская /латинская буква |
0 |
0 |
0 |
0 |
|
1 |
Четная / нечетная строка |
0 |
0 |
0 |
1 |
|
1 |
|
Третья / иная строка |
* |
* |
* |
0 |
|
1 |
|
Пятая / иная строка |
0 |
1 |
1 |
0 |
|
1 |
|
Начало строки |
* |
0 |
1 |
* |
|
1 |
|
действия |
Печать «!» |
|
|
+ |
|
|
+ |
Печать «-» |
|
|
|
+ |
|
|
|
Печать «_» |
|
|
|
|
|
+ |
|
Печать исходного символа |
+ |
+ |
+ |
|
|
|
Первые по порядку два столбца (1,2,5,6 и 3,7) объединить нельзя, т.к. в пятом условии в первом столбце стоит знак безразличия (*), а во втором — 0 (отрицательное значение условия «начало строки»). Если выполнить объединение, то значения трех последних условий будут безразличны и выявить начало пятой строки будет нельзя.