Minggu, 21 Desember 2014

Polymorphism (OOP) C++

Polymorphism merupakan kemampuan suatu method untuk bekerja dengan lebih dari satu tipe argumen. Pada bahasa lain (khususnya C++), konsep ini sering disebut dengan method overloading.

Polymorphism adalah suatu object dapat memiliki berbagai bentuk, sebagai object dari class sendiri atau object dari superclassnya.

#include <iostream>
using namespace std;

class polygon //class utama
{
      protected:
      int panjang, lebar;
      public:
      int setvalues (int a, int b)
      {
          panjang=a;              
          lebar=b;
      }
};

class retangle: public polygon
{
      public:
      int luas()
      {
          return panjang*lebar;
      }
};

class triangel: public polygon
{
      public:
      int luas()
      {
          return panjang*lebar/2;
      }
};

int main()
{
    retangle rect;                   
    triangel trgl;
    polygon*ppoly1=&rect;               
    polygon*ppoly2=&trgl;
    ppoly1->setvalues (4,5);
    ppoly2->setvalues (7,6);
    cout<<"luas persegi: "<<rect.luas()<<endl;
    cout<<"luas segitiga: "<<trgl.luas()<<endl;

    system ("pause");
    return 0;

}

Read & Write C++

Read

Program ini membaca file teks dan mencetak konten pada layar. dengan membaca file baris demi baris, menggunakan getline. Nilai yang dikembalikan oleh getline  adalah referensi ke objek itu  sendiri.

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int main ()
{
      string line;
      ifstream myfile ("example.txt");
      if (myfile.is_open())
     {
          while ( getline (myfile,line) )
          {
                   cout << line << '\n';
          }
          myfile.close();
     }

     else cout << "Unable to open file";
 
     system("pause");
     return 0;
}

Program diatas akan membaca isi dari sebuah file yang bernama  “example.txt”.



Write

 Program ini dirancang untuk menyimpan teks dan dengan demikian semua nilai-nilai yang input atau output dapat mengalami beberapa transformasi format. Operasi menulis pada file teks dilakukan dengan cara yang sama kita beroperasi dengan cout.

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int main ()
{
      ofstream myfile ("example.txt");
      if (myfile.is_open())
      {
         myfile << "This is a line.\n";
         myfile << "This is another line.\n";
         myfile.close();
      }
      else cout << "Unable to open file";
 
      system("pause");
      return 0;
}


Program diatas akan menulis sebuah text dan menyimpannya pada sebuah file bernama ”example.txt”. Text yang ditulis adalah: “This is a line.” Pada baris pernama dan “This is another line.” Pada baris kedua.

Konstruktor (OOP) C++

Konstruktor adalah fungsi khusus yang akan dijalankan secara otomatis ketika kita melakukan inisialisasi atau pembuatan suatu objek. Konstruktor juga bisa di bilang bagian dari kelas yang digunakan  untuk menciptakan objek.

Ciri-ciri Konstruktor :
a.       Namanya harus sama dengan nama kelas.
b.      Ia tidak mengembalikan nilai/tipe tertentu, bahkan void sekalipun.

Aturan Konstruktor :
a.       Nama Konstruktor harus sama dengan nama kelas yang mendefiniskannya
b.      Konstruktor tidak memiliki nilai balik
c.       Konstruktor harus diletakkan pada bagian public

Konstruktor biasanya di gunakan untuk melakukan alokasi memori dan memberikan nilai awal terhadap anggota kelas dan melakukan tugas umum lainya.

Fungsi Konstruktor (constructor) adalah fungsi yang dipanggil pada saat pembuatan sebuah objek. Berikut merupakan sebuah kontruktor untuk menghitung luas persegi:

#include <iostream>
using namespace std;

class rectangle
{
      int panjang, lebar;
      public:
             rectangle (int,int);
             int luas()
             {
                 return (panjang*lebar);
             }
};

rectangle::rectangle (int a, int b)
{
       panjang = a;
       lebar = b;                          
}

 int main()
{
    rectangle persegi1 (3,4);
    rectangle persegi2 (5,6);
   
    cout<<"luas persegi1 :"<<persegi1.luas()<<endl;
    cout<<"luas persegi2 :"<<persegi2.luas()<<endl;
   
    system ("pause");
    return 0;
}

Pada program di atas, konstruktor digunakan untuk melakukan operasi inisialisasi dan melakukan alokasi memori. Dengan menggunakan konstruktor kita bisa sedikit ‘berhemat’ dengan tidak membuat suatu fungsi yang secara khusus diciptakan untuk melakukan suatu inisialisasi, namun cukup dengan menggunakan suatu konstruktor.

Inheritance (OOP) C++

Salah satu konsep yang paling penting dalam pemrograman berorientasi objek adalah inheritance. Inheritance memungkinkan kita untuk mendefinisikan kelas dalam hal kelas lain, yang membuatnya lebih mudah untuk menciptakan dan mengatur aplikasi. Inheritance juga memberikan kesempatan untuk menggunakan kembali fungsi yang telah dibuat dan waktu pelaksanaan yang lebih cepat.

