Senin, 19 Desember 2011

DESKRIPSI ANTRIAN PARKIR MOTOR DI MALL

Dalam antrian ini, kami membahas tentang rancangan atau prosedur “Antrian parkir motor di suatu Mall. Akan tetapi sebelum, kita akan membahas pengertian “antrian queue”.
Antrian (queue) adalah struktur data yang menerapkan suatu aturan penyisipan di satu ujung dan penghapusan diujung yang lainnya, atau dengan menerapkan aturan FIFO (First In First Out/masuk pertama, keluar pertama). Dalam antrian penambahan (di belakang-rear) dan penghapusan (di depan-front) dilakukan pada tempat yang berbeda.
Contoh :
Dalam antrian X terdapat [1,2,3,4,5]. Pada bagian depan dinotasikan dari antrian X sebagai front(X) dan pada bagian belakang sebagai rear(X). Maka antrian X = [1,2,3,4,5] : front(X)=1 dan rear(X)=5.
Setelah kita bahas apa itu antrian, sekarang kita bahas tentang antrian parkir motor di Mall.
Pelayanan pada antrian parkir motor di Mall tersebut hanya dilayani oleh satu Loket parkir saja, sehingga jika terdapat banyak pengunjung yang berdatangan di Mall, maka semakin panjang pula antriannya dan memakan waktu yang cukup lama.
Pada antrian ini menggunakan situasi dimana petugas parkir akan menyelesaikan pelayanannya, baru melayani orang yang diprioritaskan. Dan “first come first serve” yaitu orang yang datang lebih dulu akan dilayani terlebih dahulu.
Petugas parkir akan melayani orang yang datang lebih dulu dengan mendata plat motor pengunjung Mall tersebut dan memberikan kertas parkir kepada pengunjung, sebagai bukti parkir. Setelah pelayanan selesai barulah petugas parkir akan melayani pengantri selanjutnya.
Berikut gambar simulasinya :

Dalam gambar diatas, dapat diasumsikan bahwa motor pertama, dengan plat ‘AB 1000 BC’ sebagai pengantri pertama, kemudian di lanjutkan dengan pengantri yang berikutnya dengan plat ‘AB 8888 BC’ dan seterusnya.

Selasa, 06 Desember 2011

Pengantar Stack

  • Stack merupakan suatu susunan koleksi data dimana data  dapat ditambahkan dan dihapus selalu dilakukan pada bagian akhir data, yang disebut dengan top of stack
  • Stack bersifat LIFO (Last In First Out)
  • “Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar dari stack.
Operasi pada stack terdiri dari :
  1. Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
  2. Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
  3. Clear : digunakan untuk mengosongkan stack
  4. IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
  5. IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh

Selasa, 25 Oktober 2011

ARRAY DINAMIS

Array Dinamis
Dalam contoh-contoh di atas, ada batas tententu dalam jumlah elemennya, yaitu 100 int, 100 Pemain, dan 100 BentukGeometris. Karena ukuran array tidak bisa berubah, array tersebut hanya bisa menampung maksimum sebanyak elemen yang didefinisikan pada pembuatan array. Dalam banyak kasus, adanya batas maksimum tersebut tidak diinginkan. Kenapa harus bekerja dengan hanya 100 bilangan bulat saja, bukan 101?

Alternatif yang umum adalah membuat array yang sangat besar sehingga bisa digunakan untuk dalam kehidupan sehari-hari. Akan tetapi cara ini tidak baik, karena akan sangat banyak memori komputer yang terbuang karena tidak digunakan. Memori itu mungkin lebih baik digunakan untuk yang lain. Apalagi jika komputer yang akan digunakan tidak memiliki memori yang cukup untuk menjalankan program tersebut.

Tentu saja, cara yang lebih baik adalah apabila kita bisa mengubah ukuran array sesuka kita kapan saja. Ingat bahwa sebenarnya variabel array tidak menyimpan array yang sesungguhnya. Variabel ini hanya menyimpan referensi ke objek tersebut. Kita tidak bisa membuat array tersebut lebih besar, akan tetapi kita bisa membuat array baru yang lebih besar, kemudian mengubah isi variabel array tersebut ke array baru itu.

