detecting odd and e...

Clear all

# detecting odd and even numbers

9 Posts
4 Users
8 Reactions
2,332 Views
(@barrie)
Member
Joined: 2 years ago
Posts: 86
Topic starter

Apart from using if statements, is there a statement  like "modulo" that will detect odd and even numbers? Couldn't see anything in the Reference department.

(@ronbentley1)
Member
Joined: 2 years ago
Posts: 385

Posted by: @barrie

Apart from using if statements, is there a statement  like "modulo" that will detect odd and even numbers? Couldn't see anything in the Reference department.

Hi Barrie,

There are a couple of obvious methods:

1. You can use the % operator with modulo 2 parameter, eg

Value % 2, = 0 if Value is even, and = 1 if Value is odd

Value & 1, = 1 if Value is odd and = 0 if Value is even

Ron B

Ron Bentley
Creativity is an input to innovation and change is the output from innovation. Braden Kelley
A computer is a machine for constructing mappings from input to output. Michael Kirby
Through great input you get great output. RZA
Gauss is great but Euler rocks!!

(@inq)
Member
Joined: 2 years ago
Posts: 1903

```// IF STATEMENT
if (a % 2)
{
// Odd
}
else
{
// Even
}

// ASSIGNMENT

const char* english = a % 2 ? "Odd" : "Even";

```

3 lines of code = InqPortal = Complete IoT, App, Web Server w/ GUI Admin Client, WiFi Manager, Drag & Drop File Manager, OTA, Performance Metrics, Web Socket Comms, Easy App API, All running on ESP8266...
Even usable on ESP-01S - Quickest Start Guide

(@barrie)
Member
Joined: 2 years ago
Posts: 86
Topic starter

Thank you, exactly what I was looking for.

@inq Is this equivalent to your sketch?

if (n % 2 = 0) { f = 1; b = -1;} else { f = -1; b = 1;}
Note: n, f and b assigned as int.

I got an error "lvalue required as left operand of assignment"

(@barrie)
Member
Joined: 2 years ago
Posts: 86
Topic starter

@inq Just found my error. should have made (n % 2 == 0)

This post was modified 2 years ago by barrie

ron bentley reacted
(@inq)
Member
Joined: 2 years ago
Posts: 1903

Yes, Your second version is right.  Strictly speaking logical statements do not have to have the (in)equality.  They only have to resolve to zero or non-zero to be false or true respectively.

Thus:

if (n % 2)   is the same as    if (n % 2 == 1)

Some people prefer to reverse them...

if (1 == n % 2)

... so they catch the exact thing you did above.

1. if (n == 1) will compile
2. if (n = 1) will also compile, but do something you likely didn't intend.
3. if (1 == n) will compile and is the same as (1)
4. if (1 = n) will not compile, so it lets you know you screwed up.

If you have explored pointers, they are either NULL or pointing to some place in memory, so just checking a pointer before using it like...

```MyClass* pClass = new MyClass();

if (pClass)
{
// Can work with the class object.
}
else
Serial.println("Could not allocate space for object.");```

3 lines of code = InqPortal = Complete IoT, App, Web Server w/ GUI Admin Client, WiFi Manager, Drag & Drop File Manager, OTA, Performance Metrics, Web Socket Comms, Easy App API, All running on ESP8266...
Even usable on ESP-01S - Quickest Start Guide

Member
Joined: 5 years ago
Posts: 1458

@inq

Posted by: @inq

Yes, Your second version is right.  Strictly speaking logical statements do not have to have the (in)equality.  They only have to resolve to zero or non-zero to be false or true respectively.

Thus:

if (n % 2)   is the same as    if (n % 2 == 1)

Some people prefer to reverse them...

if (1 == n % 2)

... so they catch the exact thing you did above.

1. if (n == 1) will compile
2. if (n = 1) will also compile, but do something you likely didn't intend.
3. if (1 == n) will compile and is the same as (1)
4. if (1 = n) will not compile, so it lets you know you screwed up.

If you have explored pointers, they are either NULL or pointing to some place in memory, so just checking a pointer before using it like...

```MyClass* pClass = new MyClass();

if (pClass)
{
// Can work with the class object.
}
else
Serial.println("Could not allocate space for object.");```

Well explained, as I've also mention this in the past.

There's just one more thing I would like to add/offer... and that is that anytime you come across such a situation, you should look to improve it, if it is something that you feel you might use in future, and by that I mean... you should (or may like), to turn it into a function for your own personal library, for future ease of use!

For example:

```bool isEven(int number) {
if(number % 2) {
return false;
}

return true;
}

void setup() {
Serial.begin(9600);
}

void loop()
{
if(isEven(43)) {
Serial.println("Number is EVEN");
} else {
Serial.println("Number is ODD");
}

delay(1000);
}
```

We could implement a more advanced/efficient function structure, but that would most likely take away from the readability of the learning what's going on here, so just keeping it simple.

Cheers

(@inq)
Member
Joined: 2 years ago
Posts: 1903

Well explained, as I've also mention this in the past.

You know... that is an interesting problem waiting to be solved by AI.

Forums are a treasure house of information.  If we could tap that information more transparently, it would make learning quicker.  Yes, I know the search engine is there, but how often are questions re-asked?  Is it timely?  It's not really laziness to want to ask your own question.  Sometimes there is an added nuance.  Sometimes they don't know how to ask the question or what is the keyword that will bring up the information that will click for them.  Sometimes, it's merely to make contact with another human being... a peer.  I have no peers within a hundred miles.  I know... I volunteer and teach people about all kinds of technical subjects... so I turn to forums to mainly learn, but also to reach someone with similar interests.  In the case of robotics, MPUs... its forum.dronebotworkshop.com.

I've seen some forums that attempt to real-time guess what you're asking while writing the body of you post and suggest other posts... however, I've never seen one give me a useful answer.

3 lines of code = InqPortal = Complete IoT, App, Web Server w/ GUI Admin Client, WiFi Manager, Drag & Drop File Manager, OTA, Performance Metrics, Web Socket Comms, Easy App API, All running on ESP8266...
Even usable on ESP-01S - Quickest Start Guide

Member
Joined: 5 years ago
Posts: 1458

Posted by: @inq

Well explained, as I've also mention this in the past.

You know... that is an interesting problem waiting to be solved by AI.

Forums are a treasure house of information.  If we could tap that information more transparently, it would make learning quicker.  Yes, I know the search engine is there, but how often are questions re-asked?  Is it timely?  It's not really laziness to want to ask your own question.  Sometimes there is an added nuance.  Sometimes they don't know how to ask the question or what is the keyword that will bring up the information that will click for them.  Sometimes, it's merely to make contact with another human being... a peer.  I have no peers within a hundred miles.  I know... I volunteer and teach people about all kinds of technical subjects... so I turn to forums to mainly learn, but also to reach someone with similar interests.  In the case of robotics, MPUs... its forum.dronebotworkshop.com.

I've seen some forums that attempt to real-time guess what you're asking while writing the body of you post and suggest other posts... however, I've never seen one give me a useful answer.

Good point, perhaps a programming "best practices" tips and tricks FAQ?

Cheers