Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 31
1

Макрос для нахождения наибольшего числа

29.09.2015, 16:17. Показов 5687. Ответов 14
Метки нет (Все метки)

Не могу разобраться с макросами, но страсть как хочется, помогите написать макрос.
C++
1
#define MAX(x, y, r) /* присвоить в r максимум из x и y */
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.09.2015, 16:17
Ответы с готовыми решениями:

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

Алгоритмы нахождения наибольшего числа
Доброго времени суток, форумчане! Мне тут по структурам и алгоритмам выдали интересное задание, и я...

Описать функцию Sum(t) для нахождения суммы наибольшего и наименьшего из чисел, записанных в текстовом файле
Прошу помочь решить задачки!:(очень нужно (Билет №16) В текстовом файле t(t-файловая...

Написать программу для нахождения наибольшего по модулю элемента матрицы.
Привет всем! Есть такая задача: Написать программу для нахождения наибольшего по модулю элемента...

14
383 / 277 / 478
Регистрация: 09.05.2014
Сообщений: 769
30.09.2015, 21:33 2
C++
1
#define MAX (x, y, r) x>y?r=x:r=y;
0
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
30.09.2015, 21:55 3
lawr, ты забыл первое правило писателя макросов: нужно больше скобок. И некоторые другие правила тоже.
C++
1
#define MAX(x,y,r) (r = ((x)>(y))?(x):(y))
0
Don't worry, be happy
17203 / 10081 / 1946
Регистрация: 27.09.2012
Сообщений: 25,159
Записей в блоге: 1
30.09.2015, 22:38 4
Цитата Сообщение от Tulosba Посмотреть сообщение
ты забыл первое правило писателя макросов: нужно больше скобок.
Первое правило - избегать макросов там, где можно и без них, а про скобки - второе
0
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
30.09.2015, 22:48 5
Croessmah, тут нельзя избежать, задание такое.
0
Don't worry, be happy
17203 / 10081 / 1946
Регистрация: 27.09.2012
Сообщений: 25,159
Записей в блоге: 1
30.09.2015, 23:56 6
Цитата Сообщение от Tulosba Посмотреть сообщение
тут нельзя избежать, задание такое.
в данном случае это желание ТС
Цитата Сообщение от MI0HGXAy3eH Посмотреть сообщение
но страсть как хочется
0
Tulosba
01.10.2015, 07:34
  #7

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
в данном случае это желание ТС
Желание разобраться, а не желание использовать.

Не по теме:

Хочу знать как летают самолеты, но не хочу быть пилотом.


Желание можно рассматривать, как задание, данное самому себе :)

0
Evg
Эксперт CАвтор FAQ
21204 / 8220 / 633
Регистрация: 30.03.2009
Сообщений: 22,542
Записей в блоге: 30
01.10.2015, 09:45 8
Лучший ответ Сообщение было отмечено Croessmah как решение

Решение

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
в данном случае это желание ТС
> но страсть как хочется
На форуме фраза "помогите решить" эдак в 70% случаев означает "сделайте вместо меня". Думаю, тут то же самое



Почему-то никто не предложил вариант (скобки и прочее опущу):

C
#define MAX(x,y,r) if (x>y) r=x; else r=y;
0
Don't worry, be happy
17203 / 10081 / 1946
Регистрация: 27.09.2012
Сообщений: 25,159
Записей в блоге: 1
01.10.2015, 12:44 9
Evg, всё же оно не может быть применено там, где вариант с ?: прокатит.
0
Evg
Эксперт CАвтор FAQ
21204 / 8220 / 633
Регистрация: 30.03.2009
Сообщений: 22,542
Записей в блоге: 30
01.10.2015, 15:00 10
Цитата Сообщение от Croessmah Посмотреть сообщение
Evg, всё же оно не может быть применено там, где вариант с ?: прокатит
Зато вариант с ? может дать побочный эффект там, где вариант с if'ом гарантировано сломается на компиляции (а ошибка компиляции это всегда лучше, чем ошибка исполнения). А если всё-таки исходить из того, что товарищу страсть как хочется, то вариант с if'ом является наиболее прямолинейным
0
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
01.10.2015, 15:06 11
Цитата Сообщение от Evg Посмотреть сообщение
может дать побочный эффект там, где вариант с if'ом гарантировано сломается на компиляции
Подкрепил бы это всё примером, было б замечательно.
Цитата Сообщение от Evg Посмотреть сообщение
вариант с if'ом является наиболее прямолинейным
Однозначно. Только я вот больше уделил внимания фиксам ошибок первого предложенного варианта, нежели старался написать что-то "в лоб" для ТС. Который, как ты справедливо заметил, скорее всего относится к категории людей: "сделайте вместо меня".
0
Evg
Эксперт CАвтор FAQ
21204 / 8220 / 633
Регистрация: 30.03.2009
Сообщений: 22,542
Записей в блоге: 30
01.10.2015, 15:15 12
Цитата Сообщение от Tulosba Посмотреть сообщение
Подкрепил бы это всё примером, было б замечательно
Я думал, что это очевидно:

C
1
foo (r, MAX(x,y,r));
Цитата Сообщение от Tulosba Посмотреть сообщение
Только я вот больше уделил внимания фиксам ошибок первого предложенного варианта, нежели старался написать что-то "в лоб" для ТС
Тут скорее ситуация из разряда "красный молоток"

Добавлено через 3 минуты
Как только макрос начинает содержать переменную (точнее, lvalue), которая будет модифицирована, этот макрос моментально становится архиплохим. А потому "оно не может быть применено там, где вариант с ?: прокатит" становится совершенно неинтересным фактором. По мне так куда больше внимания надо уделить тому, чтобы этот макрос нельзя было использовать там, где его использование приведёт к проблеме
0
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
01.10.2015, 15:30 13
Цитата Сообщение от Evg Посмотреть сообщение
Я думал, что это очевидно:
clang например всё равно предупреждение кинет:
Код
warning: unsequenced modification and access to 'r' [-Wunsequenced]
Да и GNU, я думаю, при соответствующем ключе.
Зато вариант с тернаркой может быть использован при вызове функции и с 1 аргументом (где ошибки из разряда точек следования нет):
C++
1
f(MAX(x,y,r));
в то время как с if/else - нельзя вовсе.
В общем, везде можно найти плюсы и минусы, но как уже упоминалось в теме: лучше не использовать макросы там, где есть более совершенные средства. Поэтому дальнейшие рассуждения какой макрос лучше, считаю неактуальными.
0
3 / 3 / 2
Регистрация: 03.11.2016
Сообщений: 138
05.11.2016, 20:53 14
Столкнулся с тем же заданием, система не принимает код
C++
1
#define MAX(x,y,r) (r = ((x)>(y))?(x):(y))
0
0 / 0 / 0
Регистрация: 22.03.2021
Сообщений: 1
22.03.2021, 19:45 15
а что нужно писать в выводе?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2021, 19:45

Макрос: Написать макрос по сравнению двух таблиц для нахождения несоответствий...
знатоки, прошу помощи в еще одном деле: есть два листа, --в одном список: яблоко, груша, слива, ...

Процедура нахождения наибольшего и наименьшего числа
Привет всем ) столкнулся с очердной проблемой а точнее с процедурой и функцией . Кому не сложо...

Составить алгоритм нахождения полусуммы наименьшего и наибольшего числа
Необходимо составить алгоритм нахождения полусуммы наименьшего и наибольшего числа из a b c d чисел...

Реализовать блок схему алгоритма нахождения суммы наибольшего числа из 4 заданных
нужно сделать блок схему алгоритма нахождения суммы наибольшего числа из 4 заданных. кто сможет...

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

функции:Написать программу, содержащую функцию нахождения наибольшего числа из N введенных
функции:Написать программу, содержащую функцию нахождения наибольшего числа из N введенных


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.