• C

Sorting program

hi,

I have a sort program like below. there is no compiler error but it has some error. could you please help me correct it. thanks




---------------code --------------------------------------
#include <stdio.h>
#define maximum 4


void bubblesort(int a[], int n);
main()
{

 int a[maximum];
 int j;
 int x;
 int CNT=0;

 printf("(a)please enter number:");
 scanf("%d", &x);
 while (x !=-1 && CNT < maximum){
      a[CNT++]=x;
      printf("(b) enter number: ");
      scanf("%d", &x);

    if (CNT==maximum)
          printf("(c) overflow\n");
    else{
          printf("(d) extra: ");
          scanf("%d", &x);
     }
  }


  printf("(e) unslo list: " );
    for (j=0; j < CNT; j++)
        printf("%d, %d\n", j, a[j]);
       
    if (CNT >0)
     
      printf("(f) sorted: \n");
      bubblesort (a, CNT);
      for (j=0; j< CNT; j++)
         printf("%d, %d", j, a[j]);
         
         system("pause");
}


void bubblesort(int a[], int n)
{
    int i, j, tmp;

    for (i=0; i<n-1; i++)
    {
        for (j=0; j<n-1-i; j++)
            if (a[j+1] < a[j])     /* compare the two neighbors */
            {                      
                tmp = a[j];        /* swap a[j] and a[j+1]      */
                a[j] = a[j+1];
                a[j+1] = tmp;                        
            }

    }
   
}
rmtogetherAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

jkrCommented:
Two problems here:

main()
{

 int a[maximum];
 int j;
 int x;
 int CNT=0;

 printf("(a)please enter number:");
 scanf("%d", &x);
 while (x !=-1 && CNT < maximum){
     a[CNT++]=x;
     printf("(b) enter number: ");
     scanf("%d", &x);

    if (CNT>=maximum) //  <--------- also for all values > maximum
         printf("(c) overflow\n");
    else{
         printf("(d) extra: ");
         scanf("%d", &x);
     }
  }


  printf("(e) unslo list: " );
    for (j=0; j < CNT; j++)
        printf("%d, %d\n", j, a[j]);
       
    if (CNT >0) { // <---------- need brackets here, or the 'if' will only be conditional for 'printf()'
     
      printf("(f) sorted: \n");
      bubblesort (a, CNT);
      for (j=0; j< CNT; j++)
         printf("%d, %d", j, a[j]);
         
         system("pause");
     } // <--- closing bracket also
}
0
rmtogetherAuthor Commented:
hi, thanks

I following your instruction and change the code like below. but the the output seems not correct. it not really sorts the input numbers




#include <stdio.h>
#define maximum 4


void bubblesort(int a[], int n);
main()
{

 int a[maximum];
 int j;
 int x;
 int CNT=0;

 printf("(a)please enter number:");
 scanf("%d", &x);
 while (x !=-1 && CNT < maximum){
     a[CNT++]=x;
     printf("(b) enter number: ");
     scanf("%d", &x);

    if (CNT>=maximum) //  <--------- also for all values > maximum
         printf("(c) overflow\n");
    else{
         printf("(d) extra: ");
         scanf("%d", &x);
     }
  }


  printf("(e) unslo list: " );
    for (j=0; j < CNT; j++)
        printf("%d, %d\n", j, a[j]);
       
    if (CNT >0) { // <---------- need brackets here, or the 'if' will only be conditional for 'printf()'
     
      printf("(f) sorted: \n");
      bubblesort (a, CNT);
      for (j=0; j< CNT; j++)
         printf("%d, %d", j, a[j]);
         
         system("pause");
     } // <--- closing bracket also
}

void bubblesort(int a[], int n)
{
    int i, j, tmp;

    for (i=0; i<n-1; i++)
    {
        for (j=0; j<n-1-i; j++)
            if (a[j+1] < a[j])     /* compare the two neighbors */
            {                      
                tmp = a[j];        /* swap a[j] and a[j+1]      */
                a[j] = a[j+1];
                a[j+1] = tmp;                        
            }

    }
   
}
0
jkrCommented:
The more I look at your code the stranger the input sequence gets. Did you mean to

#include <stdio.h>
#define maximum 4


void bubblesort(int a[], int n);
main()
{

 int a[maximum];
 int j;
 int x;
 int CNT=0;

 while (x !=-1 && CNT < maximum){
     printf("(b) enter number: ");
     scanf("%d", &x);
     a[CNT++]=x;

  }


  printf("(e) unslo list: \n" );
    for (j=0; j < CNT; j++)
        printf("%d, %d\n", j, a[j]);
       
    if (CNT >0) { // <---------- need brackets here, or the 'if' will only be conditional for 'printf()'
     
      printf("(f) sorted: \n");
      bubblesort (a, CNT);
      for (j=0; j< CNT; j++)
         printf("%d, %d\n", j, a[j]);
         
         system("pause");
     } // <--- closing bracket also
}

