Здравствуйте, Гость!
Мы просим вас войти или зарегистрироваться у нас на сайте.
Это откроет для вас дополнительные возможности
и раскроет весь потенциал нашего сайта.


Обновления сайта:

Статистика
» Зарег. на сайте
» Всего: 5572
» Новых за месяц: 2188
» Новых за неделю: 499
» Новых вчера: 76
» Новых сегодня: 42



Онлайн всего: 1
Гостей: 1
Пользователей: 0


Облако тегов

Наш партнер
Реальность жизни

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

  1. Коммутативность дизъюнкции и конъюнкции:
    a \vee b \equiv b \vee a
    a \wedge b \equiv b \wedge a
  2. Дистрибутивный закон относительно дизъюнкции и конъюнкции:
    a \vee (b \wedge с) \equiv (a \vee b) \wedge (a \vee с)
    a \wedge (b \vee с) \equiv (a \wedge b) \vee (a \wedge с)
  3. Отрицание отрицания:
    \neg ( \neg а) \equiv а
  4. Непротиворечивость:
    a \wedge \neg а \equiv false
  5. Исключающее третье:
    a \vee \neg а \equiv true
  6. Законы де-Моргана:
    \neg (а \vee b) \equiv \neg а \wedge \neg b
    \neg (а \wedge b) \equiv \neg а \vee \neg b
  7. Упрощение:
    a \wedge a \equiv a
    a \vee a \equiv a
    a \wedge true \equiv a
    a \wedge false \equiv false
  8. Поглощение:
    a \wedge (a \vee b) \equiv a
    a \vee (a \wedge b) \equiv a
  9. Замена импликации
    a \rightarrow b \equiv \neg a \vee b
  10. Замена тождества
    a \equiv b \equiv(a \wedge b) \vee (\neg a \wedge \neg b)

Представление логических функций

Любую логическую функцию от n переменных – F(x_{1}, x_{2}, … x_{n}) можно задать таблицей истинности. Такая таблица содержит 2^n наборов переменных, для каждого из которых задается значение функции на этом наборе. Такой способ хорош, когда число переменных относительно невелико. Уже при n > 5 представление становится плохо обозримым.

Другой способ состоит в том, чтобы задавать функцию некоторой формулой, используя известные достаточно простые функции. Система функций \{f_{1}, f_{2}, … f_{k}\} называется полной, если любую логическую функцию можно выразить формулой, содержащей только функции f_{i}.

Полной является система функций \ \neg, \wedge, \vee. Законы 9 и 10 являются примерами, демонстрирующими, как импликация и тождество выражается через отрицание, конъюнкцию и дизъюнкцию.

Фактически полной является и система из двух функций – отрицания и конъюнкции или отрицания и дизъюнкции. Из законов де-Моргана следуют представления, позволяющие выразить конъюнкцию через отрицание и дизъюнкцию и соответственно выразить дизъюнкцию через отрицание и конъюнкцию:

(а \vee b) \equiv \neg( \neg а \wedge \neg b)
(а \wedge b) \equiv \neg( \neg а \vee \neg b)

Парадоксально, но полной является система, состоящая всего из одной функции. Существуют две бинарные функции – антиконънкция и антидизъюнкция, называемые стрелкой Пирса и штрих Шеффера, представляющие полую систему.

В состав базовых функций языков программирования включают обычно тождество, отрицание, конъюнкцию и дизъюнкцию. В задачах ЕГЭ наряду с этими функциями часто встречается импликация.

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

Задача 15:

Дан фрагмент таблицы истинности. Какая из трех приведенных функций соответствует этому фрагменту?

X_{1} X_{2} X_{3} X_{4} F
1 1 0 0 1
0 1 1 1 1
1 0 0 1 0
  1. (X_{1} \rigtharrow X_{2}) \wedge \neg X_{3} \vee X_{4}
  2. (\neg X_{1} \wedge X_{2}) \vee (\neg X_{3} \wedge X_{4})
  3. \neg X_{1} \vee X_{2} \vee (X_{3} \wedge X_{4})