Tentunya kita harus mengkopi semua isi di array yang lama ke array baru. Array lama akan diambil oleh pemulung memori, karena ia tidak lagi digunakan.

Mari kita lihat kembali contoh game di atas, di mana ArrayPemain adalah array dengan tipe Pemain[] dan jumlahPemainAktif[/code] adalah jumlah pemain yang sudah digunakan array tersebut. Misalnya kita tidak ingin membuat limit banyaknya pemainnya yang bisa ikut main. Jika pemain baru masuk dan array tersebut sudah penuh, kita akan membuat array baru yang lebih besar.

Variabel ArrayPemain akan merujuk pada array baru. Ingat bahwa setelah ini dilakukan, ArrayPemain[0] akan menunjuk pada lokasi memori yang berbeda, akan tetapi nilai ArrayPemain[0] sama dengan sebelumnya. Berikut ini adalah kode untuk melakukan hal di atas:

// Tambah pemain baru, meskipun array sudah penuh

if (jumlahPemainAktif == ArrayPemain.length) {
// Array sudah penuh. Buat array baru yang lebih besar,
// kemudian kopi isi array lama ke array baru lalu ubah
// ArrayPemain ke array baru.
int ukuranBaru = 2 * ArrayPemain.length; // Ukuran array baru
Pemain[] temp = new Pemain[ukuranBaru]; // Array baru
System.arraycopy(ArrayPemain, 0, temp, 0, ArrayPemain.length);
ArrayPemain = temp; // Ubah referensi ArrayPemain ke array baru.
}

// Di sini kita sudah tahu bahwa pasti ada tempat di array baru.

ArrayPemain[jumlahPemainAktif] = pemainBaru; // Tambah pemain baru...
jumlahPemainAktif++; // ... dan tambah satu jumlahPemainAktif nya

Jika kita akan melakukan hal ini terus menerus, akan lebih indah jika kita membuat kelas untuk menangani hal ini. Objek mirip array yang bisa berubah ukuran untuk mengakomodasi jumlah data yang bisa ia tampung disebut array dinamis. Array dinamis memiliki jenis operasi yang sama dengan array : mengisi nilai pada posisi tertentu dan mengambil nilai di posisi tertentu. Akan tetapi tidak ada batas maksimum dari jumlah array (hanya tergantung pada jumlah memori komputer yang tersedia). Dalam kelas array dinamis, metode put dan get akan diimplementasikan sebagai metode instansi.

Di sini misalnya, adalah kelas yang mengimplementasikan array dinamis int :

public class ArrayDinamisInt {
private int[] data; // Array untuk menyimpan data
public DynamicArrayOfInt() {
// Konstruktor.
data = new int[1]; // Array akan bertambah besar jika diperlukan
}

public int get(int posisi) {
// Ambil nilai dari posisi tertentu di dalam array.
// Karena semua posisi di dalam array adalah nol, maka
// jika posisi tertentu di luar data array, nilai 0 akan dikembalikan
if (posisi >= data.length)
return 0;
else
return data[posisi];
}

public void put(int posisi, int nilai) {
// Simpan nilai ke posisi yang ditentukan di dalam array
// Data array tersebut akan bertambah besar jika diperlukan

if (posisi >= data.length) {
// Posisi yang ditentukan berada di luar array data
// Besarkan ukuran array 2x lipat. Atau jika ukurannya masih
// terlalu kecil, buat ukurannya sebesar 2*posisi

int ukuranBaru = 2 * data.length;
if (posisi >= ukuranBaru)
ukuranBaru = 2 * posisi;
int[] dataBaru = new int[ukuranBaru];
System.arraycopy(data, 0, dataBaru, 0, data.length);
data = dataBaru;

// Perintah berikut hanya untuk demonstrasi
System.out.println("Ukuran array dinamis diperbesar menjadi "
+ ukuranBaru);
}
data[posisi] = nilai;
}

} // akhir kelas ArrayDinamisInt