Ketika membuat class, daripada menulis fungsi anggota data baru dan fungsi anggota, programmer dapat menetapkan bahwa kelas baru harus mewarisi anggota kelas yang ada. Kelas yang ada ini disebut kelas dasar, dan kelas baru disebut sebagai kelas turunan.

#include <iostream>
using namespace std;

class shape // class utama
{
      public:
            
             int setalas(int a)
             {
             alas = a;
             }
             int settinggi(int t)
             {
             tinggi = t;
             }
      protected:
                int alas;
                int tinggi;
};

class triangel: public shape // class turunan
{
      public:
             int luas()
             {
             return ((alas*1/2)*tinggi);
             }
};

int main()
{
    triangel trgl;
   
    trgl.setalas(6);
    trgl.settinggi(7); 
   
    cout<<"total area: "<<trgl.luas()<<endl;
   
    system ("pause");
    return 0;

}

Rabu, 10 Desember 2014

Perkalian Array Dua Dimensi C++

Larik (Bahasa Inggris: array), dalam ilmu komputer, adalah suatu tipe data terstruktur yang dapat menyimpan banyak data dengan suatu nama yang sama dan menempati tempat di memori yang berurutan serta bertipe data sama pula.
Larik dapat diakses berdasarkan indeksnya. Indeks larik umumnya dimulai dari 0 dan ada pula yang dimulai dari angka bukan 0. Pengaksesan larik biasanya dibuat dengan menggunakan perulangan (looping). Sedangkan array dua dimensi adalah sebuah array yang memiliki jumlah baris dan kolom.


#include <iostream>
using namespace std;

int main()
{
    int a[3][2], b[3][2], hasil[3][2]; // deklarasi variable matriks dengan 3baris dan 2kolom
    int i,j;
 
    cout<<"matriks a: "<<endl;
    for (i=0;i<3;i++)// deklarasi jumlah baris
    {
        for (j=0;j<2;j++)// deklarasi jumlah kolom
        {
            cout<<"a["<<i<<"]["<<j<<"]= ";// keterangan elemen matriks a
            cin>> a[i][j];// input nilai elemen a
         
        }
    }
 
    cout<<endl;
 
    cout<<"matriks b: "<<endl;
    for (i=0;i<3;i++)// deklarasi jumlah baris
    {
        for (j=0;j<2;j++)// deklarasi jumlah kolom
        {
            cout<<"b["<<i<<"]["<<j<<"]= ";// keterangan elemen matriks b
            cin>> b[i][j];// input nilai elemen b
         
        }
    }
 
    cout<<endl;
 
    for (i=0;i<3;i++)
    {
        for (j=0;j<2;j++)
        {
            hasil[i][j]= a[i][j]*b[i][j];// deklarasi hasil perkalian
            cout<<"hasil ["<<i<<"]["<<j<<"]= "<<hasil[i][j];// output hasil
            cout<<endl;
        }
    }

    system("pause");
    return 0;
}

Sabtu, 06 Desember 2014

Faktorial Rekursif C++

Dalam matematikafaktorial dari bilangan asli n adalah hasil perkalian antara bilangan bulat positif yang kurang dari atau sama dengan n. Faktorial ditulis sebagai n! dan disebut n faktorial. Sebagai contoh, nilai dari 7 faktorial adalah  7*6*5*4*3*2*1= 5040. Berikut merupakan contoh program untuk mencari bilangan faktorial dengan metode rekursif.


#include <iostream>
using namespace std;

int factorial(int);
int main()
{
    int r;
 
    cout<<"masukkan bilangan bulat positif: ";
    cin>>r;
 
    if (r<0)
    cout<<"bukan bilangan bulat";
    else
    cout<<r<<" faktorial adalah: "<<factorial(r)<<endl;
 
    system ("pause");
    return 0;            
}
int factorial(int r) // fungsi faktorial rekursif
{
    int result;
 
    if (r<=1)return 1;
    result=r*factorial(r-1);
    return result;
}


Rekursi adalah suatu proses dari fungsi yang memanggil dirinya sendiri. Disebut juga dengan fungsi rekursif. Dalam sebuah fungsi rekursif pemanggilan dapat terjadi berulang kali hingga ada suatu kondisi yang mengakhiri prosesya.

Pada contoh progam C++  diatas kondisi penghentiannya adalah jika r lebih kecil atau sama dengan 1. Setiap kali fungsi memeanggil dirinya sendiri, nilai dari r dikurangi 1 sehingga nilai r akhirnya menjadi 1 dan proses rekursi akan diakhiri, sehingga fungsi ini akan memanggil dirinya sendiri sebanyak r kali.

Misalkan pada program C++ diatas kita masukan bilangan positif 4 maka proses rekursi yang pertama adalah: result(4*factorial(3)); proses ini akan memanggil kembali fungsi dirinya sendiri dengan mengirimkan nilai 3 sebagai nilai r yang baru. Karena nilai r masih lebih besar dari 1 maka proses rekursi kedua akan dilakukan dengan hasilnya adalah: 3*factorial(2) hingga seterusnya sampai nilai r sama dengan 1. Untuk nilai r sama dengan 1, perintah return (1) akan mengembalikan proses ke bagian yang memanggilnya.

