10 Oktober 2010

struktur data praktikum 2

#include <cstdlib>
#include <iostream>

using namespace std;
template<class T>
class Kompleks{
      friend class Operasi<T>;
      friend ostream& operator<<(ostream&,const Kompleks<T>&);
      friend istream& operator>>(istream&, Kompleks<T>&);
    
public:
       Kompleks(T s=0,T t=0):a(s),b(t){}
       void cetak();
       Kompleks operator-();
       Kompleks operator-(const Kompleks<T>&);
       Kompleks operator+(const Kompleks<T>&);
        Kompleks operator*(const Kompleks<T>&);
      
       private:
T a;
T b;
       };
    
template <class T> Kompleks<T> Kompleks<T>::operator-(const Kompleks<T>& m){
           Kompleks x;
           x.a=a-m.a;
           x.b=b-m.b;
           return x;
            }
template <class T> Kompleks<T> Kompleks<T>::operator+(const Kompleks<T>& m){
         Kompleks x;
         x.a=a+m.a;
         x.b=b+m.b;
         return x;
         }
template <class T> Kompleks<T> Kompleks<T>::operator*(const Kompleks<T>& m){
         Kompleks x;
         x.a=a*m.a;
         x.b=b*m.b;
         return x;
         }
template<class T> ostream& operator<<(ostream& out, const Kompleks<T>& x){
           if(x.b==0)out<<'['<<x.a<<']';
           else if(x.a==0 && x.b==1)out<<'['<<"i"<<']';
           else if(x.a==0 && x.b==-1)out<<'['<<"-i"<<']';
           else if(x.a==0 && x.b>1)out<<'['<<x.b<<"i"<<']';
           else if(x.a==0 && x.b<-1)out<<'['<<x.b<<"i"<<']';
           else if(x.b==1)out<<'['<<x.a<<"+"<<"i"<<']';
           else if(x.b>0)out<<'['<<x.a<<"+"<<x.b<<"i"<<']';
           else if(x.b==-1)out<<'['<<x.a<<"-i"<<']';
           else out<<'['<<x.a<<x.b<<"i"<<']';
           return out;
               }
template<class T> istream& operator>>(istream& in,Kompleks<T>& x){
         cout<<"masukkan bagian real:";
         in>>x.a;
         cout<<"masukkan bagian imajiner:";
         in>>x.b;
         return in;
                  }
template<class T>
class Operasi{
      public:
             Kompleks<T> jumlah (const Kompleks<T>&,const Kompleks<T>&);
             Kompleks<T> kali(const Kompleks<T>&, const Kompleks<T>&);
             Kompleks<T> kurang(const Kompleks<T>&, const Kompleks<T>&);
             Kompleks<T> kali(const Kompleks<T>&, const Kompleks<T>&);
      };
template<class T> Kompleks<T> Operasi<T>::jumlah (const Kompleks<T>& m, const Kompleks<T>& n){
               Kompleks<T> temp;
               temp.a=m.a+n.a;
               temp.b=m.b+n.b;
               return temp;
                              }
template<class T> Kompleks<T> Operasi<T>::kurang(const Kompleks<T>& m, const Kompleks<T>& n){
              Kompleks<T> temp;
               temp.a=m.a-n.a;
               temp.b=m.b-n.b;
               return temp;
                }
template<class T> Kompleks<T> Operasi<T>::kali(const Kompleks<T>& m, const Kompleks<T>& n){
               Kompleks<T> temp;
               temp.a=(m.a*n.a)-(m.b*n.b);
               temp.b=(m.b*n.b)-(m.b*n.a);
               return temp;
               }              
                        
int main(int argc, char *argv[])
{
  Kompleks<int> x(2,3),y(4,-4),t;
  Operasi<int> z;
  cout<<"menggunakan cetak():";x.cetak();
  cout<<"Menggunakan overloading :"<<x;
  cout<<"KOnjugat:"<<-x;
  y.cetak();
  cout<<"\npenjumlahan menggunakan methods:";
  t=z.jumlah(x,y);
  t.cetak();
  cout<<"Penjumlahan Menggunakan operator:";
  t=x+y;
  cout<<x<<"+"<<y<<"="<<t;
  cout<<"\nPerkalian menggunakan methods:";
  t=z.kali(x,y);
  t.cetak();
  cout<<"Perkalian menggunakan operator:";
  t=x*y;
  cout<<x<<"*"<<y<<"="<<t;
  t=x-y;
  cout<<"\n"<<x<<"-"<<y<<"="<<t<<endl;
  Kompleks<int> n;
  cin>>n;
  cout<<n;
  return 0;
  
    system("PAUSE");
    return EXIT_SUCCESS;
}

Tidak ada komentar:

Posting Komentar