07-03-2004, 03:46 AM | #1 (permalink) |
Psycho
Location: Rotterdam
|
[C] problem with qsort
For school i have to write code for a embedded system (msp430) wich has to do 2 kinds of sorting.
1st one is a function written by myself called: eigen functie. 2nd one is a qsort function. One of the 2 functios can be selected by putting eigen funtie or qsort as comment, see the red text. Now comes the problem when i set eigen funtie as comment, so i want to execute the qsort. I get a strange error: Function argument number mismatch. Doe anyone know how to solve this? Thanks in advance. Here is the code: #include <msp430x11x1.h> #include <stdio.h> #define size 10 // Function prototypes void eigen_functie(int invoer[]); void qsort(int invoer[], int links, int rechts); void swap(int invoer[], int i, int j); void main(void) { int invoer[size] = {69,51,59,55,38,26,21,63,34,84}; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P2DIR |= BIT4; // Set P2.3 as output P2OUT |= BIT4; // Set BIT3 (LEDS Off) TACTL = TASSEL0 + TACLR; // Timer A clock is ACLK + clear TACTL |= MC1; // Timer A in Continous mode //eigen_functie(invoer); qsort(invoer); TACTL = MC_0; P2OUT &= ~BIT4; // Clear BIT3 (LEDS On) } /////////////////////////////////////////////////////////////// // eigen_functie /////////////////////////////////////////////////////////////// void eigen_functie(int invoer[]) { int x,y,aantal; //Declaraties. int uitvoer[size]; for(x=0;x<size;x++) { aantal = 0; for(y=0;y<size;y++) { if (invoer[y]<invoer[x]) { aantal++; } } uitvoer[aantal]=invoer[x]; } for(x=0;x<size;x++) { invoer[x] = uitvoer[x]; } } /////////////////////////////////////////////////////////////// // qsort /////////////////////////////////////////////////////////////// void qsort(int invoer[], int links, int rechts) { int i, laatste; void swap(int invoer[],int i, int j); if (links >= rechts) //Doe niets als in dearray minder dan twee elementen staan. return; swap(invoer, links, (links + rechts)/2); //Verplaats partitie-element naar invoer[0]. laatste = links; for(i = links+1; i <= rechts; i++) //Partitie. if (invoer[i] < invoer[links]) swap(invoer, ++laatste, i); swap(invoer, links, laatste); //Zet partitie-element terug. qsort(invoer, links, laatste-1); qsort(invoer, laatste+1, rechts); } void swap(int invoer[], int i, int j) //Swap functie. { int temp; temp = invoer[i]; invoer[i] = invoer[j]; invoer[j] = temp; }
__________________
Thumbs up |
07-03-2004, 04:13 AM | #2 (permalink) |
Follower of Ner'Zhul
Location: Netherlands
|
Nou... zo erg vreemd is het niet... qsort is een functie met 3 parameters en eigen_functie heeft er maar 1.
Je zou bij qsort dan ook een links en een rechts mee moeten geven. For the english ppl: Don't you just hate it when people with another language reply to eachother in their own language and you can't understand a word?
__________________
The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents. - Nathaniel Borenstein Last edited by RelaX; 07-03-2004 at 05:14 AM.. |
07-03-2004, 05:50 AM | #3 (permalink) |
Psycho
Location: Rotterdam
|
Great, after putting links and rechts in the qsort function. I only had to declare links and rechts and it worked!
Here is the modified code: // Function prototypes int links; int rechts; void eigen_functie(int invoer[]); void qsort(int invoer[], int links, int rechts); void swap(int invoer[], int i, int j); void main(void) { int invoer[size] = {69,51,59,55,38,26,21,63,34,84}; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P2DIR |= BIT3; // Set P2.3 as output P2OUT |= BIT3; // Set BIT3 (LEDS Off) TACTL = TASSEL0 + TACLR; // Timer A clock is ACLK + clear TACTL |= MC1; // Timer A in Continous mode //eigen_functie(invoer); qsort(invoer,links,rechts); TACTL = MC_0; P2OUT &= ~BIT3; // Clear BIT3 (LEDS On) } Reuze bedankt! = Thank you verry much
__________________
Thumbs up |
Tags |
problem, qsort |
|
|