Senin, 04 Oktober 2010

Praktikum Struktur Data 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>
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.01) 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>&);
};
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>::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;
    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;
}

1. class Kompleks {
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;
};

2. 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.01) out << '['<<x.a<<"+"<<x.b<<"i"<<']';
         else if (x.b==-1) out << '['<<x.a<<"+"<<"-i"<<']';
         else out <<'['<<x.a<<x.b<<"i"<<']';
         return out;
}
istream& operator >>(istream& in, Kompleks<T>& x)
{
         cout << " Masukkan bagian real        :";
         in >> x.a;
         cout << " Masukkan bagian imajiner    :";
         in >> x.b;
         return in;
}

Tidak ada komentar:

Posting Komentar