Kekurangan dari fungsi rekursif:
-          Memerlukan lebih banyak memori untuk menyimpan activation record dan variable local.

-          Memerlukan waktu yang lebih banyak untuk menangani activation record.

Fibonacci Rekursif

Dalam matematika, bilangan Fibonacci adalah barisan yang didefinisikan secara rekursif sebagai berikut: barisan ini berawal dari 0 dan 1, kemudian angka berikutnya didapat dengan cara menambahkan kedua bilangan yang berurutan sebelumnya. Dengan aturan ini, maka barisan bilangan Fibonaccci yang pertama adalah: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946...dst. Berikut merupakan contoh program untuk mencari bilangan fibonacci dengan metode rekursif.


#include <iostream>
using namespace std;

int Fibonacci(int);

int main() 
{
    int f;

    cout << "masukkan bilangan bulat positf: ";
    cin >> f;
    if (f < 0)
        cout << "bukan bilangan bulat";
    else
        cout << f << " fibonacci adalah: " << Fibonacci(f) << endl;
    
    system ("pause");
    return 0;
}

int Fibonacci(int x) // fungsi fibonacci rekursif
{
    if (x < 2){
     return x;
    }     
    return (Fibonacci (x - 1) + Fibonacci (x - 2));
}



Random PIN Generator C++

Merupakan sebuah program yang akan menghasilkan urutan angka maupun huruf/karakter secara acak. berikut merupakan contoh program random pin generator.


#include <iostream>
#include <cstring>
using namespace std;

char alphanum[]= "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

int stringrange = sizeof (alphanum)-1;
char genrandom3() // fungsi random pin generator
{
        return alphanum3 [rand()%stringrange3];
}
 
int main()
{
    srand((unsigned)time(0));
    int i;
     
    cout<<"random pin adalah: "<<endl;
    for (i=0; i<5; i++) // jumlah random pin
    {
        cout<<"pin "<<i+1<<": ";
        for (int a=0; a<8; a++) // panjang random pin
        {
            cout<<genrandom1();
        }
        cout<<endl;
    }
    cout<<endl;
 
    system ("pause");
    return 0;
}

Faktorial Iteratif C++

Dalam matematikafaktorial dari bilangan asli n adalah hasil perkalian antara bilangan bulat positif yang kurang dari atau sama dengan n. Faktorial ditulis sebagai n! dan disebut n faktorial. Sebagai contoh, nilai dari 7 faktorial adalah  7*6*5*4*3*2*1= 5040. Berikut merupakan contoh program untuk mencari bilangan faktorial dengan metode iteratif.


#include <iostream>
using namespace std;

int factorial(int);
int main()
{
    int i;
 
    cout<<"masukkan bilangan bulat positif: ";
    cin>>i;
     
    if (i<0)
    cout<<"bukan bilangan bulat";
    else
    cout<<i<<" faktorial adalah: "<<factorial(i)<<endl;
 
    system ("pause");
    return 0;
}
int factorial(int i) // fungsi faktorial iteratif
{
    int result=1;
    for (int n=1; n<=i; n++)
    {
        result *= n;
    }
    return result;
}


Iteratif merupakan fungsi perulangan (looping) yang melakukan proses perulangan terhadap sekelompok instruksi di mana perulangan tersebut akan berhenti jika batasan syarat sudah tidak terpenuhi.

Pada contoh progam C++  diatas kondisi penghentiannya adalah jika nilai n  lebih kecil atau sama dengan i, dimana n berawal dari 1. Setiap kali fungsi melakukan perulangan atau looping, nilai dari n bertambah 1 sehingga nilai n akhirnya menjadi lebih kecil atau sama dengan nilai i. dan proses iteratif akan diakhiri, sehingga fungsi ini akan melakukan perulanagnan atau looping sebanyak i kali.
Misalkan pada program C++ diatas kita masukan bilangan positif 4 maka proses loopingnya adalah: n berawal dari nilai 1  akan dikalikan dengan looping berikutnya hingga nilai n memenuhi syarat: n<=4.

For (int n=1; n<=4; n++)
{
                result *= n
}

Dengan proses: 1*2*3*4= 24.

Kelebihan perulangan iteratif:
-          Mudah dipahami dan mudah melakukan debugging ketika ada perulangan yang salah.
-          Dapat melakukan nested loop atau yang disebut dengan looping bersarang.
-          Proses lebih singkat karena perulangan terjadi pada kondisi yang telah disesuaikan.
-          Jarang terjadi overflow karena batasan dan syarat perulangan yang jelas.

Kelemahan perulangan iteratif:
-          Tidak dapat menggunakan batasan berupa fungsi.
-          Perulangan dengan batasan yang luas akan menyulitkan dalam pembuatan program perulangan  itu sendiri.