Jumat, 29 Oktober 2010

Prak 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>&);
      private:
              T a;
              T b;
              };
template<class T>
void Kompleks<T>::cetak(){
     if(b>0) cout<<"Bilangan kompleks : "<<a<<"+"<<b<<"i";
     else cout<<"Bilangan komleks : "<<a<<b<<"i";
     cout<<endl;
}
template<class T>
Kompleks<T>Kompleks<T>::operator-(){
     Kompleks x;
     x.a=a;
     x.b=-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,const 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>&);  
              };
             
 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.a*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;
    t=x-y;
    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;   
   
   
    system("PAUSE");
    return EXIT_SUCCESS;
}

Tidak ada komentar:

Posting Komentar

Entri Populer