Ответ:

Функция под номером 3.

Решение:

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

Задача 16:

Какое из приведенных чисел удовлетворяет условию:

(цифры, начиная со старшего разряда, идут в порядке убывания) \rightarrow (число - четное) \wedge (младшая цифра – четная) \wedge (старшая цифра – нечетная)

Если таких чисел несколько, укажите наибольшее.

  1. 13579
  2. 97531
  3. 24678
  4. 15386

Ответ:

Условию удовлетворяет число под номером 4.

Решение:

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

Задача 17: Два свидетеля дали следующие показания:

Первый свидетель: Если А виновен, то В и подавно виновен, а С – невиновен.

Второй свидетель: Виновны двое. А точно виновен и виновен один из оставшихся, но кто именно сказать не могу.

Какие заключения о виновности А, В и С можно сделать на основании свидетельских показаний?

Ответ: Из свидетельских показаний следует, что А и В виновны, а С – невиновен.

Решение: Конечно, ответ можно дать, основываясь на здравом смысле. Но давайте рассмотрим, как это можно сделать строго и формально.

Первое, что нужно сделать – это формализовать высказывания. Введем три логические переменные - А, В и С, каждая из которых имеет значение true (1), если соответствующий подозреваемый виновен. Тогда показания первого свидетеля задаются формулой:

A \rightarrow (B \wedge \neg C)

Показания второго свидетеля задаются формулой:

A \wedge ((B \wedge \neg C) \vee (\neg B \wedge C))

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

Построим таблицу истинности для этих показаний:

A B C F_{1} F_{2} F_{1} \wedge F_{2}
0 0 0 1 0 0
0 0 1 1 0 0
0 1 0 1 0 0
0 1 1 1 0 0
1 0 0 0 0 0
1 0 1 0 1 0
1 1 0 1 1 1
1 1 1 0 0 0

Суммарные свидетельские показания истинны только в одном случае, приводящие к однозначному ответу – А и В виновны, а С – невиновен.

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

Логические уравнения и системы уравнений

Пусть F(x_{1}, x_{2}, …x_{n}) – логическая функция от n переменных. Логическое уравнение имеет вид:

F(x_{1}, x_{2}, …x_{n}) = С,

Константа С имеет значение 1 или 0.

Логическое уравнение может иметь от 0 до 2^n различных решений. Если С равно 1, то решениями являются все те наборы переменных из таблицы истинности, на которых функция F принимает значение истина (1). Оставшиеся наборы являются решениями уравнения при C, равном нулю. Можно всегда рассматривать только уравнения вида:

F(x_{1}, x_{2}, …x_{n}) = 1

Действительно, пусть задано уравнение:

F(x_{1}, x_{2}, …x_{n}) = 0

В этом случае можно перейти к эквивалентному уравнению:

\neg F(x_{1}, x_{2}, …x_{n}) = 1

Рассмотрим систему из k логических уравнений:

F_{1}(x_{1}, x_{2}, …x_{n}) = 1
F_{2}(x_{1}, x_{2}, …x_{n}) = 1

...

F_{k}(x_{1}, x_{2}, …x_{n}) = 1

Решением системы является набор переменных, на котором выполняются все уравнения системы. В терминах логических функций для получения решения системы логических уравнений следует найти набор, на котором истинна логическая функция Ф, представляющая конъюнкцию исходных функций F:

Ф = F_{1} \wedge F_{2} \wedge … F_{k}

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

В некоторых задачах ЕГЭ по нахождению решений системы логических уравнений число переменных доходит до значения 10. Тогда построить таблицу истинности становится практически неразрешимой задачей. Для решения задачи требуется другой подход. Для произвольной системы уравнений не существует общего способа, отличного от перебора, позволяющего решать такие задачи.

