# Even / Odd Issues

Show 80 post(s) from this thread on one page
Page 1 of 2 12 Last
• 12-06-2012
akemi.kanegae
Even / Odd Issues
The even/odd function does not work...here is what I have so far. Everything works except for the evenodd function. I am supposed to get the even numbers to list first, then the odd numbers. It should look like this:

Original: 9 8 7 6 5 4 3 2 1
Reversed: 1 2 3 4 5 6 7 8 9
Original: 9 8 7 6 5 4 3 2 1
Even: 2 4 6 8 5 3 7 9 1

Code:

``` #include <stdio.h> #include <stdlib.h> #define N 9 /* MAIN */ void revArray(int arr[]) { int temp[N]; int i; for(i = 0; i < N; ++i) { temp[i] = arr[N - 1 -i]; } for(i = 0; i < N; ++i) { arr[i] =temp[i]; } } int *revElement(int arr[]) { static int idx = N; idx = --idx; return arr + idx; } void evenOdd(int odd[]) { int i; int evenTemp[N/2]; int oddTemp[(N-1)/2]; char tempOdd; for(i=0; i<(N-1)/2; i++) { if(odd[i]%2 == 0) /* if even integer*/ evenTemp[i] = odd[i]; /*store even numbers temporary */ elseoddTemp[i]= odd[i]; /*store odd numbers temporary */ } for(i=0; i<(N-1)/2; i++) { odd[i]=evenTemp[i]; /*swap even numbers first in the array*/ odd[N-1-i]=oddTemp[i]; /*swap odd numbers last in the array */ } } int main(int argc, char **argv) { int a[N]; int idx; int *p = a; while(p < a + N) *p++ = a + N - p; printf("Original: "); p = a; while(p < a + N) printf("%2d ",*p++); /* Part A: Reverse the array */ revArray(a); printf("\nReversed: "); p = a; while(p < a + N) printf("%2d ",*p++); printf("\n"); /* Part B: Return elements in reverse order */ printf("Original: "); for (idx = 0; idx < N; idx++) { printf("%2d ",*revElement(a)); } printf("\n"); /* Part C: Put even numbers first, odd numbers last in the array. Order of the elements is not important as long as all evens are before first odd */ printf("Even: "); evenOdd(a); p = a; while(p < a + N) printf("%2d ",*p++); printf("\n"); system("pause"); }```
• 12-06-2012
Salem
SourceForge.net: Indentation - cpwiki
Your code has no indentation, so as a result it's too hard to follow the flow easily (for us, AND for you).
• 12-06-2012
akemi.kanegae
is this better?

Code:

```#include <stdio.h> #include <stdlib.h> #define N 9 /* MAIN */ void revArray(int arr[])       {           int temp[N];           int i; for(i = 0; i < N; ++i)       {           temp[i] = arr[N - 1 -i];       } for(i = 0; i < N; ++i)       {           arr[i] =temp[i];       }       } int *revElement(int arr[])       {           static int idx = N;           idx = --idx;           return arr + idx;       } void evenOdd(int odd[])       {           int i;           int evenTemp[N/2];           int oddTemp[(N-1)/2];           char tempOdd;         for(i=0; i < N-1 ; i++)               {                       if(odd[i]%2 == 0) /* if even integer*/                       evenTemp[i] = odd[i]; /*store even numbers temporary */                       else                       oddTemp[i]= odd[i]; /*store odd numbers temporary */               }     for(i=0; i< (N/2); ++i)               {                       odd[i]=evenTemp[i]; /*swap even numbers first in the array*/                       odd[i-N]=oddTemp[i]; /*swap odd numbers last in the array */               }               } int main(int argc, char **argv) { int a[N]; int idx; int *p = a; while(p < a + N) *p++ = a + N - p;         printf("Original: ");         p = a; while(p < a + N)         printf("%2d ",*p++); /* Part A: Reverse the array */         revArray(a);         printf("\nReversed: ");         p = a; while(p < a + N)         printf("%2d ",*p++);         printf("\n"); /* Part B: Return elements in reverse order */         printf("Original: "); for (idx = 0; idx < N; idx++)         {               printf("%2d ",*revElement(a));         } printf("\n"); /* Part C: Put even numbers first, odd numbers last in the array. Order of the elements is not important as long as all evens are before first odd */ printf("Even:    "); evenOdd(a); p = a; while(p < a + N)         printf("%2d ",*p++);         printf("\n"); system("pause"); }```
• 12-06-2012
Lesshardtofind
Quote:

that does not help
To the contrary. It helps everyone else undestand your code so they are more likely to help debug it. I am not going to lie I looked at this post over an hour ago and saw there was no indentation as Salem has suggested and I immediately hit the Back key.

• 12-06-2012
Matticus
Quote:

Originally Posted by akemi.kanegae
that does not help

If you're expecting knowledgeable people to help you, for free - could you at least meet them half way, put in some effort, and make it presentable? Demanding help is not a good way to get assistance from those who are willing to volunteer their time for you.

