5,8K подписчиков

Если всё так просто с арифметикой, то почему эта задача вызывает споры?

139 прочитали
Бо'льшую популярность в социальных сетях набирают задачки с арифметическими вычислениями. Но почему? Почему споры по этим задачам могут быть бесконечными, а сложные задачи остаются без внимания.

Бо'льшую популярность в социальных сетях набирают задачки с арифметическими вычислениями. Но почему? Почему споры по этим задачам могут быть бесконечными, а сложные задачи остаются без внимания.

Вот интересные сообщения от коллег:
Коллега №1: Я вот своим ученикам по информатике при прохождении разбора математических выражений рассказываю о приоритетах операций и других свойствах, влияющих на порядок вычисления, например, операция умножения, заданная явно, и подразумевающаяся (!) операция умножения имеют разный приоритет.
Коллега №2: Просто очень интересный феномен, что пример не сложный, однако вызвал у других большое недоумение и различные варианты решения)

🔍 Мои мысли о том, почему сложные задачи получают меньшую активность:
Сложные задачи редко обсуждают даже в специализированных группах/чатах.
Есть две причины:
1. Думать нужно, а люди в интернет заходят ради развлечений (ну не все, основная масса), их трудно заинтересовать, но можно.
2. Боязнь получить порцию осуждения. Менталитет русскоязычного интернета (точнее социальных сетей). У нас если вопрос задать по науке, то сначала придут опустят, косвенно или прямо оскорбят (самоутвердятся), а потом в лучшем случае кто-то один поможет, подскажет. Если брать тематические форумы, то там ситуация лучше. Но для идеального сообщества должно быть большое количество спокойных умных людей без завышенного ЧСВ, которые помогут подсказать решение даже на простые вопросы. Но спокойных людей мало, поэтому человек, у которого что-то не получилось ( ЭТО АБСОЛЮТНО НОРМАЛЬНО ) просто боится задать вопрос.

📜 Лирическое отступление

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

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

В калькуляторах, как и в вашей программе на C, C++, Java, C#, Pascal, Python, очень важен приоритет операторов. Для многих очевидно, что в простом примере 2 + 2 * 2 оператор умножения выполняется раньше, т.к. имеет более высокий приоритет, чем оператор сложения. Но что делать, если в одном выражении мы НЕ имеем скобок, уточняющих приоритет, зато имеем несколько операторов одинакового приоритета?

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

◼ Другой способ — экспериментировать [метод научного тыка] чтобы понять как оно работает. Способ плохой, т.к. дает неполную картину, а только частности [есть шанс нарваться на другую аналогичную ошибку].

Рассмотрим выражение: a / (b + c) * d . Например, для языка C# у этого выражения будет следующий порядок вычислений операторов и операндов:
a, b, c, +, /, d, *.

Пара слов про ассоциативность операторов

Если операторы имеют одинаковый приоритет, порядок их выполнения определяется ассоциативностью операторов:
◼ Операторы с левой ассоциативностью вычисляются слева направо. За исключением операторов присваивания и оператора объединения со значением NULL, все бинарные операторы имеют левую ассоциативность. Например, выражение a + b - c вычисляется как (a + b) - c.
◼ Операторы с правой ассоциативностью вычисляются справа налево. Операторы присваивания, операторы объединения null, лямбда-выражения и условные операторы ?: являются правильными ассоциативными. Например, выражение x = y = z вычисляется как x = (y = z).

⚠️ Правило: Не уверены в приоритете — используйте скобки, чтобы изменить порядок вычислений, накладываемый ассоциативностью операторов:
Пример кода 🖥

Бо'льшую популярность в социальных сетях набирают задачки с арифметическими вычислениями. Но почему? Почему споры по этим задачам могут быть бесконечными, а сложные задачи остаются без внимания.-2

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

Задача из интернетов

Бо'льшую популярность в социальных сетях набирают задачки с арифметическими вычислениями. Но почему? Почему споры по этим задачам могут быть бесконечными, а сложные задачи остаются без внимания.-3

Если вы считаете, что для большинства всё очевидно, то посмотрите как сильно разделяются мнения:

Бо'льшую популярность в социальных сетях набирают задачки с арифметическими вычислениями. Но почему? Почему споры по этим задачам могут быть бесконечными, а сложные задачи остаются без внимания.-4

Подразумевает ли отсутствие явно поставленного знака умножения тот факт, что выражение 2(3+5) должно восприниматься цельным, т.е. полностью быть знаменателем? Вот такое решение было в интернете:

Бо'льшую популярность в социальных сетях набирают задачки с арифметическими вычислениями. Но почему? Почему споры по этим задачам могут быть бесконечными, а сложные задачи остаются без внимания.-5

К сожалению, в программах нет возможности НЕ поставить символ умножения *. Но давайте подумаем, как выполняется код и как считается такое выражение в различных языках программирования.

Код на C#
Код на C#
Код на C
Код на C
Код на Java
Код на Java
Код на Pascal
Код на Pascal
Код на Python
Код на Python

💡 Здесь нет подвохов из-за того, что нет сложных операторов. Но не всегда приоритетность операторов совпадает в различных языках программирования.

Понравилась статья? Поставьте лайк, подпишитесь на канал, напишите комментарий! Вам не сложно, а мне очень приятно :)

Если Вам нужен репетитор по физике, математике или информатике/программированию, Вы можете написать мне или в мою группу Репетитор IT mentor в VK
Лучший канал для физиков, математиков и программистов
Репетитор IT mentor в telegram