В предлагаемых на экзамене задачах решение обычно основано на учете специфики системы уравнений. Повторяю, кроме перебора всех вариантов набора переменных, общего способа решения задачи нет. Решение нужно строить исходя из специфики системы. Часто полезно провести предварительное упрощение системы уравнений, используя известные законы логики. Другой полезный прием решения этой задачи состоит в следующем. Нам интересны не все наборы, а только те, на которых функция Ф имеет значение 1. Вместо построения полной таблицы истинности будем строить ее аналог - бинарное дерево решений. Каждая ветвь этого дерева соответствует одному решению и задает набор, на котором функция Ф имеет значение 1. Число ветвей в дереве решений совпадает с числом решений системы уравнений.

Что такое бинарное дерево решений и как оно строится, поясню на примерах нескольких задач.

Задача 18

Сколько существует различных наборов значений логических переменных x1, x2, x3, x4, x5, y1, y2, y3, y4, y5, которые удовлетворяют системе из двух уравнений?

(x1 \rightarrow x2) \wedge (x2 \rightarrow x3) \wedge (x3 \rightarrow x4) \wedge (x4 \rightarrow x5 ) = 1
(y1 \rightarrow y2) \wedge (y2 \rightarrow y3) \wedge (y3 \rightarrow y4) \wedge (y4 \rightarrow y5 ) = 1

Ответ: Система имеет 36 различных решений.

Решение: Система уравнений включает два уравнения. Найдем число решений для первого уравнения, зависящего от 5 переменных – x_{1}, x_{2}, …x_{5}. Первое уравнение можно в свою очередь рассматривать как систему из 5 уравнений. Как было показано, система уравнений фактически представляет конъюнкцию логических функций. Справедливо и обратное утверждение, - конъюнкцию условий можно рассматривать как систему уравнений.

Построим дерево решений для импликации (x1 \rightarrow x2) - первого члена конъюнкции, который можно рассматривать как первое уравнение. Вот как выглядит графическое изображение этого дерева


Дерево состоит из двух уровней по числу переменных уравнения. Первый уровень описывает первую переменную X_{1}. Две ветви этого уровня отражают возможные значения этой переменной – 1 и 0. На втором уровне ветви дерева отражают только те возможные значения переменной X_{2}, для которых уравнение принимает значение истина. Поскольку уравнение задает импликацию, то ветвь, на которой X_{1} имеет значение 1, требует, чтобы на этой ветви X_{2} имело значение 1. Ветвь, на которой X_{1} имеет значение 0, порождает две ветви со значениями X_{2}, равными 0 и 1. Построенное дерево задает три решения, на которых импликация X_{1} \rightarrow X_{2} принимает значение 1. На каждой ветви выписан соответствующий набор значений переменных, дающий решение уравнения.

Вот эти наборы: {(1, 1), (0, 1), (0, 0)}

Продолжим построение дерева решений, добавляя следующее уравнение, следующую импликацию X_{2} \rightarrow X_{3}. Специфика нашей системы уравнений в том, что каждое новое уравнение системы использует одну переменную из предыдущего уравнения, добавляя одну новую переменную. Поскольку переменная X_{2} уже имеет значения на дереве, то на всех ветвях, где переменная X_{2} имеет значение 1, переменная X_{3} также будет иметь значение 1. Для таких ветвей построение дерева продолжается на следующий уровень, но новые ветви не появляются. Единственная ветвь, где переменная X_{2} имеет значение 0, даст разветвление на две ветви, где переменная X_{3} получит значения 0 и 1. Таким образом, каждое добавление нового уравнения, учитывая его специфику, добавляет одно решение. Исходное первое уравнение:

(x1 \rightarrow x2) \wedge (x2 \rightarrow x3) \wedge (x3 \rightarrow x4) \wedge (x4 \rightarrow x5 ) = 1

имеет 6 решений. Вот как выглядит полное дерево решений для этого уравнения:


Второе уравнение нашей системы аналогично первому:

(y1 \rightarrow y2) \wedge (y2 \rightarrow y3) \wedge (y3 \rightarrow y4) \wedge (y4 \rightarrow y5 ) = 1