Edit: Lesshardtofind beat me to it. And I had the same reaction they describe in their third sentence.
• 12-06-2012
akemi.kanegae
I did not mean it that way, I meant that it did not help me when I indented it. Not that your information was not helpful. I do not know proper indentation. I re-read what I posted and changed it. It sounded really rude. I apologize. I did not know that proper indentation was needed. Did I do it correctly now? I am unsure. Again, I am sorry for sounding rude. I did not mean it that way at all.
• 12-06-2012
akemi.kanegae
Sorry Salem, I did not mean to sound rude. I indented my program, is that way better? Or did I not do it correctly? Please let me know if I need to change it again.
• 12-06-2012
akemi.kanegae
I really do appreciate all of your help. I did not mean it sound rude :( Im sorry everyone.
• 12-06-2012
Matticus
It's okay, if it's a misunderstanding. I don't think anyone is snubbing you - it does take some time to study a program, after all.
• 12-06-2012
akemi.kanegae
Ok. I appreciate your reply. Did I indent the program correctly after I edited it?
• 12-06-2012
Lesshardtofind
Code:

```void evenOdd(int odd[])      {              int i;              int evenTemp[N/2];  // size 9/2        or 4   int oddTemp[(N-1)/2];  // size 8/2    also 4          char tempOdd;              for(i=0; i < N-1 ; i++)                {                          if(odd[i]%2 == 0) /* if even integer*/                            evenTemp[i] = odd[i]; // <---- What happens here when the loop has run 8 times but you store a variable into the 7th                                     //          address in array with a size of 4                        else                            oddTemp[i]= odd[i]; /*store odd numbers temporary */  <--- same problem   }          for(i=0; i< (N/2); ++i)                {                          odd[i]=evenTemp[i]; /*swap even numbers first in the array*/                          odd[i-N]=oddTemp[i]; /*swap odd numbers last in the array */                  }              }```
• 12-06-2012
Matticus
Second time in an hour that Lesshardtofind beat me to the punch :)

And your indentation could be better - but notice how fast you got an answer when the code was somewhat more readable.
• 12-06-2012
Salem
I call this indented code.
Code:

```#include <stdio.h> #include <stdlib.h> #define N 9                    /* MAIN */ void revArray(int arr[]) {   int temp[N];   int i;   for (i = 0; i < N; ++i) {     temp[i] = arr[N - 1 - i];   }   for (i = 0; i < N; ++i) {     arr[i] = temp[i];   } } int *revElement(int arr[]) {   static int idx = N;   idx = --idx;   return arr + idx; } void evenOdd(int odd[]) {   int i;   int evenTemp[N / 2];   int oddTemp[(N - 1) / 2];   char tempOdd;   for (i = 0; i < N - 1; i++) {     if (odd[i] % 2 == 0)        /* if even integer */       evenTemp[i] = odd[i];    /*store even numbers temporary */     else       oddTemp[i] = odd[i];      /*store odd numbers temporary */   }   for (i = 0; i < (N / 2); ++i) {     odd[i] = evenTemp[i];      /*swap even numbers first in the array */     odd[i - N] = oddTemp[i];    /*swap odd numbers last in the array */   } } int main(int argc, char **argv) {   int a[N];   int idx;   int *p = a;   while (p < a + N)     *p++ = a + N - p;   printf("Original: ");   p = a;   while (p < a + N)     printf("%2d ", *p++);      /* Part A: Reverse the array */   revArray(a);   printf("\nReversed: ");   p = a;   while (p < a + N)     printf("%2d ", *p++);   printf("\n");                /* Part B: Return elements in reverse order */   printf("Original: ");   for (idx = 0; idx < N; idx++) {     printf("%2d ", *revElement(a));   }   printf("\n");                /* Part C: Put even numbers first, odd numbers last in the array. Order of                                   the elements is not important as long as all evens are before first odd */   printf("Even:    ");   evenOdd(a);   p = a;   while (p < a + N)     printf("%2d ", *p++);   printf("\n");   system("pause"); }```
Original: 9 8 7 6 5 4 3 2 1
Reversed: 1 2 3 4 5 6 7 8 9
Original: 9 8 7 6 5 4 3 2 1
Even: 2 4 6 8 5 3 7 9 1

What is the order of the odd numbers at the end of the array? It seems entirely random to me.

Code:

```  //!! you're assuming an equal balance of even and odd numbers.   //!! what if the input array was all even numbers?   int evenTemp[N / 2];   int oddTemp[(N - 1) / 2];   for (i = 0; i < N - 1; i++) {     if (odd[i] % 2 == 0)        /* if even integer */       //!! you need separate subscripts for each array.       //!! at the moment, you make two copies of the input array (which overflow both local arrays)       evenTemp[i] = odd[i];    /*store even numbers temporary */     else       oddTemp[i] = odd[i];      /*store odd numbers temporary */   }```
• 12-06-2012
akemi.kanegae
Thank you for helping. How can I solve the problem? Do I need to mess with the eventemp[N/2] and oddTemp[(N-1)/2] so they are not the same? and also my if / else loop?
• 12-06-2012
akemi.kanegae
Quote:

Originally Posted by Matticus
Second time in an hour that Lesshardtofind beat me to the punch :)

And your indentation could be better - but notice how fast you got an answer when the code was somewhat more readable.

Thank you :) I see that. I will work on my indentation!!
Show 80 post(s) from this thread on one page
Page 1 of 2 12 Last