Solved

do while loop

Posted on 2004-03-25
14
455 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
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 

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

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

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

Templates For Beginners Or How To Encourage The Compiler To Work For You Introduction This tutorial is targeted at the reader who is, perhaps, familiar with the basics of C++ but would prefer a little slower introduction to the more ad…
What is C++ STL?: STL stands for Standard Template Library and is a part of standard C++ libraries. It contains many useful data structures (containers) and algorithms, which can spare you a lot of the time. Today we will look at the STL Vector. …
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

627 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