Program Kalkulatorr

Kamis, 14 Januari 2010

#include < iostream.h >
#include < stdlib.h >

class simple{
protected:
int bilangan1;
int temp;

private:
int bilangan2;

public:
int tambah(){
return bilangan1 + bilangan2;
}
int kurang(){
return bilangan1 - bilangan2;
}
int kali(){
return bilangan1 * bilangan2;
}
int bagi(){
return bilangan1 / bilangan2;
}

void setbil1(int a){
bilangan1=a;
}
void setbil2(int a){
bilangan2=a;
}

int getbil1(){
return bilangan1;
}
int getbil2(){
return bilangan2;
}

void menu();
void menu_simple();
};

class specifiq:public simple{
protected:
char temp[20];
private:

public:
char *oktal(){
itoa(bilangan1,temp,8);
return temp;
}
char *desimal(){
itoa(bilangan1,temp,10);
return temp;
}
char *heksa(){
itoa(bilangan1,temp,16);
return temp;
}
void menu_ribet();
void biner(int x);
};

void specifiq::biner(int x)
{
if(x>0)
{
biner(x/2);
cout << x%2;
}
}


void simple::menu(){
cout << " Calculator Program" << endl;
cout << " ==================" << endl;

cout << "1. Simple Calculator" << endl;
cout << "2. Scientific Calculator" << endl;
cout << "3. Exit" << endl;
cout << "Silahkan pilih : ";

}

void simple::menu_simple(){
cout << " Simple Calculator" << endl;
cout << " =================" << endl;

cout << "1. Tambah" << endl;
cout << "2. Kurang" << endl;
cout << "3. Kali" << endl;
cout << "4. Bagi" << endl;
cout << "5. Exit" << endl;
cout << "Silahkan pilih :";
}

void specifiq::menu_ribet(){
cout << " Scintifiec Calculator" << endl;
cout << " =====================" << endl;

cout << "1. Tambah" << endl;
cout << "2. Kurang" << endl;
cout << "3. Kali" << endl;
cout << "4. Bagi" << endl;
cout << "5. oktal" << endl;
cout << "6. Desimal" << endl;
cout << "7. Heksadesimal" << endl;
cout << "8. Binner" << endl;
cout << "9. Exit" << endl;
cout << "Silahkan pilih :";
}

void enter(){
for(int i=0;i<25;i++)
cout << endl;
}