Data pada objek ArrayDinamisInt disimpan dalam array biasa, akan tetapi arraynya akan dibuang dan diganti dengan array baru yang lebih besar apabila diperlukan. Jika bilangan adalah variable bertipe ArrayDinamisInt, maka perintah bilangan.put(pos,nilai) akan menyimpan bilangan pada posisi pos di array dinamis tersebut. Fungsi bilangan.get(pos) mengambil nilai yang disimpan pada posisi pos.

Pada contoh pertama, kita menggunakan array untuk menyimpan bilangan bulat positif yang dimasukkan oleh user. Kita bisa menulis ulang program tersebut dengan menggunakan ArrayDinamisInt. Referensi ke bilangan[i] diganti dengan bilangan.get[i]. Perintah "bilangan[jmlBilangan] = bil;" kita ganti dengan "bilangan.put(jmlBilangan,bil);". Berikut ini adalah programnya:

public class BalikBilanganInput {

public static void main(String[] args) {

ArrayDinamisInt bilangan; // Array untuk menyimpan nilai input dari user
int jmlBilangan; // Banyaknya bilangan yang sudah disimpan dalam array
int bil; // Bilangan yang diambil dari user

bilangan = new ArrayDinamisInt();
jmlBilangan = 0; // Belum ada bilangan yang disimpan

System.out.println("Masukkan bilangan bulat positif, masukkan nol untuk mengakhiri.");

while (true) {
System.out.print("? ");
bil = KonsolIO.ambilInt();
if (bil <= 0)
break;
bilangan.put(jmlBilangan,bil);
jmlBilangan++;
}

System.out.println("\nBilangan yang Anda masukkan dalam urutan terbalik adalah :\n");

for (int i = jmlBilangan - 1; i >= 0; i--) {
System.out.println( bilangan.get(i) );
}

} // akhir main();

} // akhir kelas BalikBilanganInput

Minggu, 16 Oktober 2011

Konstruktor

Konstruktor digunakan untuk memberi nilai awal (inisialisasi) data member kelas.
Deklarasi Konstruktor
                        Kompleks(int s=0, int t=0) : a(s), b(t) { /* aksi */ }

Data member dari kelas Kompleks, yaitu s dan t akan diberi nilai 0 jika suatu
objek dideklarasikan tanpa parameter. Sebagai contoh :
Kompleks P;
                       Objek P (dalam logika kita) berbentuk : 0 + 0i.

Bila objek P dideklarasikan dengan satu parameter, maka hanya s yang akan
diinisialisasi melalui deklarasi tersebut, sebagai contoh :
             Kompleks P(-2);
Objek P (dalam logika kita) berbentuk : -2 + 0i. (bagaimana deklarasi objek, jika yang dikehendaki adalah bilangan kompleks berbentuk 0 – 2i ?)

Bila objek P dideklarasikan dengan dua parameter, maka baik s dan t akan diinisialisasi melalui deklarasi tersebut, sebagai contoh :
             Kompleks P(-2, 5);
Objek P (dalam logika kita) berbentuk : -2 + 5i.

Matriks Simetri

#include <iostream.h>
#include <conio.h>
#define maks 25
class MatrikSimetri{
      public :
             MatrikSimetri();
             void input_matriks();
             void output_matriks();
             void uji_matriks();
      private:
              int matriks[maks][maks];
              int baris_matriks,kolom_matriks;
      };

MatrikSimetri::MatrikSimetri(){
cout<<"Banyaknya  baris matriks : ";
cin>>baris_matriks;
cout<<"Banyaknya kolom matriks : ";
cin>>kolom_matriks;
cout<<endl;
}

