Lecture 16 Examples


image from book

Open table as spreadsheet

Program

Demonstrates

date.h

This header contains the definition of the class date that is used in many different examples.

bst.cpp

Demonstrates BST searching.

bst2.cpp

Extends bst.cpp by adding a function to display the binode data values.

bst3.cpp

Extends bst.cpp by adding a function to delete a particular binode

bst4.cpp

Extends bst.cpp by adding a function to delete a particular binode

bst.h

Implements a BST on general data.

bst2.h

Implements a BST on general data This header adds to the header bst.h the ability to display the data of the nodes.

bst3.h

Implements a BST on general data. This header adds to the header bst.h the ability to display the data of the nodes.

bst4.h

Implements a BST on general data. This header adds to the header bst.h the ability to display the data of the nodes.

linked.h

The link list class is contained in this header.

linked2.cpp

Demonstrates a search on a linked list of dates.

vector6.cpp

Demonstrates that a vector of non-system data can be searched using a linear search.

vector7.cpp

Demonstrates that a vector of non-system data can be searched using a linear search after being sorted. Then the search is exited if the value exceed.

vector8.cpp

Demonstrates that a vector of non-system data can be searched using a binary search after being sorted. Then the search is exited if the value exceed.

image from book

 //  program_id        bst2.cpp //  written_by        don voils //  date_written      11/3/2006 // //  description  Extends BST.CPP by adding a //               function to display the binode //               data values. // // #include<iostream> using namespace std; void clear_screen(); #include"date.h" typedef Date datatype; #include"bst2.h" void main() {   Date a_date[7];   a_date[0].set_date(3L,19L,1984L);   a_date[1].set_date(5L,5L,1957L);   a_date[2].set_date(11L,24L,1934L);   a_date[3].set_date(9L,29L,1962L);   a_date[4].set_date(1L,19L,1955L);   a_date[5].set_date(9L,13L,1960L);   a_date[6].set_date(9L,7L,1940L);   bst<datatype> bst1;   cout << "The following dates are being entered into the BST:"        << endl;   short index;   for(index=0;index<7;++index)   {      cout << a_date[index] << "\n";      bst1.insert(a_date[index]);   }   char resp;   cout << endl << endl << "Continue? (Y/N) ";   cin >> resp;   cout << endl << endl << "The data value of the nodes are: "        << endl;   bst1.display(cout);   cout << endl << endl << "Continue? (Y/N) ";   cin >> resp;   cout << endl << endl; } void clear_screen() {   for(short index=0;index<250;++index)           cout << endl; } //  header_id      bst2.h //  written_by     don voils //  date_written   11/3/2006 // // //  descripton    Implements a BST on general data //                This header adds to the header bst.h //                the ability to display the data of the nodes. // #ifndef BST #define BST class binode {    public:      datatype data;      binode * left;      binode * right;      binode()      {        left = right = NULL;      }      binode(datatype value)      {        data = value;        left = right = NULL;      }      binode(datatype value,binode* ptr1,binode * ptr2)      {        data = value;        left = ptr1;        right = ptr2;      } }; template <typename datatype> class bst {    private:      binode * root;    public:      bst()      {        root = NULL;      }      ~bst()      {        binode * ptr,               * parent;        bool left_node;        while(!empty())        {          ptr = root;          while((ptr->left!=NULL)||(ptr->right!=NULL))          {           left_node = false;           if(ptr->left!=NULL)           {              parent = ptr;              ptr = ptr->left;              left_node = true;           }           else           {              parent = ptr;              ptr = ptr->right;           }         }         if(root==ptr)           root = NULL;         else           if(left_node)              parent->left = NULL;           else              parent->right = NULL;         delete ptr;      }         if(!empty())            cerr << endl << "The destructor did not work correctly."                 << endl << endl;       }       bool empty()       {         return (root == NULL);       }       void insert(datatype& item);       bool search(datatype &item,binode* &location);       void display(ostream & out);       void traverse(ostream& out,binode * ptr); }; template<typename datatype> void bst<datatype>::display(ostream & out) {   traverse(out,root); } template<typename datatype> void bst<datatype>::traverse(ostream& out, binode * ptr) {   if(ptr != NULL)   {      traverse(out,ptr->left);      out << ptr->data << "\n";      traverse(out,ptr->right);   } } template<typename datatype> void bst<datatype>::insert(datatype& item) {   binode* ptr = root,         * parent = NULL;   bool found = false;   for(;;)   {      if(found || (ptr == NULL))           break;      parent = ptr;      if(item < ptr->data)          ptr = ptr->left;      else          if(item > ptr->data)                    ptr = ptr->right;          else             found = true;   }   if(found)        cerr << "The item " << item << " already is in the tree.\n";   else   {        ptr = new binode(item);        if(parent == 0)                  root = ptr;        else           if(item < (parent->data))                             parent->left = ptr;           else              parent->right = ptr;   } } template<typename datatype> bool bst<datatype>::search(datatype &item,binode* &location) {   binode* ptr = root;   bool found = false;   for(;;)   {      if(found || (ptr == NULL))         break;      if(item < ptr->data)            ptr = ptr->left;      else         if(item > ptr->data)            ptr = ptr->right;         else         {     found = true;     location = ptr;        }   }   return found; } #endif //  program_id        bst3.cpp //  date_written      11/3/2006 // //  program description  Extends BST.CPP by adding a //               function to delete a particular binode //                // // #include<iostream> using namespace std; void clear_screen(); #include"date.h" typedef Date datatype; #include"bst3.h" void main() {   Date a_date[7];   a_date[0].set_date(3L,19L,1984L);   a_date[1].set_date(5L,5L,1957L);   a_date[2].set_date(11L,24L,1934L);   a_date[3].set_date(9L,29L,1962L);   a_date[4].set_date(1L,19L,1955L);   a_date[5].set_date(9L,13L,1960L);   a_date[6].set_date(9L,7L,1940L);   bst<datatype> bst1;   short index;   for(index=0;index<7;++index)   {     bst1.insert(a_date[index]);   }   Date delete_date;   char resp;   do   {     clear_screen();     cout << endl << endl << "The data value of the nodes are: "          << endl;            bst1.display(cout);     cout << endl<< endl << "What date do you want to delete? (mm/dd/yyyy) ";     cin >> delete_date;     cout << endl;            bst1.delete_node(delete_date);            cout << endl << endl << "The data value of the nodes are: "           << endl;            bst1.display(cout);            cout << endl << endl << "Do you want to delete another? (Y/N) ";     cin >> resp;   }while((resp=='y') || (resp=='Y'));   cout << endl << endl << "Continue? (Y/N) ";   cin >> resp;   clear_screen();   cout << endl << endl; } void clear_screen() {   for(short index=0;index<250;++index)           cout << endl; } //  header_id       bst3.h //  written_by      don voils //  date_written   11/3/2006 // //  descripton    Implements a BST on general data //                 This header adds to the header bst.h //                the ability to display the data of the nodes. // #ifndef BST #define BST class binode {   public:     datatype data;     binode * left;     binode * right;     binode()     {       left = right = NULL;     }     binode(datatype value)     {       data = value;       left = right = NULL;     }     binode(datatype value,binode* ptr1,binode * ptr2)     {       data = value;       left = ptr1;       right = ptr2;     } }; template <typename datatype> class bst {   private:     binode * root;   public:            bst()            {               root = NULL;            }            ~bst()            {             binode * ptr,                    * parent;             bool left_node;             while(!empty())             {             ptr = root;                    while((ptr->left!=NULL)||(ptr->right!=NULL))                    {                left_node = false;                       if(ptr->left!=NULL)                       {                          parent = ptr;            ptr = ptr->left;            left_node = true;          }          else          {             parent = ptr;             ptr = ptr->right;                           }             }             if(root==ptr)                root = NULL;             else                if(left_node)                  parent->left = NULL;                else                 parent->right = NULL;                delete ptr;              }        if(!empty())           cerr << endl << "The destructor did not work correctly."           << endl << endl;             }             bool empty()             {         return (root == NULL);             }             void insert(datatype& item);             bool search(datatype &item,binode* &location,binode* &parent);             void display(ostream & out);             void traverse(ostream& out,binode * ptr);             void delete_node(datatype& item); }; template<typename datatype> void bst<datatype>::display(ostream & out) {   traverse(out,root); } template<typename datatype> void bst<datatype>::traverse(ostream& out,binode * ptr) {   if(ptr != NULL)   {      traverse(out,ptr->left);      out << ptr->data << "\n";      traverse(out,ptr->right);   } } template<typename datatype> void bst<datatype>::insert(datatype& item) {   binode* ptr = root,         * parent = NULL;   bool found = false;   for(;;)   {      if(found || (ptr == NULL))         break;      parent = ptr;      if(item < ptr->data)          ptr = ptr->left;      else         if(item > ptr->data)                   ptr = ptr->right;         else            found = true;    }    if(found)        cerr << "The item " << item << " already is in the tree.\n";    else    {        ptr = new binode(item);        if(parent == 0)            root = ptr;        else      if(item < (parent->data))          parent->left = ptr;      else          parent->right = ptr;      } } template<typename datatype> bool bst<datatype>::search(datatype &item,binode* &location,                      binode* &parent) {   binode* ptr = root;     parent = NULL;   bool found = false;   for(;;)   {     if(found || (ptr == NULL))        break;     if(item < ptr->data)     {        parent = ptr;               ptr = ptr->left;     }     else        if(item > ptr->data)        {     parent = ptr;     ptr = ptr->right;        }        else        {            found = true;     location = ptr;       }    }    return found; } template<typename datatype> void bst<datatype>::delete_node(datatype& item) {   bool found;   binode* ptr,         *location,         *parent;   found = search(item,location,parent);   if(!found)     cerr << "Item not in the BST\n";   else   {     ptr = location;     if((ptr->left != NULL) && (ptr->right != NULL))     {        binode *successor = ptr->right;        parent = ptr;        while(successor->left != NULL)        {          parent = successor;          successor = successor -> left;        }        ptr->data = successor->data;;        ptr = successor;      }      binode * subtree = ptr->left;      if(subtree==NULL)         subtree = ptr->right;      if(parent==NULL)         root = subtree;      else         if(parent->left == ptr)            parent->left = subtree;         else            parent->right = subtree;      delete ptr;   } } #endif //  program_id         bst4.cpp //  written_by         don voils //  date_written      11/12/2006 // //  description  Extends BST.CPP by adding a //               function to delete a particular binode //                // // #include<iostream> #include<fstream> using namespace std; #include"date.h" typedef Date datatype; #include"bst4.h" void clear_screen(); void insert_from_file(bst<datatype> &bst1); void store_in_file(bst<datatype> &bst1); void save_file_destroy(bst<datatype> &bst1); void main() {   Date a_date[7];   a_date[0].set_date(3L,19L,1984L);   a_date[1].set_date(5L,5L,1957L);   a_date[2].set_date(11L,24L,1934L);   a_date[3].set_date(9L,29L,1962L);   a_date[4].set_date(1L,19L,1955L);   a_date[5].set_date(9L,13L,1960L);   a_date[6].set_date(9L,7L,1940L);   bst<datatype> bst1;   datatype b_date;   short which,      index;   char resp;   do   {     clear_screen();     cout << "Select an option:" << endl << endl          << "1. Insert data into the BST from the file" << endl << endl          << "2. Insert data from the stored array"<< endl << endl          << "3. Insert data into the BST from the keyboard" << endl << endl          << "4. Is the BST empty?" << endl << endl          << "5. Delete data from the BST" << endl << endl          << "6. Display all of the elements of the list" << endl << endl          << "7. Send the data from the BST to the file" << endl << endl          << "8. Exit the program." << endl << endl          << endl <<endl << "Which option? ";     cin >> which;     switch(which)     {       case 1:         insert_from_file(bst1);         break;       case 2:          clear_screen();          cout << "The elements being inserted are: "               << endl << endl;          for(index=0;index<7;++index)          {        cout << a_date[index] << " ";              bst1.insert(a_date[index]);          }          cout << endl << endl << "The array stored in the BST. "               << endl << endl << "Continue? (Y/N)";          cin >> resp;          break;        case 3:          clear_screen();          cout << "What date do you want to insert into the BST? ";          cin >> b_date;          bst1.insert(b_date);          cout << endl << endl << "The date " << b_date               << " is stored in BST. "               << endl << endl << "Continue? (Y/N)";          cin >> resp;          break;        case 4:          clear_screen();          if(bst1.empty())            cout << "The BST is empty.";          else            cout << "The BST is not empty.";          cout << endl << endl << "Continue? (Y/N)";          cin >> resp;          break;        case 5:          clear_screen();          cout << "The dates in the BST are the following: "               << endl;          bst1.display(cout);          cout << endl << endl               << "What date do you want to delete from the BST? ";          cin >> b_date;          bst1.delete_node(b_date);          cout << endl << endl << "The date " << b_date               << " is stored in BST. "               << endl << endl << "Continue? (Y/N)";          cin >> resp;          break;          break;        case 6:          clear_screen();          cout << "The dates in the BST are the following: "               << endl;          bst1.display(cout);          cout << endl << endl << "Continue? (Y/N)";          cin >> resp;          break;        case 7:          clear_screen();          save_file_destroy(bst1);          cout << "The data in the BST is the following: "               << endl << endl;          bst1.display(cout);          cout << endl << endl << "Continue? (Y/N)";          cin >> resp;          break;        case 8:          break;        default:          break;     }   }while(which != 8);   clear_screen(); } void clear_screen() {      for(short index=1;index<=250;++index)           cout << endl; } void insert_from_file(bst<datatype> &bst1) {   clear_screen();   ifstream infile("date.dat",ios::binary|ios::in);   if(!infile||infile.eof())   {      cout << "\nError opening the file.\n";      return;   }   datatype b_date;   while(infile)   {    infile.read((char*)&b_date,sizeof(datatype));    bst1.insert(b_date);   }   infile.close();   cout << endl << endl << "The data from the file was inserted "        << "into the BST. " << endl << endl << "Continue? (Y/N)";   char resp;   cin >> resp; } void save_file_destroy(bst<datatype> &bst1) {   binode * ptr,          * parent;   ofstream outfile("date.dat",ios::binary | ios::out);   if(!outfile)   {      cout << "Error opening the file.";      char resp;      cin >> resp;      return;   }   datatype a_date;   bool left_node;   while(!bst1.empty())   {     ptr = bst1.root;     while((ptr->left!=NULL)||(ptr->right!=NULL))     {      left_node = false;      if(ptr->left!=NULL)      {    parent = ptr;    ptr = ptr->left;    left_node = true;      }      else      {         parent = ptr;         ptr = ptr->right;      }    }    if(bst1.root==ptr)       bst1.root = NULL;    else       if(left_node)    parent->left = NULL;      else         parent->right = NULL;    outfile.write((char*)&(ptr->data),sizeof(datatype));    delete ptr;  } } //  header_id      bst4.h //  written_by     don voils //  date_written   11/3/2006 // // //  descripton    Implements a BST on general data //                This header adds to the header bst.h //                the ability to display the data of the nodes. // #ifndef BST #define BST class binode {   public:     datatype data;     binode * left;     binode * right;     binode()     {       left = right = NULL;     }     binode(datatype value)     {       data = value;       left = right = NULL;     }     binode(datatype value,binode* ptr1,binode * ptr2)     {       data = value;       left = ptr1;       right = ptr2;     } }; template <typename datatype> class bst {    private:         binode * root;    public:        bst()        {          root = NULL;        }        ~bst()        {          binode * ptr,                 * parent;          bool left_node;          while(!empty())          {            ptr = root;            while((ptr->left!=NULL)||(ptr->right!=NULL))            {              left_node = false;              if(ptr->left!=NULL)              {                 parent = ptr;                 ptr = ptr->left;                 left_node = true;              }              else              {                 parent = ptr;                 ptr = ptr->right;              }           }           if(root==ptr)              root = NULL;           else              if(left_node)                 parent->left = NULL;              else                 parent->right = NULL;           delete ptr;         }         if(!empty())           cerr << endl << "The destructor did not work correctly."                << endl << endl;        }        bool empty()        {          return (root == NULL);        }        void insert(datatype& item);        bool search(datatype &item,binode* &location,binode* &parent);        void display(ostream & out);        void traverse(ostream& out,binode * ptr);        void delete_node(datatype& item);        friend void save_file_destroy(bst &bst1); }; template<typename datatype>  void bst<datatype>::display(ostream & out) {   traverse(out,root); } template<typename datatype> void bst<datatype>::traverse(ostream& out,binode * ptr) {   if(ptr != NULL)   {     traverse(out,ptr->left);     out << ptr->data << "\n";     traverse(out,ptr->right);   } } template<typename datatype> void bst<datatype>::insert(datatype& item) {   binode* ptr = root,         * parent = NULL;   bool found = false;   for(;;)   {      if(found || (ptr == NULL))          break;      parent = ptr;      if(item < ptr->data)          ptr = ptr->left;      else          if(item > ptr->data)                      ptr = ptr->right;                  else                      found = true;   }   if(found)      cerr << "The item " << item << " already is in the tree.\n";   else   {     ptr = new binode(item);            if(parent == 0)        root = ptr;     else       if(item < (parent->data))          parent->left = ptr;       else          parent->right = ptr;   } } template<typename datatype> bool bst<datatype>::search(datatype &item,binode* &location, binode* &parent) {   binode* ptr = root;   parent = NULL;   bool found = false;   for(;;)   {     if(found || (ptr == NULL))        break;     if(item < ptr->data)     {          parent = ptr;          ptr = ptr->left;     }     else        if(item > ptr->data)        {     parent = ptr;     ptr = ptr->right;        }        else        {           found = true;           location = ptr;        }   }   return found; } template<typename datatype> void bst<datatype>::delete_node(datatype& item) {   bool found;   binode* ptr,         *location,         *parent;   found = search(item,location,parent);   if(!found)     cerr << "Item not in the BST\n";   else   {      ptr = location;      if((ptr->left != NULL) && (ptr->right != NULL))      {         binode *successor = ptr->right;         parent = ptr;         while(successor->left != NULL)         {           parent = successor;           successor = successor -> left;         }         ptr->data = successor->data;;         ptr = successor;       }       binode * subtree = ptr->left;       if(subtree==NULL)          subtree = ptr->right;       if(parent==NULL)          root = subtree;       else          if(parent->left == ptr)             parent->left = subtree;          else             parent->right = subtree;       delete ptr;   } } #endif //  program_id       bst.cpp //  written_by       don voils //  date_written     11/3/2006 // //  description  Demonstrates BST searching. // // #include<iostream> using namespace std; void clear_screen(); #include"date.h" typedef Date datatype; #include"bst.h" void main() {   bool found;   binode* location;   Date a_date[8];   a_date[0].set_date(5L,5L,1977L);   a_date[1].set_date(11L,24L,1934L);   a_date[2].set_date(1L,19L,1955L);   a_date[3].set_date(5L,5L,1957L);   a_date[4].set_date(9L,13L,1960L);   a_date[5].set_date(9L,29L,1962L);   a_date[6].set_date(5L,5L,1977L);   a_date[7].set_date(9L,7L,1940L);   bst<datatype> bst1;   cout << "The following dates are being entered into the BST:"        << endl;   short index;   for(index=0;index<8;++index)   {      cout << a_date[index] << endl;      bst1.insert(a_date[index]);   }   char resp;   cout << endl << endl << "Continue? (Y/N) ";   cin >> resp;   while((resp=='y')||(resp=='Y'))   {     clear_screen();     cout << "The following dates are in the BST:"          << endl;     short index;     for(index=0;index<8;++index)     {        cout << a_date[index] << endl;     }     cout << endl << endl          << "What Date do you want to search for in the BST? (mm/dd/yyyy) ";     Date new_date;     cin >> new_date;     found = bst1.search(new_date, location);     if(found)        cout << endl << "The date " << new_date             << " was found at location "<< location << endl;     else       cout << endl << "The date " << new_date            << " was not found in the BST." << endl;     cout << endl << endl << "Another search? (Y/N) ";     cin >> resp;     cout << endl << endl;   }   clear_screen(); } void clear_screen() {   for(short index=0;index<250;++index)           cout << endl; } //  header_id     bst.h //  written_by    don voils //  date_written 11/3/2006 // //  descripton    Implements a BST on general data. // #ifndef BST #define BST class binode {   public:     datatype data;     binode * left;     binode * right;     binode()     {       left = right = NULL;     }     binode(datatype value)     {        data = value;        left = right = NULL;     }     binode(datatype value,binode* ptr1,binode * ptr2)     {       data = value;       left = ptr1;       right = ptr2;     } }; template <typename datatype> class bst {    private:              binode * root;    public:        bst()        {                 root = NULL;        }        ~bst()        {          binode * ptr, * parent;          bool left_node;          while(!empty())          {            ptr = root;            while((ptr->left!=NULL)||(ptr->right!=NULL))            {               left_node = false;               if(ptr->left!=NULL)               {                  parent = ptr;                  ptr = ptr->left;                  left_node = true;               }               else               {                  parent = ptr;                  ptr = ptr->right;               }            }            if(root==ptr)               root = NULL;            else               if(left_node)                  parent->left = NULL;               else                  parent->right = NULL;            delete ptr;          }          if(!empty())             cerr << endl << "The destructor did not work correctly."                  << endl << endl;        }        bool empty()        {          return (root == NULL);        }        void insert(datatype& item);        bool search(datatype &item,binode* &location); }; template<typename datatype> void bst<datatype>::insert(datatype& item) {   binode* ptr = root,      * parent = NULL;   bool found = false;   for(;;)   {      if(found || (ptr == NULL))        break;      parent = ptr;      if(item < ptr->data)         ptr = ptr->left;      else        if(item > ptr->data)            ptr = ptr->right;        else            found = true;   }   if(found)      cerr << "\nThe item " << item << " already is in the tree.\n\n";   else   {      ptr = new binode(item);      if(parent == 0)         root = ptr;      else         if(item < (parent->data))            parent->left = ptr;         else            parent->right = ptr;   } } template<typename datatype> bool bst<datatype>::search(datatype &item,binode* &location) {   binode* ptr = root;   bool found = false;   for(;;)   {      if(found || (ptr == NULL))         break;      if(item < ptr->data)         ptr = ptr->left;      else         if(item > ptr->data)            ptr = ptr->right;         else         {            found = true;            location = ptr;         }   }   return found; } #endif // program_id     date.h // written_by     don voils // date_written  9/2/2006 // // description This header contains the definition //             of the class date that is used in many //             different examples. // #ifndef DATE   #define DATE class Date {  private:    long month,        day,        year;  public:    Date(){ }    Date(long m, long d, long y)      { month = m;        day = d;        year = y;      }    void get_date();    void set_date(long m, long d, long y);    long last_day(long m, long y);    long show_day();    long show_month();    long show_year();    bool leap_year(long y);    Date operator +(long number_days);    Date operator -(long number_days);    long operator -(Date other_date);    long days_since(long m, long d, long y);    long f(long m,long y);    long g(long m);    bool incorrect_date(long m,long d,long y);    bool operator <(Date a_date);    bool operator <=(Date a_date);    bool operator ==(Date a_date);    bool operator !=(Date a_date);    bool operator >(Date a_date);    bool operator >=(Date a_date);    friend ostream &operator << (ostream &stream, Date ab);    friend istream &operator >> (istream &stream, Date &ab); }; ostream &operator << (ostream &stream, Date ab) {       stream << ab.month << "/";       stream << ab.day << "/";       stream << ab.year <<" ";       return stream; } istream &operator >> (istream &stream, Date &ab) {       char slash;       stream >> ab.month >> slash >> ab.day >> slash >> ab.year;       return stream; } long Date::show_day() {  return day; } long Date::show_month() {  return month; } long Date::show_year() {  return year; } void Date::get_date() {  char    dash;  do  {   cin >> month >> dash >> day >> dash       >> year;  }while(incorrect_date(month,day,year)); } void Date::set_date(long m,long d,long y) {  month = long(m);  day = long(d);  year = long(y); } Date Date::operator + (long number_days) {  Date next_day;  next_day.set_date(month,day,year);  for(long index=1;index <=number_days;++index)  {    if (next_day.day < last_day(next_day.month,next_day.year))    {     next_day.day += 1L;    }    else    {       if(next_day.month<12L)       {          next_day.month += 1L;          next_day.day = 1L;       }       else       {          next_day.month = 1L;          next_day.day = 1L;          next_day.year += 1L;       }    }  }  return next_day; } Date Date::operator - (long number_days) {  Date next_day;  next_day.set_date(month,day,year);  for(short index=1;index <= number_days;++index)  {    if (next_day.day != 1L)    {     next_day.day -= 1L;    }    else    {      if(next_day.month != 1L)      {           next_day.month -= 1L;           next_day.day = last_day(next_day.month,next_day.year);      }      else      {           next_day.month = 12L;           next_day.day = 31L;           next_day.year -= 1L;      }    }  }  return next_day; } long Date::last_day(long m, long y) {  long last_day;  long days_in_month[]={0L, 31L, 28L, 31L, 30L, 31L, 30L, 31L, 31L, 30L, 31L, 30L, 31L};  if (m!=2L)       last_day=days_in_month[m];  else       if (leap_year(y))            last_day =29L;       else            last_day=days_in_month[m];  return last_day; } bool Date::leap_year(long y) {   bool leap_test;   if (((y%4L== 0L) && (y%100L != 0L)) || (y%400L == 0L))       leap_test=true;   else       leap_test=false;   return leap_test; } bool Date::incorrect_date(long m, long d, long y) {   bool not_correct;   if ((m>=1L) && (m<=12L) &&               (d>=1L) && (d<=last_day(m,y)))       not_correct = false;   else        not_correct = true;   return not_correct; } long Date::days_since(long m,long d,long y) {    long number = 1461L*f(m,y)/4L + 153L*g(m)/5L + d;    return(number); } long Date::f(long m,long y) {    long number = (m<=2L) ? y - 1L :y;    return(number); } long Date::g(long m) {    long number = (m<=2L) ? m + 13L : m + 1L;    return(number); } long Date::operator - (Date b_date) {  long days;  days = days_since(month,day,year)         -days_since(b_date.month,b_date.day,b_date.year);  return days; } bool Date::operator >(Date a_date) {   bool resp;   long first_date,        second_date;   first_date=days_since(month,day,year);   second_date=days_since(a_date.month,a_date.day,a_date.year);   resp = (first_date > second_date)? true : false;   return resp; } bool Date::operator >=(Date a_date) {   bool resp;   long first_date,        second_date;   first_date=days_since(month,day,year);   second_date=days_since(a_date.month,a_date.day,a_date.year);   resp = (first_date >= second_date)? true : false;   return resp; } bool Date::operator ==(Date a_date) {   bool resp;   long first_date,        second_date;   first_date=days_since(month,day,year);   second_date=days_since(a_date.month,a_date.day,a_date.year);   resp = (first_date == second_date)? true : false;   return resp; } bool Date::operator !=(Date a_date) {   bool resp;   long first_date,        second_date;   first_date=days_since(month,day,year);   second_date=days_since(a_date.month,a_date.day,a_date.year);   resp = (first_date != second_date)? true : false;   return resp; } bool Date::operator <(Date a_date) {   bool resp;   long first_date,        second_date;   first_date=days_since(month,day,year);   second_date=days_since(a_date.month,a_date.day,a_date.year);   resp = (first_date < second_date)? true : false;   return resp; } bool Date::operator <= (Date a_date) {   bool resp;   long first_date,        second_date;   first_date=days_since(month,day,year);   second_date=days_since(a_date.month,a_date.day,a_date.year);   resp = (first_date <= second_date)? true : false;   return resp; } #endif // program_id          linked2.cpp // date_written        10/22/2006 // // // program description   Demonstrates a search on a linked list. //                of dates. // // #include<iostream> using namespace std; // The data searched will be date objects from the follow file. // #include"date.h" // The data used will be objects from the date class. // typedef Date datatype; // The link list class is contained in the following header. // The linear search function has been added as a member // function to the class. // #include"linked.h" void clear_screen(); void main() {   short which;   char resp;   bool found;   datatype item,            value;   List list1;   do   {     clear_screen();     cout << "Select an option:" << endl << endl          << "0. Search for an item " << endl << endl          << "1. Insert an item at the front" << endl << endl          << "2. Insert an item at the end" << endl << endl          << "3. Insert an item after another item" << endl << endl          << "4. Is the list empty?" << endl << endl          << "5. Delete an item at the front" << endl << endl          << "6. Delete an item at the end" << endl << endl          << "7. Delete an item after another item" << endl << endl          << "8. Display all of the elements of the linked list" << endl << endl          << "9. Exit the program." << endl << endl          << endl <<endl << "Which option? ";     cin >> which;     switch(which)     {       case 0:         clear_screen();         cout << "Enter the value to find in the list: (mm/dd/yyyy) ";         cin >> item;         node *location;         found = list1.linearsearch(item,location);         if(found)           cout << endl << endl                << "The item " << item << " was found "                << " at location " << location << endl;         else           cout << endl << endl                << "The item " << item                << " was not found." << endl;           cout << endl << endl << "Continue? (Y/N)";           cin >> resp;           break;       case 1:         clear_screen();         cout << "Enter the value to add to the front of the list: (mm/dd/yyyy) ";         cin >> item;         list1.insert_front(item);         break;       case 2:         clear_screen();         cout << "Enter the value to add to the end of the list: (mm/dd/yyyy) ";         cin >> item;         list1.insert_end(item);         break;       case 3:         clear_screen();         cout << "Enter the value in the list to be inserted after: (mm/dd/yyyy) ";         cin >> value;         cout << endl << endl              << "Enter the value to add to the list after " << value << ": ";         cin >> item;         list1.insert_middle(item,value);         break;       case 4:         clear_screen();         if(list1.empty())              cout << "The list is empty.";         else              cout << "The list is not empty.";         cout << endl << endl << "Continue? (Y/N)";         cin >> resp;         break;       case 5:         clear_screen();         list1.delete_front();         break;       case 6:         clear_screen();         list1.delete_end();         break;       case 7:         clear_screen();         cout << "Enter the value in the list to be deleted: (mm/dd/yyyy) ";         cin >> value;         list1.delete_middle(value);         break;       case 8:         clear_screen();         list1.display();         cout << endl << "Continue? (Y/N)";         cin >> resp;         break;       case 9:         break;       default:         break;     }   }while(which != 9);   clear_screen(); } void clear_screen() {   for(short index=1;index<=250;++index)         cout << endl; } // program_id     linked.h // written_by     don voils // date_written  10/1/2006 // description   This file contains the definition of the classes node and List. // #ifndef LINKED #define LINKED class node {   public:     datatype data;     node * next;     node(datatype value,node* ptr)     {       data = value;       next = ptr;     } }; class List {   private:     node* first;   public:     List()     {       first = NULL;     }     ~List()     {       node * ptr;       while(first!=NULL)       {         ptr = first;        first = first->next;        delete ptr;       }     }     bool empty()     {       return (first==NULL);     }     void insert_front(datatype new_value)     {       node * newptr = new node(new_value,first);       first = newptr;     }     void insert_end(datatype new_value)     {       node * newptr = new node(new_value,NULL);       if(first!=NULL)       {          node * preptr = first;          while((preptr->next)!=NULL)            preptr = preptr->next;          preptr->next = newptr;       }       else          first = newptr;     }     void insert_middle(datatype new_value,datatype value)     {       if(!empty())       {          node * preptr = first;          while(((preptr->next)!=NULL) && ((preptr->data)!=value))            preptr = preptr->next;          if((preptr->data)==value)          {                node * newptr = new node(new_value,preptr->next);                preptr->next = newptr;          }       }     }     void delete_front()     {       if(!empty())       {          node *ptr = first;          first = first->next;          delete ptr;       }    }    void delete_end()    {      if(!empty())      {        if((first->next)==NULL)        {          delete first;          first = NULL;        }        else        {          node *ptr;          node *preptr = first;          while(((preptr->next)->next)!=NULL)               preptr = preptr->next;          ptr = preptr->next;          preptr -> next = NULL;          delete ptr;        }      }    }    void delete_middle(datatype value)    {       if(!empty())       {           if((first->next)!=NULL)           {              node *ptr;              node *preptr = first;              while((preptr->next)!=NULL                           && (preptr->data)!=value)              preptr = preptr->next;              ptr = preptr->next;              if(ptr!=NULL && ((preptr->data)==value))              {                 preptr->next = ptr->next;                 delete ptr;              }           }       }    }    void display()    {        cout << "The elements in the list are:" << endl;        node * ptr = first;        while(ptr != NULL)        {          cout << ptr->data << endl;          ptr = ptr->next;        }    }     // The follow function provides the search for the linked list.     //    template<typename datatype>    bool linearsearch(datatype &item, node* &location)    {         bool found = false;         location = first;         for(;;)         {           if(found || (location == NULL))                      break;           if(item == location->data)                     found = true;           else             location = location->next;         }         return found;    } }; #endif // program_id        vector6.cpp // written_by        don voils // date_written      10/1/2006 // // description   Demonstrates that a vector of non-system //                data can be searched using a linear //                search. // // #include<iostream> #include<vector> using namespace std; // Header contains the type of data being searched. // #include"date.h" // The generalized data type of the example is set to date // typedef Date Datatype; // Function Declarations // void clear_screen(); template<typename Datatype> bool linearsearch(const vector<Datatype> & a_vector,                      Datatype &item, short &location) {      bool found = false;      location = 0;      for(;;)      {                 if(found || (location == a_vector.size()))                   break;           if(item == a_vector[location])                   found = true;                 else                 location++;      }      return found; } void main() {   bool found;   short location;   char resp;   Date date1(1L,1L,1970L);   Date date2(1L,19L,1955L);   Date date3(5L,5L,1957L);   Date date4(9L,13L,1960L);   Date date5(9L,29L,1962L);   Date date6(11L,24L,1934L);   Date date7(9L,7L,1940L);   Date date_array[ ] = {date1,date2,date3,date4,date5,date6};   vector<Date> vector1(date_array,date_array+6);   do   {     clear_screen();     cout << "The Date vector contains the following elements:" << endl;     short index;     for(index=0;index < (int)vector1.size(); ++index)          cout << vector1[index] << endl;     cout << endl << endl;     cout << "What Date do you want to search for in the vector? (mm/dd/yyyy) ";     Date new_date;     cin >> new_date;     found = linearsearch(vector1,new_date,location);     if(found)        cout << endl << "The date " << new_date             << " was found at location "<< location + 1<< endl;     else        cout << endl << "The date " << new_date             << " was not found in the vector." << endl;     cout << endl << endl << "Another search? (Y/N) ";     cin >> resp;     cout << endl << endl;   }while((resp=='y')||(resp=='Y')); } void clear_screen() {   for(short index=1;index<250;++index)         cout << endl; } // program_id        vector7.cpp // date_written      10/1/2006 // // description   Demonstrates that a vector of non-system //               data can be searched using a linear //               search after being sorted. Then the //               search is exited if the value exceed. // // #include<iostream> #include<vector> #include<algorithm> using namespace std; // Header contains the type of data being searched. // #include"date.h" // The generalized data type of the example is set to date // typedef Date Datatype; // Function Declarations // void clear_screen(); template<typename Datatype> bool linearsearch(const vector<Datatype> & a_vector,       Datatype &item, short &location) {       bool found = false;       location = 0;       for(;;)       {          if(found || (location == a_vector.size())               || (item < a_vector[location]))            break;         if(item == a_vector[location])            found = true;         else            location++;       }       cout << endl << "The number of records counted was: "            << location + 1 << endl <<endl;       return found; } void main() {   bool found;   short location;   char resp;   Date date1(1L,1L,1970L);   Date date2(1L,19L,1955L);   Date date3(5L,5L,1957L);   Date date4(9L,13L,1960L);   Date date5(9L,29L,1962L);   Date date6(11L,24L,1934L);   Date date7(9L,7L,1940L);   Date date_array[ ] = {date1, date2, date3, date4, date5, date6};   vector<Date> vector1(date_array,date_array+6);   do   {     clear_screen();     cout << "The date vector contains the following elements:" << endl;     short index;     for(index=0;index < (int)vector1.size(); ++index)          cout << vector1[index] << endl;     sort(vector1.begin(),vector1.end());     cout << endl << endl          << "The date vector after the sort contains the following elements:"          << endl;     for(index=0;index < (int) vector1.size(); ++index)          cout << vector1[index] << endl;     cout << endl << endl          << "What date do you want to search for in the vector? (mm/dd/yyyy) ";     Date new_date;     cin >> new_date;     found = linearsearch(vector1, new_date, location);     if(found)        cout << endl << "The date " << new_date             << " was found at location "<< location + 1<< endl;     else        cout << endl << "The date " << new_date             << " was not found in the vector." << endl;     cout << endl << endl << "Another search? (Y/N) ";     cin >> resp;     cout << endl << endl;   }while((resp=='y')||(resp=='Y')); } void clear_screen() {   for(short index=1;index<250;++index)          cout << endl; } // program_id        vector8.cpp // written_by        don voils // date_written      10/1/2006 // // description   Demonstrates that a vector of non-system //               data can be searched using a binary //               search after being sorted. Then the //               search is exited if the value exceed. // // #include<iostream> #include<vector> #include<algorithm> using namespace std; // Header contains the type of data being searched. // #include"date.h" // The generalized data type of the example is set to date // typedef Date Datatype; // Function Declarations // void clear_screen(); template<typename Datatype> bool binarysearch(const vector<Datatype> & a_vector,                      Datatype &item, short &location) {      bool found = false;      location = 0;      short counted = 0,            first = 0,            last = (int)a_vector.size() - 1;      for(;;)      {        if(found || (first > last))           break;       ++counted;       location = (first + last)/2;       if(item < a_vector[location])            last = location - 1;       else            if(item > a_vector[location])               first = location + 1;            else               found = true;      }      cout << endl << "The number of records counted was: "           << counted << endl <<endl;      return found; } void main() {   bool found;   short location;   char resp;   Date date1(1L,1L,1970L);   Date date2(1L,19L,1955L);   Date date3(5L,5L,1957L);   Date date4(9L,13L,1960L);   Date date5(9L,29L,1962L);   Date date6(11L,24L,1934L);   Date date7(9L,7L,1940L);   Date date_array[ ] = {date1, date2, date3, date4, date5, date6};   vector<Date> vector1(date_array, date_array+6);   do   {     clear_screen();     cout << "The date vector contains the following elements:" << endl;     short index;     for(index=0;index < (int)vector1.size(); ++index)          cout << vector1[index] << endl;     sort(vector1.begin(),vector1.end());     cout << endl << endl          << "The Date vector after the sort contains the following elements:"          << endl;     for(index=0;index < (int)vector1.size(); ++index)          cout << vector1[index] << endl;     cout << endl << endl          << "What Date do you want to search for in the vector? (mm/dd/yyyy) ";     Date new_date;     cin >> new_date;     found = binarysearch(vector1,new_date,location);     if(found)        cout << endl << "The date " << new_date             << " was found at location "<< location + 1 << endl;     else        cout << endl << "The date " << new_date             << " was not found in the vector." << endl;     cout << endl << endl << "Another search? (Y/N) ";     cin >> resp;     cout << endl << endl;   }while((resp=='y')||(resp=='Y')); } void clear_screen() {   for(short index=1;index<250;++index)          cout << endl; } 




Intermediate Business Programming with C++
Intermediate Business Programming with C++
ISBN: 738453099
EAN: N/A
Year: 2007
Pages: 142

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net