void bubblesort(int a[], int n)
{
    int i, j, tmp;

    for (i=0; i<n-1; i++)
    {
        for (j=0; j<n-1-i; j++)
            if (a[j+1] < a[j])     /* compare the two neighbors */
            {                      
                tmp = a[j];        /* swap a[j] and a[j+1]      */
                a[j] = a[j+1];
                a[j+1] = tmp;                        
            }

    }
   
}

?
0
Get Certified for a Job in Cybersecurity

Want an exciting career in an emerging field? Earn your MS in Cybersecurity and get certified in ethical hacking or computer forensic investigation. WGU’s MSCSIA degree program was designed to meet the most recent U.S. Department of Homeland Security (DHS) and NSA guidelines.  

rmtogetherAuthor Commented:
thanks, I know it looks strange....I am kind confused....


but, I guess my teacher need some thing can return "overflow" if user's input excess array size , because  the original code was roughly copied from the class (there are some error, but the idea is like that)
if (CNT>=maximum) //  <--------- also for all values > maximum
         printf("(c) overflow\n");

I actually did the same thing like you give to me, but looks like my teach did not like it...><
If I recall correct this is call "variable link list"... do you have any idea about this?

0
jkrCommented:
>>but, I guess my teacher need some thing can return "overflow" if user's input excess array size

You aren't taking any input regarding the array size in your code.

>>If I recall correct this is call "variable link list"

Err, no, that's something completely different.
0
tang_tzuchiCommented:
Hi,

Try to change as following:

do{
printf("(a)please enter number:");
 scanf("%d", &x);

if (CNT>=maximum) //  <--------- also for all values > maximum
         printf("(c) overflow\n");

}while(x>=maximum || x<0);

 while (x !=-1 && CNT < maximum){
     a[CNT++]=x;
     printf("(b) enter number: ");
     scanf("%d", &x);
.... // the rest of ur code will be the same
}

hope it can help you.
0
rmtogetherAuthor Commented:

hi, tang_tzuchi

could you give me the complete code for the main() function.  thanks.
0
jkrCommented:
It is not really effective to check that while already exevuting teh loop, rather make sure that teh range is valid when inputting the value:

main()
{

 int a[maximum];
 int j;
 int x;
 int CNT=0;
 int max = maximum + 1;

 while (max > maximum) { // repeats until input is below maximum
   printf("(a)please enter number (max. is %d):", maximum);
    scanf("%d", &max);
 }

 while (x !=-1 && CNT < max){
     printf("(b) enter number: ");
     scanf("%d", &x);
     a[CNT++]=x;

  }


  printf("(e) unslo list: \n" );
    for (j=0; j < CNT; j++)
        printf("%d, %d\n", j, a[j]);
       
    if (CNT >0) { // <---------- need brackets here, or the 'if' will only be conditional for 'printf()'
     
      printf("(f) sorted: \n");
      bubblesort (a, CNT);
      for (j=0; j< CNT; j++)
         printf("%d, %d\n", j, a[j]);
         
         system("pause");
     } // <--- closing bracket also
}
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
tang_tzuchiCommented:
#include <stdio.h>
#define maximum 4


void bubblesort(int a[], int n);
main()
{

 int a[maximum];
 int j;
 int x;
 int CNT=0;

 do{
printf("(a)please enter number:");
 scanf("%d", &x);

if (CNT>=maximum) //  <--------- also for all values > maximum
         printf("(c) overflow\n");

}while(x>=maximum || x<0);

 while (x !=-1 && CNT < maximum){
     a[CNT++]=x;
     printf("(b) enter number: ");
     scanf("%d", &x);
}

  printf("(e) unslo list: \n" );
    for (j=0; j < CNT; j++)
        printf("%d, %d\n", j, a[j]);
       
    if (CNT >0) { // <---------- need brackets here, or the 'if' will only be conditional for 'printf()'
     
      printf("(f) sorted: \n");
      bubblesort (a, CNT);
      for (j=0; j< CNT; j++)
         printf("%d, %d\n", j, a[j]);
         
         system("pause");
     } // <--- closing bracket also
}

void bubblesort(int a[], int n)
{
    int i, j, tmp;

    for (i=0; i<n-1; i++)
    {
        for (j=0; j<n-1-i; j++)
            if (a[j+1] < a[j])     /* compare the two neighbors */
            {                      
                tmp = a[j];        /* swap a[j] and a[j+1]      */
                a[j] = a[j+1];
                a[j+1] = tmp;                        
            }

    }
   
}
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.