| akemikanegae (16) | |
|
The program works except when I place the evenOdd function in it. I get a bunch of errors. I need to get the program to display the even numbers first, then the odd following...I am stuck. This is what the output is supposed to look like: 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 1 9 This is what I have so far: #include <stdio.h> #include <stdlib.h> #include <math.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 *arr[]) { int arr[N]; int i; for(i = 0; i < N; ++i) { if (arr[N] %2 == 0) *arr; } } int main(int argc, char **argv) { int a[N]; int idx; int *p = a; printf("Enter %d numbers: ", N); scanf("%d", a); for (p = a; p < a + N; p++) { printf("In reverse order:"); } for (p = a + N - 1; p >= a; p--) { printf(" %d", *p); printf("\n"); } 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"); printf("Original: "); for (idx = 0; idx < N; idx++) { printf("%2d ",*revElement(a)); } printf("\n"); printf("Even: "); evenOdd(a); p = a; while(p < a + N) printf("%2d ",*p++); printf("\n"); system("pause"); } } | |
|
|
|
| theranga (100) | |
|
A quick list of problems I can see in evenOdd: you've reused the variable name arr - if you just rename one of them the compiler will be a little bit happier the function should probably take int [] as its argument rather than int *[] - it doesn't need a pointer to a pointer and that'll also make your call in main () legit: it currently should be evenOdd(&a);then, in the if statement: what is this trying to do? *arr is not a command or an operation, you have to actually tell it to do something. also, shouldn't it be talking about arr[i] rather than arr[N]?because of that if statement, your actual algorithm is unclear, but my suggestion would be this: have two arrays - one for even numbers and one for odd, sort arr into those two and then concatenate them at the end | |
|
|
|
| akemikanegae (16) | |
| I am unsure how to do that | |
|
|
|
| Filiprei (222) | |||
Remember the code tags | |||
|
|
|||
| akemikanegae (16) | |
|
It keeps giving me this error: declaration of 'int arr[9]' shadows a parameter what does that mean?? | |
|
|
|
| buffbill (416) | |||
|
If s is a string and x= 1/2* length(s) the following will rearrange s so that odd digits/chars are at one end and even digits/chars are at the other. Remember C delights in the use of pointers.
| |||
|
|
|||
| akemikanegae (16) | |
|
I have edited the program, and this is what I have so far: (Everything works, except there is something wrong with the even/odd calculations...it gives weird numbers) Any ideas?? #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 */ else oddTemp[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"); } | |
|
|
|