Solved

do while loop

Posted on 2004-03-25
14
454 Views
Last Modified: 2011-09-20
anyone can help me to insert the do while loop in this program since the program only sort the bubble sort part.

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <sys\timeb.h>
#include <ctime>
#include <string>
#include <fstream>

using namespace std;

class Timer
{
 public:
 Timer()
   : secStart(0), secStop(0),
     milliSecStart(0), milliSecStop(0)
 { }  
 void start(string msg="")
   {
    cout << msg;
    ftime(&time);
    secStart = time.time;    
    milliSecStart = time.millitm;
   }
 void stop(string msg="")
   {
    ftime(&time);
    secStop = time.time;    
    milliSecStop = time.millitm;
    cout << msg;
   }

 //Will returns number of milliseconds ellapsed
 long read()
   {
         secDiff =      secStop -      secStart;
    milliSecDiff = milliSecStop - milliSecStart;
    if (milliSecDiff < 0)
       {
        milliSecDiff += 1000;
        secDiff--;
       }
     return (secDiff*1000 + milliSecDiff);
   }  
 private:
   long       secStart,      secStop;
   short milliSecStart, milliSecStop;
   long       secDiff,  milliSecDiff;
   struct timeb time;
};

class DataStore
{
 public:
   DataStore(int Size)
     {  
       size = Size;
       data = new int[Size];
     }
   ~DataStore()
     { delete[] data; }
   void randomizeData(int seekValue)
     {
      srand( seekValue );
      for (int i=0; i<size; i++)
         { data[i] = rand() % size; }
     }
   void bubbleSort(int N)
     {
      for (int i=0; i<N; i++)
      for (int j=N-1; j>=i+1; j--)
        {
         if (data[j] < data[j-1] )
           {
            int  temp = data[j];
            data[j]   = data[j-1];
            data[j-1] = temp;
           }
        }
     }
   void selectionSort(int N){
      for (int x = 0; x < N; x++){
            int index_of_max = x;
            for(int y = x; y < N; y++){
                if(data[index_of_max] > data[y]){
                    index_of_max = y;
                }
            }
            int temp = data[x];
            data[x] = data[index_of_max];
            data[index_of_max] = temp;
      }
   }
   void insertionSort(int N){
      int i, j, key;
      for(j = 1; j < N; j++){
            key = data[j];
            for(i = j - 1; (i >= 0) && (data[i] > key); i--){
                data[i+1] = data[i];
            }
            data[i+1] = key;
      }
   }
   void shellSort(int N){
      int flag = 1, i, temp, arrayLength = N;
      while(flag || (N > 1)){
            flag = 0;
            N = (N + 1) / 2;
            for(i = 0; i < (arrayLength - N); i++){
                if(data[i + N] < data[i]){
                    temp = data[i + N];
                    data[i + N] = data[i];
                    data[i] = temp;
                    flag = 1;
                }
            }
      }
   }
   
   void quickSort(int low, int high){
      int lowbound = low + 1;
      int highbound = high - 1;
      int temp;
      while(lowbound <= highbound){
            if(data[lowbound] < data[low]){
                lowbound++;
            }else{
                temp = data[lowbound];
                data[lowbound] = data[highbound];
                data[highbound] = temp;
                highbound--;
            }
      }
      highbound++;
      lowbound--;
     
      temp = data[low];
      data[low] = data[lowbound];
      data[lowbound] = temp;
     
      if(low != lowbound)
          quickSort(low, lowbound);
      if(high != highbound)
          quickSort(highbound, high);
   }
 // MERGE SORT
   void mergeSort(int left, int right){
      if(left < right){
              int mid = (left + right) / 2;
              mergeSort(left, mid);
              mergeSort(mid+1, right);
              merge(left,right);
      }
   }

   void merge(int left, int right){
         int size = right - left + 1;
         int mid = (left+right)/2;
      
          int *b = new int[size];
          int count = 0;
          for(int x = left; x <= mid; x++, count++){
              b[count] = data[x];
         }
         for(int x = right; x >= mid+1; x--, count++){
              b[count] = data[x];
         }
         for(int x = 0, y = size-1, put=left; x <= y; put++){
              if(b[x] <= b[y]){
                    data[put] = b[x];
                    x++;
              }
              else{
                    data[put] = b[y];
                    y--;
              }
          }
          delete[] b;
   }
 // END MERGE SORT
 
 // START RADIX SORT
   int radixSort(int size,int p,int k){
      int *counts;
      int *temp;
      int *data_tmp;
      int index;
      int pval;
      int i;
      int j;
      int n;
      data_tmp = data;

      if((counts = (int *)malloc(k * sizeof(int))) == NULL){
            return -1;
      }

      if((temp = (int *)malloc(size * sizeof(int))) == NULL){
            return -1;
      }

      for( n=0; n < p; n++){
            for(i=0; i < k; i++){
                counts[i] = 0;
            }
            pval = (int)pow((double)k,(double)n);

            for(j=0; j < size; j++){
                index = (int)(data_tmp[j] / pval) % k;
                counts[index] = counts[index] +1;
            }
            for(i = 1; i < k; i++){
                counts[i] = counts[i] + counts[i -1];
            }
            for(j = size -1; j >= 0; j--){
                index = (data_tmp[j] / pval) % k;
                temp[counts[index] -1] = data_tmp[j];
                counts[index] = counts[index] -1;
            }
            memcpy(data,temp,size * sizeof(int));
       }
       free(counts);
       free(temp);
       return 0;
   }
   // END RADIX SORT
   void display(int N)
     {
      for (int i=0; i<N; i++)
         cout << data[i] << " ";
     }
 
private:
     int* data;
     int size;
};

void menu()
{
    int ch;
    cout << endl << endl;
    cout << "\n\t\t------------------------------------------" << endl;
    cout << "\t\t\t\tMain Menu ";
    cout << "\n\t\t------------------------------------------" << endl << endl;
    cout << "\t\t[1] - Bubble Sort" << endl;
    cout << "\t\t[2] - Selection Sort" << endl;
    cout << "\t\t[3] - Insertion Sort" << endl;
    cout << "\t\t[4] - Shell Sort" << endl;
    cout << "\t\t[5] - Quick Sort" << endl;
    cout << "\t\t[6] - Merge Sort" << endl;
    cout << "\t\t[7] - Radix Sort" << endl;
    cout << "\t\t[0] - Quit Program" << endl << endl;
    cout << "\n\t\t\tPlease enter your choice : ";
    cin >> ch;
    cout << endl;
    cout << "\n\t\t------------------------------------------" << endl;
}