Разница лишь в том, что в уравнении используются переменные Y. Это уравнение также имеет 6 решений. Поскольку каждое решение для переменных X_{i} может быть скомбинировано с каждым решением для переменных Y_{j}, то общее число решений равно 36.

Заметьте, построенное дерево решений дает не только число решений (по числу ветвей), но и сами решения, выписанные на каждой ветви дерева.

Задача 19

Сколько существует различных наборов значений логических переменных x1, x2, x3, x4, x5, y1, y2, y3, y4, y5, которые удовлетворяют всем перечисленным ниже условиям?

(x1 \rightarrow x2) \wedge (x2 \rightarrow x3) \wedge (x3 \rightarrow x4) \wedge (x4 \rightarrow x5 ) = 1
(y1 \rightarrow y2) \wedge (y2 \rightarrow y3) \wedge (y3 \rightarrow y4) \wedge (y4 \rightarrow y5 ) = 1
(x1 \rightarrow y1) = 1

Ответ: 31

Решение:

Эта задача является модификацией предыдущей задачи. Разница в том, что добавляется еще одно уравнение, связывающее переменные X и Y.

Из уравнения X_{1} \rightarrow Y_{1} следует, что когда X_{1} имеет значение 1(одно такое решение существует), то и Y_{1} имеет значение 1. Таким образом, существует один набор, на котором X_{1} и Y_{1} имеют значения 1. При X_{1}, равном 0, Y_{1} может иметь любое значение, как 0, так и 1. Поэтому каждому набору с X_{1}, равном 0, а таких наборов 5, соответствует все 6 наборов с переменными Y. Следовательно, общее число решений равно 31.

Задача 20

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

(\neg X_{1} \vee X_{2}) \wedge (\neg X_{2} \vee X_{3}) \wedge (\neg X_{3} \vee X_{4}) \wedge (\neg X_{4} \vee X_{5}) \wedge (\neg X_{5} \vee X_{1}) = 1

Ответ: 2

Решение: Вспоминания основные эквивалентности, запишем наше уравнение в виде:

(X_{1} \rightarrow X_{2}) \wedge (X_{2} \rightarrow X_{3}) \wedge (X_{3} \rightarrow X_{4}) \wedge (X_{4} \rightarrow X_{5}) \wedge (X_{5} \rightarrow X_{1}) = 1

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

X_{1} \equiv X_{2} \equiv X_{3} \equiv X_{4} \equiv X_{5} = 1

Это уравнение имеет два решения, когда все X_{i} равны либо 1, либо 0.

Задача 21

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

(X_{1} \rightarrow X_{2}) \wedge (X_{2} \rightarrow X_{3}) \wedge (X_{3} \rightarrow X_{4}) \wedge (X_{4} \rightarrow X_{5}) \wedge (X_{5} \rightarrow X_{1}) = 1

Ответ: 4

Решение: Так же, как и в задаче 20, от циклических импликаций перейдем к тождествам, переписав уравнение в виде:

(X_{1} \rightarrow X_{2}) \wedge (X_{2} \equiv X_{3} \equiv X_{4}) \wedge (X_{4} \rightarrow X_{5}) = 1

Построим дерево решений для этого уравнения:


Задача 22

Сколько решений имеет следующая система уравнений?

((X_{1} \equiv X_{2}) \wedge (X_{3} \equiv X_{4})) \vee (\neg (X_{1} \equiv X_{2}) \wedge \neg (X_{3} \equiv X_{4})) = 0
((X_{3} \equiv X_{4}) \wedge (X_{5} \equiv X_{6})) \vee (\neg (X_{3} \equiv X_{4}) \wedge \neg (X_{5} \equiv X_{6})) = 0
((X_{5} \equiv X_{6}) \wedge (X_{7} \equiv X_{8})) \vee (\neg (X_{5} \equiv X_{6}) \wedge \neg (X_{7} \equiv X_{8})) = 0
((X_{7} \equiv X_{8}) \wedge (X_{9} \equiv X_{10})) \vee (\neg (X_{7} \equiv X_{8}) \wedge \neg (X_{9} \equiv X_{10})) = 0

