Solved

Sorting program

Posted on 2006-11-07
9
218 Views
Last Modified: 2010-04-15
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;                        
            }

    }
   
}
0
Comment
Question by:rmtogether
  • 4
  • 3
  • 2
9 Comments
 
LVL 86

Expert Comment

by:jkr
ID: 17893025
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
 

Author Comment

by:rmtogether
ID: 17893142
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
 
LVL 86

Expert Comment

by:jkr
ID: 17893282
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
 

Author Comment

by:rmtogether
ID: 17893470
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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 86

Expert Comment

by:jkr
ID: 17893493
>>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
 
LVL 3

Expert Comment

by:tang_tzuchi
ID: 17895088
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
 

Author Comment

by:rmtogether
ID: 17895106

hi, tang_tzuchi

could you give me the complete code for the main() function.  thanks.
0
 
LVL 86

Accepted Solution

by:
jkr earned 250 total points
ID: 17895299
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
 
LVL 3

Assisted Solution

by:tang_tzuchi
tang_tzuchi earned 250 total points
ID: 17903044
#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

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand and use pointers in the C programming language.
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.

706 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now