int main(void)
{
 
 Timer t;
 DataStore d(100000);
 
 //d.randomizeData( 17710 );
 //d.display(1000); //display data that is randomized
 
 ofstream sortOutput("sortOutput.txt");
 int countData;

 menu();
   
 int ch;  
 switch(ch)
 {
    case 1:    cout << "BubbleSort Start" << endl;
               sortOutput << "Bubble Sort\n";
               for(int i = 0, countData = 10000; i < 10; i++)
               {
                    t.start("\nTimer Started\nSorting..");
                    d.bubbleSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData); //display sorted data
                    countData += 10000;
                    d.randomizeData(17710);
               }
 
                cout << "BubbleSort End" << endl;
                menu();
                break;
               
               
    case 2:     cout << "SelectionSort Start" << endl;
                sortOutput << "\nSelection Sort\n";
 
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.selectionSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "SelectionSort End" << endl;
                menu();
                break;
               

     case 3:    cout << "InsertionSort Start" << endl;
                sortOutput << "\nInsertion Sort\n";
 
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.insertionSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "InsertionSort End" << endl;
                menu();
                break;
               
               
     case 4:    cout << "ShellSort Start" << endl;
                sortOutput << "\nShell Sort\n";        
               
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.shellSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                 }
                 cout << "ShellSort End" << endl;
                 menu();
                 break;
                 
 
     case 5:     cout << "quickSort Start" << endl;
                 sortOutput << "\nQuick Sort\n";
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                     t.start("Timer Started\nSorting..");
                     d.quickSort(0,countData);
                     t.stop("Timer Stopped\n");
                     cout << countData << " random numbers sorted" << endl;
                     cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                     sortOutput << countData << "random numbers sort = " 
                                << t.read() << " miliseconds\n" << endl;
                     //d.display(countData);
                     countData += 10000;
                     d.randomizeData(17710);
                 }
                 cout << "quickSort End" << endl;
                 menu();
                 break;
 
     case 6:     cout << "mergeSort Start" << endl;
                 sortOutput << "\nMerge Sort\n";
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                      t.start("Timer Started\nSorting..");
                      d.mergeSort(0, countData);
                      t.stop("Timer Stopped\n");
                      cout << countData << " random numbers sorted" << endl;
                      cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                      sortOutput << countData << "random numbers sort = " 
                                 << t.read() << " miliseconds\n" << endl;
                      //d.display(countData);
                      countData += 10000;
                      d.randomizeData(17710);
                 }
                 cout << "mergeSort End" << endl;
                 menu();
                 break;
                 
                 
     case 7:     cout << "radixSort Start" << endl;
                 sortOutput << "\nRadix Sort\n" << endl;
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                      t.start("Timer Started\nSorting..");
                      d.radixSort(countData,20,10);
                      t.stop("Timer Stopped\n");
                      cout << countData << " random numbers sorted" << endl;
                      cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                      sortOutput << countData << "random numbers sort = " 
                                 << t.read() << " miliseconds\n" << endl;
                      //d.display(countData);
                      countData += 10000;
                      d.randomizeData(17710);
                  }
                  cout << "radixSort End" << endl;
                  menu();
                  break;
                 

    case 0:       cout << "\n\t\t------------------------------------------" << endl;
                  cout << endl;
                  cout << "\tThank You for using this system!" << endl;
                  cout << "\tGoodbye!" << endl;
                  cout << endl << endl;
                  cout << "\n\t\t------------------------------------------" << endl;
                  cout << endl;  
                  break;
                 
    default:     cout << "Invalid Choice!\a\a\a" << endl;
                 menu();      

  sortOutput.close();
 
  system("pause");
  return 0;
 }
}
0
Comment
Question by:fird
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 8
  • 6
14 Comments
 
LVL 16

Expert Comment

by:imladris
ID: 10681458
A while loop allows the code enclosed in its block to be executed repeatedly.

In your case, I'm guessing that what you want to do repeatedly is show the menu, get a response, and sort according to the response.

So the while would begin before the call to menu, and end after the switch.

The second call to menu is probably not needed.

Also, menu should return the value that it got as input (e.g. return(ch)) so that the switch can use that value. So you would wind up with something like:

int ch=menu();
switch(ch)

and menu, of course, would have to be changed to "int menu" instead of "void menu", because now it is returning something.
0
 

Author Comment

by:fird
ID: 10681552
the program show the menu repeatedly but when i choose let say 2 for selection sort, the sorting programs running is not selection sort but also bubble sort. Same goes if i choose other menu.
0
 
LVL 16

Expert Comment

by:imladris
ID: 10681605
That's because in this piece of the code:

ofstream sortOutput("sortOutput.txt");
 int countData;

 menu();
   
 int ch;  
 switch(ch)


ch doesn't get initialized to anything. The call to menu does a "cin>>ch" in it, but it is putting the input into a ch which is *local* to menu. So the code in main is not affected by it. The solution is to change the call to menu so that it returns ch, as I already outlined.
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:fird
ID: 10681751
meaning that i must change all ch to menu?
0
 
LVL 16

Expert Comment

by:imladris
ID: 10681906
HMmm. How to explain this.

Observe your menu function. It contains a declaration "int ch". That declaration "creates" a variable. That variable is declared *inside* menu, so it is *local* to menu. That means it will cease to exist as soon as you exit menu.

You also have a variable "int ch" declared in main. It is declared inside main, and so it is local to *main*. That is, even though it happens to have the same name, it is a completely separate variable.

So the goal is that you want the variable ch (in main) to get the value of the input. The value of the input was assigned to ch (in menu). The apparent simplest approach to modifying your program is to change menu, so that it *returns* the value of its local variable. So change the declaration of menu, and give it a return. Something like:

int menu()
{   ...
    ...
     return(ch);
}

Then, in main, you can say:

int ch=menu();

Now the input is assigned to ch (in menu). Then ch (in menu) is returned to main, where it is assigned to ch (in main).
0
 

Author Comment

by:fird
ID: 10681907
sorry i didn't get it :( which part i must change to menu?
0
 

Author Comment