Ответ: 64

Решение: Перейдем от 10 переменных к 5 переменным, введя следующую замену переменных:

Y_{1} = (X_{1} \equiv X_{2}); Y_{2} = (X_{3} \equiv X_{4}); Y_{3} = (X_{5} \equiv X_{6}); Y_{4} = (X_{7} \equiv X_{8}); Y_{5} = (X_{9} \equiv X_{10});

Тогда первое уравнение примет вид:

(Y_{1} \wedge Y_{2} ) \vee ( \neg Y_{1} \wedge \neg Y_{2} ) = 0

Уравнение можно упростить, записав его в виде:

(Y_{1} \equiv Y_{2}) = 0

Переходя к традиционной форме, запишем систему после упрощений в виде:

 \neg (Y_{1} \equiv Y_{2}) = 1
 \neg (Y_{2} \equiv Y_{3}) = 1
 \neg (Y_{3} \equiv Y_{4}) = 1
 \neg (Y_{4} \equiv Y_{5}) = 1

Дерево решений для этой системы простое и состоит из двух ветвей с чередующимися значениями переменных:


Возвращаясь к исходным переменным X, заметим, что каждому значению переменной Y соответствует 2 значения переменных X, поэтому каждое решение в переменных Y порождает 2^5 решений в переменных X. Две ветви порождают 2 * 2^5 решений, так что общее число решений равно 64.

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

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

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

Написать такую программу несложно. Такая программа легко справится со всеми задачами, предлагаемыми в ЕГЭ.

Как это ни странно, но задача нахождения решений систем логических уравнений является сложной и для компьютера, оказывается и у компьютера есть свои пределы. Компьютер может достаточно просто справиться с задачами, где число переменных 20 -30, но начнет надолго задумываться на задачах большего размера. Дело в том, что функция 2^n, задающая число наборов, является экспонентой, быстро растущей с увеличением n. Настолько быстро, что обычный персональный компьютер за сутки не справится с задачей, у которой 40 переменных.

Программа на языке C# для решения логических уравнений

Написать программу для решения логических уравнений полезно по многим причинам, хотя бы потому, что с ее помощью можно проверять правильность собственного решения тестовых задач ЕГЭ. Другая причина в том, что такая программа является прекрасным примером задачи на программирование, соответствующей требованиям, предъявляемым к задачам категории С в ЕГЭ.

Идея построения программы проста, - она основана на полном переборе всех возможных наборов значений переменных. Поскольку для заданного логического уравнения или системы уравнений число переменных n известно, то известно и число наборов – 2^n, которые требуется перебрать. Используя базовые функции языка C# - отрицание, дизъюнкцию, конъюнкцию и тождество, нетрудно написать программу, которая для заданного набора переменных вычисляет значение логической функции, соответствующей логическому уравнению или системе уравнений.

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

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

Вот как выглядит функция на языке C#, решающая нашу задачу:

/// <summary>
/// программа подсчета числа решений
/// логического уравнения (системы уравнений)
/// </summary>
/// <param name="fun">
/// логическая функция - метод, 
/// сигнатура которого задается делегатом DF
/// </param>
/// <param name="n">число переменных</param>
/// <returns> число решений</returns>
static int SolveEquations(DF fun, int n)
{
 int res = 0;
 bool[] set = new bool[n];
 int m = (int)Math.Pow(2, n); //число наборов
 int p = 0, q = 0, k = 0;
 //Полный перебор по числу наборов
 for (int i = 0; i < m; i++)
 {
 p = i;
 //Формирование очередного набора - set,
 //заданного двоичным представлением числа i 
 for (int j = 0; j < n; j++)
 {
 k = (int)Math.Pow(2, j);
 q = p % 2;
 p = p / 2;
 if (q == 0)
 set[j] = false;
 else
 set[j] = true;
 }
 //Вычисление значения функции на наборе set
 if(fun(set)) 
 res ++;
 }
 return res;
} 
 

