Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14

Лишние скобки в выражениях

28.01.2022, 15:22. Показов 2013. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Royal_X Посмотреть сообщение
лишние скобки:
- лишними скобками (как кашу маслом) код не испортишь!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.01.2022, 15:22
Ответы с готовыми решениями:

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

Задача: Убрать лишние скобки
Описание Преобразовать математическое выражение, удалив в нём лишние скобки, которые не влияют на результат выражения. Input ...

Программа проверки файла (ов) на лишние скобки
Всем привет. Понимаю, что суть вопроса не нова, но все же, может кто сможет помочь в данном вопросе. Есть много файлов, в которых очень...

21
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6241 / 2953 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
28.01.2022, 15:28
Catstail, читабельность кода можно испортить. А нечитабельный код это разновидность гуанокода.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
28.01.2022, 15:30
Catstail, не согласен, если их немного, то ещё можно пропустить,
Тут их в принципе можно и поставить, хотя ничего хорошего в код они не приносят.
Но вот что бывает прям бесит - когда ставят лишние скобки в if, когда по приоритетам и без скобок можно

C++
1
if ((a>0)||((a<(b+1))&&((a+c)<(b*c))))
1
28.01.2022, 15:40  [ТС]

Не по теме:

Kuzia domovenok, я вел речь только об арифметических выражениях. Экономия скобок в этом случае чревата крайне неприятными ошибками (если ошибся в приоритете). Мой подход: свою память нужно беречь - запоминать только важные вещи! А чем помнить приоритеты - проще поставить скобки - риска меньше.

Но в плюсах скобки встречаются не только в ар.выражениях. Там их количество должно быть "строго то, какое надо". Но это уже совсем другая история.

0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
28.01.2022, 15:52  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
Catstail, читабельность кода можно испортить.
- это если ставить откровенно лишние скобки. И в большом количестве. Но взгляните на прилагаемую картинку. В центре - исходная формула. Справа и слева - две эквивалентные формы записи. Но левая сразу ассоциируется с исходной формулой (благодаря скобкам), а правая требует вспомнить приоритеты... На этом можно сильно споткнуться, если во главу угла поставить краткость (экономию скобок). Потому что с моей т.з. лучше код, который Вы назвали говнокодом (но дающий правильный результат), чем более краткий, но неверный.
Миниатюры
Лишние скобки в выражениях  
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6241 / 2953 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
28.01.2022, 16:10
Цитата Сообщение от Catstail Посмотреть сообщение
но дающий правильный результат
этот код тоже дает правильный результат

C++
1
2
3
4
5
#include <iostream>
int main()
{
    std::cout<<((((1)+(99))/(2))*(50));
}
Цитата Сообщение от Catstail Посмотреть сообщение
свою память нужно беречь - запоминать только важные вещи! А чем помнить приоритеты - проще поставить скобки - риска меньше.
Если человек, называющий себя программистом, не знает приоритета операций, то лучше ему сменить профиль, ибо приоритет операций это основа основ. Существует много других профессий, где и вправду можно беречь память...

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

Что касается вашей формулы, то и там есть лишняя скобка, ибо в математике принято писать:

https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{1+99}{2}\cdot 50 либо https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{(1+99)\cdot 50}{2}

хотя, второй вариант предпочтительнее

Цитата Сообщение от Catstail Посмотреть сообщение
чем более краткий, но неверный
(1+99)/2*50 абсолютно верное выражение как по синтаксису С++, так и по математической нотации
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
28.01.2022, 16:22  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
Если человек, называющий себя программистом, не знает приоритета операций, то лучше ему сменить профиль, ибо приоритет операций это основа основ. Существует много других профессий, где и вправду можно беречь память...
- память, голубчик, нужно беречь всегда... А откровенно лишние скобки ставить не надо самому и мне приписывать не стоит.

"Вы это поймете, вы это обязательно поймете" (АБС "Понедельник начинается в субботу")

Добавлено через 1 минуту
Цитата Сообщение от Royal_X Посмотреть сообщение
чем более краткий, но неверный
- а я не имел в виду, что этот код неверный. Я имел в виду другое: экономя скобки, рискуешь получить очень неприятную ошибку. Неужели это не ясно. Я косноязычием, вроде, не страдаю.
0
 Аватар для DeCrinal
64 / 40 / 31
Регистрация: 15.04.2017
Сообщений: 176
28.01.2022, 16:32
Цитата Сообщение от Royal_X Посмотреть сообщение
лишние скобки: операции умножения и деления имеют одинаковый уровень приоритета + эти скобки также не меняют правило ассоциативности. Как с ними, так и без них, после сложения (1+99) сначала выполнится деление, а потом умножение.
Буквально недавно затух огонь войны по поводу примера 6:2(1+2). Не вижу проблемы добавить лишнюю пару скобок там, где это не уменьшает читаемости кода, а лишь добавляет ассоциации с известной формулой
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6241 / 2953 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
28.01.2022, 16:42
Цитата Сообщение от Catstail Посмотреть сообщение
"Вы это поймете, вы это обязательно поймете" (АБС "Понедельник начинается в субботу")
Только что понял, что на меня снова наехал маэстро афоризмов и народной мудрости, с которым в прошлый раз обсуждал натуральные числа

