1. Welcome to the new MacRumors forums. See our announcement and read our FAQ

Program for even and odd numbers

Discussion in 'Mac Programming' started by Quboid, Dec 14, 2006.

  1. macrumors 6502

    hello all,
    My final programming exam is tomorrow. And i am practiciing at this moment. Just a quick question, how do write the code to figure out if a number is even or not even. I have it theoretically as finding the mode 2 of the number and test to see if it is zero. but the mod function doesn't work on my xcode compiler. I tried using the % command (a%b) but that doesn't work either.

    PS. I am programmnig in C.

  2. macrumors 6502


  3. macrumors G4


    You need to add

    #include <stdio.h>
    #include <stdlib.h>
    in XCode for modulus to work ;).
  4. macrumors 68000


    The word is modulo (or modulus)...its actually an operator (not a command).

    Anyway, in C the modulo operator is '%', so (a%b) evaluates to r, where r is the remainder after performing integer division of a by b.
  5. macrumors 6502a

    elfin buddy

    I personally find Xcode horrible for writing in C. I just use a text editor in the terminal and the GCC program to compile. Works like a charm :)

    Still, I don't think you need to add a
    #include <stdlib.h>
    line for it to work in Xcode. I just tested the following code under a C Tool project in Xcode, and it ran perfectly:

    #include <stdio.h>
    int main(void)
    	int a;
    	int b;
    	int c;
    	b = 2;
    	printf("Please enter the number to check:  ");
    	scanf("%d", &a);
    	c = a % b;
    	if (c == 0)
    		printf("%d is even.\n", a);
    		printf("%d is odd.\n", a);
    But, whatever works, eh?
  6. Administrator

    Doctor Q

    Staff Member

    Even if you didn't know about the % operator, you could test parity (even/odd-ness) using integer arithmetic.

    If i is an integer, this test would do it:
    int j = ( i >= 0 ? i : -i ) ;
    if ( j/2 == (j+1)/2 )
        printf("%d is even\n",i) ;
        printf("%d is odd\n",i) ;
    In integer arithmetic, 0/2 and 1/2 are 0, 2/2 and 3/2 are 1, 4/2 and 5/2 are 2, and so on.
  7. macrumors regular

    You could go into good 'ole bitwise operators also!

    But I won't go into that....;)
  8. macrumors 68020


    why not?

    if (number&0x1 == 1)
    printf("number is odd/n");
    printf("number is even/n");
  9. Administrator

    Doctor Q

    Staff Member

    My example didn't work for negative integers, so I edited the post above to fix it. I don't win any points for bug-free programming today.
  10. macrumors regular

    Because Quboid probably hasn't gotten into bitwise operators yet. :p
    ( excuse me if I'm wrong )
  11. macrumors 603


    == has precedence over &, so you're actually just saying if (number&(1==1)) ... which happens to give the right answer because true (1==1) is usually set to 1, maybe it's even defined to be 1 in C, but I don't know for sure.

    if (number&1) is sufficient, but if ((number&0x1) == 1) is probably more readable while also doing what you think it does.


    Sorry, Quboid, for digressing.
  12. macrumors G4


    You're probably right, I was doing it in Cocoa, and don't want to check in the program itself which C libraries are required, as having either seemed to be OK to the compilier.
  13. macrumors 6502

    Surely you mean if ((number&0x1) == YES)?

  14. macrumors G4


    No, because, the YES, NO thing is only for Objective-C, not real C.
  15. macrumors 6502

    Thanks a million guys, i had the exam today and got exempted......i ahve a prject to finish though. Looking for some help.
  16. macrumors 603


    And more importantly if ((number&0x2) == YES) wouldn't work for if ((number&0x2) == 0x2) or just if (number&2).
  17. macrumors 65816


    Come on guys, we can still take it up a notch :)

    #include <stdio.h>
    int main(int argc, char *argv[]) {
        char *even_odd_index[] = { "even\n", "odd\n" };
        char *even_odd_offset = "even\n\0\0\0odd\n";
        int val = 5;
        printf( even_odd_index[val & 0x01] );
        printf( &even_odd_offset[(val & 0x01)<<3] );
  18. macrumors regular

    I couldn't help but create my own little 1-line-app version of odd and even - nothing new which hasn't be posted yet, just wrapped into a runnable program.

    #include "stdio.h"
    int main (int argc, char ** argv) {
    	return printf("the number %s is %s", argv[1], atoi(argv[1]) & 1 ? "odd" : "even") < 0;
  19. macrumors 6502

    I stand corrected. It just seems inelegant to me to have to make the assumption that logical truth == 1, as safe as that assumption may be.

    Oh yeah. I forgot that we weren't actually testing a Boolean result. My point is rendered rather pointless in this case...
  20. macrumors regular

    Someone needs to write an asm version! :D


Share This Page