void main(){
int pilih,pilih1,temp;
specifiq obj1;
obj1.menu();
cin >> pilih;
cin.clear(); cin.sync();
enter();
do{
switch(pilih){
case 1 :
obj1.menu_simple();
cin >> pilih1;
cin.clear(); cin.sync();
switch(pilih1){
case 1:
do{
cout << "Masukkan bilangan I [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil1(temp);

do{
cout << "Masukkan bilangan II [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil2(temp);

cout << "Hasilnya = " << obj1.tambah() << endl;
cout << "tekan enter untuk melanjutkan..." << endl;
cin.get();

enter();
break;

case 2 :
do{
cout << "Masukkan bilangan I [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil1(temp);

do{
cout << "Masukkan bilangan II [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil2(temp);

cout << "Hasilnya = " << obj1.kurang() << endl;
cout << "tekan enter untuk melanjutkan..." << endl;
cin.get();

enter();
break;

case 3 :
do{
cout << "Masukkan bilangan I [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil1(temp);

do{
cout << "Masukkan bilangan II [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil2(temp);

cout << "Hasilnya = " << obj1.kali() << endl;
cout << "tekan enter untuk melanjutkan..." << endl;
cin.get();

enter();
break;

case 4 :
do{
cout << "Masukkan bilangan I [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil1(temp);

do{
cout << "Masukkan bilangan II [Max. 8 digit] : ";
cin >>temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil2(temp);

cout << "Hasilnya = " << obj1.bagi() << endl;
cout << "tekan enter untuk melanjutkan..." << endl;
cin.get();

enter();
break;

case 5:
enter();
obj1.menu();
cin >> pilih;
cin.clear(); cin.sync();
enter();
break;
}
break;

case 2 :
obj1.menu_ribet();
cin >> pilih1;
cin.clear(); cin.sync();
switch(pilih1){
case 1:
do{
cout << "Masukkan bilangan I [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil1(temp);

do{
cout << "Masukkan bilangan II [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil2(temp);

cout << "Hasilnya = " << obj1.tambah() << endl;
cout << "tekan enter untuk melanjutkan..." << endl;
cin.get();

enter();
break;

case 2 :
do{
cout << "Masukkan bilangan I [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil1(temp);

do{
cout << "Masukkan bilangan II [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil2(temp);

cout << "Hasilnya = " << obj1.kurang() << endl;
cout << "tekan enter untuk melanjutkan..." << endl;
cin.get();

enter();
break;

case 3 :
do{
cout << "Masukkan bilangan I [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil1(temp);

do{
cout << "Masukkan bilangan II [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil2(temp);

cout << "Hasilnya = " << obj1.kali() << endl;
cout << "tekan enter untuk melanjutkan..." << endl;
cin.get();

enter();
break;

case 4 :
do{
cout << "Masukkan bilangan I [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil1(temp);

do{
cout << "Masukkan bilangan II [Max. 8 digit] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil2(temp);

cout << "Hasilnya = " << obj1.bagi() << endl;
cout << "tekan enter untuk melanjutkan..." << endl;
cin.get();

enter();
break;

case 5 :
do{
cout << "Masukkan bilangan yang akan dikonversi " << endl;
cout << "ke dalam bilangan oktal [Max. 8 digit]: ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil1(temp);

cout << "Hasilnya = " << obj1.oktal() << endl;
cout << "tekan enter untuk melanjutkan..." << endl;
cin.get();

enter();
break;

case 6 :
do{
cout << "Masukkan bilangan yang akan dikonversi " << endl;
cout << "ke dalam bilangan Desimal [Max. 8 digit]: ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil1(temp);

cout << "Hasilnya = " << obj1.desimal() << endl;
cout << "tekan enter untuk melanjutkan..." << endl;
cin.get();

enter();
break;

case 7 :
do{
cout << "Masukkan bilangan yang akan dikonversi " << endl;
cout << "ke dalam bilangan Heksadesimal [Max. 8 digit]: ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>99999999);
obj1.setbil1(temp);

cout << "Hasilnya = " << obj1.heksa() << endl;
cout << "tekan enter untuk melanjutkan..." << endl;
cin.get();

enter();
break;

case 8 :
do{
cout << "Masukkan bilangan yang akan dikonversi " << endl;
cout << "ke dalam bilangan binner [1...255] : ";
cin >> temp;
cin.clear(); cin.sync();
}while(temp>255 || temp<1);

cout << "Hasilnya = ";
obj1.biner(temp);
cout << endl;
cout << "tekan enter untuk melanjutkan..." << endl;
cin.get();

enter();
break;

case 9:
enter();
obj1.menu();
cin >> pilih;
cin.clear(); cin.sync();
enter();
break;

}
break;
}
}while(pilih!=3);
}

Ringkasan pert 12

TEMPLATE
=========


Template berfungsi seperti menduplikasi sesuatu dengan cetakan.
Template termasuk dalam generic programming.


Contoh Template fungsi:
template void tukar (T &x, T&y)
{
T temp;
temp = x;
x=y;
y=temp;
}
Huruf “T” hnya sebuah symbol anda bebas mengggunakan huruf apapun…

Kata kunci template digunakan untuk memberitahukan kepada compiler bahwa pernyataan yang terletak setelah kata kunci merupakan suatu template.

Template untuk class…
Selain untuk fungsi, template juga dapat diterapkan pada class.
Dalam hal ini template dipakai untuk mendeklarasikan anggota data dan juga fungsi-fungsi anggota class.
Format template dalam class adalah:
template
{
// tubuh fungsi
}

Ringkasan Pert 11

Sabtu, 19 Desember 2009

POLYMORPHISM
==============

Salah satu fitur penting dalam OOP.
Pada dasarnya ada 2 tipe polymorphism, yaitu:

-->Static atau trivial
-->Dynamic atau true


Akan saya bahas satu per satu tipe dari polymorphism ini...

Trivial Polymorphism :
merupakan, function overloading yang terbagi dalam 3 signature yaitu:
-Jenis Array
-Letak Array
-Type Array

juga termasuk dalam
-C style
-Function didefinisikan saat compiling
-Link body function + function header / prototype


True Ploymorphhism:
merupakan, function overriding.
menggunakan virtual method, yg terbagi dalam 2:


  • Squasi
contohnya:
class myclass{vitual void foo(){;}}
maksud dari ; adalah no statement...



  • Pure
contohnya:
class myclass{vitual void foo()=0}
saat seperti ini akan menjadikan sebuah kelas abstrak..
kelas abstrak adalah klas yg tidak bisa dibuat sebuah objek.....


Apa itu overloading dan overriding????
overloading:penggunaan kembali nama fungi yang sama tapi dgn argumen yang berbeda..
contohnya:
class Motor : public Kendaraan{
public : void jalan()
{cout << "Motor Jalan" << endl;}
void jalan(int j) // overloading!!!!!.......
{cout << "Motor berparameter jalan" << endl; }
};

overriding:sebuah fungsi dalam class turunan yang memiliki nama, return type argumen function yang sama dengan fungsi dalam class induk..
contohnya:
class Kendaraan{
public : virtual void jalan()
{ cout << "Jalan" << endl;}
};

class Mobil :public Kendaraan{
public :
void jalan()// overriding!!!!!.........
{cout << "Mobil Jalan" << endl; }
};

Codingan rekursif

#include < iostream.h >

class rekursif{
private:
int a;

public:
rekursif(){
a=0;
}

void setA(int a){
a=a;
};

int getA(){
return 0;
};

void cetak(int a);
void cetak2(int a);
void fibo(int a,int b,int n);
int fibo2(int a);
int paskal(int i,int j);
int fakt(int a);
void biner(int n);
};


void rekursif::cetak(int a)
{
if(a<1) return;
else
{
cout << a;
cetak(a-1);
}
}

void rekursif::cetak2(int a)
{
if(a<1) return;
else
{
cetak2(a-1);
cout << a;
}
}

void rekursif::fibo(int a,int b,int n)
{
if(n==0) return;
else
{
cout << b;
fibo(b,b+a,n-1);
}
}

int rekursif::fibo2(int a)
{
if(a==1 || a==2) return 1;
return fibo2(a-1)+fibo2(a-2);
}

int rekursif::paskal(int i,int j)
{
if(j==0 || j==i) return 1;
return paskal(i-1,j-1)+paskal(i-1,j);
}

int rekursif::fakt(int a)
{
if(a==0)return 0;
if(a==1)return 1;
return a * fakt(a-1);
}

void rekursif::biner(int n){
if(n<2) cout << n;
else
{
biner(n/2);
cout << n%2;
}
}

void main()
{
int i,j,x;
rekursif obj;

cout << "masukkan angka = ";
cin >> x;
cin.sync(); cin.clear();
obj.setA(x);
cout << endl << "cetak terbalik dari " << x << endl;
obj.cetak(x);
cout << endl << endl << "cetak urut sampai " << x << endl;
obj.cetak2(x);
cout << endl << endl << "deret fibonacci sebanyak " << x << endl;
obj.fibo(0,1,x);
cout << endl << endl << "fibonacci ke- " << x << endl;
cout << obj.fibo2(x);
cout << endl << endl << "segitiga paskal" << x << "baris" << endl;
for(i=0;i {
for(j=x-1;j>i;j--)
cout << " ";
for(j=0;j<=i;j++)
cout << obj.paskal(i,j);
cout << endl;
}
cout << endl << endl << "faktorial ke-" << x << endl;
cout << obj.fakt(x);
cout << endl << endl << "cetak faktorial sebanyak " << x << endl;
for(i=1;i<=x;i++)
{
cout << obj.fakt(i);
}
cout << endl << endl << "bilangan biner dari" << endl;
obj.biner(x);

cin.get();
cin.get();
}

Pert 9 dan Pert 10

Sabtu, 12 Desember 2009

INHERITANCE DAN INHERITANCE LANJUTAN
====================================

The goal --> Reusability & Extenability
Proses pembentukan satu kelas baru (derived class) dari kelas lainnya (based class) ..

derived class=class turunan
based class=class induk

Cara jalan constructur tetap berurut dimulai dari constractor based class baru constructor derived class dijalankan untuk destructor sebaliknya...

Syntax:
class nama_turunan : level_akses , nama_induk
{anggota_klas}

level_akses maksudnya public,protected,private...

contohnya:
class induk
{ protected: int a;};

class anak : public , induk
{protected: char nama[23];}

yang dapat di turunkan hanya public dan protected..
level_akses berpengaruh dalam mengubah jenis akses pada kelas turunan.....

Class Induk ----------- Jenis akses class turunan
---------------------- Public-------Protected------Private
Public-------------- Public-------Protected------Private
Protected--------- Protected----Protected------Private
Private------------- Private------Private---------Private

untuk membuat Hierarki class tanda panah (->) menunjuk ke based class...


Multiple Inheritance
``````````````````
Yang membedakan nya adalah class turunan mendapatkan pewarisan dari klas..
misal class anak mendapat pewarisan dari class ibu dan class ayah...

Syntax:
class nama_turunan : level_akses , nama_induk1, nama_induk2
{anggota_klas}

dalam hal ini tidak ada batasan banyak induk bisa sebanyak apapun yang diinginkan..
constuctor pun dijalankan berurutan dari induk1 kemudian induk2 baru turunannya sedangkan destructor sebaliknya....

Dalam melakukan multiple inheritance terkadang dapat menimbulkan "diamond problem"
Apa itu diamond problem?????
adalah saat class induk memiliki nama method yang sama, misalnya:

class induk1
{ protected:
int a;
public:
void tes(){ cout << "induk1"; }
};

class induk2
{ public:
void tes(){ cout << "induk2"; }
};

class anak:public induk,public induk2
{ };

void main()
{
anak obj;
obj.tes(); // --> akan eror disini
// eror karena class anak bingung mau mengambil tes yg mna??
// karena itu yang eror seharunya diganti anak.induk1::tes();
//maksudnya anak akan mengambil tes yg ada pd class induk1..

cin.get();}

Ringkasan Pertemuan 8

Senin, 30 November 2009

Array & Pointer of Class
==================


Array
Suatu array dengan elemen berupa objek juga di mungkinkan untuk dibuat, misal:
Buku daftar_buku[5];
Ini merupakan pernyataan untuk mendefinisikan array yang berisi 5 objek kelas buku.

Pointer
Apabila kita bermaksud mendefinisikan suatu pointer yang menunjuk ke suatu objek, kita dapat memberikan peryataan sebagai berikut:
Buku *fiksi;

Seperti biasa tanda * diberikan didepan nama variable pointer.
Jika selanjutnya pointer fiksi diinginkan untuk menunjuk ke suatu objek dinamis yg berkelas Buku, pernyataan yg di perlukan adalah
fiksi = new Buku();
Kegunaan dari new sama seperti malloc yang biasa dalam sturct...

Oleh karena contoh diatas adalan pengalokasian dinamis, pernyataan delete dipoerlukan untuk mendealokasikan memory.
delete(fiksi);

contoh fungsi yang melewatkan objek sebagai pointer:
• Void info_buku(Buku *b)
{
Cout<<“INFORMASI BUKU”<< endl << endl;
(*b).info();
}


ATAU

• Void info_buku(Buku *b)
{
Cout<<“INFORMASI BUKU”<< endl << endl;
b->info();
}


Dan cara pemanggilannya adalah:
Buku novel; // deklarasi class
Info_
buku (&novel); // Tanda & di letakan di depan objek

contoh fungsi yang melewatkan berdasarkan referensi:
• Void info_buku(Buku &b)
{
Cout <<“INFORMASI BUKU”<< endl << endl;

b.info();
}

Dan cara pemanggilannya adalah:
Buku novel; // deklarasi class
Info_buku(novel);




Codingan menggunakan CLASS

Sabtu, 07 November 2009

#include "iostream.h" // harusnya pakai kurung siku

class mobil{
public :
mobil() // construktor
{
a=10;
setNama("xx");
}

~mobil() // destruktor
{
a=0;
}
// setter --> untuk mengubah isi atribut dlm private
void setA(int a)
{
this->a = a; // this dipakai karena menggunakan variabel nama yg sama
}
// getter --> untuk menambahkan isi atribut dlm private
int getA()
{
return a;
}

void setNama(char nama[])
{
strcpy(this->nama,nama);
}
char * getNama()
{
return nama;
}
void putarStir(); // outline function --> buat loop
private :
int a;
char nama[30];

};

void mobil :: putarStir()
{
for(int i=0;i<10;i++);
}

void main()
{
mobil obj1; // pgl constraktor
mobil obj2(obj1); // membuat obj2 isa diakses ke dlm class dgn inisialisasi obj1

obj1.setA(100); // akses pgl setter
obj1.setNama("AAA");

cout << obj1.getA() << endl; // akses pgl getter
cout << obj1.getNama() << endl;

cout << obj2.getA() << endl;
cout << obj2.getNama() << endl;
cin.get();
}