by:fird
ID: 10681944
it is not working :(
0
 

Author Comment

by:fird
ID: 10682002
sorry i can't get u :(
0
 
LVL 16

Expert Comment

by:imladris
ID: 10682005
If you attempted to make the alterations I suggested, please post the current code for menu and main, and list any errors or symptoms you are experiencing when you compile or run the code.
0
 

Author Comment

by:fird
ID: 10682233
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <sys\timeb.h>
#include <ctime>
#include <string>
#include <fstream>

using namespace std;

class Timer
{
 public:
 Timer()
   : secStart(0), secStop(0),
     milliSecStart(0), milliSecStop(0)
 { }  
 void start(string msg="")
   {
    cout << msg;
    ftime(&time);
    secStart = time.time;    
    milliSecStart = time.millitm;
   }
 void stop(string msg="")
   {
    ftime(&time);
    secStop = time.time;    
    milliSecStop = time.millitm;
    cout << msg;
   }

 //Will returns number of milliseconds ellapsed
 long read()
   {
         secDiff =      secStop -      secStart;
    milliSecDiff = milliSecStop - milliSecStart;
    if (milliSecDiff < 0)
       {
        milliSecDiff += 1000;
        secDiff--;
       }
     return (secDiff*1000 + milliSecDiff);
   }  
 private:
   long       secStart,      secStop;
   short milliSecStart, milliSecStop;
   long       secDiff,  milliSecDiff;
   struct timeb time;
};

class DataStore
{
 public:
   DataStore(int Size)
     {  
       size = Size;
       data = new int[Size];
     }
   ~DataStore()
     { delete[] data; }
   void randomizeData(int seekValue)
     {
      srand( seekValue );
      for (int i=0; i<size; i++)
         { data[i] = rand() % size; }
     }
   void bubbleSort(int N)
     {
      for (int i=0; i<N; i++)
      for (int j=N-1; j>=i+1; j--)
        {
         if (data[j] < data[j-1] )
           {
            int  temp = data[j];
            data[j]   = data[j-1];
            data[j-1] = temp;
           }
        }
     }
   void selectionSort(int N){
      for (int x = 0; x < N; x++){
            int index_of_max = x;
            for(int y = x; y < N; y++){
                if(data[index_of_max] > data[y]){
                    index_of_max = y;
                }
            }
            int temp = data[x];
            data[x] = data[index_of_max];
            data[index_of_max] = temp;
      }
   }
   void insertionSort(int N){
      int i, j, key;
      for(j = 1; j < N; j++){
            key = data[j];
            for(i = j - 1; (i >= 0) && (data[i] > key); i--){
                data[i+1] = data[i];
            }
            data[i+1] = key;
      }
   }
   void shellSort(int N){
      int flag = 1, i, temp, arrayLength = N;
      while(flag || (N > 1)){
            flag = 0;
            N = (N + 1) / 2;
            for(i = 0; i < (arrayLength - N); i++){
                if(data[i + N] < data[i]){
                    temp = data[i + N];
                    data[i + N] = data[i];
                    data[i] = temp;
                    flag = 1;
                }
            }
      }
   }
   
   void quickSort(int low, int high){
      int lowbound = low + 1;
      int highbound = high - 1;
      int temp;
      while(lowbound <= highbound){
            if(data[lowbound] < data[low]){
                lowbound++;
            }else{
                temp = data[lowbound];
                data[lowbound] = data[highbound];
                data[highbound] = temp;
                highbound--;
            }
      }
      highbound++;
      lowbound--;
     
      temp = data[low];
      data[low] = data[lowbound];
      data[lowbound] = temp;
     
      if(low != lowbound)
          quickSort(low, lowbound);
      if(high != highbound)
          quickSort(highbound, high);
   }
 // MERGE SORT
   void mergeSort(int left, int right){
      if(left < right){
              int mid = (left + right) / 2;
              mergeSort(left, mid);
              mergeSort(mid+1, right);
              merge(left,right);
      }
   }

   void merge(int left, int right){
         int size = right - left + 1;
         int mid = (left+right)/2;
      
          int *b = new int[size];
          int count = 0;
          for(int x = left; x <= mid; x++, count++){
              b[count] = data[x];
         }
         for(int x = right; x >= mid+1; x--, count++){
              b[count] = data[x];
         }
         for(int x = 0, y = size-1, put=left; x <= y; put++){
              if(b[x] <= b[y]){
                    data[put] = b[x];
                    x++;
              }
              else{
                    data[put] = b[y];
                    y--;
              }
          }
          delete[] b;
   }
 // END MERGE SORT
 
 // START RADIX SORT
   int radixSort(int size,int p,int k){
      int *counts;
      int *temp;
      int *data_tmp;
      int index;
      int pval;
      int i;
      int j;
      int n;
      data_tmp = data;

      if((counts = (int *)malloc(k * sizeof(int))) == NULL){
            return -1;
      }

      if((temp = (int *)malloc(size * sizeof(int))) == NULL){
            return -1;
      }

      for( n=0; n < p; n++){
            for(i=0; i < k; i++){
                counts[i] = 0;
            }
            pval = (int)pow((double)k,(double)n);

            for(j=0; j < size; j++){
                index = (int)(data_tmp[j] / pval) % k;
                counts[index] = counts[index] +1;
            }
            for(i = 1; i < k; i++){
                counts[i] = counts[i] + counts[i -1];
            }
            for(j = size -1; j >= 0; j--){
                index = (data_tmp[j] / pval) % k;
                temp[counts[index] -1] = data_tmp[j];
                counts[index] = counts[index] -1;
            }
            memcpy(data,temp,size * sizeof(int));
       }
       free(counts);
       free(temp);
       return 0;
   }
   // END RADIX SORT
   void display(int N)
     {
      for (int i=0; i<N; i++)
         cout << data[i] << " ";
     }
 
private:
     int* data;
     int size;
};

void sorting();

void menu()
{
    char ch;
    cout << endl << endl;
    cout << "\t******************************************" << endl;
    cout << "\t\t\tMain Menu " << endl;
    cout << "\t******************************************" << endl << endl;
    cout << "\t\t[1] - Bubble Sort" << endl;
    cout << "\t\t[2] - Selection Sort" << endl;
    cout << "\t\t[3] - Insertion Sort" << endl;
    cout << "\t\t[4] - Shell Sort" << endl;
    cout << "\t\t[5] - Quick Sort" << endl;
    cout << "\t\t[6] - Merge Sort" << endl;
    cout << "\t\t[7] - Radix Sort" << endl << endl;
    cout << "\t\t[8] - Quit Program" << endl << endl;
    cout << endl;
    cout << "\t******************************************" << endl << endl;
    cout << "\tPlease enter your choice : ";  
    cin >> ch;  
    sorting();
}

void sorting()
{
 char ch;
 int countData;
 Timer t;
 DataStore d(100000);
 
 ofstream sortOutput("sortOutput.txt");
 do { switch(!ch)
 {
    case 1:    cout << "BubbleSort Start" << endl;
               sortOutput << "Bubble Sort\n";
               for(int i = 0, countData = 10000; i < 10; i++)
               {
                    t.start("\nTimer Started\nSorting..");
                    d.bubbleSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData); //display sorted data
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "BubbleSort End" << endl;
                menu();
                break;
               
               
    case 2:     cout << "SelectionSort Start" << endl;
                sortOutput << "\nSelection Sort\n";
 
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.selectionSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "SelectionSort End" << endl;
                menu();
                break;
               

     case 3:    cout << "InsertionSort Start" << endl;
                sortOutput << "\nInsertion Sort\n";
 
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.insertionSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "InsertionSort End" << endl;
                menu();
                break;
               
               
     case 4:    cout << "ShellSort Start" << endl;
                sortOutput << "\nShell Sort\n";        
               
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.shellSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                 }
                 cout << "ShellSort End" << endl;
                 menu();
                 break;
                 
 
     case 5:     cout << "quickSort Start" << endl;
                 sortOutput << "\nQuick Sort\n";
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                     t.start("Timer Started\nSorting..");
                     d.quickSort(0,countData);
                     t.stop("Timer Stopped\n");
                     cout << countData << " random numbers sorted" << endl;
                     cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                     sortOutput << countData << "random numbers sort = " 
                                << t.read() << " miliseconds\n" << endl;
                     //d.display(countData);
                     countData += 10000;
                     d.randomizeData(17710);
                 }
                 cout << "quickSort End" << endl;
                 menu();
                 break;
 
     case 6:     cout << "mergeSort Start" << endl;
                 sortOutput << "\nMerge Sort\n";
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                      t.start("Timer Started\nSorting..");
                      d.mergeSort(0, countData);
                      t.stop("Timer Stopped\n");
                      cout << countData << " random numbers sorted" << endl;
                      cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                      sortOutput << countData << "random numbers sort = " 
                                 << t.read() << " miliseconds\n" << endl;
                      //d.display(countData);
                      countData += 10000;
                      d.randomizeData(17710);
                 }
                 cout << "mergeSort End" << endl;
                 menu();
                 break;
                 
                 
     case 7:     cout << "radixSort Start" << endl;
                 sortOutput << "\nRadix Sort\n" << endl;
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                      t.start("Timer Started\nSorting..");
                      d.radixSort(countData,20,10);
                      t.stop("Timer Stopped\n");
                      cout << countData << " random numbers sorted" << endl;
                      cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                      sortOutput << countData << "random numbers sort = " 
                                 << t.read() << " miliseconds\n" << endl;
                      //d.display(countData);
                      countData += 10000;
                      d.randomizeData(17710);
                  }
                  cout << "radixSort End" << endl;
                  menu();
                  break;
                 

    case 8:      cout << "\t*******************************************" << endl;
                 cout << endl;
                 cout << "\t\tThank You for using this system!" << endl;
                 cout << "\t\tGoodbye!" << endl;
                 cout << endl << endl;
                 cout << "\t*******************************************" << endl;
                 cout << endl;  
                 break;
                 
    default:     cout << "\t\tInvalid Choice!\a\a\a" << endl;
                 menu();      

 }
 
  while sortOutput.close();
 }


