"Информатика", Рудченко Т.А., Семёнов А.Л. / Под ред. Семёнова А.Л.
Проверка «все разные» помогает выяснить, нет ли в наборе одинаковых значений. Для этого сравнивают каждую пару: если хотя бы два значения совпали, весь набор не является набором различных значений. У трёх значений нужно проверить три пары, а для большего набора пар становится больше. Результаты проверок соединяют логическим И: условие истинно только тогда, когда каждая пара различается. Такой способ можно выполнить вручную или записать в алгоритме.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Различные значения — это значения, которые не равны друг другу. Если значений несколько, нельзя проверить только одно или два из них: нужно сравнить каждую возможную пару. Например, для A, B и C проверяют A с B, A с C и B с C. Это определение помогает точно задать условие, которое должен проверить человек или алгоритм.
Сравнение на равенство — проверка того, совпадают ли два значения; её результатом служит истина или ложь. Например, проверка A = B истинна, если значения совпадают, и ложна, если они разные. Для поиска различий используют противоположное условие: A ≠ B. Такой результат нужен, чтобы выразить каждую попарную проверку в логической записи.
Логическое И — операция, которая даёт истину, только если истинны все объединённые условия. Если хотя бы одно условие ложно, всё выражение с И ложно. Для проверки «все разные» это подходит, потому что каждая пара должна оказаться различной. Иначе говоря, одного совпадения достаточно, чтобы ответ для всего набора был отрицательным.
Логическое ИЛИ — операция, которая даёт истину, если истинно хотя бы одно из объединённых условий. Например, выражение A ≠ B ИЛИ A ≠ C истинно, когда различается хотя бы одна из этих пар. Оно не подтверждает, что различаются все пары, поэтому для условия «все разные» ИЛИ не заменяет И. Этот термин полезно знать, чтобы не перепутать смысл соединения проверок.
Чтобы проверить три значения A, B и C, сравнивают каждую пару: A с B, A с C и B с C. Причина в том, что одинаковыми могут оказаться любые два значения, а заранее неизвестно, какие именно. Проверки A с B и B с C, например, не сообщат, равны ли A и C. Поэтому нужны все три сравнения, а не только те, которые кажутся достаточными.
Каждое сравнение на неравенство становится отдельным условием, а требование выполнить все три проверки записывают через логическое И. Получается выражение (A ≠ B) И (A ≠ C) И (B ≠ C). Скобки показывают границы отдельных проверок, а И объединяет их в одно требование. Такая запись удобна тем, что результат всего выражения сразу отвечает на вопрос о наборе целиком.
Если хотя бы одна пара значений совпала, соответствующее условие неравенства окажется ложным. Из-за логического И тогда ложно и всё выражение, даже если две остальные пары различаются. Если же совпадений нет, все три проверки истинны и общий ответ тоже истинен. Так проверка отдельной пары определяет итог для всего набора.
При увеличении числа значений растёт число необходимых попарных сравнений. Это происходит потому, что у каждого значения могут быть совпадения с несколькими другими, а проверка только относительно одного не охватывает остальные пары. Чтобы работать аккуратно, можно перечислять значения по порядку и для каждого сравнивать его со всеми следующими. Тогда каждая пара встречается один раз, и ни одна не пропускается.
Проверку можно выполнить вручную, записать как логическое выражение или представить алгоритмом. При ручной работе удобно составить список пар и отмечать результат каждой проверки. В выражении условия соединяются логическими операциями, а в алгоритме после обнаружения совпадения можно сделать вывод, что все значения различными не являются. Способ записи меняется, но смысл остаётся прежним: проверить все пары и убедиться, что ни одна не совпала.
| Пара значений | Условие различия | Что означает ложный результат |
|---|---|---|
| A и B | A ≠ B | A и B совпадают |
| A и C | A ≠ C | A и C совпадают |
| B и C | B ≠ C | B и C совпадают |
| Общий результат: все три условия соединены логическим И | Хотя бы одна пара совпала | |
Сначала проверьте каждую пару по строкам таблицы и отметьте, истинно ли условие различия. Затем объедините три результата логическим И. Если все три условия истинны, значения различны; если хотя бы одно ложно, есть совпадение.
Нужно выяснить, совпадают ли какие-либо два числа, поэтому одного взгляда на часть набора недостаточно: проверим все пары. Числа удобно сравнивать по очереди и отмечать, равны ли они. Если каждая пара различается, условие «все разные» истинно. Если хотя бы одна пара равна, ответ будет отрицательным.
Ответ: да, числа 4, 7 и 9 все различны.
В записи должны присутствовать проверки всех пар, иначе можно пропустить совпадение. Для трёх чисел таких пар три: A и B, A и C, B и C. Каждая проверка должна утверждать, что значения не равны. Поскольку нужны сразу все три результата, соединим условия логическим И.
Ответ: условие истинно тогда и только тогда, когда истинны все три сравнения на неравенство.
Сравнения только с первым значением недостаточно: например, второе и третье могут совпасть, хотя оба отличаются от первого. Поэтому алгоритм должен охватить каждую пару. Перечислим значения как A, B, C и D и будем проверять пары, не повторяя уже сделанные сравнения. Если найдётся равная пара, дальнейший поиск можно прекратить: ответ уже известен.
Ответ: проверяются шесть пар: A–B, A–C, A–D, B–C, B–D и C–D; набор различен, только если ни одна пара не совпала.
Первая ошибка — сравнить только две пары из трёх и пропустить третью. Так можно не заметить совпадение именно в непроверенной паре, потому что результаты остальных сравнений о ней ничего не говорят. Обычно это происходит, когда считают, что проверки с одним выбранным значением уже охватывают весь набор. Самопроверка: выпишите A–B, A–C и B–C и убедитесь, что в списке есть каждая пара.
Вторая ошибка — соединить условия логическим ИЛИ. При ИЛИ достаточно одной различающейся пары, хотя для ответа «все разные» должны различаться все пары. Путаница возникает из-за того, что обе операции объединяют условия, но требуют разного числа истинных результатов. Проверьте запись на примере: если одна пара совпала, итоговое условие должно быть ложным.
Третья ошибка — проверить, что значения не все равны, вместо того чтобы проверить попарное различие. Например, в наборе 2, 2, 5 значения не все одинаковы, но два из них совпадают. Такое упрощение допускают, смешивая условия «есть хотя бы два разных» и «каждая пара различается». Для самопроверки найдите в наборе все одинаковые пары, а не только сравните крайние значения.
Четвёртая ошибка — для четырёх значений сравнить каждое только с первым. Тогда совпадение второго и третьего или второго и четвёртого может остаться незамеченным. Это кажется достаточным, если думать, что первое значение служит представителем всего набора. Составьте перечень всех шести пар и сверьте его с проверками алгоритма: каждая пара должна встретиться ровно один раз.
Для попарной проверки нужно уметь сравнивать значения и понимать, что результат условия бывает истинным или ложным. При записи проверок пригодится знание логических выражений, а также операций И и ИЛИ: от выбора операции зависит смысл общего результата. В алгоритмах обработки наборов данных этот способ помогает искать повторяющиеся значения. Те же рассуждения применимы не только к числам, но и к другим значениям, которые можно сравнить на равенство.
Почему недостаточно сравнить только два значения из трёх?
Потому что третье значение может совпасть с одним из первых двух. Например, если сравнить только A с B и A с C, то совпадение B и C может остаться незамеченным. Поэтому проверяют все три пары.
Почему условия попарного различия соединяются логическим И?
Требуется, чтобы различалась каждая пара, а не только одна из них. Логическое И даёт истину, лишь когда истинны все объединённые условия. Если хотя бы одна пара совпала, общий результат будет ложным.
Что будет, если два значения совпадают?
Сравнение этой пары на неравенство даст ложь. Поскольку все проверки соединены логическим И, условие «все значения разные» тоже окажется ложным.
Сколько пар нужно проверить для четырёх значений?
Для четырёх значений нужно проверить шесть пар. Это пары A–B, A–C, A–D, B–C, B–D и C–D; каждую проверяют один раз.
Можно ли проверить различие значений, сравнив каждое только с первым?
Для трёх значений такое сравнение не всегда обнаружит совпадение второго и третьего. Для четырёх и более значений остальные значения тоже могут совпасть между собой. Поэтому нужно сравнить все пары.
Все разные