Цитата Сообщение от Catstail Посмотреть сообщение
память, голубчик, нужно беречь всегда...
Прошу "голубчиком" меня не называть, если, конечно, вы обращались ко мне, а не цитировали какой-то афоризм. Возможно, в вашем кругу принято так обращаться друг к другу, но мы с вами не из одной песочницы. У меня совершенно другие взгляды и ценности.

Цитата Сообщение от Catstail Посмотреть сообщение
экономя скобки
Ставлю скобки только тогда, когда это нужно для корректной работы программы. Для меня скобки это не масло, а код не каша, поэтому термина "экономия скобок" не знаю.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
28.01.2022, 16:50  [ТС]

Не по теме:

Royal_X, на сердитых воду возят...



Добавлено через 1 минуту
Цитата Сообщение от Royal_X Посмотреть сообщение
а код не каша
- у вас явно склонность к абстрактному мышлению
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6241 / 2953 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
28.01.2022, 16:55
DeCrinal, если вы хорошо знакомы с приоритетом операций, но специально поставили лишнюю скобку, то в таком случае вопросов к вам нет. Я вам указал на лишние скобки, предположив, что быть может вы не знаете приоритета операций. Но если вы знаете, но решили сделать так по своим причинам, то тогда все ок - это ваш код, вам и решать, каким он будет)
0
 Аватар для DeCrinal
64 / 40 / 31
Регистрация: 15.04.2017
Сообщений: 176
28.01.2022, 17:08
Цитата Сообщение от Royal_X Посмотреть сообщение
если вы хорошо знакомы с приоритетом операций, но специально поставили лишнюю скобку, то в таком случае вопросов к вам нет. Я вам указал на лишние скобки, предположив, что быть может вы не знаете приоритета операций. Но если вы знаете, но решили сделать так по своим причинам, то тогда все ок - это ваш код, вам и решать, каким он будет)
Вы у меня флешбеки 16-го года вызываете, когда я еще в программирование погружался) Просто за это время из-за некоторых трудно отлавливаемых багов, которые искал многие часы, привычка выработалась. Уже не помню, когда в последний раз что-то не работало из-за неправильных приоритетов. А чистота кода.. Вроде бы слежу за этим, но критику всегда рад услышать
0
28.01.2022, 20:11

Не по теме:

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

О чем вообще тут речь. На вкус и цвет же...

0
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,145
28.01.2022, 20:18
Цитата Сообщение от Royal_X Посмотреть сообщение
детальное знание приоритета операций это основа основ
это - ложь.
0
28.01.2022, 20:30

Не по теме:

Цитата Сообщение от Алексей1153 Посмотреть сообщение
детальное знание приоритета операций это основа основ
это ложь, не спорю. Своим постом вы показали, что вы неплохо умеете редактировать цитаты :D

Цитата Сообщение от Royal_X Посмотреть сообщение
приоритет операций это основа основ
а это истина

0
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,145
28.01.2022, 20:45
Цитата Сообщение от Royal_X Посмотреть сообщение
не спорю
спорить и не требовалось
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
28.01.2022, 21:20
Холивар, холивар, а меня не позвали...
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
29.01.2022, 03:19
Цитата Сообщение от Catstail Посмотреть сообщение
а правая требует вспомнить приоритеты...
дело в том, что левый и правый вариант - не эквивалентны.

поскольку у умножения и деления одинаковые приоритеты,
то выражение: (a+b)/c * d

компилятор может реализовать двумя способами:

C++
1
2
3
v = a + b; // 1
v = v * d; // 2
v = v / 2; // 3
или

C++
1
2
3
v = a + b; // 1
v = v / 2; // 2
v = v * d; // 3

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

так какой же путь выберет компилятор?
не известно: unspecified behavior

использование скобочек гарантирует,
что сначала выполниться именно деление: ((a + b)/2)*d;

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

Добавлено через 3 минуты
111
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
29.01.2022, 03:19
111
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6241 / 2953 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
29.01.2022, 11:05
hoggy, не согласен. В С++ кроме уровней приоритета есть ещё правила ассоциативности. И для оператора умножения, и для оператора деления, действует правило L→R, что означает, что вычисление будет слева направо. Конкретно, в этом примере непредвиденного поведения компилятора не будет. Как со скобками, так и без, сразу будет деление, а потом умножение.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.01.2022, 11:05
Помогаю со студенческими работами здесь

BDS 2006 Лишние скобки "}"
Не срочный вопрос, но достало... Кто пишет в BDS 2006 у вас наверняка была та же проблема, когда в один прекрасный момент он начинает...

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

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

Убрать лишние скобки из алгебраического выражения, используя стек
Задана строка, содержащая алгебраическое выражение со скобками. Требуется убрать лишние скобки. Пример. Исходная строка. ((a+b)+c) ...

Убрать лишние скобки из алгебраического выражения, используя стек
Задана строка, содержащая алгебраическое выражение со скобками. Требуется убрать лишние скобки. Пример. Исходная строка. ((a+b)+c) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru