C Macro voor Max value

Status
Niet open voor verdere reacties.

Chargeotto

Gebruiker
Lid geworden
22 aug 2007
Berichten
147
Ben bezig met een macro te maken die de maximale waarde teruggeeft van 3 waardes.

Nu weet ik wel hoe dit met 2 zou kunnen....
Code:
#define max(a, b) ((a) > (b) ? (a) : (b))

Iemand een idee hoe dit voor 3 zou moeten in 1 macro?
 
Denk simpelweg na. Je wil de grootste waarde van 3 waardes teruggeven. Daarvoor moet je elke waarde met elkaar vergelijken en de grootste daarvan teruggeven. Ik neem aan dat je dat kan :).
 
Denk simpelweg na. Je wil de grootste waarde van 3 waardes teruggeven. Daarvoor moet je elke waarde met elkaar vergelijken en de grootste daarvan teruggeven. Ik neem aan dat je dat kan :).

Ja dat snap ik, alleen hoe je een if kan maken van meerdere regels in een macro is mij een raadsel nog.
Je moet op de 1 of andere manier dan 2 vergelijkingen maken, en de grooste opslaan.
Maar kan dat ook in een macro?
 
je kan een macro/define over meerdere regels uitsmeren dmv een backslash[CPP]#define som (3 + \
4 \
+ 5)[/CPP]

Of je doet gewoon verder met wat je al deed adv shorthand[CPP]#define max(a, b, c) ((a) > (b)? (is a de grootste) : (is b de grootste))[/CPP]
in het tweede gedeelte gebruik je dan dezelfde structuur om a of b met c te vergelijken en het correcte resultaat te geven
 
Waarom doe je het niet zo?

Code:
#define max(a, b) ((a) > (b) ? (a) : (b))
#define max3(a, b, c) max(max(a, b), c)
 
Laatst bewerkt:
Waarom doe je het niet zo?

Code:
#define max(a, b) ((a) > (b) ? (a) : (b))
#define max3(a, b, c) max(max(a, b), c)

waarom ik het niet zo doe, is omdat dit een opdracht is voor school. En in de opdracht staat dat je het op die manier moet doen :P
Anders had ik het wel op die manier gedaan ja.

Zit alleen nog met het punt hoe ik shorthand if kan maken met 2 vergelijkingen in plaats van 1.
Had zelf al zoiets als dit:
Code:
#define max3(x,y,z) ((x) > (y) > (z) ? (x) : (y) : (z))
In gedachten....
Alleen dit werkt niet.... alleen over een shorthand met meerdere vergelijkingen kan ik vrijwel niks vinden op het internet. Terwijl het volgens mij wel mogelijk is?
 
Kijk even goed naar de haakjes in mijn shorthand voorbeeld, deze zijn absoluut noodzakelijk!

Soms helpt het ook om het eerst "longhand" uit te schrijven, dan zou je zien dat jouw huidige voorwaarde ongeldig is..
 
oja, thanks heb het nu door....
Code:
#define max3(x,y,z) ((x) > (z) ? (x > y ? x : y) : (y > z ? y : z))
moet het zijn :)
 
Code:
#define max3(x,y,z) ((x) > (z) ? (x > y ? x : y) : (y > z ? y : z))

(Nu) (moet) (je) (nog) (wel) (wat) (haakjes) om de x-en y-en en z-en zetten.
 
Ongeacht of het een schoolopdracht is of niet, ik vind de oplossing van syllabub het moosit (en het meest leesbaar).

Mij lijkt het dat je je docent wel kan overtuigen van die oplossing en een beetje docent zou dit dan ook accepteren, wetende dat het netter en leesbaarder is.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan