Все статьи

Подкатегории

Новости

324 статей

О Физтехе

1 подкатегорий

16 статей

Факультеты и базовые кафедры

1 подкатегорий

11 статей

Московский политех

2 подкатегорий

22 статей

ЗФТШ Физика

314 статей

ЗФТШ Химия

198 статей

Разное

20 статей

Статьи

  • §3. Неравенства с модулем

    Простейшие неравенства решаются с помощью свойств модуля. 

    Пример 5

    Решите неравенство:  

    а) `|x-2|>=-1`;  

    б) `|x-4|<-2`;

    в) `|1-x|<=4`;  

    г) `|3+x|>5`. 

    Решение

    а) `|x-2|>=0>-1` - верно для всех `x`.

    Ответ
    `x` - любое число.


    б)  Решений нет, т. к. `|x-4|>=0` для всех `x`.   

    Ответ
    нет решений.


    в) Воспользуемся    снова    свойством   1010^\bigcirc (см. § 1). Тогда условие звучит так: расстояние от точки `x` до точки `1` не превосходит `4`. То есть, мы ищем все точки прямой, удалённые от точки `1` на расстояние, не большее `4` (см. рис. 7).

    Запишем решение так:

    `|1-x|<=4 iff -4<=1-x<=4 iff -3<=x<=5`.


    Ответ
    `x in [-3;5]`.


    г) `|x+3|=|x-(-3)|`. Поэтому `|x+3|` - это расстояние между точками  и (–3). Ищем все точки на прямой, удалённые от точки (–3) на расстояние, большее 5 (см. рис. 8).

    Запишем решение:

    3+x>53+x>5,3+x<-5x>2,x<-8.\left|3+x\right|>5\Leftrightarrow\left[\begin{array}{l}3+x>5,\\3+x<-5\end{array}\right.\Leftrightarrow\left[\begin{array}{l}x>2,\\x<-8.\end{array}\right.

    Ответ

    `x in (-oo;-8)uu(2;oo)`.

    При решении неравенств, содержащих знак модуля, часто бывают полезны следующие равносильные переходы.

    1212^\bigcirc. `|f(x)|>|g(x)| iff f^2(x)>g^2(x)`.

    1313^\bigcircfx>gxfx>gx,fx<-gx.\left|f\left(x\right)\right|>g\left(x\right)\Leftrightarrow\left[\begin{array}{l}f\left(x\right)>g\left(x\right),\\f\left(x\right)<-g\left(x\right).\end{array}\right.


    1414^\bigcirc.  fx<gxfx<gx,fx>-gx.\left|f\left(x\right)\right|< g\left(x\right)\Leftrightarrow\left\{\begin{array}{l}f\left(x\right)< g\left(x\right),\\f\left(x\right)>-g\left(x\right).\end{array}\right.

     

    Докажем некоторые из них.

    Доказательство

    1212^\bigcirc. Если обе части неравенства неотрицательны, то его можно возвести в квадрат. Таким образом, `|f(x)|>|g(x)| iff f^2(x)>g^2(x)`. Докажем в обратную сторону:

    `f^2(x)>g^2(x) iff |f(x)|^2-|g(x)|^2>0 iff`

    `iff (|f(x)|-|g(x)|)*(|f(x)|+(g(x)|)>0`. 

    Последнее условие означает, что числа `|f(x)|+|g(x)|` и `|f(x)|-|g(x)|` имеют один знак; `|f(x)|+|g(x)|` не может быть отрицательным, поэтому оба числа должны быть положительны `=> |f(x)|-|g(x)|>0=> |f(x)|>|g(x)|`. Утверждение доказано.

    Доказательство

    1414^\bigcirc. Рассмотрим 2 случая.  

    (1)  `g(x)<=0`. Тогда неравенство `|f(x)|<g(x)` не имеет решений;

    не имеет решений и система, так как fx<gx0,fx>-gx0,\left\{\begin{array}{l}f\left(x\right)< g\left(x\right)\leq0,\\f\left(x\right)>-g\left(x\right)\geq0,\end{array}\right. откуда следует, что `f(x)>0` и `f(x)<0`, что невозможно. Значит, если `g(x)<=0`, система и неравенство равносильны.

    (2) `g(x)>0`. Тогда наше утверждение сводится к простейшему неравенству с модулем:

    `|t|<a iff -a<t<a`.

    Аналогично, `|f(x)|<g(x) iff -g(x)<f(x)<g(x)`.

    Пример 6

    Решите неравенство:

    а) `|2x^2-3x+1|<=3x-2x^2-1`;

    б) `|3x-7|>=|1-4x|`;

    в) `||x^2-8x+2|-x^2|>=2x+2`.

    Решение

    а) `|2x^2-3x-1|<=3x-2x^2-1 iff`

    `iff |2x^2-3x+1|<=-(2x^2-3x+1) iff^**` 

    `iff 2x^2-3x+1<=0 iff (2x-1)(x-1)<=0 iff`

    `iff 1/2 <=x<=1`.

                                              
    `**` (т. к. `|a|<=-a iff a<=0`).
    Ответ

    `[1/2;1]`.


    б) 3x-71-4x123x-721-4x2\left|3x-7\right|\geq\left|1-4x\right|\overset{12^\bigcirc}\Leftrightarrow\left(3x-7\right)^2\geq\left(1-4x\right)^2\Leftrightarrow

    `iff (3-7)^2-(1-4x)^2>=0 iff`

    `iff (3x-7-1+4x)(3x-7+1-4x)>=0 iff`

    `iff (7x-8)(-6-x)>=0 iff -6<=x<=8/7`.

    Ответ

    `[-6;8/7]`.


    в) x2-8x+2-x22x+213x2-8x+2-x22x+2x2-8x+2-x2-2x-2\left|\left|x^{2}-8x+2\right|-x^2\right|\geq2x+2\overset{13^\bigcirc}\Leftrightarrow\left[\begin{array}{l}\left|x^2-8x+2\right|-x^2\geq2x+2\\\left|x^2-8x+2\right|-x^2\leq-2x-2\end{array}\right.\Leftrightarrow

    x2-8x+2x2+2x+2,x2-8x+2x2-2x-213,14\left[\begin{array}{l}\left|x^2-8x+2\right|\geq x^2+2x+2,\\\left|x^2-8x+2\right|\leq x^2-2x-2\end{array}\right.\overset{13^\bigcirc,14^\bigcirc}\Leftrightarrow

    13,14x2-8x+2x2+2x+2,x2-8x+2-x2-2x-2,x2-8x+2x2-2x-2,x2-8x+2-x2+2x+2\overset{13^\bigcirc,14^\bigcirc}\Leftrightarrow\left[\begin{array}{l}\left[\begin{array}{l}x^2-8x+2\geq x^2+2x+2,\\x^2-8x+2\leq-x^2-2x-2,\end{array}\right.\\\left\{\begin{array}{l}x^2-8x+2\leq x^2-2x-2,\\x^2-8x+2\geq-x^2+2x+2\end{array}\right.\end{array}\right.\Leftrightarrow

    x0,x2-3x+20,6x4,x2-5x0x0,1x2x23,x5,x0\Leftrightarrow\left\{\begin{array}{l}x\leq0,\\x^2-3x+2\leq0,\\\left\{\begin{array}{l}6x\geq4,\\x^2-5x\geq0\end{array}\right.\end{array}\right.\Leftrightarrow\left[\begin{array}{l}x\leq0,\\1\leq x\leq2\\\left\{\begin{array}{l}x\geq\frac23,\\\left[\begin{array}{l}x\geq5,\\x\leq0\end{array}\right.\end{array}\right.\end{array}\right.\Leftrightarrowx0,1x2,x5.\left[\begin{array}{l}x\leq0,\\1\leq x\leq2,\\x\geq5.\end{array}\right.


    Ответ

    `x in (-oo;0]uu[1;2]uu[5;+oo)`.

    В некоторых случаях применение выше рассмотренных свойств нецелесообразно, и проще раскрыть модули по определению (рассмотрев знаки выражений под модулями).

    Пример 7

    Решите неравенство `6|x^2-3x-4|+1>5|x+5|`.

    Решение

    Решение проводится по той же схеме, что и в  примере 2. Отмечаем на числовой прямой точки `x=4`, `x=-1` и `x=-5`, в которых подмодульные выражения равны нулю.

    а) `x<=-5`. Здесь  `x^2-3x-4>0`, `x+5<=0`, поэтому получаем   

    `6x^2-18x-24+1> -5x-25 iff 6x^2-13x+2>0 iff`

    `iff (x-2)(6x-1)>0 iff x in (-oo;1/6)uu(2;+oo)`.

    С учётом ограничения `x<= -5 : x in (-oo;-5]`.

    б) `x in (-5;-1]uu(4;+oo)`. На этих двух промежутках  `x^2-3x-4>=0`, `x+5>0`, поэтому получаем `6(x^2-3x-4)+1>5(x+5) iff 6x^2-23x-48>0 iff`

    `iff (3x-16)(2x+3)>0 iff x in (-oo;-3/2)uu(16/3;+oo)`.

    Учитывая рассматриваемые значения переменной, получаем  

    `x in (-5;-3/2)uu(16/3;+oo)`.

    в) `x in (-1;4]`. Тогда `x^2-3x-4<=0`, `x+5>0`  и неравенство принимает вид 

    `-6(x^2-3x-4)+1>5(x+5) iff 6x^2-13x<0 iff`

    `iff 6x(x-13/6)<0 iff 0<x<13/6`.

    Объединяя результаты, получаем

    `x in (-oo;-3/2)uu(0;13/6)uu(16/3;+oo)`.

    Ответ

    `x in (-oo;-3/2)uu(0;13/6)uu(16/3;+oo)`.

  • §4. Построение графиков функций

    График квадратичной функции  `y=ax^2+bx+c` (где `a!=0`) - парабола. Абсцисса вершины этой параболы задаётся формулой `x_B=-b/(2a)`. Если `a>0`, то ветви параболы направлены вверх, если `a<0` - вниз.

    Если дискриминант квадратного трёхчлена положителен, то парабола пересекает ось абсцисс в двух точках (абсциссы этих точек - корни квадратного уравнения `ax^2+bx+c=0`); если дискриминант меньше нуля - то не имеет с осью абсцисс ни одной общей точки; если равен нулю - парабола имеет с осью абсцисс ровно одну общую точку (в этом случае говорят, что парабола касается оси абсцисс). В последнем случае квадратный трёхчлен имеет вид `a(x-x_0)^2`.

    Пример 8

    Постройте график функции `y=-2x^2+8x-5`.

    Решение

    Выделим полный квадрат:

    `y=-2x^2+8x-5=-2(x^2-4x)-5=`

    `=-2(x^2-4x+4-4)-5=-2(x-2)^2+8-5=` 

    `=-2(x-2)^2+3`.

    График функции `y=-2(x-2)^2+3` - парабола, полученная из параболы `y=2x^2` с помощью симметрии относительно оси абсцисс, затем параллельного переноса на `2` единицы вправо вдоль оси абсцисс и, наконец, параллельного переноса на `3` единицы вверх вдоль оси ординат (см. рис. 10).

    При помощи построения графика квадратичной функции можно решать квадратные неравенства.

    Пример 9

    Решите неравенство:

    а) `x^2-x-2>0`;

    б) `4x^2+4x+1<=0`;

    в) `3x^2-2x+1>0`.

    Решение

    а) График квадратного трёхчлена `y=x^2-x-2` - парабола, её ветви направлены вверх (коэффициент при `x^2` положителен), абсциссы точек пересечения с осью `Ox:` `x_1=-1`, `x_2=2`  (корни квадратного уравнения `x^2-x-2=0`). Все точки оси абсцисс, для которых парабола находится выше этой оси (т. е. решения данного неравенства), расположены вне промежутка между корнями `x_1` и `x_2`. Значит, множество решений данного неравенства - объединение открытых лучей:

    `(-oo;-1)uu(2;+oo)`.

    Ответ

    `x in (-oo;-1)uu(2;+oo)`.

    б) `4x^2+4x+1<=0 iff (2x+1)^2<=0 iff 2x+1=0 iff x=-0,5`.

    Ответ

    `x=-0,5`.

    в) График квадратного трёхчлена `y=3x^2-2x+1` - парабола, её ветви направлены вверх (коэффициент при `x^2` положителен), она не пересекает ось абсцисс, т. к. уравнение `3x^2-2x+1=0` не имеет решений (его дискриминант отрицателен). Поэтому все точки параболы расположены выше оси `Ox`. Следовательно, данное неравенство истинно для всех `x`.


    Ответ

    `x in RR`.

    Заметим, что эти неравенства могли быть решены также  с помощью метода интервалов, изложенного выше (см. §2).

    Пример 10

    Парабола `y=2016x^2-1941x-76` - пересекает ось абсцисс в точках `x_1` и `x_2`. Определите, где на этой прямой расположены точки `1`; `–1`; `–5` (т. е. вне промежутка между `x_1` и `x_2` или внутри него?).

    Решение

    Так как  `a>0` и `c<0`, то `D>0` и данное уравнение имеет корни.

    График функции `f(x)=2016x^2-1941x-76` - это парабола, ветви которой направлены вверх. Видно, что точка лежит в промежутке между корнями тогда и только тогда, когда `f(x)<0` и вне этого промежутка, если `f(x)>0` (см. рис. 11).

    `f(1)=-1<0=>1 in (x_1;x_2)`;

    `f(-1)=2016+1941-76>0=>1!in (x_1;x_2)`;

    `f(-5)=2016*25+1941*5-76>0=>5!in (x_1;x_2)`.

    Пример 11

    Определите знаки коэффициентов квадратного трёхчлена `y=ax^2+bx+c`, график которого изображён на рис. 12.

    Решение

    1) Заметим, что `y(0)=c`, откуда `c>0`.

    2) Ветви параболы направлены вниз `=>a<0`.

    3) Ось симметрии параболы - это прямая `x_B=-b/(2a)`, по рисунку видно, что `-b/(2a)>0`, откуда `b>0`.                  

    Ответ

    `a<0`, `b>0`, `c>0`.

    Пример 12

    Найти все значения `l`, при которых неравенство 

    `lx^2-2(l-6)x+3(l-2)<0`

    верно для всех значений `x`.

    Решение

    Коэффициент при `x^2` зависит от `l` и равен `0` при `l= 0`. В этом случае данное неравенство не квадратное, а линейное: `12x-6<0`. Это неравенство неверно, например, при `x=1`, значит, при `l=0` данное неравенство не является верным для всех значений `x`.

    Рассмотрим значения `l!=0`. Для них данное неравенство квадратное. Видно, что все числа являются его решениями только в одном случае: во-первых, если  старший коэффициент отрицателен, (т. е. ветви параболы направлены вниз), и во-вторых, если дискриминант отрицателен, (т. е. парабола не пересекает ось абсцисс).

    Получаем систему неравенств

    l<0,D4=l-62-3ll-2<0l<0,-2l2-6l+36<0\left\{\begin{array}{l}l<0,\\\frac D4=\left(l-6\right)^2-3l\left(l-2\right)<0\end{array}\right.\Leftrightarrow\left\{\begin{array}{l}l<0,\\-2l^2-6l+36<0\end{array}\right.\Leftrightarrow

    l<0,-2l+6l+6<0l<0,l-;-63;+l<-6.\Leftrightarrow\left\{\begin{array}{l}l<0,\\\left(-2l+6\right)\left(l+6\right)<0\end{array}\right.\Leftrightarrow\left\{\begin{array}{l}l<0,\\l\in\left(-\infty;-6\right)\cup\left(3;+\infty\right)\end{array}\right.\Leftrightarrow l<-6.

    Ответ
    `l< -6`.


    Перейдём к графикам, содержащим знак модуля.

    Пример 13

    Постройте график функции: 

    а) `y=|x+3|`;

    б) `y=4-|x|`;

    в) `y=|4-2x|-1`;

    г) `y=2|x+4|+|x-3|+2x-3|x+1|`;

    д) `y=|||x|-3|-1|`.

    Решение

    а) Рассмотрим графики функций `f(x)=|x|`  и  `g(x)=|x+3|`. Заметим, что при  подстановке значения `x_0` в функцию `f(x)` и значения `(x_0-3)` в функцию `g(x)` получается одно и то же число.  Это означает, что если графику функции `y=f(x)`  принадлежит точка с координатами `A(x_0;|x_0|)`, то графику функции `y=g(x)` принадлежит точка `B(x_0-3;|x_0|)`,  расположенная на `3` единицы слева от точки `A`.      

    Таким образом, график функции `g(x)` получается из графика функции `f(x)` сдвигом на `3` единицы влево (рис. 13).                 

    б) Рассмотрим   функции  `f(x)=-|x|` и `g(x)=4-|x|`. При любом `x` значение  функции `g(x)` на `4` больше, чем значение функции `f(x)`, а это означает, что график функции `g(x)` получается из графика функции `f(x)` сдвигом на `4` единицы вверх  (рис. 14).

    в)  `y=|4-2x|-1=|2x-4|-1=2|x-2|-1`.              

    Построим сначала график функции `y=|x|` (рис. 15а).

    График функции `y=2|x|` получается   из  него  «растяжением» в два раза  (рис. 15б); график  `y=2|x-2|` получается  из  предыдущего сдвигом на `2` единицы вправо   (рис. 15в);

      график `y=2|x-2|-1` получается из  последнего сдвигом на единицу вниз (рис. 15г).       

    вывод

    График функции `y=af(x-b)+c` получается из графика функции `y=f(x)` следующим образом.                        

    1) Проводится «растяжение» в `|a|` раз; при этом если `a<0`, то график функции отражается  относительно   оси   абсцисс.                                                             

    2) График сдвигается на `|b|` влево (если `b<0`) или на `|b|` вправо (`b>0`).                     

    3) График сдвигается на `|c|` вверх  при `c>0` и на `|c|` вниз при `c<0`.                                       

    г) Отметим на числовой прямой точки, в которых выражения, стоящие под знаком модуля, обращаются в ноль (рис. 16а). Эти три точки делят числовую прямую на четыре части, причём  на  каждой  из  частей  знаки выражений,  стоящих под модулями, не меняются.                     

    Возможны 4 случая.

    1) `ul(x<=-4)`.  Тогда  `x+4<=0`, `x-3<0`, `x+1<0`, поэтому

    `y=2*(-x-4)-(x-3)+2x+3(x+1)=2x-2`.

    Получаем луч (часть прямой `y=2x-2`, лежащую слева от прямой `x=-4`).

    2)  `ul(-4<x<=-1)`. Тогда `x+4>0`, `x-3<0`, `x+1<=0`, поэтому   

    `y=2(x+4)-(x-3)+2x+3(x+1)=6x+14`.                        

    Получаем отрезок (часть прямой `y=6x+14`, лежащая между прямыми  `x=-4` и `x=-1`).

    3)  `ul(-1<x<=3)`. Тогда `x+4>0`, `x-3<=0`, `x+1>0`, поэтому

    `y=2(x+4)-(x-3)+2x-3(x+1)=8`. 

    Получаем отрезок (часть прямой `y=8`, заключённая между прямыми `x=-1` и `x=3`).

    4) `ul(x>3)`.  Тогда `x+4>0`, `x-3>0`, `x+1>0`, поэтому

    `y=2(x+4)+(x-3)+2x-3(x+1)=2x+2`.                                        

         Получаем луч (часть прямой `y=2x+2`, находящуюся справа от прямой  `x=3`). График см. на рис. 16б.

    Укажем второй способ построения. На каждом из четырёх участков `(-oo;-4]`, `[-4;-1]`, `[-1;3]`, `[3;+oo)` после раскрытия модулей получим линейную функцию, графиком которой является прямая. Чтобы построить прямую, достаточно знать две её точки. Отсюда вытекает следующий способ построения. Вычислим значения   функции   в  точках `x=-4`, `x=-1` и `x=3`, а также в каких-либо точках, лежащих на промежутках `(-oo;-4)` и `(3;+oo)`, например, `x=-5` и `x=4`. Получаем пять точек, принадлежащих графику:

    `A(-4;-10)`, `B(-1;8)`, `C(3;8)`, `D(-5;-12)`, `E(4;10)`.

    Проводим отрезки `AB` и `BC`, лучи `AD` и `CE` и получаем график.                                      

    д) Построим сначала график функции `f_1(x)=|x|-3` (рис. 17а).       

     

    График `f_2(x)=||x|-3|` получается из графика функции `f_1(x)` так: точки, лежащие выше оси `Ox` и на оси `Ox` сохраняются, а  все точки, лежащие ниже оси `Ox`, отражаются относительно оси `Ox` в  верхнюю полуплоскость (рис. 17б). Действительно, если `f_1(x)>=0`, то `f_2(x)=|f_1(x)|=f_1(x)`, а если `f_1(x)<0`, то `f_2(x)=|f_1(x)|=-f_1(x)`. Таким  образом, если при некотором `x` оказалось, что `f_1(x)>=0`, то точки на графике  для `f_1(x)` и `f_2(x)` совпадают.  Если же `f_1(x)<0`, то для `y=f_2(x)` абсцисса точки не поменяется, а ордината сменит знак.  График  функции `f_3(x)=||x|-3|-1` получается из графика функции `f_2(x)` сдвигом на единицу вниз (рис. 17в).

           
    График  функции `f_4(x)=|||x|-3|-1|` получается из `f_3(x)` отражением всех  точек,  лежащих  ниже оси `Ox`, относительно оси `Ox` наверх (рис. 17 г).

    вывод

    График функции `y=|f(x)|` получается  из  графика  функции `y=f(x)` следующим образом. Все точки, лежащие  выше оси `Ox` и на оси `Ox`, сохраняются, а все точки, лежащие ниже оси `Ox`, отражаются относительно оси `Ox` и попадают  в  верхнюю  полуплоскость.                           

    Пример14

    Постройте график функции:

    а) `y=x^2-4x+3`,

    б) `y=|x^2-4x+3|`,

    в) `y=x^2-4|x|+3`,

    г) `y=|x^2-4|x|+3|`.

    Решение

    а) `x^2-4x+3=x^2-4x+4-1=(x-2)^2-1`.

    График функции `y=x^2-4x+3` получается из графика функции `y=x^2` сдвигом на `2` вправо и на `1` вниз (рис. 18а).

     

    б) Отразим все точки графика пункта а), лежащие ниже  оси  абсцисс,  относительно  этой  оси  (рис. 18б).      

    в) Заметим, что функция `f(x)=x^2-4|x|+3` чётная (т. е. удовлетворяет условию `f(-x)=f(x)`),  поэтому  её график симметричен относительно оси ординат. Кроме того, при `x>=0` этот  график совпадает с графиком функции `f(x)=x^2-4x+3`.

    Отсюда вытекает следующий способ построения. От графика функции `y=x^2-4x+3` оставим точки, лежащие справа от оси `Oy`, отразим их симметрично относительно  этой оси,  а точки, лежащие слева от оси `Oy`, отбросим (рис. 18в).    

    вывод

    График функции `y=f(|x|)` получается  из  графика  функции `y=f(x)` следующим образом.  Отбрасываем  все точки, лежащие слева от оси `Oy`, а оставшиеся точки отражаем относительно оси `Oy`.

    г) Есть 2 способа построения.                    

    (1) Все точки графика из пункта (в), лежащие ниже оси абсцисс, отражаем относительно этой оси.                   

    (2) От графика пункта (б) отбрасываем точки, лежащие слева от оси ординат; все точки, находящиеся справа от оси ординат, отражаем относительно неё. Разумеется, в обоих случаях получается одинаковый результат (рис. 18г).

    Теперь рассмотрим график функции `y=(ax+b)/(cx+d)`; при этом считаем, что

    1) `c!=0` - т. к. иначе получится линейная функция – и

    2) коэффициенты в числителе и в знаменателе не пропорциональны друг другу, т. е.  `ad!=bc`. (Если `ad=bc`, то `b=(ad)/c` и получаем 

    `(ax+b)/(cx+d)=(ax+(ad)/c)/(cx+d)=(a/c(cx+d))/(cx+d)=a/c` при `cx+d!=0`). 

    Покажем на примере, как этот график может быть построен.

    Пример 15

    Постройте график функции:

    а) `y=6/(2x+3)`;

    б) `y=(6-3x)/(2x+1)`.

    Решение

    а) `y=3/(x+3//2)`. Это график получается из гиперболы `y=3/x` параллельным переносом на `3/2` влево (см. рис. 19). Асимптотами этой гиперболы являются прямые `x=-3/2` и `y=0`. (У каждой гиперболы есть две асимптоты. Горизонтальная асимптота `y=bbb"const"` - это та прямая, к которой график приближается при `x`, стремящемся к бесконечности. Вертикальная асимптота `x=bbb"const"` возникает при том значении `x`, где знаменатель дроби обращается в ноль. При `x`, приближающемся к данной точке, функция стремится к бесконечности).

    б) Отношение коэффициентов при `x` в числителе и знаменателе дроби равно `(-3/2)`.

    Преобразуем данную дробь, добавляя и вычитая `(-3/2)`:

    `y=-3/2+((6-3x)/(2x+1)+3/2)`.

    Дроби в скобках приводим к общему знаменателю:

    `y=-3/2+(12-6x+6x+3)/(2(2x+1)) iff y=-3/2+15/(4x+2) iff`

    `iff y=-3/2+(15//4)/(x+1//2)`.

    Этот график получается из графика `y=(15//4)/x` параллельным переносом на `3/2` вниз и на `1/2` влево (рис. 20).



  • §1. Свойства модуля. Уравнения с модулем

    Напомним определение модуля числа:

    \[ |a| = \left\{ \begin{aligned} a \text{, если } & a \ge 0, \\ -a \text{, если } & a < 0 \end{aligned} \right.  \]

    Отметим следующие свойства модуля, вытекающие непосредственно из определения.

    свойства модуля

    11^\bigcirc. |a|0.|a| \ge 0.            

    22^\bigcirc. |a|a.|a|\ge a.          

    33^\bigcirc. |ab|=|a|·|b|.|ab| = |a|\cdot|b|.          

    44^\bigcirc. ab=|a||b|.\left| \dfrac{a}{b} \right| = \dfrac{|a|}{|b|}.        

    55^\bigcirc. |-a|=|a|.|-a|=|a|.      

    66^\bigcirc. |a2|=|a|2=a2.|a^2| = |a|^2 = a^2.

    77^\bigcirc. |a+b||a|+|b||a+b| \le |a| + |b| (здесь равенство достигается, когда числа `a` и `b` одного знака или одно из них равно нулю; если же числа `a` и `b` разных знаков, то выполняется строгое неравенство).

    88^\bigcirc. |a-b|||a|-|b||.|a-b| \ge ||a|-|b||.

    99^\bigcirc. |a||a| - это расстояние от точки `a` на числовой оси до точки `0`.

    1010^\bigcirc. |a-b||a-b| - это расстояние между точками `a` и `b` на числовой оси.

    1111^\bigcirc. a2=|a|.\sqrt{a^2} = |a|.

    Докажем свойство 77^\bigcirc. Остальные свойства проверьте самостоятельно. Поскольку обе части неравенства неотрицательны, возведение их в квадрат является равносильным преобразованием. Получаем 

    \[|a+b|^2 \le (|a| + |b|)^2 \Leftrightarrow a^2 + 2ab + b^2 \le |a|^2 + 2|a| \cdot |b| + |b|^2 \Leftrightarrow ab \le |ab|.\]

    Последнее неравенство верно (свойство 22^\bigcirc). Заметим, что оно обращается в равенство, когда числа aa и bb одного знака (или одно из них равно нулю).

    Перейдём к уравнениям с модулем. В простейших случаях можно воспользоваться свойством модуля 1010^\bigcirc.

    Пример 1

    Решите уравнение:

    a) |x-2|=5;|x-2| = 5;          б) |2x-1|=-1|2x-1| = -1         в) |x-2|=|x+6||x-2| = |x+6|


    Решение

    a) |x-2||x-2| - это расстояние между точками `x` и `2` на число вой прямой (свойство 1010^\bigcirc). Поэтому уравнение можно прочитать так: точка `x` удалена от точки `2` на расстояние `5`. Иначе говоря, мы ищем точки, удалённые от точки `2` на расстояние `5`. Ясно, что это точки `-3` и `7`. Записать решение короче всего так:

    \[|x-2| = 5\Leftrightarrow \left[ \begin{aligned} x-2 &= 5, \\ x-2 &= -5 \end{aligned} \right.  \Leftrightarrow \left[ \begin{aligned} x &= 7, \\ x &= -3 \end{aligned} \right. .\]


    Ответ

    `x=-3`; `x=7`.

    б) Левая часть уравнения неотрицательна (свойство 11^\bigcirc). Поэтому уравнение не имеет решений.


    Ответ

    нет решений.


    в) Задачу можно сформулировать так: расстояние от точки `x` до точки `2` равно расстоянию от точки `x` до точки `(– 6)`, то есть мы ищем точку на прямой, равноудалённую от точек `2` и `(– 6)`. Ясно, что это середина отрезка, соединяющего эти точки, т. е. `x = -2`. 

    Покажем ещё один способ решения: 

    \[|x-2| = |x+6|\Leftrightarrow (x-2)^2 = (x+6)^2\Leftrightarrow x = -2 \]


    Ответ

    `x=-2`.

    Если уравнение имеет более сложный вид, то, как правило, приходится раскрывать модуль по определению. Для этого отмечаем на числовой прямой точку (точки), в которых выражения, находящиеся под модулем, обращаются в ноль. Эти точки делят прямую на несколько промежутков, на каждом из которых знаки подмодульных выражений фиксированы, поэтому можно раскрыть модули. Рассмотрим пример. 

    Пример 2

    Решите уравнение: |x+1|+11= |2x+11|+|1-x||x+1| +11 =\ |2x+11| + |1-x|.


    Решение

    Отметим на числовой прямой точки x=-1, x= -112, x=1.x = -1, \; x = \ -\dfrac{11}{2}, \; x = 1.. Получаем `3` точки, которые разбивают числовую прямую на `4` интервала. Раскрываем модули на каждом из этих интервалов (см. рис. 1).

    Рассмотрим 4 случая:

    а) x-112.x \le -\dfrac{11}{2}. Тогда:

    \[-(x+1) + 11 = -(2x+11) + (1-x) \Leftrightarrow x = -10.\]

    Убеждаемся, что x=-10x =-10 удовлетворяет условию x-112x \le - \dfrac{11}{2}, поэтому x=-10x =-10 является решением данного уравнения.

    б) -112<x<-1-\dfrac{11}{2} < x < -1. Тогда:

    \[-(x+1) + 11 = (2x+11) + (1-x) \Leftrightarrow x = -1.\]

    Однако x=-1x =-1 не удовлетворяет условию -112<x<-1-\dfrac{11}{2} < x < -1, поэтому x=-1x =-1  не подходит.

    в) -1x1-1 \le x \le 1. Тогда:

    \[(x+1) + 11 = (2x+11) + (1-x) \Leftrightarrow 12 = 12.\]

    Получилось верное равенство, поэтому все `x`, удовлетворяющие условию -1x1-1 \le x \le 1 являются решениями.

    г) x>1x>1. Тогда:

    \[(x+1) + 11 = (2x+11) - (1-x) \Leftrightarrow x = 1.\]

    Условие x>1x >1 не выполнено, поэтому данный корень не подходит.

    Объединяем полученные решения и получаем x{-10}[-1; 1]x \in \{-10\} \cup [-1; \; 1] .

    Ответ

    x{-10}[-1; 1]x \in \{-10\} \cup [-1; \; 1] .

    Замечания

    1) При таком методе решения необходимо проверять принадлежат ли найденные корни рассматриваемому в данный момент промежутку – иначе можно получить неверный ответ.

    2) Точки, в которых выражения под модулями обращаются в ноль, можно включать в любой из двух промежутков, для которых они являются границами. Например, если бы в случае б) мы взяли -112<x-1-\dfrac{11}{2} < x \le -1 то число x=-1x =-1 попало бы в промежуток. В случае в) мы бы рассматривали -1<x1-1 < x \le 1 и здесь корня x=-1x = -1 мы бы не получили. При этом объединение всех решений было бы тем же самым.


  • §2. Рациональные неравенства. Метод интервалов.

    Напомним, что дробь называют рациональной, если она представляет собой отношение многочленов (например, `(2x-1)/(x^2+3)`, `(5x^3)/(1-x)` и т. д.). Если обе части неравенства являются суммами рациональных дробей и многочленов, то такие неравенства называют рациональными. Для их решения применяют следующий алгоритм: все члены переносят в одну сторону, приводят их к общему знаменателю, а далее у полученной дроби числитель и знаменатель раскладывают на множители. После этого на числовой прямой отмечают точки, в которых числитель и знаменатель обращаются в ноль, а затем на полученных промежутках расставляют знаки, которые принимает дробь - далее остаётся записать ответ.

    Покажем, как работает метод интервалов на нескольких примерах.

    Пример 3

    Решите неравенства:

    а) `((x^2+5x+6)(x-4))/(x^2-x)>=0`; 

    б) `(x-3)^2(x-4)^3(x-5)(x-6)^4<=0`;

    в) `1/x<1/3`;

    г) `((x^2-x-2)(2x-3-x^2))/((x^2+4x+5)(2x^2-x-6))<=0`;

    д) `3/(x^3-3x^2+4)-10/(x^3-7x^2+4x+12)>1/(x^2-5x-6)`.

    Решение

    а) Раскладывая числитель и знаменатель дроби на множители, получаем

    `((x+2)(x+3)(x+4))/(x(x-1))>=0`.                                                                      (1)

    Точки, в которых числитель обращается в ноль (нули числителя), обозначаем на числовой прямой маленькими закрашенными кружочками – они будут включены в ответ, так как в них неравенство выполняется. Точки, в которых знаменатель обращается в ноль (нули знаменателя), обозначаем на числовой прямой маленькими пустыми кружочками (такие точки называются выколотыми) – они не будут включены в ответ, так как в них левая часть не определена.

     

    Отмеченные точки делят числовую прямую на шесть промежутков, на каждом из которых знак левой части неравенства (1) постоянен. Чтобы определить знаки, сначала определим знак левой части (1) на крайнем правом промежутке `(4; +oo)`. Для этого можно подставить какое-либо значение переменной `x` из этого промежутка в (1), например, `x=1000`. Несложно видеть, что при этом каждый из множителей в числителе и знаменателе положителен, поэтому дробь больше нуля, и на промежутке `(4; +oo)` можем поставить знак `«+»`.

    Теперь переместимся в соседний промежуток `(1; 4)`. Заметим, что при переходе через точку `x=4` только один из множителей в (1) меняет знак (это `(x-4)`), а все остальные знаки остаются неизменными, поэтому дробь меняет знак, и на промежутке `(1; 4)` ставим знак `«-»`. При переходе к каждому следующему промежутку ровно один множитель в числителе или знаменателе (1) меняет знак, поэтому меняет знак и вся дробь, то есть знаки чередуются. Получаем такую расстановку знаков:

     

    Ответ

    `x in [-3; -2]uu(0; 1)uu[4; +oo)`.

    б) Здесь левая часть уже разложена на множители, и нам остаётся лишь расставить знаки. Для этого отмечаем на числовой прямой точки `x=3`, `x=4`, `x=5`, `x=6` (все они невыколотые и являются решениями неравенства) и приступаем к расстановке знаков. Принципиальное отличие этого примера от предыдущего в том, что некоторые из множителей возводятся в степень. На что это влияет? Если показатель степени чётный, то соответствующий множитель не меняет знак при переходе через ту точку, в которой он обращается в ноль (например, `(x-3)^2>=0` при любых `x`, поэтому с обеих сторон от точки `x=3` выражение `(x-3)^2` положительно). Если показатель степени нечётный, то множитель меняет знак при переходе через ту точку, в которой он равен нулю. В итоге получаем следующую расстановку знаков:

     

    Не забываем также включить в ответ все точки, отмеченные на прямой жирными кружочками.

      

    Ответ

    `x in {3}uu[4;5]uu{6}`.

    в) Переносим `1/3` влево и приводим дроби к общему знаменателю: `(3-x)/(3x)<0`. Расставляем знаки левой части на числовой прямой (для строгого неравенства все точки на прямой выколотые, так как нули числителя решениями неравенства не являются).

    Ответ

     `x in (-oo; 0)uu(3;+oo)`. 

    замечание

    При решении этой задачи часто допускают следующие ошибки.

    1) Умножают обе части неравенства на `x`. Этого делать нельзя, так как если мы умножаем обе части неравенства на отрицательное число, то знак неравенства надо поменять, если на положительное, то знак надо оставить таким, какой он и был. Поскольку знак `x` нам неизвестен, то мы не можем корректно выбрать знак нового неравенства.

    2) В исходном неравенстве требуется сравнить две дроби с одинаковыми числителями. Значит больше та дробь, у которой знаменатель меньше. Так рассуждать нельзя, поскольку это свойство справедливо лишь для тех дробей, у которых числитель и знаменатель положительны. Если  же числа могут быть  отрицательными, то это свойство неверно (например, `-3<3` и `1/(-3)<1/3`).   

    г) Находим нули числителя и знаменателя. Получаем:

    1. `x^2-x-2=0 iff x=2` или `x=-1` (поэтому `x^2-x-2=(x-2)(x+1)`); 

    2. `2x-3-x^2-x^2=0 iff O/` (т. к. дискриминант отрицателен). Следовательно, выражение `-x^2+2x-3` отрицательно при всех `x` (графиком функции `f(x)=-x^2+2x-3` является парабола с ветвями вниз, при этом она не пересекает ось абсцисс, так как у уравнения `f(x)=0` нет корней; значит, эта парабола целиком расположена ниже оси абсцисс, то есть  `f(x)<0` при всех `x`).    

    3. `x^2+4x+5=0 iff O/`, поэтому `x^2+4x+5>0` при всех `x`.

    4. `2x^2-x-6=0 iff x=2` или `x=-3/2`. Значит, 

    `2x^2-x-6=2(x-2)(x+3/2)=(x-2)(2x+3)`.

    Исходное неравенство равносильно следующему

    `((x-2)(x+1)(2x-3-x^2))/((x^2+4x+5)(x-2)(2x+3))<=0`.

    Отбросив множители `(2x-3-x^2)` и `(x^2+4x+5)`, знаки которых не зависят от `x` получаем

    x-2x+1x-22x+30x+12x+30,x2.\dfrac{\left(x-2\right)\left(x+1\right)}{\left(x-2\right)\left(2x+3\right)}\geq0\Leftrightarrow\left\{\begin{array}{l}\dfrac{x+1}{2x+3}\geq0,\\x\neq2.\end{array}\right.

    Решая первое неравенство системы методом интервалов, получаем

    С учётом второго неравенства `x in (-oo; -3/2)uu[-1; 2)uu(2; +oo)`.

    Ответ

    `x in (-oo; -3/2)uu[-1; 2)uu(2; +oo)`.

    д) Прежде всего,  необходимо привести дроби к общему знаменателю. Чтобы сделать это, раскладываем знаменатели дробей на множители.

    Заметим, что `x=-1` является корнем каждого из знаменателей в левой части неравенства. Выполняя деление на `(x+1)`,  получаем следующие разложения на множители:

    `x^3-3x^2+4=(x+1)(x^2-4x+4)=(x+1)(x-2)^2`;

    `x^3-7x^2+4x+12=(x+1)(x^2-8x+12)=(x+1)(x-2)(x-6)`;

    `x^2-5x-6=(x+1)(x-6)`. 

    Преобразуем исходное неравенство:

    `3/((x+1)(x-2)^2)-10/((x+1)(x-2)(x-6))>1/((x+1)(x-6)) iff`

    `iff (3(x-6)-10(x-2)-(x-2)^2)/((x+1)(x-2)^2(x-6))>0 iff`

    `iff (-x^2-3x-2)/((x+1)(x-2)^2(x-6))>0 iff`

    `iff (-(x+1)(x+2))/((x+1)(x-2)^2(x-6))>0 iff`

    x+2x-22x-6<0,x-1x+2x-6<0,x-1, x2.\left\{\begin{array}{l}\dfrac{x+2}{\left(x-2\right)^2\left(x-6\right)}<0,\\x\neq-1\end{array}\right.\Leftrightarrow\left\{\begin{array}{l}\dfrac{x+2}{x-6}<0,\\x\neq-1,\;x\neq2.\end{array}\right.

    Решая первое неравенство системы методом интервалов, находим, что `x in (-2; 6)`. Исключая точки `x=-1` и `x=2`, получаем `x in (-2;-1)uu(-1;2)uu(2;6)`.

    Ответ

    `x in (-2;-1)uu(-1;2)uu(2;6)`.

    Заметим, что знаки следующих выражений совпадают:

    `|a|-|b|` и `a^2-b^2`,

    `a^(2n)-b^(2n)(n in NN)` и `a^2-b^2`,                                                                  (2)

    `a^(2n+1)-b^(2n+1)(n in NN)` и `a-b`.

    Это свойство иногда оказывается полезным при решении неравенств. Когда мы решаем дробно-рациональное неравенство (возможно, содержащее знак модуля), мы приводим его к виду «дробь `>0`» (или «дробь `>=0`»), после чего числитель и знаменатель дроби раскладываем на множители. Так как мы сравниваем дробь с нулём, то нас интересуют только знаки каждого из множителей в числителе и знаменателе. Следовательно, если мы некоторые из них заменим на выражения тех же самых знаков по формулам (2), то получим равносильное неравенство.

    Пример 4

    Решите неравенство  

    `((x^8-256)(|3x+4|-|2x-7|))/(243-x^5)>=0`.

    Решение

    Заменим множитель `x^8-256=x^8-2^8` на `x^2-x^2`; 

    множитель `|3x+4|-|2x-7|` на `(3x+4)^2-(2x-7)^2`; 

    множитель  `243-x^5=3^5-x^5` на `3-x`. Получаем

     `((x^2-2^2)((3x+4)^2-(2x-7)^2))/(3-x)>=0`.

    Каждую из скобок в числителе раскладываем на множители по формуле разности квадратов.

    `((x-2)(x+2)(3x+4+2x-7)(3x+4-2x+7))/(3-x)>=0 iff`

    `iff ((x-2)(x+2)(5x-3)(x+11))/(x-3)<=0 iff x in (-oo;-11]uu[-2;3/5]uu[2;3)`.

    ответ

    `x in (-oo;-11]uu[-2;3/5]uu[2;3)`.


  • §4. Кодирование звуковой информации
    Что нужно знать
    • при оцифровке звука в памяти запоминаются только отдельные значения сигнала, который нужно выдать на динамик или наушники
    • частота дискретизации определяет количество отсчетов, запоминаемых за `1` секунду; `1` Гц (один герц) – это один отсчет в секунду, а `8` кГц – это `8000` отсчетов в секунду
    • глубина кодирования – это количество бит, которые выделяются на один отсчет
    • для хранения информации о звуке длительностью `t` секунд, закодированном с частотой дискретизации `f` Гц и глубиной кодирования `B` бит требуется `B*f*t` бит памяти; например, при `f=8` кГц, глубине кодирования `16` бит на отсчёт и длительности звука  `128` секунд требуется

      `I=8000*16*128=1384000` бит

      `I=8000*16*128//8=2048000` байт

      `I=8000*16*128//8//1024=2000` Кбайт

      `I=8000*16*128//8//1024//1024~~1,95` Мбайт


    • при двухканальной записи (стерео) объем памяти, необходимый для хранения данных одного канала, умножается на `2`, при четырехканальной(квадро) – умножается на `4`
    • для упрощения ручных расчетов можно использовать приближённые равенства

    `1` мин  `= 60` сек `~~64` сек `= 2^6` сек

    `1000~~1024=2^(10)`

    Итак, объём музыкального файла вычисляется по формуле

    `I=f*r*k*t`,

    где `f` – частота дискретизации,  `r`  – разрешение (глубина кодирования), `k`  – количество каналов, `t` – время звучания.

  • §3. Кодирование графической информации
    Что нужно знать


    • для хранения растрового изображения нужно выделить в памяти `I = N` · `i` битов, где `N` – количество пикселей и `i` – глубина цвета (разрядность кодирования)
    • количество пикселей изображения `N` вычисляется как произведение ширины рисунка на высоту (в пикселях)
    • глубина кодирования – это количество бит, которые выделяются на хранение цвета одного пикселя
    • при глубине кодирования `i` битов на пиксель код каждого пикселя выбирается из `2^i`  возможных вариантов, поэтому можно использовать не более `2^i` различных цветов.
  • §5. Символьный тип данных в языке Паскаль

    Теперь применим полученные знания о представлении текстовой информации на практике. В языке программирования Паскаль для работы с текстовой информацией есть специальный символьный тип переменных, который называется char (от английского character). Переменные этого типа занимают в оперативной памяти по `1` байту и, соответственно, могут принимать `256` различных значений. Значениями переменных этого типа являются элементы какой-либо однобайтовой кодовой таблицы (например, KOI-`8` или Windows-`1251`). Какие именно символы являются значениями данного типа, зависит от того, какая кодовая таблица используется в момент выполнения (а не написания) программы. То есть одна и та же программа, например, печатающая изображение всех символов кодовой таблицы, на компьютерах с различными текущими кодировками будет иметь различные результаты работы.


    Переменным символьного типа можно присваивать значения при помощи оператора присваивания. При этом есть два способа записи символьных констант. Первый способ – записать явное изображение символа, заключив его в апострофы. Пусть, например, переменная C имеет тип char. Присвоим ей значение: C:= 'a'; Описанный способ записи символьных значений удобно применять практически всегда. Единственный недостаток этого способа заключается в том, что так невозможно представить служебные символы, которые не имеют явных изображений (в кодовой таблице это первые `32` символа). Поэтому существует ещё один способ записи символьных констант – сначала указать спецсимвол решётку (#), а потом код интересующего нас символа. Например, C:=#13; Недостаток этого способа заключается в том, что нужно помнить коды всех символов, поэтому обычно его применяют только для записи символов без явного изображения.


    Переменные типа char можно выводить на экран при помощи оператора вывода и вводить с клавиатуры. Апострофы при вводе набирать не нужно (каждый апостроф также будет считаться отдельным символом). Служебные символы вводятся следующим образом: нужно зажать alt и на правой цифровой клавиатуре набрать код символа (например, 13).


    К переменным типа char можно применять операции сравнения (> , < , >= , <= , = , <>). При этом сравниваются коды символов и большим признаётся символ, имеющий больший код (то есть символ, находящийся дальше от нулевого). Результатом операции сравнения является логическое значение – true или false.


    Существует `5` стандартных функций для работы с переменными символьного типа:

    Функция

    Действие

    Тип

    аргумента

    Тип

    результата

    Ord(c)

    Выдаёт код символа

    Char

    Integer

    Chr(x)

    Выдаёт символ по коду

    Integer

    Char

    Succ(c)

    Выдаёт следующий символ кодовой таблицы. Не определена для последнего символа

    Char

    Char

    Pred(c)

    Выдаёт предыдущий символ кодовой таблицы. Не определена для нулевого символа

    Char

    Char

    Upcase(c)

    Если аргумент является строчной латинской буквой, превращает его в соответствующую заглавную. Иначе ничего не делает

    Char

    Char


    Тип char является порядковым, то есть для каждого символа можно назвать его порядковый номер в типе, а также следующий и предшествующий элементы типа. Например, символ '1' имеет код `49`, следующий символ – это '2', а предыдущий – '0'. Благодаря этому свойству переменные типа char могут использоваться в качестве счётчиков в цикле for. Например, распечатать все заглавные латинские буквы можно следующим образом:


    For  c:= 'A' to 'Z' do write (c);


    где переменная c имеет тип char.


    Если в цикле for используется слово to, то на каждом шаге цикла счётчик будет принимать следующее значение в типе, в случае же downto – предыдущее значение в типе.


    Рассмотрим несколько примеров задач на символьные переменные.


    Задача 1

    Вывести на экран все символы кодовой таблицы.

    Решение

    Эту задачу можно решать двумя способами: перебрать все символы или все их коды – разница только в типе счётчика цикла.

    Способ 1:

      var c:char;

      begin

         for c:=#0 to #255 do

            write(ord(c),'-',c,' ');

          readln

    end.

    Способ 2:

    var i:integer;

    begin

       for i:=0 to 255 do

          write(i, '-',chr(i), ' ');           

       readln

    end.



    Задача 2

    Дана последовательность символов, заканчивающаяся точкой. Подсчитайте сумму цифр, входящих в эту последовательность.

    Решение

    Эта задача демонстрирует очень важную вещь – как превратить символ-цифру в целое число. Это осуществляется следующим образом: необходимо вычислить код интересующего нас символа (например, код единицы `49`) и вычесть из него код символа «ноль». В любой кодировочной таблице символы-цифры идут подряд, поэтому, выполнив указанные действия, мы гарантированно получим числовое значение символа-цифры. Приведём полный текст решения.

    var c: char; s: integer;

    begin

       s :=0;

       read (c);

       while c <> '.' do

         begin

         if (c >= '0')and(c <= '9')

           then s:= s+ord(c)–ord('0');

             read (c);

           end;

       writeln ('s=',s);

       readln

      end.


    Задача 3

    Дана непустая последовательность слов, состоящих из заглавных и строчных латинских букв в любом порядке. Между соседними словами запятая, за последним словом – точка. Никакие другие символы в последовательность не входят. Определить количество слов, которые начинаются на букву `Z`.

    Решение

    Это ещё один классический тип задач на обработку последовательностей символов. При её решении у нас возникнет конструкция из вложенных циклов: внутренний цикл анализирует слово, а внешний перебирает слова. Приведём полный текст решения.

    var c:char; s:integer;

    begin

       s:=0;

       repeat

         read(c);

         if c='Z' then s:=s+1;

         repeat

           read(c)

         until (c=',')or(c='.') 

       until c='.'; 

       writeln('s=',s);

       readln

    end.






     

  • §6. Оператор выбора Case

    Данный оператор представляет собой естественное расширение условного оператора. В общем виде он записывается следующим образом:

    case <выражение порядкового типа> of

      константа_1: оператор_1;

      константа_2: оператор_2;

            ...

      Константа_n: оператор_n;

      else оператор

    end

    Слова: case, of, else, end -  являются ключевыми словами языка. Выражение, стоящее между словами case и of, называется селектором и должно иметь порядковый тип. Тип является порядковым, если можно для каждого значения назвать порядковый номер в типе, предыдущее и следующее значение в типе (кроме первого и последнего значения в типе). Из известных нам стандартных типов порядковыми являются типы integer, longint, boolean и char. Тип real порядковым не является.

    Работает оператор выбора следующим образом. Сначала вычисляется значение селектора, затем оно сравнивается с константами. В случае совпадения селектора с какой-нибудь константой выполняется оператор, стоящий после этой константы, далее управление переходит на следующий за case оператор программы. Если селектор не совпал ни с одной из констант, то выполняется оператор после слова else. Очевидно, что селектор и константы должны иметь одинаковые типы. Иначе невозможно будет провести операции сравнения.

    Если нужно для многих различных значений селектора выполнить один и тот же набор команд, то можно не записывать множество строк с одинаковой правой частью, а перечислить константы через запятую, затем поставить двоеточие и один раз написать нужную последовательность команд. Если константы идут подряд, можно также записать их в виде диапазона: константа_1..константа_2. В этом случае команда будет выполняться при совпадении селектора с любой константой из диапазона. Граничные значения считаются включёнными в диапазон. Можно также указать несколько диапазонов через запятую.

    Оператор выбора предполагает однозначный выбор варианта. То есть нельзя одной и той же константой пометить два различных варианта. Все константы должны быть различны. Особенно аккуратно следует обращаться с диапазонами. Широко распространённая ошибка – указывать одну и ту же константу в качестве начальной границы одного диапазона и конечной – другого. Однако поскольку границы входят в диапазон, получается, что это значение будет входить в два разных диапазона.

    Последнее замечание заключается в том, что в отличие от оператора if перед else необходимо ставить точку с запятой. И кстати, аналогично оператору if, если в ветке else должен стоять пустой оператор, её можно не записывать. Приведём примеры нескольких различных операторов варианта.

    Пример 1

    case c of

      '+': x := x + y;

      '-': x := x - y;

      '*': x := x * y;

      else writeln('error')

     end;

    Пример 2

    case c of

      'a'..'z','A'..'Z': writeln('letter');

      '0'..'9':          writeln('digit')

     end;

       

  • §1. Основы теории информации

    1.1. Понятие информации. Количество информации.

    Единицы измерения информации

    Информация  является  одним из фундаментальных  понятий  совре-менной науки наряду с такими понятиями, как «вещество» и «энергия».

    Определение 1

    В содержательном подходе, информация - это снятая неопределённость. Неопределённость некоторого события - это количество возможных результатов (исходов) данного события.

    Например, если мы подбрасываем вверх монету, то она может упасть двумя различными способами (орлом вверх или решкой вверх). Соответственно, у данного события два возможных исхода. Если же подбрасывать игральный кубик, то исходов будет шесть. 

    Определение 2

    В алфавитном подходе информация - это сообщение (последовательность символов некоторого алфавита). Причём существенными являются только размер алфавита и количество символов в сообщении. Конкретное содержание сообщения интереса не представляет. Чаще всего алфавит является двоичным (состоит из `2` символов – «`0`» и «`1`»).

    После таких определений понятия «информация» можно говорить об её измерении. Введём несколько основных единиц измерения информации.

    Чаще всего в качестве основной единицы измерения информации используется бит. При алфавитном подходе один бит - это количество информации, которое можно передать в сообщении, состоящем из одного двоичного знака (`«0»` или `«1»`). С точки же зрения содержательного подхода один бит - это количество информации, уменьшающее неопределённость знания в два раза.

    Наряду с битами можно использовать и другие единицы измерения информации, например, триты или диты. При алфавитном подходе один трит - это количество информации, которое можно передать в сообщении, состоящем из одного троичного знака `(«0»`, `«1»` или `«2»)`. С точки же зрения содержательного подхода один трит - это количество информации, уменьшающее неопределённость знания в три раза. Соответственно, один дит - это количество информации, уменьшаю-щее неопределённость знания в десять раз, и количество информации, которое можно передать в сообщении, состоящем из одного десятичного знака (арабской цифры). В некоторых задачах (например, в задаче взлома кодового замка) удобнее в качестве основной единицы измерения информации использовать не биты, а диты, поскольку угадывание каждой цифры из кода уменьшает количество комбинаций в `10` раз.

    Для каждой основной единицы измерения информации существуют производные более крупные единицы измерения. Поскольку чаще всего мы будем использовать в качестве основной единицы бит, рассмотрим производные единицы измерения для бита. На практике чаще всего используется не бит, а байт.

    `1` байт (`1`B) `= 8` бит;

    Далее существует две линейки производных единиц для байта – линейка десятичных приставок и линейка двоичных приставок. В случае десятичных приставок каждая следующая единица измерения равна `1000` предыдущих единиц. Обозначаются десятичные приставки латинскими буквами (буква префикса из системы СИ и заглавная «B», обозначающая «байт») Итак:

    `1` килобайт (`1` kB) `= 1000` B (1000 байт);

    `1` мегабайт (`1` MB) `= 1000` kB ;

    `1` гигабайт (`1` GB) `= 1000`  MB;

    `1` терабайт (`1` TB) `= 1000`  GB;

    `1` петабайт (`1` PB) `= 1000`  TB;

    `1` эксабайт (`1` EB) `= 1000`  PB;

    `1` зеттабайт (`1` ZB) `= 1000` EB;

    `1` йоттабайт(`1` YB) `= 1000` ZB.

    Более крупных единиц на настоящий момент не введено.

    При использовании двоичных приставок, каждая следующая едини-ца измерения равна 1024 предыдущих единиц. В России принято обозначать двоичные приставки, записывая префикс заглавной русской буквой и после него слово «байт» целиком и тоже русскими буквами. За рубежом для обозначения двоичных приставок между префиксом и «B» добавляется маленькая буква «i» (от слова «binary»). Кроме того, все префиксы записываются заглавными буквами. Итак:

    `1` кибибайт (`1` Кбайт, `1` KiB) `=2^10` байт `= 1024` байт;

    `1` мебибайт (`1` Мбайт, `1` MiB) `=2^20` байт `= 1024` Кбайт;

    1 гибибайт (`1` Гбайт, `1` GiB) `=2^30` байт `= 1024` Мбайт;

    1 тебибайт (`1` Тбайт, `1` TiB) `=2^40` байт `= 1024` Гбайт;

    1 пебибайт (`1` Пбайт, `1` PiB) `=2^50` байт `= 1024` Тбайт;

    1 эксбибайт (`1` Эбайт, `1`EiB) `=2^60` байт `= 1024`  Пбайт;

    1 зебибайт (`1` Збайт, `1` ZiB) `=2^70` байт `= 1024` Эбайт;

    1 йобибайт (`1` Йбайт, `1` YiB) `=2^80` байт `= 1024` Збайт.


    1.2. Формула Хартли измерения количества информации.

    Закон аддитивности информации

    Как уже упоминалось выше, в качестве основной единицы измерения информации мы будем использовать бит. Соответственно, с точки зрения алфавитного подхода мы будем кодировать информацию при помощи нулей и единиц (двоичных знаков).  

    Определение

    Для того чтобы измерить количество информации в сообщении, надо закодировать сообщение в виде последовательности нулей и единиц наиболее рациональным способом, позволяющим получить самую короткую последовательность. Длина полученной последовательности нулей и единиц и является мерой количества информации в битах.

    Поставим себе одну из наиболее часто встречающихся задач в теории информации. Пусть у нас есть `N` возможных равновероятных вариантов исходов некоторого события. Какое количество информации нам нужно получить, чтобы оставить только один вариант?

    Например, пусть мы знаем, что некоторая интересная для нас книга находится на одной из полок нашего книжного шкафа, в котором `8` полок. Какое количество информации нам нужно получить, чтобы однозначно узнать полку, на которой находится книга?

    Решим эту задачу с точки зрения содержательного и алфавитного подходов. Поскольку изначально в шкафу было `8` полок, а в итоге мы выберем одну, следовательно, неопределённость знания о местоположении книги уменьшится в `8` раз. Мы говорили, что один бит – это количество информации, уменьшающее неопределённость знания в `2` раза. Следовательно, мы должны получить `3` бита информации.

    Теперь попробуем использовать алфавитный подход. Закодируем номера всех полок при помощи `0` и `1`. Получим следующие номера: `000, 001, 010, 011, 100, 101, 110, 111`. Для того чтобы узнать, на какой полке находится книга, мы должны узнать номер этой полки. Каждый номер состоит из `3` двоичных знаков. А по определению, `1` бит (в алфавитном подходе) – это количество информации в сообщении, состоящем из `1` двоичного знака. То есть мы тоже получим `3` бита информации.

    Прежде чем продолжить рассмотрение поставленной общей задачи введём важное математическое определение.

    Определение

    Назовём логарифмом числа `N` по основанию `a` такое число `X`, что  Обозначение:

    `X=log_aN`.

    На параметры логарифма налагаются некоторые ограничения. Число `N` обязательно должно быть строго больше `0`. Число `a` (основание логарифма) должно быть также строго больше нуля и при этом не равняться единице (ибо при возведении единицы в любую степень получается единица).

    Теперь вернёмся к нашей задаче. Итак, какое же количество информации нам нужно получить, чтобы выбрать один исход из `N` равновероятных?  Ответ на этот вопрос даёт формула Хартли: `H=log_aN`, где `N` – это количество исходов, а `H` – количество информации, которое нужно получить для однозначного выбора `1` исхода. Основание логарифма обозначает единицу измерения количества информации. То есть если мы будем измерять количество информации в битах, то логарифм нужно брать по основанию `2`, а если основной единицей измерения станет трит, то, соответственно, логарифм берётся по основанию `3`. 

    Рассмотрим несколько примеров применения формулы Хартли.

    Задача 1

    В библиотеке `16` стеллажей, в каждом стеллаже `8` полок. Какое количество информации несёт сообщение о том, что нужная книга находится на четвёртой полке?

    Решение

    Решим эту задачу с точки зрения содержательного подхода. В переданном нам сообщении указан только номер полки, но не указан номер стеллажа. Таким образом, устранилась неопределённость, связанная с полкой, а стеллаж, на котором находится книга, мы всё ещё не знаем. Так как известно, что в каждом стеллаже по `8` полок, следовательно, неопределённость уменьшилась в `8` раз. Следовательно, количество информации можно вычислить по формуле Хартли `H=log_2  8=3` бита информации.

    Задача 2

    Имеется `27` монет, одна из которых фальшивая и легче всех остальных. Сколько потребуется взвешиваний на двухчашечных весах, чтобы однозначно найти фальшивую монету?

    Решение

    В этой задаче неудобно использовать бит в качестве основной единицы измерения информации. Двухчашечные  весы могут принимать три положения: левая чаша перевесила, значит, фальшивая монета находится в правой; правая чаша перевесила, значит, монета находится в левой; или же весы оказались в равновесии, что означает отсутствие фальшивой монеты на весах. Таким образом, одно взвешивание может уменьшить неопределённость в три раза, следовательно, будем использовать в качестве основной единицы измерения количес-тва информации трит.

    По формуле Хартли `H = log _3  27 = 3` трита. Таким образом, мы видим, что для того чтобы найти фальшивую монету среди остальных, нам потребуется три взвешивания.

    Логарифмы обладают очень важным свойством: `log_a(X*Y)=log_aX+log_aY`.

    Если переформулировать это свойство в терминах количества информации, то мы получим закон аддитивности информации: Коли-чество информации`H(x_1, x_2)`, необходимое для установления пары `(x_1, x_2)`, равно сумме количеств информации `H(x_1)` и `H(x_2)`, необходимых для независимого установления элементов `x_1` и `x_2`:

    `H(x_1,x_2)=H(x_1)+H(x_2)`.

    Проиллюстрируем этот закон на примере. Пусть у нас есть игральная кость в форме октаэдра (с `8` гранями) и монета. И мы одновременно подбрасываем их вверх. Нужно узнать, какое количество информации несёт сообщение о верхней стороне монеты после падения (орёл или решка) и числе, выпавшему на игральной кости.

     Игральная кость может упасть `8` различными способами, следовательно, по формуле Хартли можно вычислить, что, определив число, выпавшее на игральной кости, мы получаем `3` бита информации. Соответственно, монета может упасть только `2` способами и несёт в себе `1` бит информации. По закону аддитивности информации мы можем сложить полученные результаты и узнать, что интересующее нас сообщение несёт `4` бита информации.

    Рассмотрим другой способ решения этой задачи. Если мы сразу рассмотрим все возможные исходы падения `2` предметов, то их будет `16` (кость выпадает `8` способами, а монета - орлом вверх, и кость выпадает `8` способами, а монета - решкой вверх). По формуле Хартли находим, что интересующее нас сообщение несёт `4` бита информации.

    Замечание

    Если в результате вычислений по формуле Хартли получилось нецелое число, а в задаче требуется указать целое число бит, то результат следует округлить в большую сторону.

    1.3. Примеры решения задач по теме

    «Математическая теория информации»

    Задача 1

    В велокроссе участвуют `130` спортсменов. Специальное устройство регистрирует прохождение каждым из участников промежуточного финиша, записывая его номер с использованием минимально возможного количества бит, одинакового для каждого спортсмена. Каков информационный объём сообщения, записанного устройством, после того как промежуточный финиш прошли `75` велосипедистов?

    Решение

    Первым делом нужно определить, сколько бит необходимо для кодирования `130` номеров спортсменов. Поскольку номера записываются в некотором устройстве, количество бит для кодирования каждого номера обязательно должно быть целым: `H=log_2  130`.  После округления результата в большую сторону получим число `8`. Следовательно, для кодирования `1` номера необходим `1` байт. Таким образом, информационный объём сообщения, записанного устройством, составляет `75` байт.


    Задача 2

    В некоторой стране автомобильный номер состоит из `7` символов. В качестве символов используют `18` различных букв и десятичные цифры в любом порядке.

    Каждый такой номер в компьютерной программе записывается минимально возможным и одинаковым целым количеством байтов, при этом используют посимвольное кодирование и все символы кодируются одинаковым и минимально возможным количеством битов.

    Определите объём памяти, отводимый этой программой для записи `60` номеров.

    Решение

    Первое действие аналогично предыдущей задаче – нужно установить, каким количеством бит кодируется `1` символ. Всего используется `18` букв и `10` десятичных цифр, то есть `28` символов. По формуле  Хартли `H=log_2  28`.  После  округления  получается `5` бит на `1` символ. Вторым действием нужно узнать, какой объём памяти занимает `1` номер. Поскольку номер состоит из `7` символов, а каждый символ кодируется `5` битами, нам потребуется `35` бит памяти для хранения `1` номера. Однако по условию каждый номер должен записываться целым количеством байтов, а в каждом байте `8` бит. Ближайшее сверху к `35` число, делящееся на `8` – это число `40`, следовательно, на каждый номер отводится `5` байт. Таким образом, для записи `60` номеров программе потребуется `60*5 = 300` байт памяти.

    Задача 3

    Сигналы с судна на берег передают, используя различное положение рук. Каждая рука может быть поднята вверх, отведена в сторону или опущена вниз. Сколько различных сигналов можно подать двумя руками, если важно то, какая рука была в каком положении, но обе руки могут находиться и в одинаковом положении?

    Решение

    Главная ловушка этой задачи заключается в следующем неверном ходе мыслей: «Раз одной рукой передаётся `3` сигнала, значит, двумя в `2` раза больше, то есть `6`». На самом деле число исходов с добавлением новой руки увеличивается в `3` раза, поскольку можно продублировать все положения первой руки для каждого из `3` возможных положений второй. Таким образом, в ответе получается `9` сигналов.

    Задача 4

    В течение `5` секунд было передано сообщение, объём ко-торого составил `375` байт. Каков размер алфавита, с помощью кото-рого записано сообщение, если скорость его передачи составила `200` символов в секунду?

    Решение

    Первым делом найдём скорость передачи этого сообщения: `375//5 = 75` байт в секунду. Далее, нам известно, что в секунду передавалось `200` символов, которые занимают `75` байт памяти. Поэтому следующим действием найдём объём памяти, отводимый под `1` символ, переведя ответ в биты (ибо уже из входных чисел очевидно, что под каждый символ отводится менее `1` байта): `75^(**)8//200 = 600//200 = 3`. Таким образом, под каждый символ отводится `3` бита.

    Применяя формулу Хартли, находим, что алфавит состоит из `8` символов.

  • § 2. Представление текстовой информации в компьютере

    Всякий текст состоит из символов - букв, цифр, знаков препинания и т. д., - которые человек различает по начертанию. Однако для компьютерного представления текстовой информации такой метод неудобен, а для компьютерной обработки текстов - и вовсе неприемлем. Используется другой способ: все символы кодируются числами, и текст представляется в виде набора чисел - кодов символов, его составляющих. При выводе текста на экран монитора или принтер необходимо восстановить изображения всех символов, составляющих данный текст. Для этого используются кодовые таблицы символов, в которых для каждого символа устанавливается соответствие между его кодом и изображением. Все кодовые таблицы, используемые в любых компьютерах и любых операционных системах, подчиняются международным стандартам кодирования символов.


    Основой для компьютерных стандартов кодирования символов послужил ASCII (American Standard Code for Information Interchange) - американский стандартный код для обмена информацией, разработанный в 1960-х годах и применяемый в США для любых видов передачи информации. В нём используется `7`-битное кодирование: общее количество символов составляет `2^7=128`, из них первые `32` символа - «управляющие», а остальные - «изображаемые», т. е. имеющие графическое изображение. Управляющие символы должны восприниматься устройством вывода текста как команды, например:

    Cимвол

    Действие

    Английское название

    №7

    Подача стандартного звукового сигнала

    Beep

    №8

    Затереть предыдущий символ

    Back Space (BS)

    №13

    Перевод строки

    Line Feed (LF)

    №26

    Конец текстового файла

    End Of File (EOF)

    №27

    Отмена предыдущего ввода

    Escape (ESC)


    К изображаемым символам в ASCII относятся буквы английского (латинского) алфавита (заглавные и прописные), цифры, знаки препинания и арифметических операций, скобки и некоторые специальные символы. Фрагмент кодировки ASCII приведён в таблице.

    Символ

    Десятичный код

    Двоичный код

    Символ

    Десятичный код

    Двоичный код

    Пробел

    `32`

    `00100000`

    `0`

    `48`

    `00110000`

    `!`

    `33`

    `00100001`

    `1`

    `49`

    `00110001`

    #

    `35`

    `00100011`

    `2`

    `50`

    `00110010`

    $

    `36`

    `00100100`

    `3`

    `51`

    `00110011`

    `**`

    `42`

    `00101010`

    `4`

    `52`

    `00110100`

    `+`

    `43`

    00101011

    5

    53

    `00110101`

    ,

    `44`

    `00101100`

    `6`

    `54`

    `00110110`

    `–`

    `45`

    `00101101`

    `7`

    `55`

    `00110111`

    .

    `46`

    `00101110`

    `8`

    `56`

    `00111000`

    /

    `47`

    `00101111`

    `9`

    `57`

    `00111001`

    `A`

    `65`

    `01000001`

    `N`

    `78`

    `01001110`

    `B`

    `66`

    `01000010`

    `O`

    `79`

    `01001111`

    `C`

    `67`

    `01000011`

    `P`

    `80`

    `01010000`

    `D`

    `68`

    `01000100`

    `Q`

    `81`

    `01010001`

    `E`

    `69`

    `01000101`

    `R`

    `82`

    `01010010`

    `F`

    `70`

    `01000110`

    `S`

    `83`

    `01010011`

    `G`

    `71`

    `01000111`

    `T`

    `84`

    `01010100`

    `H`

    `72`

    `01001000`

    `U`

    `85`

    `01010101`

    `I`

    `73`

    `01001001`

    `V`

    `86`

    `01010110`

    `J`

    `74`

    `01001010`

    `W`

    `87`

    `01010111`

    `K`

    `75`

    `01001011`

    `X`

    `88`

    `01011000`

    `L`

    `76`

    `01001100`

    `Y`

    `89`

    `01011001`

    `M`

    `77`

    `01001101`

    `Z`

    `90`

    `01011010`



    Хотя в ASCII символы кодируются `7`-ю битами, в памяти компьютера под каждый символ отводится ровно `1` байт (`8` бит). И получается, что один бит из каждого байта не используется.


    Главный недостаток стандарта ASCII заключается в том, что он рассчитан на передачу только текста, состоящего из английских букв. Со временем возникла необходимость кодирования и неанглийских букв. Во многих странах для этого стали разрабатывать расширения ASCII-кодировки, в которых применялись однобайтные коды символов; при этом первые `128` символов кодовой таблицы совпадали с кодировкой ASCII, а остальные (со `128`-го по `255`-й) использовались для кодирования букв национального алфавита, символов национальной валюты и т. п. Из-за несогласованности этих разработок для многих языков было создано по нескольку вариантов кодовых таблиц (например, для русского языка их около десятка).


    Впоследствии использование кодовых таблиц было несколько упорядочено: каждой кодовой таблице было присвоено особое название и номер. Указав кодовую таблицу, автоматически выбирают и язык, которым можно пользоваться в дополнение к английскому; точнее, выбирается то, как будут интерпретироваться символы с кодами более `127`.


    Для русского языка наиболее распространёнными являются однобайтовые кодовые  таблицы СР-`866`, Windows-`1251`, ISO `8859-5` и КОИ-`8`. В них первые `128` символов совпадают с ASCII-кодировкой, а русские буквы помещены во второй части таблицы (с номерами `128-255`), однако коды русских букв в этих кодировках различны! Сравните, например, кодировки КОИ-`8` (Код Обмена Информацией `8`-битный, международное название «koi-`8`r») и Windows-`1251`, фрагменты которых приведены в таблицах на странице `13`.


    Несовпадение кодовых таблиц приводит к ряду неприятных эффектов: один и тот же текст (неанглийский) имеет различное компьютерное представление в разных кодировках, соответственно, текст, набранный в одной кодировке, будет нечитабельным в другой!


    Однобайтовые кодировки обладают одним серьёзным ограничением: количество различных кодов символов в отдельно взятой кодировке недостаточно велико, чтобы можно было пользоваться одновременно несколькими языками. Для устранения этого ограничения в 1993-м году был разработан новый стандарт кодирования символов, получивший название Unicode, который, по замыслу его разработчиков, позволил бы использовать в текстах любые символы всех языков мира.




    В Unicode на кодирование символов отводится `32` бита. Первые `128` символов (коды `0-127`) совпадают с таблицей ASCII, все основные алфавиты современных языков полностью умещаются в первые `65536` кодов  (`65536=2^16`), а в целом стандарт Unicode описывает все алфавиты современных и мёртвых языков; для языков, имеющих несколько алфавитов или вариантов написания (например, японский и индийский), закодированы все варианты; внесены все математические и иные научные символьные обозначения, и даже - некоторые придуманные языки (например, письменности эльфов и Мордора из эпических произведений Дж.Р.Р. Толкиена). Потенциальная информационная ёмкость Unicode столь велика, что сейчас используется менее одной тысячной части возможных кодов символов!


    В современных компьютерах и операционных системах используется укороченная, `16`-битная версия Unicode, в которую входят все современные алфавиты; эта часть Unicode называется базовой многоязыковой страницей (Base Multilingual Plane, BMP).

  • § 5. Логический тип данных в языке программирования Паскаль

    Подобно предыдущему заданию, теперь мы вновь перейдём к изучению программирования и применим полученные знания по алгебре логики на практике.

    В прошлом задании мы работали с числовыми типами переменных и учили арифметику, теперь познакомимся с логическим типом переменных, который называется Boolean. Переменные этого типа имеют всего два значения – true и false (соответственно, «истина» и «ложь»). Подобно числовым переменным им можно присваивать значения при помощи оператора присваивания. При этом необходимо строго соблюдать правило совместимости типов. То есть, логическим переменным нельзя присваивать числовые значения, а числовым – логические.

    В языке Паскаль помимо арифметических операций ещё существует `6` операций сравнения: больше» `(>)`, «больше или равно» `(> =)`, «меньше» `(<)`, «меньше или равно» `(< =)`, «равно» `(=)`, и «не равно» `(<>)`. Операция «не равно» записывается, как последовательность знаков «меньше» и «больше».  Результатом каждой из этих операций является логическое значение true или false. Например, операция `5 > 2` выдаст значение true, а операция `x<>3` выдаст значение true, если переменная `X` имеет любое значение, кроме `3`. Сравнивать можно не только числа (причём как целые, так и вещественные), но и логические значения. При этом считается, что значение true больше, чем значение false. При сравнении обязательно соблюдать правило совместимости типов, то есть можно сравнивать числа между собой (причём в отличие от оператора присваивания, здесь никаких ограничений нет). Можно сравнивать между собой логические значения. Но нельзя сравнивать логическое значение с числом любого типа.

    Помимо операций сравнения, в паскале существуют четыре логические операции, абсолютно аналогичные операциям алгебры логики.

    1) Операция AND (в алгебре логики – «конъюнкция»)

    2) Операция OR (в алгебре логики – «дизъюнкция»)

    3) Операция XOR (в алгебре логики – «строгая дизъюнкция»)

    4) Операция NOT (в алгебре логики – «отрицание»)

    Все операнды этих операций должны быть логического типа, а никак не числового. Причём, операции AND, OR и XOR имеют по `2` операнда, а операция NOT – один операнд, который записывается справа от названия операции (аналогично обозначению операции NOT при помощи `¬` в алгебре логики)

    Теперь у нас есть достаточно много операций и нужно расставить их по приоритету выполнения. В Паскале есть четыре приоритета операций:

    1) Операция not;

    2) Операции группы умножения: *, /, div, mod, and;

    3) Операции группы сложения: +, – , or, xor;

    4) Операции группы сравнения: >, <, <=, >=, =, <>.

    Операции одного приоритета выполняются слева направо. Операции в круглых скобках имеют более высокий приоритет, чем вне скобок.

    Теперь рассмотрим несколько примеров задач на использование логического типа.

    Общая Задача

    Записать на Паскале логическое выражение истинное при выполнении указанного условия и ложное в противном случае. Результат вычисления данного выражения присвоить переменной F.

    Условие 1

    Числовая  переменная  X  имеет  значение  на  отрезке [–1,1].

    Решение

     F:=abs(X)<=1;

    Условие 2

    Числовая переменная X имеет значение на отрезке [2,7].

    Решение

    F:=(X>=2)and(X<=7).

    Обратите внимание на скобки. Они обязательны, поскольку операции сравнения имеют более низкий приоритет, чем операция and.

    Условие 3

    Числовая переменная X имеет значение на одном из 2 отрезков: [–10, 3] или [10, 20].

    Решение

    F:=(X>=-10)and(X<=3)or(X>=10)and(X<=20).

    Условие 4

    Логические переменные A и B имеют различные значения.

    Решение

    F:=A<>B.

    Условие 5

    По крайней мере 2 из логических переменных A, B и C имеют значение true.

    Решение

    F:=A and B or A and C or B and C.



    :

       

  • § 1. Введение в алгебру логики

    Алгебра логики является частью активно развивающейся сегодня науки – дискретной математики. Дискретная математика  –  это тот раз-дел математики, где не используется понятие непрерывности.

    Термин «дискретный» в русском языке имеет следующие значения:

    1) Состоящий из отдельных частей.

    2) Изменяющийся между несколькими стабильными состояниями.

    3) Существующий лишь в отдельных точках.

    Для того, чтобы лучше понять этот термин, рассмотрим следующий пример. Мы знаем, что график некоторой функции (например, `y=x^2`)  является непрерывной линией (параболой), если аргумент функции принимает все значения из множества действительных чисел. А теперь представим, что `x` может принимать только значения из множества целых чисел. В этом случае график будет представлять собой бесконечное количество отдельных точек, располагающихся на координатной плоскости в определённом порядке. В расположении точек будет угадываться парабола, но непрерывной линии мы не увидим. Вместо неё мы увидим дискретную структуру.

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

    Определение 1

    Высказывание – это повествовательное предложение, в отношении которого можно судить о его истинности либо ложности.

    Например, предложение: «Я – твой друг» является высказыванием, а предложение: «Положи это сюда!» высказыванием не является, поскольку не является повествовательным предложением.

    Истинность или ложность каждого высказывания зависит от трактовки его содержания. Например, высказывание: «Город Москва – столица России» является истинным, а высказывание: «Город Санкт-Петербург стоит на реке Лене» является ложным.

    Определение 2

    Высказывание называется простым, если никакая его часть сама по себе не является высказыванием.

    Высказывание: «Эта шляпа – красная» является простым, в то время как высказывание: «Если прямая пересекает одну из двух параллельных прямых, то она пересекает и вторую» является примером сложного высказывания, которое, по сути, состоит из трёх простых: «две прямые параллельны», «прямая пересекает одну из двух прямых», «прямая пересекает другую прямую». В сложном высказывании простые высказывания соединяются при помощи логических связок. В рассмотренном выше примере логической связкой является союз «если то».

    Алгебра логики изучает структуру сложных логических высказываний и способы установления их истинности при помощи алгебраических методов. Причём, конкретное содержание высказываний предметом изучения алгебры логики не является, и, соответственно, интересовать нас в дальнейшем не будет.

    В прошлом задании при изучении основ программирования мы столкнулись с понятиями констант и переменных. Константа – это некоторое конкретное значение, а переменная – это объект, который может менять свои значения и которому можно присваивать различные значения. Этими же понятиями пользуется и алгебра логики, чтобы абстрагироваться от конкретных содержаний высказываний. Будем считать, что любое простое высказывание – это есть константа. И введём понятие переменной в алгебре логики.

    Определение 3

    Переменной в алгебре логики называется объект, имеющий уникальное имя, и значением которого может являться любое простое высказывание.

    В отличие от языков программирования в алгебре логики нет ограничений при именовании переменных. Переменные могут иметь абсолютно любые имена, но чаще всего их обозначают заглавными или строчными латинскими буквами (`A, B, C, x, y, z, s`), либо последовательностью, состоящей из заглавной или строчной латинской буквы и целого числа (`A1, A2, A4, A10000000`). Ещё одно отличие от языков программирования заключается в том, что после присвоения переменной высказывания можно говорить об её истинности либо ложности. То есть существует два понятия «значение логической переменной». С одной стороны – это конкретное высказывание, а с другой стороны – это истина, либо ложь.

    Определение 4

    Логическим выражением называется объект, состоящий из логических переменных и логических операций и имеющий значение истина, либо ложь. Процесс построения логического выражения по сложному высказыванию называется формализацией высказывания.

    В процессе формализации нужно сделать следующие действия: выделить из сложного высказывания простые и превратить их в логические переменные. Затем каждая логическая связка превращается в логическую операцию. В описанных действиях остаётся два непонятных момента. Первый – что такое логическая операция, и второй – каким образом логические связки превращаются в логические операции. Будем последовательно отвечать на эти вопросы.

    Для того, чтобы определить операцию необходимо указать количество операндов (объектов, над которыми выполняется операция) их тип и результат выполнения операции. Логические операции чаще всего имеют два операнда, как и математические. Однако, мы также будем изучать операции, которые имеют всего один операнд. Независимо от количества операнды должны быть логического типа, то есть иметь значение истина, либо ложь. Результатом логической операции также является логическое значение – истина или ложь. Для того, чтобы немного сократить запись условимся в дальнейшем логическое значение «истина» обозначать единичкой `(1)`, а логическое значение – «ложь» – нулём `(0)`.

    Очевидно, что если у операции два операнда, и значением каждого является `0` или `1`, то существует всего четыре набора значений операндов `(00, 01, 10, 11)`. Для каждого из наборов необходимо определить значение логической операции. Удобно это представлять в виде таблицы. Таблицы соответствия значений логических операций набору значений операндов называются таблицами истинности.

  • § 2. Логические операции. Формализация высказываний

    Сейчас мы познакомимся с шестью основными логическими  операциями.  Каждая  из  них имеет несколько названий и обозначений. 

    Названия операции

    Возможные обозначения

    Отрицание, инверсия.


    0¯,\overline{\color[rgb]{1.0, 1.0, 1.0}0},  `~|,  not`

    Конъюнкция, логическое умно-жение, операция И, операция AND.

    `&, ^^, *,` по аналогии с алгебраическим умножением может никак не обозначаться

     

    Дизъюнкция, нестрогая дизъюнкция, логическое сложение, операция ИЛИ, операция OR.

    `|``, vv, +`

    Строгая дизъюнкция, разделительная дизъюнкция, исключающее ИЛИ, сложение по модулю 2.

    `o+, Delta`

    Эквивалентность, эквиваленция, равенство, равнозначность.

    `iff, -=`

    Импликация, следование, следствие

    `=>, ->`

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

    Для того, чтобы не путаться и гарантированно перебрать все возможные комбинации значений операндов, принято записывать их в лексикографическом порядке (условно считается, что «ложь» `<` «истина»).

    Таблица истинности для конъюнкции

    Первый операнд

    Второй операнд

    Значение операции

    `0`

    `0`

    `bb0`

    `0`

    `1`

    `bb0`

    `1`

    `0`

    `bb0`

    `1`

    `1`

    `bb1`

     

    Таблица истинности для дизъюнкции

    Первый операнд

    Второй операнд

    Значение операции

    `0`

    `0`

    `bb0`

    `0`

    `1`

    `bb1`

    `1`

    `0`

    `bb1`

    `1`

    `1`

    `bb1`

     

    Таблица истинности для строгой дизъюнкции

    Первый операнд

    Второй операнд

    Значение операции

    `0`

    `0`

    `bb0`

    `0`

    `1`

    `bb1`

    `1`

    `0`

    `bb1`

    `1`

    `1`

    `bb0`


    Таблица истинности для эквивалентности

    Первый операнд

    Второй операнд

    Значение операции

    `0`

    `0`

    `bb1`

    `0`

    `1`

    `bb0`

    `1`

    `0`

    `bb0`

    `1`

    `1`

    `bb1`

     

    Таблица истинности для импликации

    Первый операнд

    Второй операнд

    Значение операции

    `0`

    `0`

    `bb1`

    `0`

    `1`

    `bb1`

    `1`

    `0`

    `bb0`

    `1`

    `1`

    `bb1`

                     

    Таблица истинности для отрицания

    Значение операнда

    Значение операции

    `0`

    `bb1`

    `1`

    `bb0`

    Теперь осталось лишь установить соответствие между логическими операциями и логическими связками в русском языке.

    Логическая операция

    Логические связки в русском языке

    Отрицание

    Неверно что…

    Конъюнкция

    и, а, но,  а также, при этом,

    одновременно с этим, хотя

    Дизъюнкция

    Или

    Строгая дизъюнкция

    или, либо

    Эквивалентность

    Тогда и только тогда когда,

    необходимо и достаточно чтобы

    Импликация

    если то, необходимо чтобы, достаточно чтобы

    Обратите внимание, что союз ИЛИ может означать, как строгую так и нестрогую дизъюнкцию. Его интерпретация зависит от содержания (!!!) высказывания.

    Пример 1

     Рассмотрим высказывание: «Мы идём в кино в субботу или в воскресение». Здесь два простых высказывания: «Мы идём в кино в субботу» и «Мы идём в кино в воскресение». Между ними стоит союз ИЛИ, который можно интерпретировать двояко. В данном случае очевидно, что мы можем пойти в кино и в субботу, и в воскресение, поэтому дизъюнкция будет нестрогая. Возьмём две логические переменные – `p` и `q` и присвоим им простые высказывания. Тогда исходное высказывание в формализованном виде будет выглядеть, как `bb(pvvq)`.

    Пример 2

    Рассмотрим высказывание: «Я сейчас на севере Москвы или на юго-западе Москвы». Здесь тоже два простых высказывания, которые связаны союзом ИЛИ. Но в этом случае союз ИЛИ интерпретируется, как строгая дизъюнкция, поскольку нельзя одновременно находиться в двух местах. Таким образом, если снова взять логические переменные `p` и `q`, то получится следующая логическая формула: `bb(p"o+q)`.


    Пример 3

    Рассмотрим высказывание: «Для того, чтобы четырёхугольник был квадратом, необходимо, чтобы все его стороны были равны». Здесь два простых высказывания: «Четырёхугольник является квадратом» и «Все стороны четырёхугольника равны». Присвоим их соответственно логическим переменным `p` и `q`. Логическая связка «необходимо, чтобы» - это импликация. Весь вопрос в том, что из чего следует. (Какая запись правильная: `bbp -> bbq` или `bbq ->bbp`?)  Импликация ложна только в единственном случае: когда левый операнд имеет значение «истина», а правый – «ложь». Рассмотрим все возможные значения операндов и проанализируем, какая из ситуаций невозможна.

    1) `p` и `q` ложны. Это значит, что четырёхугольник не является квадратом и его стороны не равны. Это возможная ситуация.

    2) `p` – ложно, `q` – истинно. Это значит, что четырёхугольник не является квадратом, но стороны у него равны. Это возможно (ромб).

    3) `p` – истинно, `q` – истинно. Это значит, что четырёхугольник является квадратом и стороны у него равны. Это возможная ситуация.

    4) `p` – истинно, `q` – ложно. Это значит, что четырёхугольник является квадратом, но стороны у него не равны. Это невозможная ситуация.

    Анализ ситуаций показывает, что левым операндом импликации должна быть переменная `p`. Таким образом, в формализованном виде исходное высказывание выглядит как `bb(p -> q)`.

    Очень часто вместо «присвоим логическим переменным эти высказывания» говорят «обозначим высказывания следующим образом». В дальнейшем мы тоже будем использовать этот речевой оборот.

  • § 3. Законы алгебры логики

    Итак, мы познакомились с понятием логического выражения и увидели, каким образом его строить по высказыванию на русском языке. Следующий шаг – изучение преобразований логических выражений.


    Определение 5

    Логические выражения, зависящие от одних и тех же логических переменных, называются равносильными, если на любом наборе значений переменных они принимают одинаковое значение (`0` или `1`). В дальнейшем для обозначения равносильности логических выражений мы будем использовать знак равенства.


    Законы алгебры логики

    это некоторые стандартные преобразования логических выражений, при которых сохраняется равносильность. Начнём с самых простых законов:

    1) Законы поглощения констант

      x `vv` 0 = x,  x & 1 = x;

     2) Законы поглощения переменных

      x `vv` 1 = 1,  x & 0 = 0;

     3) Законы идемпотентности

      x & x = х,  x `vv` x = х;

     4) Закон двойного отрицания

     x=\style{font-family:'Courier New'}{\overset={\mathrm x}} = x;

     5) Закон противоречия

      x & x-\style{font-family:'Courier New'}{\overset-{\mathrm x}} = 0;

     6) Закон исключённого третьего

      x `vv` x-\style{font-family:'Courier New'}{\overset-{\mathrm x}} = 1;


    Приведённые законы ещё называют аксиомами алгебры логики. Истинность этих и всех последующих законов легко можно установить, построив таблицу истинности для левого и правого логического выражения.


    Переходим к группе законов, которые практически аналогичны законам алгебры чисел.


    7) Законы коммутативности 

    x & y = y & x,

    x `vv` y = y `vv` x;


    Здесь стоит сделать замечание, что помимо конъюнкции и дизъюнкции свойством коммутативности также обладают эквивалентность и строгая дизъюнкция. Импликация – единственная из изучаемых операций, которая имеет два операнда и не обладает свойством коммутативности.


    8) Законы ассоциативности

      (x & y) & z = x & (y & z),

     (x`vv`y) `vv` z = x `vv` (y `vv` z);

    9) Законы дистрибутивности

      x & (y `vv` z) = (x & y) `vv` (x & z),
     x `vv` (y & z) = (x `vv` y) & (x `vv` z);


    Первый из законов дистрибутивности аналогичен закону дистрибутивности в алгебре чисел, если конъюнкцию считать умножением, а дизъюнкцию – сложением. Второй же закон дистрибутивности отличается от алгебры чисел, поэтому рекомендуется обратить на него особое внимание и в дальнейшем использовать при решении задач на упрощение выражений.


    Кроме аксиом и алгебраических свойств операций ещё существуют особые законы алгебры логики.


    особые законы алгебры логики.

    10) Законы де Моргана

    x&y=xy,\style{font-family:'Courier New'}{\overline{\mathrm x\&\mathrm y}=\overline{\mathrm x}\vee\overline{\mathrm y},}

    xy=x¯ & y;\style{font-family:'Courier New'}{\overline{\mathrm x\vee\mathrm y}=\overline{\mathrm x}\;\&\;\overline{\mathrm y};}

    11) Загоны поглощения (не путать с аксиомами поглощения переменных нулём или единицей)

      x `vv` (x & y) = x;

      x & (x `vv` y) = x.


    Рассмотрим пример доказательства первого закона де Моргана при помощи построения таблицы истинности.

    `x`

    `Y`

    `x&y`

     `bar(x&y)`

    `barx` `bary`

    `barx vv bary`

    `0`

    `0`

    `0`

    `1`

    `1`

    `1`

    `1`

    `0`

    `1`

    `0`

    `1`

    `1`

    `0`

    `1`

    `1`

    `0`

    `0`

    `1`

    `0`

    `1`

    `1`

    `1`

    `1`

    `1`

    `0`

    `0`

    `0`

    `0`



    Так как результирующие столбцы совпали, то выражения, стоящие в левой и правой частях закона, равносильны.


    В алгебре при решении задач на упрощение выражений большой популярностью пользовалась операция вынесения общего множителя за скобки. В алгебре логики эта операция также является легитимной, благодаря законам дистрибутивности и закону поглощения константы `1`. Продемонстрируем этот приём на простом примере: докажем первый закон поглощения, не используя таблицу истинности.


    Наше начальное выражение: x `vv` (x & y). Выносим `x` за скобки и получаем следующее выражение:


    x &(1 `vv` y). Используем закон поглощения переменной константой `1` и получаем следующее выражение: x & 1. И теперь используем закон поглощения константы и получаем просто x.


    В заключение, следует сказать несколько слов об операции импликации. Как уже отмечалось выше, импликация не обладает свойством коммутативности. Её операнды неравноправны, поэтому каждый из них имеет уникальное название. Левый операнд импликации называется посылкой, а правый – следствием. Из таблицы истинности импликации следует, что она истинна, когда истинно следствие, либо ложна посылка. Единственный случай, когда импликация ложна – это случай истинной посылки и ложного следствия. Таким образом, мы подошли к последнему закону алгебры логики, который бывает полезен при упрощении выражений.


    12) Закон преобразования импликации


    `"x"  ->  "y" = bar("x")  vv  "y"`

    Необходимо ещё отметить, что в сложных логических выражениях у операций есть порядок приоритетов.



    1) Отрицание



    2) Конъюнкция



    3) Дизъюнкция, строгая дизъюнкция, эквивалентность



    4) Импликация

  • § 4. Примеры задач на использование законов алгебры логики и формализацию высказываний
    Задача 1

    С помощью тождественных преобразований максимально упростить следующее логическое выражение:

    `bar C vv` (`A` & `С`) `vv`  (`bar(A vv C vv bar(B)`)

    Решение

    Максимально упростить, это значит довести выражение до такого вида, когда невозможно применить ни один из законов алгебры логики, которые сокращают длину выражения.

    Для того, чтобы не запутаться, можно использовать общую стратегию упрощения логических выражений.

    1) Избавиться от операций импликации.

    2) Продвинуть отрицание вглубь выражения. То есть применять законы де Моргана, и закон двойного отрицания пока знак отрицания не будет стоять только над переменными (но не над операциями).

    После пункта 2 наступает относительная свобода действий. Можно использовать тождества поглощения или раскрывать скобки.

    В нашей задаче операция импликации отсутствует, поэтому первый пункт мы пропускаем. Переходим к пункту 2. Применяем два раза второй закон де Моргана (для дизъюнкции) и закон двойного отрицания к правой скобке и получаем следующее логическое выражение:

      `bar C vv ` (`A`  &  `C`) `vv` (`bar A` & `bar C` & `B`)

    Если теперь внимательно посмотреть на выражение, то очевидно, что к первому и третьему слагаемому  можно применить первый закон поглощения, так как отрицание переменной C является первым слагаемым и входит в третье в качестве множителя.

    Поскольку дизъюнкцию ещё называют логическим сложением, её операнды называют слагаемыми, аналогично конъюнкция – это логическое умножение, и её операнды называют множителями.

    После применения первого закона поглощения получается следующее логическое выражение: `bar C` `vv` (`A` & `C`)

    Применим второй (нестандартный для алгебры) закон дистрибутивности. Получаем: 

    (`bar C vv A`) & (`bar C vv C`)

    Ко второй скобке применяем закон исключённого третьего, превращаем её в единицу, а затем применяем закон поглощения константы `1` и в итоге получаем выражение: `bar C vv A`, которое упростить уже нельзя.

    Для лучшего понимания, рекомендуется выписать исходное логическое выражение, последовательно применить к нему все описанные действия и сравнить свой результат с приведённым в конце решения задачи.

    Обратите внимание, что исходное логическое выражение зависело от трёх переменных (`A, B, C`) , в то время как упрощённое в итоге зависит от двух логических переменных (`A` и `C`). При этом выражения всё равно остаются равносильными! Это происходит потому, что в процессе упрощения применялись законы поглощения. Аналогичный результат мог бы получиться, если в процессе упрощения выражения используются законы поглощения переменных константами. Исчезновение переменной при упрощении означает, что в исходном выражении она является несущественной.

    Задача 2

    Укажите значения переменных `K`, `L`, `M`, `N`, при которых логическое выражение `(L vv M) ^^ (¬ K -> M) ^^ ¬ N ^^ ¬ M`  истинно.

    Решение

    Будем следовать стратегии, описанной в предыдущем примере. Первым делом избавляемся от операции импликации. Получаем следующее выражение:

          `(L vv M) ^^ ( K vv M) ^^ ¬ N ^^ ¬ M`

    Отрицание вглубь продвигать не надо. Теперь раскроем скобки. Для упрощения условимся операцию конъюнкции никак не обозначать (по аналогии с алгеброй чисел).

         `(LK vv LM vv MK vv M) ( ¬ N) ( ¬ M)`

    В первой скобке можно применить тождество поглощения, и «съесть» второе и третье слагаемое, которые содержат M в качестве множителя. Получается такое выражение: 

         `(LK vv M) ( ¬ N) ( ¬ M)`

    Выполнив оставшиеся операции умножения, получим следующий результат:

        ` LK¬ N¬ M`

    Получили одну конъюнкцию. Следовательно, существует всего один набор значений переменных, при котором получится значение «1»:  `L=1`, `K=1`, `N=0`, `M=0`.


    Задача 3

    Сколько решений имеет уравнение:

         `(((K¬L¬N) (¬L -> M))` \/ `((¬K` \/ `L` \/ `N) (¬L¬M)))  (K`\/`N)=1`

    Решение

    Исходное выражение достаточно сложное, поэтому будем его упрощать. Первым делом избавимся от импликаций, получим:

         `(((K¬L¬N) (L`\/ `M))` \/ `((¬K` \/ `L` \/ `N) (¬L¬M)))  (K`\/`N) = 1`

    Теперь раскроем скобки. Для упрощения условимся не записывать слагаемые, куда одновременно входят некоторая переменная и её отрицание (они всё равно равны нулю):

         `(K¬L¬NM` \/ `¬K¬L¬M` \/ `N¬L¬M)  (K`\/`N) = 1`

    Продолжаем раскрытие скобок. Получаем:

         `K¬L¬NM` \/ `¬K¬L¬MN` \/ `KN¬L¬M` \/ `N¬L¬M  = 1`

    Ко второму, третьему и четвёртому слагаемому можно применить тождество поглощения. В итоге получится:

         `K¬L¬NM` \/ `N¬L¬M  = 1`

    На этом упрощение закончено, теперь будем анализировать. Дизъюнкция равна единице, если хотя бы одно из слагаемых равно единице. Первое слагаемое равно единице на единственном наборе переменных: (`K=1`, `L=0`, `N=0`, `M=1`). Второе слагаемое равно единице на двух наборах: (`N=1`, `L=0`, `M=0`, `K` – любое (или `0` или `1`)). Соответственно, уравнение имеет три различных решения.

    Задача 4

    В нарушении правил обмена валюты подозреваются четыре работника банка - Антипов    (`A`), Борисов (`B`), Цветков (`C`) и Дмитриев (`D`). Известно, что:

    1) Если `А` нарушил, то и `В` нарушил правила обмена валюты.

    2) Если `B` нарушил, то и `C` нарушил или `A` не нарушал.

    3) Если `D` не нарушил, то `A` нарушил, а `C` не нарушал.

    4) Если `D` нарушил, то и `A` нарушил.

    Кто из подозреваемых нарушил правила обмена валюты?

    Решение

    Чтобы решить эту задачу, необходимо провести процесс формализации условия, сформировать единое логическое выражение и провести его упрощение. Выделим из условия четыре простых высказывания: «`A` нарушил правила», «`B` нарушил правила», «`C` нарушил правила»,  и «`D` нарушил правила». Обозначим их соответственно буквами `A`, `B`, `C`, `D`. Тогда высказывания из условия формализуются следующим образом (конъюнкция не обозначается никак):

    1) `A -> B`;

    2) `B -> C` \/ `¬A`;

    3) `¬D -> A¬ C`;

    4) `D -> A`.

    Нам известно, что выполняются все 4 высказывания, следовательно, нужно объединить их знаками конъюнкции и найти наборы, при которых получившееся общее высказывание будет истинным. Эти наборы и покажут нам, какие возможны ситуации (правила обмена нарушил тот, у кого переменная в итоговом наборе имеет значение «1»).

    Итак, строим логическое выражение:

          `(A -> B)( B -> C` \/ `¬A)( ¬D -> A¬C)( D -> A)`.

    Теперь будем его упрощать. По алгоритму первым делом избавляемся от операции импликации. Получаем следующее выражение:

         `(¬A` \/ `B)( ¬B` \/ `C` \/ `¬A)( D` \/  `A¬C)( ¬D` \/  `A)`.

    Раскрываем скобки. Первую перемножаем со второй, а третью с четвёртой.

         `(¬A¬B`  \/ `¬AC` \/ `¬A` \/ `BC` \/ `B¬A) ( DA` \/ `A¬C¬D` \/  `A¬C)`.

    Напомним, что слагаемые, равные нулю по причине того, что в них входит сразу и переменная и её отрицание, мы не записываем. В первой скобке теперь можно применить тождество поглощения, и «съесть» все слагаемые, имеющие в своём составе `A` с отрицанием. Во второй скобке можно также применить тождество поглощения, и «съесть» второе слагаемое. В итоге получаем:

         `( ¬A` \/ `BC ) ( DA` \/ `A¬C)`.

    При раскрытии оставшихся скобок три из четырёх слагаемых окажутся равными нулю, а последнее будет выглядеть следующим образом: `ABCD`. Из этого следует, что все четверо работников банка нарушили правило обмена валюты. (Только в этой ситуации предположения из условия задачи одновременно выполняются).

    Ответ

    Правила обмена валюты нарушили все.

    Задача 5

    Известно, что обе надписи на дверях либо истинны, либо ложны одновременно. Надпись на первой двери – "Клад за другой дверью", на второй двери – "Клада за этой дверью нет, а за другой  – есть". Где находится клад?

    Решение

    По сути нас интересуют два простых высказывания: «Клад есть за первой дверью» и «Клад есть за второй дверью». Обозначим первое из них буквой `A`, а второе буквой `B`. Тогда изначальные предположения формализуются следующим образом: 

    1) `B`;

    2)  `¬BA`.

    В этой задаче в отличие от предыдущей у нас две возможные ситуации относительно комбинирования начальных предположений – они либо оба истинны, либо оба ложны. Предположим, что они оба истинны, тогда при их перемножении получится тождественный ноль, что означает невозможность данной ситуации.

    Предположим, что оба высказывания ложны, тогда необходимо перед перемножением на каждое из них «навесить» отрицание (рассматривать истинность противоположных высказываний) В итоге получится следующее логическое выражение:

         `¬B ¬(¬BA)`.

    Упрощаем его по алгоритму: отрицание продвигаем вглубь, применяя тождество Де Моргана. Получаем:

         `¬B (B` \/ `¬A)`.

    Раскроем скобки. Первое слагаемое сокращается, а второе выглядит следующим образом: `¬B¬A`.

    Полученный результат означает, что условия задачи выполняются, только в случае, когда оба высказывания ложны, а это означает, что клада нет ни за одной дверью. Не повезло нам `J`.

    Ответ

    Клада нет ни за одной дверью.

    В заключение приведём общую схему решения текстовых логических задач, которую мы уже применяли на практике при разборе примеров.

    схема решения текстовых логических задач

    1) Выделить из условия задачи элементарные (простые) высказывания и обозначить их буквами.

    2) Записать условие задачи на языке алгебры логики, соединив простые высказывания в сложные с помощью логических операций.

    3) Составить единое логическое выражение для всех требований задачи (возможно не одно).

    4) Используя законы алгебры логики попытаться упростить полученное выражение и вычислить все его значения либо построить таблицу истинности для рассматриваемого выражения (Таблицу можно строить, если в выражении не более трёх логических переменных).

    5)  Выбрать решение — набор значений простых высказываний, при котором построенное логическое выражение является истинным;

    6) Проверить, удовлетворяет ли полученное решение условию задачи.


  • §2. Условный оператор

    В рассматриваемых ранее задачах на программирование процесс вычисления был линейным, то есть программа не должна была выполнять разные действия в зависимости от того, какие данные ей ввели. Теперь рассмотрим задачи с ветвящимся алгоритмом.

    Пример

    Ввести номер года. Вывести слово YES, если год високосный, и NO, если он – не високосный.

    Решение

    По условию очевидно, что в зависимости от входных данных программа должна будет выполнить один из двух операторов вывода: Writeln('YES') или Writeln('NO'). При этом написать в программе нам придётся оба, а вот выполняться должен будет только один из них. Для того чтобы реализовывать подобные ветвления алгоритма, в языке Pascal существует условный оператор. В общем виде он выглядит следующим образом:

    if логическое выражение

       then оператор

       else оператор

    Слова if, then и else являются служебными зарезервированными словами языка. Работает эта конструкция так: сначала вычисляется логическое выражение, стоящее после if. Если получилось значение true, то выполняется оператор, стоящий после слова then, а если получилось значение false, то выполняется оператор, стоящий после слова else.

    Обратите внимание, что внутри условного оператора нет никаких точек с запятой, поскольку он является единой конструкцией, а точка с запятой – это разделитель между операторами. Для удобства чтения и отладки программ принято условие записывать на одной строке, а ветви then и else начинать с новой строки, однако это не является синтаксическим правилом языка.

    В качестве примера условного оператора рассмотрим решение задачи, поставленной выше. Год считается високосным, если он делится нацело на `400`, или если он  делится нацело на `4`, но не делится нацело на `100`. Проверять делимость мы уже умеем, поэтому осталось только записать это условие в виде программы:

    var y:integer;

    begin

      write('Введите номер года ');

      readln(y);

      if(y mod 400=0)or(y mod 4=0)and(y mod 100<>0)

       then writeln('YES')

       else writeln('NO');

    end

    По грамматике языка после слов then и else должен стоять только один оператор языка. То есть запись if x>0 then x:=4; y:=0 else z:=9; является синтаксически неверной. А как быть, если всё-таки нужно выполнить более одного оператора? Для таких случаев в языке Pascal предусмотрен составной оператор, который позволяет превратить группу операторов в один. Выглядит он следующим образом: сначала записывается служебное зарезервированное слово begin, далее – интересующая нас последовательность операторов через точку с запятой, а в конце пишется служебное зарезервированное слово end. В отличие от конца программы, точка после этого слова не ставится. Слова begin и end называют операторными скобками. Запишем правильную версию условного оператора, приведённого выше: if x>0 then begin x:=4; y:=0 end else z:=9;

    Обратите внимание на следующий тонкий момент: если требуется выполнить более одного оператора в ветке then, и при этом мы забудем написать операторные скобки, то это является синтаксической ошибкой, и программа просто не будет работать. Если же забыть написать операторные скобки в ветке else, то программа работать будет, но не так, как предполагалось.

    Рассмотрим пример: if x>0 then y:=9 else z:=8; c:=5;

    В этом примере условный оператор заканчивается после z:=8;  в то время как оператор c:=5; является следующим оператором программы и выполняется независимо от результата сравнения `x` с нулём. Если же написать операторные скобки, то присваивание в `c` числа `5` произойдёт только в случае x<=0.

    Ещё один тонкий момент заключается в том, что в ветке else в качестве оператора может стоять и пустой оператор. Рассмотрим следующий пример.

    Задача

    Вводятся `3` целых числа – `a`, `b`, `c`. Требуется в переменную `a` записать минимальное из этих чисел, в `b` – среднее и в `c` – максимальное.

    Решение

    Алгоритм решения этой задачи такой: сначала сравним значения переменных `a` и `b`, если значение `a` – больше, поменяем их местами. После этого сравним значения переменных `a` и `с`, и если значение `a` – больше, поменяем их местами. После этих двух сравнений в переменной `a` гарантированно окажется наименьшее из трёх чисел. Осталось сравнить переменные `b` и `c`, и в случае, когда в переменной `b` находится большее значение, поменять их местами.

    Очевидно, что в этом алгоритме у нас три сравнения, следовательно, три последовательных условных оператора. При этом в каждом из них какие-то действия (поменять местами значения двух переменных) нужно выполнять только в ветке then, в ветке else (например, если в первом сравнении в переменной a находится уже более маленькое число, чем в переменной `b`) никаких действий выполнять не нужно. Рассмортим код программы: В этом случае, грамматика языка программирования позволяет вообще не записывать даже слово else. Такая конструкция называется сокращённой формой условного оператора.

    var a,b,c,x:integer;

    begin

      writeln('введите три целых числа ');

      readln(a,b,c);

      if a>b then begin x:=a; a:=b; b:=x end;

      if a>c then begin x:=a; a:=c; c:=x end;

      if b>c then begin x:=b; b:=c; c:=x end;

      writeln(a,b,c);

      readln

    end.

    Как видно из примера, грамматика языка программирования позволяет вообще не записывать даже слово else, в случае, когда там не надо выполнять никаких действий. Такая конструкция называется сокращённой формой условного оператора. При использовании сокращённой формы условного оператора, если при вычислении логического выражения получилось значение false, то управление передаётся на следующий оператор программы.

    Использование сокращённой формы условного оператора порождает проблему неоднозначности интерпретации логики действий программы в случае вложенных условных операторов. Рассмотрим следующий пример:

    if x>0

     then if y>0

       then z:=0

     else c:=7;

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

    if x>0

     then begin

      if y>0

       then z:=0

      end

     else c:=7;

        

        

         

        

  • §3. Разбор случаев

    При написании программ с ветвлениями очень часто возникает ситуация, когда ветвей становится слишком много. Поэтому приходится задумываться о том, как ничего не упустить из рассмотрения, как не рассматривать несущественные случаи и как обеспечить выполнение ровно одной ветви при разборе случаев.

    Начнём с ответа на последний вопрос. Для того, чтобы обеспечить выполнение ровно одной ветви алгоритма, необходимо записывать весь разбор случаев в виде одного условного оператора. Конечно же, он будет сложный, с вложенными многоуровневыми проверками. Однако, если в итоге условный оператор, реализующий разбор случаев, один (а не несколько, записанных через точку с запятой), то это гарантирует нам, что в итоге выполнится ровно одна ветвь алгоритма.

    Для того, чтобы не упустить из рассмотрения никаких случаев и не рассматривать несущественные случаи, нужно перебирать их не в случайном порядке, а по какой-либо стратегии. Сейчас мы рассмотрим одну из стратегий разбора случаев, которую условно можно назвать «Естественное возникновение». Её суть заключается в следующем: Изначально, мы решаем задачу так, будто бы никакого деления на случаи нет, а появляется оно лишь тогда, когда выполнить основной сценарий невозможно.

    Рассмотрим  следующий  пример  задачи:

    Пример задачи

    Решить  в  целых  числах линейное уравнение `ax=b`.

    Решение

    На вход программе здесь будут подаваться коэффициенты уравнения, а программа должна будет либо вычислить корень, либо вывести сообщение об особой ситуации (нет корней, бесконечно много корней и т. д.). Будем разбирать случаи согласно нашей стратегии. Сначала посмотрим, как мы в принципе решаем подобное уравнение. Для нахождения значения `x` нужно коэффициент `b` разделить на коэффициент `a`. Очевидно, что это невозможно сделать, если `a=0`. Поэтому первая проверка, которая делит всё множество случаев на две принципиально разные ветки: верно ли, что `a=0`? Если это так, то у нас получается уравнение `0x=b`, существование решений которого зависит от значения `b`. Если `b=0`, то решений бесконечно много, если же это не так, то решений нет вообще. Вернёмся к проверке коэффициента `a`. Если он не равен нулю, то это означает, что уравнение имеет единственное решение. Вопрос теперь в том, целое оно или нет. Поэтому здесь нужно будет проверить, что `b` нацело делится на `a` (остаток от деления должен быть равен нулю). Если это так, то находится единственное решение, если же нет, то целых решений у уравнения нет. Запишем теперь все наши рассуждения в виде программы:

    var a,b:integer;

    begin

     readln(a,b);

     if a=0

      then if b=0

       then writeln('many solutions')

       else writeln('no solution')  

      else if b mod a = 0

       then writeln( b div a)

       else writeln('no solution')

    end.

    Мы видим, что программа получилось достаточно удобно читаемой и содержит только очень простые проверки (без логических связок). Простота проверок является одним из существенных достоинств используемой стратегии разбора случаев. К сожалению, это именно стратегия, а не алгоритм. Поэтому существует много задач, где такое рассуждение не сработает, однако рекомендуется взять данный метод на вооружение.

    Теперь вам будут предложены контрольные вопросы и задачи. За каждый правильный ответ будут ставиться баллы. Максимальное количество баллов за задание указано в скобках после его номера. Если задание стоит более одного балла, то возможно получить частичный балл за частично верное решение. Имейте в виду, что более объёмные и сложные задания стоят дороже. Итоговая оценка будет определяться по сумме набранных баллов. Желаем успеха!      

  • §1. Логический тип переменных. Логические выражения

    В прошлом задании мы работали с числовыми типами переменных и учили арифметику, теперь познакомимся с логическим типом переменных, который называется Boolean. Переменные этого типа имеют всего два значения - true и false (соответственно, «истина» и «ложь»). Подобно числовым переменным им можно присваивать значения при помощи оператора присваивания. При этом необходимо строго соблюдать правило совместимости типов. То есть, логическим переменным нельзя присваивать числовые значения, а числовым - логические. Так же можно выводить значения логических переменных на экран, а вот вводить их с клавиатуры нельзя! 


    В языке Pascal определены `6` операций сравнения, результатом которых является логическое значение:


    1) «больше» (>)


    2) «больше или равно» (>=)


    3) «меньше» (<)


    4) «меньше или равно» (<=)


    5) «равно» (=)


    6) «не равно» (<>).


    Например, операция `5>2` всегда выдаст значение true, а операция `x<>3` выдаст значение true, если переменная `x` имеет любое значение, кроме `3`.


    Сравнивать можно не только числа (причём как целые, так и вещественные), но и логические значения. При этом считается, что значение true больше, чем значение false.


    При выполнении сравнений также необходимо соблюдать совместимость типов. То есть, можно сравнивать число с числом или логическое значение с логическим значением, но нельзя сравнивать число с логическим значением. Такое сравнение выдаст ошибку.


    Помимо операций сравнения ещё существуют и логические операции:


    1) and (конъюнкция, логическое умножение, операция «И»)


    2) or (дизъюнкция, логическое сложение, операция «ИЛИ»)


    3) not (отрицание, инверсия)


    4) xor (строгая дизъюнкция, исключающее «ИЛИ», сложение по модулю `2`).


    В скобках указаны возможные названия данных операций в алгебре логики.


    Операнды этих операций должны быть логического типа. Результат вычислений также будет логический. При этом операции and, or, xor имеют по два операнда, а операция not - всего один, который записывается справа от названия операции. Названия логических операций являются служебными зарезервированными словами языка.


    Приведём таблицы результатов логических операций для всех возможных значений операндов (в алгебре логики такие таблицы называются таблицами истинности):


    X

    not x

    false

    true

    True

    false


     


    X

    y

    x and y

    x or y

    x xor y

    false

    false

    false

    False

    false

    false

    true

    false

    True

    True

    true

    false

    false

    True

    True

    true

    true

    true

    True

    False


    Логический результат даёт также стандартная функция odd(x), которая применяется к целочисленному аргументу х:


    odd(x) = true, если `x` нечётно;


    odd(x) = false, если `x` чётно.


    Приоритет операций в сложном выражении (содержащем в себе все виды операций, изученных нами) следующий:


    1) Операция not.


    2) Операции группы умножения and, *, /, div, mod


    3) Операции группы сложения or, xor, +, -


    4) Операции сравнения >, <, >=, <=, =, <>


    Операции одного приоритета выполняются слева направо. Операции в круглых скобках имеют более высокий приоритет, чем операции вне скобок.


    Рассмотрим несколько примеров на построение логических выражений. Пусть нам требуется записать логическое выражение по синтаксису языка программирования, имеющее значение true, в случае выполнения указанного условия.


    Пример 1

    Целое число `n` делится на `13`.

    Решение

    n mod 13 = 0

    Надо проверять, что остаток от деления на `13` является нулём. 


    Пример 2

    Целое число `n` делится на `13` и `7`.

    Решение

    (n mod 13 = 0) and (n mod 7 = 0)

    Здесь надо проверить одновременное выполнение двух условий.


    Пример 3

    Переменная `x` имеет значение из отрезков `[2,5]` или `[-1,1]`.

    Решение

    (x>=2) and (x<=5) or (abs(x)<=1)


    Пример 4

    Из чисел `x`, `y`, `z` хотя бы два равны между собой.

    Решение

    (x = y) or (x = z) or (y = z)


    Пример 5

    Числа `x`, `y`, `z` равны между собой.

    Решение

    (x = y) and (x = z)


    Обратите внимание, что согласно таблице приоритетов, операции сравнения имеют самый низкий приоритет. Однако, как правило, в сложных выражениях  нужно сначала выполнить сравнения, а потом группировать  их результаты при помощи логических операций. Поэтому не нужно забывать брать операции сравнения в скобки, чтобы не получить неправильный порядок действий.

  • §4. Некоторые нестандартные примеры и задачи с параметром
    Пример 24

    Решить уравнение `3sin^5x+4cos^3x=7`.

    Решение

    Так как

     `3sin^5x<=3`                                                                        (8)

    и  `4cos^3x<=4`,                                                                      (9)

    а неравенства одного знака можно складывать, то `3sin^5x+4cos^3x<=7`, причём если хотя бы в одном из неравенств (8) или (9) знак «`<=`» заменить на «`<`», то получим `3sin^5x+4cos^3<7`. Значит, чтобы `x` удовлетворяло уравнению необходимо и достаточно, чтобы выполнялась система

    3sin5x=3,4cos3x=4\left\{\begin{array}{l}3\sin^5x=3,\\4\cos^3x=4\end{array}\right.   или  sinx=1,cosx=1,\left\{\begin{array}{l}\sin x=1,\\\cos x=1,\end{array}\right.

    но это невозможно,   т. к. `sin^2x+cos^2x=1`.

    Ответ

    Решений нет.

    Пример 25

    Решить уравнение `sin^4  2x+1=cos3x`.

    Решение

    Так как левая часть уравнения `sin^4  2x+1>=1`, а правая часть `cos3x<=1`, то уравнение эквивалентно системе

    sin42x+1=1,cos3x=1\left\{\begin{array}{l}\sin^42x+1=1,\\\cos3x=1\end{array}\right.  или  sin2x=0,cos3x=1.\left\{\begin{array}{l}\sin2x=0,\\\cos3x=1.\end{array}\right. 

    Отсюда  

    2x=πn,nZ,3x=2πm,mZ\left\{\begin{array}{l}2x=\pi n,n\in Z,\\3x=2\pi m,m\in Z\end{array}\right. или x=πn2,nZ,x=2πn3,mZ.\left\{\begin{array}{l}x=\dfrac{\pi n}2,n\in Z,\\x=\dfrac{2\pi n}3,m\in Z.\end{array}\right.

    На тригонометрическом круге изобразим решения первого уравнения последней системы на рис. 14, а второго- на рис. 15. Совпадение будет при `x=2pik,kinZ`.

    Ответ

    `x=2pik,kinZ`.

    Пример 26

    Решить уравнение `sin^2  4x+cos^2x=2sin4x*cos^4x`.

    Решение

    Перепишем уравнение `sin^2  4x-2sin4x*cos^4x+cos^2x=0`.

    Будем решать его как квадратное относительно `sin4x`. Дискриминант уравнения

    `D=4cos^8x-4cos^2x=4cos^2x(cos^6x-1)<=0`.

    Значит, решения возможны только в случае `D=0` или cosx=0,cosx=±1.\left[\begin{array}{l}\cos x=0,\\\cos x=\end{array}\right.\pm1. Последней совокупности уравнений удовлетворяют значения  `x=(pin)/2,ninZ`. Так как при этих `x` обращается в нуль и `sin4x`, то из уравнения следует, что должно быть `cosx=0`.

    Отсюда `x=pi/2+pin,ninZ`.

    Ответ

     `x=pi/2+pin,ninZ`. 

    Пример 27  (МФТИ)

    Решить систему уравнений

    2sinx-3cosy=52,siny+2cosx=-32.\left\{\begin{array}{l}\sqrt2\sin x-\sqrt3\cos y=\dfrac52,\\\sin y+\sqrt2\cos x=-\dfrac32.\end{array}\right.

    Решение

    Вычтем из первого уравнения системы второе. Получим:

    `sqrt2(sinx-cosx)-(siny+sqrt3cosy)=4`.

    По формуле дополнительного угла имеем:

    `2sin(x-pi/4)-2sin(y+pi/3)=4`  или  `sin(x-pi/4)-sin(y+pi/4)=2`  

    Так как `sin(x-pi/4)<=1`  и  `-sin(y+pi/3)<=1`,  то `sin(x-pi/4)-sin(y+pi/3)<=2`, 

    причём равенство может достигаться только в случае, если

    sinx-π4=1,-siny+π3=1\left\{\begin{array}{l}\sin\left(x-\dfrac\pi4\right)=1,\\-\sin\left(y+\dfrac\pi3\right)=1\end{array}\right.  или  sinx-π4=1,siny+π3=-1.\left\{\begin{array}{l}\sin\left(x-\dfrac\pi4\right)=1,\\\sin\left(y+\dfrac\pi3\right)=-1.\end{array}\right.

    Решая эту систему, получаем

    x-π4=π2+2πn,nZ,y+π3=-π2+2πm,mZ\left\{\begin{array}{l}x-\dfrac\pi4=\dfrac\pi2+2\pi n,n\in Z,\\y+\dfrac\pi3=-\dfrac\pi2+2\pi m,m\in Z\end{array}\right.  или  x=3π4+2πn,nZ,y=-5π6+2πm,mZ.\left\{\begin{array}{l}x=\dfrac{3\pi}4+2\pi n,n\in Z,\\y=-\dfrac{5\pi}6+2\pi m,m\in Z.\end{array}\right.

    Так как мы решаем уравнение – следствие системы и могли получить лишние корни, то надо сделать проверку. В нашем случае

    `sinx=1/(sqrt2)`,  `cosx=-1/(sqrt2)`,  `siny=-1/2`,  `cosy=-(sqrt3)/2`

    и, подставляя эти значения в исходную систему, убеждаемся, что она удовлетворяется. Итак,

    Ответ

    x=3π4+2πn,y=-5π6+2πm, n,mZ.\left\{\begin{array}{l}x=\dfrac{3\pi}4+2\pi n,\\y=-\dfrac{5\pi}6+2\pi m,\;n,m\in Z.\end{array}\right.

    Пример 28 (МФТИ)

    Решить уравнение `"arctg"3x=arccos8x`.

    Решение

    Напишем ОДЗ  `|8x|<=1`,  `|x|<=1/8`. Возьмём тангенс от обеих частей уравнения. Получим:  `3x=(sin(arccos8x))/(8x)`   или    `24x^2=sqrt(1-64x^2)`.

    Обозначим `t=8x^2`. Имеем уравнение `3t=sqrt(1-8t)`   или   `9t^2+8t-1=0`.

    `t_1=-1`,  `t_2=1/9`. Т. к. `t>=0`, то `t=1/9=8x^2`,  `x^2=1/72` (ОДЗ удовлетворяется).

    Отсюда  `x=+-1/(6sqrt2)`.

    Далее нужно делать проверку, т. к. в исходном уравнении углы равны, а мы перешли к уравнению, где тангенсы этих углов равны, т. е. к следствию нашего уравнения. При этом могут появиться посторонние корни.

     `x_1=-1/(6sqrt2)`  не   удовлетворяет   уравнению,   т. к. `"arctg"3x_1<0`  (`"arctg"x<0`,  если `x<0`), а `arccos8x_1>=0`  (`arccosx>=0` всегда).

    `x_2=1/(6sqrt2)` - удовлетворяет уравнению, т. к. углы `"arctg"3x_2 in (0;pi/2)` и

    `arccos8x_2 in (0;pi/2)` и тангенсы у них совпадают.

    Ответ

    `x=1/(6sqrt2)`

    Пример 29

    При каких значениях параметра `a` уравнение `(x-a)arccos(x+3)=0` имеет единственное решение?

    Решение

    ОДЗ `arccos(x+3)`:  `-1<=x+3<=1` или `-4<=x<= -2`. Решение уравнения:

    x=a,x+3=1\left[\begin{array}{l}x=a,\\x+3=1\end{array}\right. или  x=a,x=-2.\left[\begin{array}{l}x=a,\\x=-2.\end{array}\right.

    Так как `x=-2 in`ОДЗ,  то единственным решением может быть только `x=-2`. Значит должно выполняться: 

    a=-2,aОДЗ\left[\begin{array}{l}a=-2,\\a\not\in\mathrm{ОДЗ}\end{array}\right. или  a=-2,a-;-4-2;+.\left[\begin{array}{l}a=-2,\\a\in\left(-\infty;-4\right)\cup\left(-2;+\infty\right).\end{array}\right.

    Ответ

    `a in (-oo;-4)uu[-2;+oo)`.

    Пример 30 (МФТИ)

    Найти все значения параметра `a`, при которых уравнение  `2cos2x+2asinx+a=1`  имеет единственное решение на интервале `(-pi/2;0)`.

    Решение

    Преобразуем уравнение 

    `2(1-2sin^2x)+2asinx+(a-1)=0`,

    `4sin^2x-2asinx-(a+1)=0`.

    Обозначим `sinx=t`.  Решим уравнение  `4t^2-2at-(a+1)=0`.

    `D/4=a^2+4(a+1)=(a+2)^2`, t1,2=a±a+24=-12,a+12.t_{1,2}=\dfrac{a\pm\left(a+2\right)}4=\left[\begin{array}{l}-\dfrac12,\\\dfrac{a+1}2.\end{array}\right.

    Итак, sinx=-12,sinx=a+12.\left[\begin{array}{l}\sin x=-\dfrac12,\\\sin x=\dfrac{a+1}2.\end{array}\right. Но   уравнение   `sinx=-1/2`   даёт   один   корень на `(-pi/2;0)` - он равен `(-pi/6)`.

    Значит,  для единственности решения задачи должно быть либо

    `(a+1)/2=-1/2`  и  `a=-2`,  либо `(a+1)/2` не даёт значение `sinx` в интервале

    `x in (-pi/2;0)`,  т. е. a+120,a+12-1a-1,a-3.\left[\begin{array}{l}\dfrac{a+1}2\geq0,\\\dfrac{a+1}2\leq-1\end{array}\right.\Leftrightarrow\left[\begin{array}{l}a\geq-1,\\a\leq-3.\end{array}\right. Итак,

    Ответ

    `ain(-oo;-3]uu{-2}uu[-1;+oo)`.

    Пример 31 (ЕГЭ)

    Найти все значения параметра `a`, при каждом из которых уравнение `(sinx-cosx)/(sinx-acosx)=a` имеет хотя бы одно решение на отрезке `[pi/2;pi]`.

    Решение

    Уравнение эквивалентно системе

    sinx-cosx=asinx-a2cosx,sinx-acosx0.\left\{\begin{array}{l}\sin x-\cos x=a\sin x-a^2\cos x,\\\sin x-a\cos x\neq0.\end{array}\right.

    Эта система из однородного уравнения первого порядка и неравенства.

    1)    Если `cosx=0`, `x in [pi/2;pi]`,  т. е.  `x=pi/2`, то `sinx=1` и система даёт `a=1`.

    2)   Если же `cosx!=0`, то делим уравнение и неравенство системы на `cosx`. Получаем систему

    tgx-1=atgx-a2,tgx-a0,\left\{\begin{array}{l}\mathrm{tg}x-1=a\mathrm{tg}x-a^2,\\\mathrm{tg}x-a\neq0,\end{array}\right.  или  a-1tgx=a2-1,tgxa.\left\{\begin{array}{l}\left(a-1\right)\mathrm{tg}x=a^2-1,\\\mathrm{tg}x\neq a.\end{array}\right.

    Если `a=1`, то системе удовлетворяют все значения из  `(pi/2;pi]`.

    Если же `a!=1`, то система становится такой: tgx=a+1,tgxa.\left\{\begin{array}{l}\mathrm{tg}x=a+1,\\\mathrm{tg}x\neq a.\end{array}\right. 

    Чтобы ей удовлетворяла хотя бы одна точка из `(pi/2;pi]`, необходимо и достаточно, чтобы выполнялось  `a+1<=0`, т. е. `a<= -1`  (см. рис. 16).

    Итак,              

    Ответ

    `a<= -1`,  `a=1`.

  • §2. Тригонометрические системы

    Сначала рассмотрим простейший пример. Решить систему

    sinπx=0,sinπy=0.\left\{\begin{array}{l}\sin\pi x=0,\\\sin\pi y=0.\end{array}\right.

    Здесь `x` и `y` находятся независимо друг от друга. В этих случаях параметры надо обозначать различными буквами. Обозначение их одной буквой будет в таких случаях ошибкой.

    Решаем каждое уравнение

    πx=πn,nZ,πy=πm,mZ.\left\{\begin{array}{l}\pi x=\pi n,n\in Z,\\\pi y=\pi m,m\in Z.\end{array}\right. `(x;y)=n;m),n,m in Z`,

    т. е. на плоскости решениями системы являются все точки с целочисленными координатами. Если же мы будем считать `m=n`, то точки `(n;n),ninZ`, - это целочисленные точки, лежащие только на биссектрисе I и III координатных углов. Они не представляют все решения рассмотренной системы.

    Пример 18

    Решить систему 

    sinx+cosy=1,cos2x-cos2y=1.\left\{\begin{array}{l}\sin x+\cos y=1,\\\cos2x-\cos2y=1.\end{array}\right.

    Решение

    Преобразуем второе уравнение системы:

    `(1-2sin^2x)-(2cos^2y-1)=1`, т. е. `2sin^2x+2cos^2y=1`.

    Обозначим `u=sinx`, `v=cosy`. Система перепишется:

    u+v=1,u2+v2=12.\left\{\begin{array}{l}u+v=1,\\u^2+v^2=\dfrac12.\end{array}\right.

    Нетрудно проверить, что решением этой системы является пара u=12,v=12.\left\{\begin{array}{l}u=\frac12,\\v=\frac12.\end{array}\right.

    Переходя к (`x`; `y`), имеем:  sinx=12,cosy=12.\left\{\begin{array}{l}\sin x=\dfrac12,\\\cos y=\dfrac12.\end{array}\right.

    Отсюда

     x=-1n·π6+πn,y=±π3+2πm,n,mZ.\left\{\begin{array}{l}x=\left(-1\right)^n\cdot\dfrac\pi6+\pi n,\\y=\pm\dfrac\pi3+2\pi m,\end{array}\right.n,m\in Z.

    Ответ

    x=-1n·π6+πn,y=±π3+2πm,n,mZ.\left\{\begin{array}{l}x=\left(-1\right)^n\cdot\dfrac\pi6+\pi n,\\y=\pm\dfrac\pi3+2\pi m,\end{array}\right.n,m\in Z.

    Заметим, что ответ можно записать и в такой форме:       

    `((-1)^n pi/6+pin; +-pi/3+2pim),n,m inZ`.

    Пример 19

    Решить систему 

    cosxcosy=34,sinxsiny=-14.\left\{\begin{array}{l}\cos x\cos y=\dfrac34,\\\sin x\sin y=-\dfrac14.\end{array}\right.

    Решение

    Складывая первое и второе уравнения и вычитая из первого уравнения второе, получим систему, эквивалентную первоначальной:

    cosx-y=12,cosx+y=1.\left\{\begin{array}{l}\cos\left(x-y\right)=\dfrac12,\\\cos\left(x+y\right)=1.\end{array}\right.

    Это система из простейших тригонометрических уравнений, решаемых независимо друг от друга.

    x-y=±π3+2πn,x+y=2πm,n,mZ.\left\{\begin{array}{l}x-y=\pm\dfrac\pi3+2\pi n,\\x+y=2\pi m,n,m\in Z.\end{array}\right.

    Складывая уравнения последней системы и деля на `2`, а так же вычитая из второго уравнения последней системы первое и деля на `2`, получаем ответ. 

    Ответ

    x=±π6+πn+πm,y=πmπ6-πn,m,nZ.\left\{\begin{array}{l}x=\pm\dfrac\pi6+\pi n+\pi m,\\y=\pi m\mp\dfrac\pi6-\pi n,\end{array}\right.m,n\in Z.

    (в формулах одновременно берутся либо верхние, либо нижние знаки).

    Пример 20

    Решить систему уравнений

    siny=5sinx,3cosx+cosy=2.\left\{\begin{array}{l}\sin y=5\sin x,\\3\cos x+\cos y=2.\end{array}\right.

    Решение

    Перепишем систему

    siny=5sinx,cosy=2-3cosx.\left\{\begin{array}{l}\sin y=5\sin x,\\\cos y=2-3\cos x.\end{array}\right.

    Возведём оба уравнения последней системы в квадрат и сложим их. Мы получим

    `1=25sin^2x+4-12cosx+9cos^2x` или `1=25(1-cos^2x)+4-12cosx+9cos^2x`.

     Далее имеем: `16cos^2x+12cosx-28=0` или `4cos^2x+3cosx-7=0`.

    Решением последнего уравнения является `cosx=1` или `x=2pin,ninZ`.

    Подставляя `cosx=1`  во второе уравнение первоначальной системы, находим, что

    `cosy=-1` или `y=pi+2pi m,m in Z`.

    Проверяем, что найденные `(x;y)` удовлетворяют и первому уравнению исходной системы (проверку делать нужно, т. к. исключая `y` мы переходили к следствию системы и могли получить лишние корни). Итак,

    Ответ

    x=2πn,nZ,y=π+2πm,mZ.\left\{\begin{array}{l}x=2\pi n,n\in Z,\\y=\pi+2\pi m,m\in Z.\end{array}\right.