void MatrikSimetri::input_matriks(){
for(int i=0;i<baris_matriks;i++){
for(int j=0;j<kolom_matriks;j++){
cout<<"Baris["<<i+1<<"] Kolom["<<j+1<<"]: ";
cin>>matriks[i][j];
                   }
                   }
}

void MatrikSimetri::output_matriks(){
cout<<endl;
for(int i=0;i<baris_matriks;i++){
for(int j=0;j<kolom_matriks;j++){
cout<<matriks[i][j]<<" ";
}
cout<<endl;
       }
}

void MatrikSimetri::uji_matriks(){
cout<<endl;
if(baris_matriks==kolom_matriks){
cout<<"Matriks di atas merupakan 'matriks simetri'\n";
                            }
else{
cout<<"Matriks di atas 'bukan matriks simetri'\n";
               }
}
int main()
{
    MatrikSimetri matriksimetri;
    matriksimetri.input_matriks();
    cout<<"\nMatriks yang terbentuk adalah";
    matriksimetri.output_matriks();
    matriksimetri.uji_matriks();
    cout<<endl;
    getch ();
    return 0 ;
}

Kamis, 07 Juli 2011

Program Kode Hari

include <iostream.h>
main ()
{
char hari;
cout < < "Masukkan kode hari : ";
cin >> hari;
if (hari==’a'||hari == ‘A’){
cout << “Senin”;}
else if (hari==’b'||hari==’B'){
cout << “Selasa”;}
else if (hari==’c'||hari== ‘C’){
cout << “Rabu”;}
else if (hari==’d'||hari== ‘D’){
cout << “Kamis”;}
else if (hari==’e'||hari==’E'){
cout << “Jumat”;}
else if (hari==’f'||hari==’F'){
cout << “Sabtu”;}
else if (hari==’g'||hari== ‘G’){
cout << “Minggu”;}
else
cout << “MAAF KODE YANG ANDA MASUKKAN SALAH.!”;
return 0;
}

Penggunaan Class Pada Bahasa C++

#include
#include
#include
#include
#include
#include
class kelas{
      public :
           char *value;
           kelas(){
           value=new char(3);
           strcpy(value,”???”);
           cetak(“Pertama kali dijalankan value = “);
}
            virtual ~kelas();
            void input(){baca(80);
}
            int length();
            int memsize();
private:
void cetak(char *kata){
        printf(“%s %s\n”,kata,value);
};
protected:
int len;
int mem;
void baca(int length){
delete value;
value=new char(length);
cout <len;
}
int kelas::memsize(){return this->mem;
}
kelas::~kelas(){
this->cetak(“Keluar dari kelas value = “);
delete value;
}
void main(){
kelas *kata=new kelas;
kata->input();
cout <<”\n\nPanjang string = “<length()<<”\n”;
cout <<”Isinya = “<value <<”\n\n”;
cout <<”Memori kelas kata = “<<sizeof(kata)<len dan kelas->mem dan
//fungsi kelas->baca()
//tidak dikenal pada objek kata.
//hanya ada pada objek kelas
//juga void kelas->cetak() tidak dapat dipakai pada objek kata
delete kata;
return;
}

Penjelasan :
Class hampir sama dengan tipe struct, bedanya class dapat bersifat public, private, dan protected.
Anggota private hanya digunakan dalam class/friend, semua anggota class adalah private.
Anggota protected, sama saja dengan private. Dikit perbedaan. Susah jelasinnya.
Anggota public dapat digunakan oleh semua fungsi. Juga dapat digelar di luar dari struktur class. Anggota virtual yang terdapat di public digunakan untuk memanggil secara otomatis ketika class menjadi objek dengan operator new (perhatikan void main()). Dan juga dipanggil otomatis ketika objek dihapus dengan operator delete objek.
Dalam contoh di atas fungsi kelas() dipanggil secara otomatis ketika new, dan secara otomatis ~kelas() dipanggil juga secara otomatis ketika delete.
Fungsi-2 atau variabel private/protected tidak dapat dipakai dalam objek.