Для понимания программы, надеюсь, достаточно сделанных объяснений идеи программы и комментариев в ее тексте. Остановлюсь лишь на пояснении заголовка приведенной функции. У функции SolveEquations два входных параметра. Параметр fun задает логическую функцию, соответствующую решаемому уравнению или системе уравнений. Параметр n задает число переменных функции fun. В качестве результата функция SolveEquations возвращает число решений логической функции, то есть число тех наборов, на которых функция принимает значение true.

Для школьников привычно, когда у некоторой функции F(x) входным параметром x является переменная арифметического, строкового или логического типа. В нашем случае используется более мощная конструкция. Функция SolveEquations относится к функциям высшего порядка – функциям типа F(f), у которых параметрами могут быть не только простые переменные, но и функции.

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

delegate bool DF(bool[] vars); 
 

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

В заключение приведу программу, в которой функция SolveEquations используется для решения нескольких систем логических уравнений. Функция SolveEquations является частью приводимого ниже класса ProgramCommon:

class ProgramCommon
 {
 delegate bool DF(bool[] vars);
 static void Main(string[] args)
 {
 Console.WriteLine("У Функции And решений - " +
 SolveEquations(FunAnd, 2));
 Console.WriteLine("У Функции 51 решений - " +
 SolveEquations(Fun51, 5)); 
 Console.WriteLine("У Функции 53 решений - " +
 SolveEquations(Fun53, 10));
 } 
 static bool FunAnd(bool[] vars)
 {
 return vars[0] && vars[1];
 }
 static bool Fun51(bool[] vars)
 {
 bool f = true;
 f = f && (!vars[0] || vars[1]);
 f = f && (!vars[2] || vars[1]);
 f = f && (!vars[3] || vars[4]);
 f = f && (!vars[1] || vars[3]);
 f = f && (!vars[3] || vars[2]);
 return f;
 } 
 static bool Fun53(bool[] vars)
 {
 bool f = true;
 f = f && ((vars[0] == vars[1]) || (vars[0] == vars[2]));
 f = f && ((vars[1] == vars[2]) || (vars[1] == vars[3]));
 f = f && ((vars[2] == vars[3]) || (vars[2] == vars[4])); 
 f = f && ((vars[3] == vars[4]) || (vars[3] == vars[5]));
 f = f && ((vars[4] == vars[5]) || (vars[4] == vars[6]));
 f = f && ((vars[5] == vars[6]) || (vars[5] == vars[7]));
 f = f && ((vars[6] == vars[7]) || (vars[6] == vars[8]));
 f = f && (!((vars[7] == vars[8]) || (vars[7] == vars[9]))); 
 return f;
 } 
 }
 

Вот как выглядят результаты решения по этой программе:

Форма входа
Логин:
Пароль:

Это важно!








Календарь
«  Июль 2017  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
31


Язык сайта

Счетчик материалов
Сообщений на форуме: 0/0 Банк материалов: 96
Комментариев: 9
Гостевая книга: 14
Банк статей: 59
Вакансии: 7
Новости: 24
Сайтов: 5
Тесты: 4
FAQ: 4



Мы рады приветствовать Вас на Российском информационно-образовательном портале!

Данный проект позволяет сделать образовательный процесс более «прозрачным» для родителей учеников и
более эффективным и насыщенным для детей и педагогов.
В различных разделах настоящего портала Вы можете:
поучаствовать в опросе, высказать свое мнение о качестве предоставляемых услуг   
разместить свои методические разработки в "Банке материалов", получив именной сертификат;
разместить свои статьи в "Банке статей", получив именной сертификат;
стать активным участником нашего форума, получив сертификат;
обменяться мнениями и полезной информацией и многое другое!
www.obr-rus.ru © 2017