int main(void)
{
 
 Timer t;
 DataStore d(100000);
 
 d.randomizeData( 17710 );
 //d.display(1000); //display data that is randomized
 
 menu();

 system("pause");
 return 0;
 
}

/////////////////////////////////////////

i got errors here. the errors are 447 C:\WINDOWS\Desktop\esemen3.cpp
return-statement with a value, in function and 431 C:\WINDOWS\Desktop\esemen3.cpp
parse error before `.' token



 }
 
  while sortOutput.close();
 }
0
 
LVL 16

Expert Comment

by:imladris
ID: 10682296
HMMmmm. I was proposing that you change menu to this:

int menu()
{
    int ch;
    cout << endl << endl;
    cout << "\n\t\t------------------------------------------" << endl;
    cout << "\t\t\t\tMain Menu ";
    cout << "\n\t\t------------------------------------------" << endl << endl;
    cout << "\t\t[1] - Bubble Sort" << endl;
    cout << "\t\t[2] - Selection Sort" << endl;
    cout << "\t\t[3] - Insertion Sort" << endl;
    cout << "\t\t[4] - Shell Sort" << endl;
    cout << "\t\t[5] - Quick Sort" << endl;
    cout << "\t\t[6] - Merge Sort" << endl;
    cout << "\t\t[7] - Radix Sort" << endl;
    cout << "\t\t[0] - Quit Program" << endl << endl;
    cout << "\n\t\t\tPlease enter your choice : ";
    cin >> ch;
    cout << endl;
    cout << "\n\t\t------------------------------------------" << endl;
    return(ch);
}


And that you change main to this:

int main(void)
{
 
 Timer t;
 DataStore d(100000);
 
 //d.randomizeData( 17710 );
 //d.display(1000); //display data that is randomized
 
 ofstream sortOutput("sortOutput.txt");
 int countData;

int ch= menu();
   
 switch(ch)
 {     ...
        ...
  }

  sortOutput.close();
 
  system("pause");
  return 0;
 }

0
 

Author Comment

by:fird
ID: 10682460
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <sys\timeb.h>
#include <ctime>
#include <string>
#include <fstream>

using namespace std;

class Timer
{
 public:
 Timer()
   : secStart(0), secStop(0),
     milliSecStart(0), milliSecStop(0)
 { }  
 void start(string msg="")
   {
    cout << msg;
    ftime(&time);
    secStart = time.time;    
    milliSecStart = time.millitm;
   }
 void stop(string msg="")
   {
    ftime(&time);
    secStop = time.time;    
    milliSecStop = time.millitm;
    cout << msg;
   }

 //Will returns number of milliseconds ellapsed
 long read()
   {
         secDiff =      secStop -      secStart;
    milliSecDiff = milliSecStop - milliSecStart;
    if (milliSecDiff < 0)
       {
        milliSecDiff += 1000;
        secDiff--;
       }
     return (secDiff*1000 + milliSecDiff);
   }  
 private:
   long       secStart,      secStop;
   short milliSecStart, milliSecStop;
   long       secDiff,  milliSecDiff;
   struct timeb time;
};

class DataStore
{
 public:
   DataStore(int Size)
     {  
       size = Size;
       data = new int[Size];
     }
   ~DataStore()
     { delete[] data; }
   void randomizeData(int seekValue)
     {
      srand( seekValue );
      for (int i=0; i<size; i++)
         { data[i] = rand() % size; }
     }
   void bubbleSort(int N)
     {
      for (int i=0; i<N; i++)
      for (int j=N-1; j>=i+1; j--)
        {
         if (data[j] < data[j-1] )
           {
            int  temp = data[j];
            data[j]   = data[j-1];
            data[j-1] = temp;
           }
        }
     }
   void selectionSort(int N){
      for (int x = 0; x < N; x++){
            int index_of_max = x;
            for(int y = x; y < N; y++){
                if(data[index_of_max] > data[y]){
                    index_of_max = y;
                }
            }
            int temp = data[x];
            data[x] = data[index_of_max];
            data[index_of_max] = temp;
      }
   }
   void insertionSort(int N){
      int i, j, key;
      for(j = 1; j < N; j++){
            key = data[j];
            for(i = j - 1; (i >= 0) && (data[i] > key); i--){
                data[i+1] = data[i];
            }
            data[i+1] = key;
      }
   }
   void shellSort(int N){
      int flag = 1, i, temp, arrayLength = N;
      while(flag || (N > 1)){
            flag = 0;
            N = (N + 1) / 2;
            for(i = 0; i < (arrayLength - N); i++){
                if(data[i + N] < data[i]){
                    temp = data[i + N];
                    data[i + N] = data[i];
                    data[i] = temp;
                    flag = 1;
                }
            }
      }
   }
   
   void quickSort(int low, int high){
      int lowbound = low + 1;
      int highbound = high - 1;
      int temp;
      while(lowbound <= highbound){
            if(data[lowbound] < data[low]){
                lowbound++;
            }else{
                temp = data[lowbound];
                data[lowbound] = data[highbound];
                data[highbound] = temp;
                highbound--;
            }
      }
      highbound++;
      lowbound--;
     
      temp = data[low];
      data[low] = data[lowbound];
      data[lowbound] = temp;
     
      if(low != lowbound)
          quickSort(low, lowbound);
      if(high != highbound)
          quickSort(highbound, high);
   }
 // MERGE SORT
   void mergeSort(int left, int right){
      if(left < right){
              int mid = (left + right) / 2;
              mergeSort(left, mid);
              mergeSort(mid+1, right);
              merge(left,right);
      }
   }

   void merge(int left, int right){
         int size = right - left + 1;
         int mid = (left+right)/2;
      
          int *b = new int[size];
          int count = 0;
          for(int x = left; x <= mid; x++, count++){
              b[count] = data[x];
         }
         for(int x = right; x >= mid+1; x--, count++){
              b[count] = data[x];
         }
         for(int x = 0, y = size-1, put=left; x <= y; put++){
              if(b[x] <= b[y]){
                    data[put] = b[x];
                    x++;
              }
              else{
                    data[put] = b[y];
                    y--;
              }
          }
          delete[] b;
   }
 // END MERGE SORT
 
 // START RADIX SORT
   int radixSort(int size,int p,int k){
      int *counts;
      int *temp;
      int *data_tmp;
      int index;
      int pval;
      int i;
      int j;
      int n;
      data_tmp = data;

      if((counts = (int *)malloc(k * sizeof(int))) == NULL){
            return -1;
      }

      if((temp = (int *)malloc(size * sizeof(int))) == NULL){
            return -1;
      }

      for( n=0; n < p; n++){
            for(i=0; i < k; i++){
                counts[i] = 0;
            }
            pval = (int)pow((double)k,(double)n);

            for(j=0; j < size; j++){
                index = (int)(data_tmp[j] / pval) % k;
                counts[index] = counts[index] +1;
            }
            for(i = 1; i < k; i++){
                counts[i] = counts[i] + counts[i -1];
            }
            for(j = size -1; j >= 0; j--){
                index = (data_tmp[j] / pval) % k;
                temp[counts[index] -1] = data_tmp[j];
                counts[index] = counts[index] -1;
            }
            memcpy(data,temp,size * sizeof(int));
       }
       free(counts);
       free(temp);
       return 0;
   }
   // END RADIX SORT
   void display(int N)
     {
      for (int i=0; i<N; i++)
         cout << data[i] << " ";
     }
 
private:
     int* data;
     int size;
};

void sorting();

int menu()
{
    int ch;
    cout << endl << endl;
    cout << "\n\t\t------------------------------------------" << endl;
    cout << "\t\t\t\tMain Menu ";
    cout << "\n\t\t------------------------------------------" << endl << endl;
    cout << "\t\t[1] - Bubble Sort" << endl;
    cout << "\t\t[2] - Selection Sort" << endl;
    cout << "\t\t[3] - Insertion Sort" << endl;
    cout << "\t\t[4] - Shell Sort" << endl;
    cout << "\t\t[5] - Quick Sort" << endl;
    cout << "\t\t[6] - Merge Sort" << endl;
    cout << "\t\t[7] - Radix Sort" << endl;
    cout << "\t\t[0] - Quit Program" << endl << endl;
    cout << "\n\t\t\tPlease enter your choice : ";
    cin >> ch;
    cout << endl;
    cout << "\n\t\t------------------------------------------" << endl;
    return(ch);
}
int main(void)
{
 
 Timer t;
 DataStore d(100000);
 
 //d.randomizeData( 17710 );
 //d.display(1000); //display data that is randomized
 
 ofstream sortOutput("sortOutput.txt");
 int countData;

int ch= menu();

 switch(!ch)
 {
    case 1:    cout << "BubbleSort Start" << endl;
               sortOutput << "Bubble Sort\n";
               for(int i = 0, countData = 10000; i < 10; i++)
               {
                    t.start("\nTimer Started\nSorting..");
                    d.bubbleSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData); //display sorted data
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "BubbleSort End" << endl;
                menu();
                break;
               
               
    case 2:     cout << "SelectionSort Start" << endl;
                sortOutput << "\nSelection Sort\n";
 
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.selectionSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "SelectionSort End" << endl;
                menu();
                break;
               

     case 3:    cout << "InsertionSort Start" << endl;
                sortOutput << "\nInsertion Sort\n";
 
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.insertionSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "InsertionSort End" << endl;
                menu();
                break;
               
               
     case 4:    cout << "ShellSort Start" << endl;
                sortOutput << "\nShell Sort\n";        
               
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.shellSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                 }
                 cout << "ShellSort End" << endl;
                 menu();
                 break;
                 
 
     case 5:     cout << "quickSort Start" << endl;
                 sortOutput << "\nQuick Sort\n";
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                     t.start("Timer Started\nSorting..");
                     d.quickSort(0,countData);
                     t.stop("Timer Stopped\n");
                     cout << countData << " random numbers sorted" << endl;
                     cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                     sortOutput << countData << "random numbers sort = " 
                                << t.read() << " miliseconds\n" << endl;
                     //d.display(countData);
                     countData += 10000;
                     d.randomizeData(17710);
                 }
                 cout << "quickSort End" << endl;
                 menu();
                 break;
 
     case 6:     cout << "mergeSort Start" << endl;
                 sortOutput << "\nMerge Sort\n";
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                      t.start("Timer Started\nSorting..");
                      d.mergeSort(0, countData);
                      t.stop("Timer Stopped\n");
                      cout << countData << " random numbers sorted" << endl;
                      cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                      sortOutput << countData << "random numbers sort = " 
                                 << t.read() << " miliseconds\n" << endl;
                      //d.display(countData);
                      countData += 10000;
                      d.randomizeData(17710);
                 }
                 cout << "mergeSort End" << endl;
                 menu();
                 break;
                 
                 
     case 7:     cout << "radixSort Start" << endl;
                 sortOutput << "\nRadix Sort\n" << endl;
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                      t.start("Timer Started\nSorting..");
                      d.radixSort(countData,20,10);
                      t.stop("Timer Stopped\n");
                      cout << countData << " random numbers sorted" << endl;
                      cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                      sortOutput << countData << "random numbers sort = " 
                                 << t.read() << " miliseconds\n" << endl;
                      //d.display(countData);
                      countData += 10000;
                      d.randomizeData(17710);
                  }
                  cout << "radixSort End" << endl;
                  menu();
                  break;
                 

    case 8:      cout << "\t*******************************************" << endl;
                 cout << endl;
                 cout << "\t\tThank You for using this system!" << endl;
                 cout << "\t\tGoodbye!" << endl;
                 cout << endl << endl;
                 cout << "\t*******************************************" << endl;
                 cout << endl;  
                 break;
                 
    default:     cout << "\t\tInvalid Choice!\a\a\a" << endl;
                 menu();      

 }
  sortOutput.close();
}


int menu();

 system("pause");
 return 0;
 
}


-----------------------

still got error :(
0
 

Author Comment

by:fird
ID: 10682642
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <sys\timeb.h>
#include <ctime>
#include <string>
#include <fstream>

using namespace std;

class Timer
{
 public:
 Timer()
   : secStart(0), secStop(0),
     milliSecStart(0), milliSecStop(0)
 { }  
 void start(string msg="")
   {
    cout << msg;
    ftime(&time);
    secStart = time.time;    
    milliSecStart = time.millitm;
   }
 void stop(string msg="")
   {
    ftime(&time);
    secStop = time.time;    
    milliSecStop = time.millitm;
    cout << msg;
   }

 //Will returns number of milliseconds ellapsed
 long read()
   {
         secDiff =      secStop -      secStart;
    milliSecDiff = milliSecStop - milliSecStart;
    if (milliSecDiff < 0)
       {
        milliSecDiff += 1000;
        secDiff--;
       }
     return (secDiff*1000 + milliSecDiff);
   }  
 private:
   long       secStart,      secStop;
   short milliSecStart, milliSecStop;
   long       secDiff,  milliSecDiff;
   struct timeb time;
};

class DataStore
{
 public:
   DataStore(int Size)
     {  
       size = Size;
       data = new int[Size];
     }
   ~DataStore()
     { delete[] data; }
   void randomizeData(int seekValue)
     {
      srand( seekValue );
      for (int i=0; i<size; i++)
         { data[i] = rand() % size; }
     }
   void bubbleSort(int N)
     {
      for (int i=0; i<N; i++)
      for (int j=N-1; j>=i+1; j--)
        {
         if (data[j] < data[j-1] )
           {
            int  temp = data[j];
            data[j]   = data[j-1];
            data[j-1] = temp;
           }
        }
     }
   void selectionSort(int N){
      for (int x = 0; x < N; x++){
            int index_of_max = x;
            for(int y = x; y < N; y++){
                if(data[index_of_max] > data[y]){
                    index_of_max = y;
                }
            }
            int temp = data[x];
            data[x] = data[index_of_max];
            data[index_of_max] = temp;
      }
   }
   void insertionSort(int N){
      int i, j, key;
      for(j = 1; j < N; j++){
            key = data[j];
            for(i = j - 1; (i >= 0) && (data[i] > key); i--){
                data[i+1] = data[i];
            }
            data[i+1] = key;
      }
   }
   void shellSort(int N){
      int flag = 1, i, temp, arrayLength = N;
      while(flag || (N > 1)){
            flag = 0;
            N = (N + 1) / 2;
            for(i = 0; i < (arrayLength - N); i++){
                if(data[i + N] < data[i]){
                    temp = data[i + N];
                    data[i + N] = data[i];
                    data[i] = temp;
                    flag = 1;
                }
            }
      }
   }
   
   void quickSort(int low, int high){
      int lowbound = low + 1;
      int highbound = high - 1;
      int temp;
      while(lowbound <= highbound){
            if(data[lowbound] < data[low]){
                lowbound++;
            }else{
                temp = data[lowbound];
                data[lowbound] = data[highbound];
                data[highbound] = temp;
                highbound--;
            }
      }
      highbound++;
      lowbound--;
     
      temp = data[low];
      data[low] = data[lowbound];
      data[lowbound] = temp;
     
      if(low != lowbound)
          quickSort(low, lowbound);
      if(high != highbound)
          quickSort(highbound, high);
   }
 // MERGE SORT
   void mergeSort(int left, int right){
      if(left < right){
              int mid = (left + right) / 2;
              mergeSort(left, mid);
              mergeSort(mid+1, right);
              merge(left,right);
      }
   }

   void merge(int left, int right){
         int size = right - left + 1;
         int mid = (left+right)/2;
      
          int *b = new int[size];
          int count = 0;
          for(int x = left; x <= mid; x++, count++){
              b[count] = data[x];
         }
         for(int x = right; x >= mid+1; x--, count++){
              b[count] = data[x];
         }
         for(int x = 0, y = size-1, put=left; x <= y; put++){
              if(b[x] <= b[y]){
                    data[put] = b[x];
                    x++;
              }
              else{
                    data[put] = b[y];
                    y--;
              }
          }
          delete[] b;
   }
 // END MERGE SORT
 
 // START RADIX SORT
   int radixSort(int size,int p,int k){
      int *counts;
      int *temp;
      int *data_tmp;
      int index;
      int pval;
      int i;
      int j;
      int n;
      data_tmp = data;

      if((counts = (int *)malloc(k * sizeof(int))) == NULL){
            return -1;
      }

      if((temp = (int *)malloc(size * sizeof(int))) == NULL){
            return -1;
      }

      for( n=0; n < p; n++){
            for(i=0; i < k; i++){
                counts[i] = 0;
            }
            pval = (int)pow((double)k,(double)n);

            for(j=0; j < size; j++){
                index = (int)(data_tmp[j] / pval) % k;
                counts[index] = counts[index] +1;
            }
            for(i = 1; i < k; i++){
                counts[i] = counts[i] + counts[i -1];
            }
            for(j = size -1; j >= 0; j--){
                index = (data_tmp[j] / pval) % k;
                temp[counts[index] -1] = data_tmp[j];
                counts[index] = counts[index] -1;
            }
            memcpy(data,temp,size * sizeof(int));
       }
       free(counts);
       free(temp);
       return 0;
   }
   // END RADIX SORT
   void display(int N)
     {
      for (int i=0; i<N; i++)
         cout << data[i] << " ";
     }
 
private:
     int* data;
     int size;
};

void sorting();

/*void menu()
{
    char ch;
    cout << endl << endl;
    cout << "\t******************************************" << endl;
    cout << "\t\t\tMain Menu " << endl;
    cout << "\t******************************************" << endl << endl;
    cout << "\t\t[1] - Bubble Sort" << endl;
    cout << "\t\t[2] - Selection Sort" << endl;
    cout << "\t\t[3] - Insertion Sort" << endl;
    cout << "\t\t[4] - Shell Sort" << endl;
    cout << "\t\t[5] - Quick Sort" << endl;
    cout << "\t\t[6] - Merge Sort" << endl;
    cout << "\t\t[7] - Radix Sort" << endl << endl;
    cout << "\t\t[8] - Quit Program" << endl << endl;
    cout << endl;
    cout << "\t******************************************" << endl << endl;
    cout << "\tPlease enter your choice : ";  
    cin >> ch;  
    sorting();
}
*/
void sorting()
{
// int ch;
 int countData;
 Timer t;
 DataStore d(100000);
 
 ofstream sortOutput("sortOutput.txt");
 
 /*  
  switch(ch)
 {
    case 1:    cout << "BubbleSort Start" << endl;
               sortOutput << "Bubble Sort\n";
               for(int i = 0, countData = 10000; i < 10; i++)
               {
                    t.start("\nTimer Started\nSorting..");
                    d.bubbleSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData); //display sorted data
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "BubbleSort End" << endl;
              //  main(void);
                break;
               
               
    case 2:     cout << "SelectionSort Start" << endl;
                sortOutput << "\nSelection Sort\n";
 
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.selectionSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "SelectionSort End" << endl;
             //   menu();
                break;
               

     case 3:    cout << "InsertionSort Start" << endl;
                sortOutput << "\nInsertion Sort\n";
 
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.insertionSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "InsertionSort End" << endl;
               // menu();
                break;
               
               
     case 4:    cout << "ShellSort Start" << endl;
                sortOutput << "\nShell Sort\n";        
               
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.shellSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                 }
                 cout << "ShellSort End" << endl;
              //   menu();
                 break;
                 
 
     case 5:     cout << "quickSort Start" << endl;
                 sortOutput << "\nQuick Sort\n";
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                     t.start("Timer Started\nSorting..");
                     d.quickSort(0,countData);
                     t.stop("Timer Stopped\n");
                     cout << countData << " random numbers sorted" << endl;
                     cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                     sortOutput << countData << "random numbers sort = " 
                                << t.read() << " miliseconds\n" << endl;
                     //d.display(countData);
                     countData += 10000;
                     d.randomizeData(17710);
                 }
                 cout << "quickSort End" << endl;
            //     menu();
                 break;
 
     case 6:     cout << "mergeSort Start" << endl;
                 sortOutput << "\nMerge Sort\n";
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                      t.start("Timer Started\nSorting..");
                      d.mergeSort(0, countData);
                      t.stop("Timer Stopped\n");
                      cout << countData << " random numbers sorted" << endl;
                      cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                      sortOutput << countData << "random numbers sort = " 
                                 << t.read() << " miliseconds\n" << endl;
                      //d.display(countData);
                      countData += 10000;
                      d.randomizeData(17710);
                 }
                 cout << "mergeSort End" << endl;
            //     menu();
                 break;
                 
                 
     case 7:     cout << "radixSort Start" << endl;
                 sortOutput << "\nRadix Sort\n" << endl;
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                      t.start("Timer Started\nSorting..");
                      d.radixSort(countData,20,10);
                      t.stop("Timer Stopped\n");
                      cout << countData << " random numbers sorted" << endl;
                      cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                      sortOutput << countData << "random numbers sort = " 
                                 << t.read() << " miliseconds\n" << endl;
                      //d.display(countData);
                      countData += 10000;
                      d.randomizeData(17710);
                  }
                  cout << "radixSort End" << endl;
          //        menu();
                  break;
                 

    case 8:      cout << "\t*******************************************" << endl;
                 cout << endl;
                 cout << "\t\tThank You for using this system!" << endl;
                 cout << "\t\tGoodbye!" << endl;
                 cout << endl << endl;
                 cout << "\t*******************************************" << endl;
                 cout << endl;  
                 break;
                 
    default:     cout << "\t\tInvalid Choice!\a\a\a" << endl;
               //  menu();      

 }
 
  sortOutput.close();
 */
}

int main(void)
{
 int ch;
 Timer t;
 DataStore d(100000);
 
 d.randomizeData( 17710 );
 ofstream sortOutput("sortOutput.txt");
 //d.display(1000); //display data that is randomized
 
 cout << endl << endl;
    cout << "\t******************************************" << endl;
    cout << "\t\t\tMain Menu " << endl;
    cout << "\t******************************************" << endl << endl;
    cout << "\t\t[1] - Bubble Sort" << endl;
    cout << "\t\t[2] - Selection Sort" << endl;
    cout << "\t\t[3] - Insertion Sort" << endl;
    cout << "\t\t[4] - Shell Sort" << endl;
    cout << "\t\t[5] - Quick Sort" << endl;
    cout << "\t\t[6] - Merge Sort" << endl;
    cout << "\t\t[7] - Radix Sort" << endl << endl;
    cout << "\t\t[8] - Quit Program" << endl << endl;
    cout << endl;
    cout << "\t******************************************" << endl << endl;
    cout << "\tPlease enter your choice : ";  
    cin >> ch;  
   
     switch(ch)
 {
    case 1:    cout << "BubbleSort Start" << endl;
               sortOutput << "Bubble Sort\n";
               for(int i = 0, countData = 10000; i < 10; i++)
               {
                    t.start("\nTimer Started\nSorting..");
                    d.bubbleSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData); //display sorted data
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "BubbleSort End" << endl;
              //  main(void);
                break;
               
               
    case 2:     cout << "SelectionSort Start" << endl;
                sortOutput << "\nSelection Sort\n";
 
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.selectionSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "SelectionSort End" << endl;
             //   menu();
                break;
               

     case 3:    cout << "InsertionSort Start" << endl;
                sortOutput << "\nInsertion Sort\n";
 
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.insertionSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "InsertionSort End" << endl;
               // menu();
                break;
               
               
     case 4:    cout << "ShellSort Start" << endl;
                sortOutput << "\nShell Sort\n";        
               
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.shellSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                 }
                 cout << "ShellSort End" << endl;
              //   menu();
                 break;
                 
 
     case 5:     cout << "quickSort Start" << endl;
                 sortOutput << "\nQuick Sort\n";
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                     t.start("Timer Started\nSorting..");
                     d.quickSort(0,countData);
                     t.stop("Timer Stopped\n");
                     cout << countData << " random numbers sorted" << endl;
                     cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                     sortOutput << countData << "random numbers sort = " 
                                << t.read() << " miliseconds\n" << endl;
                     //d.display(countData);
                     countData += 10000;
                     d.randomizeData(17710);
                 }
                 cout << "quickSort End" << endl;
            //     menu();
                 break;
 
     case 6:     cout << "mergeSort Start" << endl;
                 sortOutput << "\nMerge Sort\n";
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                      t.start("Timer Started\nSorting..");
                      d.mergeSort(0, countData);
                      t.stop("Timer Stopped\n");
                      cout << countData << " random numbers sorted" << endl;
                      cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                      sortOutput << countData << "random numbers sort = " 
                                 << t.read() << " miliseconds\n" << endl;
                      //d.display(countData);
                      countData += 10000;
                      d.randomizeData(17710);
                 }
                 cout << "mergeSort End" << endl;
            //     menu();
                 break;
                 
                 
     case 7:     cout << "radixSort Start" << endl;
                 sortOutput << "\nRadix Sort\n" << endl;
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                      t.start("Timer Started\nSorting..");
                      d.radixSort(countData,20,10);
                      t.stop("Timer Stopped\n");
                      cout << countData << " random numbers sorted" << endl;
                      cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                      sortOutput << countData << "random numbers sort = " 
                                 << t.read() << " miliseconds\n" << endl;
                      //d.display(countData);
                      countData += 10000;
                      d.randomizeData(17710);
                  }
                  cout << "radixSort End" << endl;
          //        menu();
                  break;
                 

    case 8:      cout << "\t*******************************************" << endl;
                 cout << endl;
                 cout << "\t\tThank You for using this system!" << endl;
                 cout << "\t\tGoodbye!" << endl;
                 cout << endl << endl;
                 cout << "\t*******************************************" << endl;
                 cout << endl;  
                 break;
                 
    default:     cout << "\t\tInvalid Choice!\a\a\a" << endl;
               //  menu();      

 }
 
  sortOutput.close();


 system("pause");
 return 0;
 
}

------------------

i already can use all type of sorting but still got a problem. the problem is after the program sorted, it is not return to the menu. just press any key to continue and the program will close. can u help me? thanks :)
0
 
LVL 16

Accepted Solution

by:
imladris earned 50 total points
ID: 10682725
Put a "do {" just before the first cout in this code snippet:

int main(void)
{
 int ch;
 Timer t;
 DataStore d(100000);
 
 d.randomizeData( 17710 );
 ofstream sortOutput("sortOutput.txt");
 //d.display(1000); //display data that is randomized
 
 cout << endl << endl;
    cout << "\t******************************************" << endl;
    cout << "\t\t\tMain Menu " << endl;
    cout << "\t******************************************" << endl << endl;

------------------------------------------------------------
Then add "} while(ch!=0)" at the end of the switch (i.e. just before the sortOutput.close line):

    default:     cout << "\t\tInvalid Choice!\a\a\a" << endl;
               //  menu();      

 }
 
  sortOutput.close();


 system("pause");
 return 0;


This will cause the program to execute the lines in the do-while block repeatedly, until the user inputs a 0. To complete this the menu should include a line indicating that 0 means exit.
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Writing a parser for java language 4 102
GUI: DIalog Stacking and Popping in MS C++ 4 97
c++ syntax question 9 66
Header Errors LNK2019, LNK1120 - Unresolved Externals 4 316
Often, when implementing a feature, you won't know how certain events should be handled at the point where they occur and you'd rather defer to the user of your function or class. For example, a XML parser will extract a tag from the source code, wh…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

734 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