Hilih
Hilih
Array adalah tumpukan variabel yang sejenis dan memiliki nama yang sama. Konsep suatu array
menjadikan tumpukan variabel tersebut mampu menampung nilai yang berbeda asalkan tetap
dengan tipe yang sama dengan tipe array. Sintaks penulisan array adalah sebagai berikut:
1 tipe nama_array[elemen];
Tipe array merupakan tipe data tumpukan variabel tersebut, sedangkan nama_array adalah nama
tumpukan variabel. Untuk elemen atau indeks, merupakn pembeda yang membedakan tumpukan
variabel yang satu dengan yang lainnya dalam satu array, karena di awal sudah Mimin jelaskan
bahwa array memiliki nama dan jenis yang sama namun pembendanya terletak di indeks atau
elemen itu sendiri.
Pendeklarasian Array
Berikut mimin contohkan cara mendeklarasikan suatu array:
1 int tampungan[5];
Pada contoh diatas, Mimin membuat array dengan nama tampungan bertipe data integer dimana
array ini dapat menampung nilai sebanyak 5 buah. Masing-masing nilai yang dimasukkan akan
diberikan nomor elemen atau indeks dari elemen ‘0’ hingga ‘4’. Yang perlu kamu ingat bahwa,
penomoran elemen pada array dimulai dari angka ‘0’.
Kamu juga bisa memanfaatkan loop untuk mengakses nilai pada array karena lebih cepat dan
simple. Berikut Mimin contohkan kode programnya:
1 #include <iostream>
2 using namespace std;
3
4 int main(){
5 int tampungan[5] = {4,3,7,8,9};
6 for(int i=0; i<=5; i++){
7 cout<<"Nilai pada array tampungan elemen ke "<<i<<" adalah :"<<tampungan[i]<<endl;
8 }
9 return 0;
10 }
Terlihat bahwa program untuk mengakses array dengan memanfaatkan loop lebih simple untuk
menghasilkan output yang sama sebagai berikut:
Array Multidimensi
Array multidimensi merupakan array yang memiliki indeks lebih dari 1. Indeks pada array
merepresentasikan dimensi dari array. Sebagai contoh array dengan indeks berjumlah dua, maka
dapat dikatakan bahwa array tersebut merupakan array dua dimensi dan begitu juga untuk
dimensi yang lainnya. Pada contoh kasus ini, Mimin mencontohkan array dua dimensi dalam
C++ sebagai berikut:
1 int arrayMulti[2][3];
Mimin sengaja mencontohkan array dua dimensi pada kasus ini karena array ini dapat dipahami
sebagai sebuah sel dalam tabel. Dimensi pertama array adalah baris, sedangkan dimensi array
kedua adalah kolom. Visualisasi array dua dimensi, Mimin gambarkan sebagai berikut:
0 1 2
Dari tabel diatas kamu dapat melihat bahwa, jumlah elemen dari arrayMulti adalah 6, yang
didapat dari perkalian indeks pertama dan kedua 2*3 = 6. Untuk memberikan nilai pada array
dua dimensi kamu dapat menggunakan sintaks sebagai berikut:
1 int arrayMulti[2][3] = {{1,2,3},{4,5,6}};
Pada contoh diatas, dimensi pertama adalah abstrak atau bisa dikatakan hanya sebagai
kelompok-kelompok bilangan (kurung kurawal ({}) didalam kurung kurawal utama atau besar).
Dimensi kedua merupakan anggota dari kelompok-kelompok tersebut (isi dari kurung kurawal).
Secara mudahnya bahwa dimensi kedua merupakan isi dari dimensi pertama. Berikut mimin
contohkan aplikasinya dalam program C++:
1 #include <iostream>
2 using namespace std;
3
4 int main(){
5 int arrayMulti[2][3] = {{1,2,3},{4,5,6}};
6 cout<<"Nilai arrayMulti[0][0] adalah "<<arrayMulti[0][0]<<endl;
7 cout<<"Nilai arrayMulti[0][0] adalah "<<arrayMulti[0][1]<<endl;
8 cout<<"Nilai arrayMulti[0][0] adalah "<<arrayMulti[0][2]<<endl;
9 cout<<"Nilai arrayMulti[0][0] adalah "<<arrayMulti[1][0]<<endl;
10 cout<<"Nilai arrayMulti[0][0] adalah "<<arrayMulti[1][1]<<endl;
11 cout<<"Nilai arrayMulti[0][0] adalah "<<arrayMulti[1][2]<<endl;
12 return 0;
13 }
Hasil output programnya adalah sebagai berikut:
Kamu juga bisa menggunakan looping for untuk mengakses nilai dari array multidimensi guna
mempersingkat pemrograman sebagai berikut:
1 #include <iostream>
2 using namespace std;
3
4 int main(){
5 int arrayMulti[2][3] = {{1,2,3},{4,5,6}};
6 cout<<"Akses Array Multidimensi Dengan Looping For"<<endl;
7 for(int x=0; x<=1; x++){
8 for(int y=0; y<=2; y++){
9 cout<<"Nilai arrayMulti["<<x<<"]["<<y<<"] adalah "<<arrayMulti[x][y]<<endl;
10 }
11 }
12 return 0;
13 }
Hasil output programnya adalah sebagai berikut:
Program di atas berfungsi untuk mencetak semua nilai yang terdapat pada array karakter “nama”
dengan bantuan looping for, dimana looping ini akan terus bekerja mencetak isi dalam setiap
elemen array hingga ditemukan null terminated character ‘\0’.
Pengertian Pointer
Pointer adalah penunjuk suatu variabel. Karena menunjuk suatu variabel, maka pointer wajib
memiliki alamat dari variabel yang ditunjuknya. Kadangkala dalam program yang besar,
penghematan memori wajib untuk dilakukan. Dengan mekanisme copy dan paste nilai variabel
satu kedalam variabel lain, akan sangat memboroskan memori. Dengan mekanisme pointer,
suatu variabel dalam suatu fungsi dapat diakses oleh fungsi yang lain.
Memori menggunakan bilangan heksadesimal yang ditandai dengan awalan ‘0x’, sehingga jika
suatu variabel menempati blok kesepuluh dalam memori, maka alamatnya adalah 0x00000a
Deference (&)
Deference (&) merupakan suatu operator yang berfungsi untuk menanyakan alamat dari suatu
variabel. Apabila kamu memberikan simbol & pada awal variabel dan mencetak hasilnya pada
jendela CLI, maka yang akan tercetak adalah alamat dari variabel tersebut bukan nilai yang
ditampung oleh variabel tersebut. Berikut contoh programnya:
1
#include <iostream>
2 using namespace std;
3
4 int main(){
5 int a = 5;
6 cout<<"Alamat Variabel a adalah :"<<&a<<endl;
7 cout<<"Nilai Variabel a adalah :"<<a<<endl;
return 0;
8 }
9
Hasil output programnya adalah:
Alamat variabel ‘a’ pada setiap komputer akan berbeda-beda tergantung kompiler dalam
mengalokasikan memori untuk suatu variabel.
Reference (*)
Reference (*) merupakan suatu operator yang berfungsi menyatakan suatu variabel adalah
variabel pointer. Sama halnya dengan operator deference, peletakan simbol operator reference
diletakan diawal variabel. Operator reference ini akan membuat suatu variabel pointer untuk
menampung alamat. Nah untuk lebih mudahnya perhatikan contoh berikut:
1
2 #include <iostream>
3 using namespace std;
4
int main(){
5 int a=5; //Memberikan nilai 5 pada variabel a
6 int *b; //Mendeklarasikan variabel b sebagai pointer
7 b = &a; //Mengkopikan alamat variabel a kedalam variabel pointer b
8 cout<<"Nilai variabel a adalah "<<a<<endl;
9 cout<<"Alamat variabel a adalah "<<&a<<endl;
cout<<"Isi dari variabel b adalah "<<b<<endl;
10 cout<<"Nilai yang tertampung dalam variabel b adalah "<<*b<<endl;
11
12 return 0;
13 }
14
Hasil output programnya adalah:
Dari hasil output program di atas dapat dipahami bahwa, nilai variabel b sama dengan variabel a,
walaupun variabel b tidak diberikan nilai yang sama dengan variabel a. Hal ini terjadi karena
variabel pointer b menunjuk alamat variabel a dan variabel pointer b dapat mengakses nilai yang
terkandung dalam alamat yang ditunjuknya.
Dari hasil di atas, dapat kamu lihat bagaimana cara mengakses nilai array dengan menggunakan
pointer.
Suatu pointer bertipe int hanya dapat digunakan untuk menunjuk pada variabel int. Sebab, tipe
data tersebut akan menentukan sifat pointer ketika alamat pointer tersebut dilakukan increment.
Begitu juga untuk tipe data yang lain.
Queue atau antrian merupakan suatu kumpulan data yang memiliki head/front dimana
data dikeluarkan (dequeue) dan tail/rear dimana data dimasukkan (enqueue) ke antrian.
Proses QUEUE
Seperti halnya pada antrian yang biasa kita lakukan sehari-hari, di manapun. Antrian
dimulai dari depan ke belakang, jika didepan belum pergi meninggalkan antrian maka
antrian terus bertambah dari belakang dan antrian paling belakang disini dinamakan
rear/tail.
Jadi selama antrian terus bertambah (enqueue) maka antrian yang paling akhir adalah
tail/rear.
Jika ada yang keluar dari antrian (dequeue) maka data tersebut adalah yang paling
depan (head/front), dan data berikutnya setelah data yang keluar berubah menjadi yang
paling depan (head/front).
Queue menggunakan metode FIFO, dimana yang masuk pertama kali akan keluar
pertama kali juga.
Program QUEUE
1. Untuk mengimplementasikan program queue di C++ kita membutuhkan tiga
method atau fungsi enqueue(); untuk menambahkan data ke
antrian,dequeue(); untuk me ngeluarkan data dari antrian dan printQueue() untuk
menampilkan queue.
2. Selain tiga fungsi tersebut, kita akan membuat dua fungsi opsional untuk
mengecek apakah antrian kosong isEmpty() dan antrian penuh isFull().
3. Untuk menyimpan data kita bisa menggunakan empty array dengan maksimum
array yang nanti akan kita definisikan sebagai maksimum antrian, jadi kita bisa
mengetahui indeks pertama adalah front dan data indeks yang kosong untuk
menambahkan data sebagai rear-nya.
4. Untuk data antriannya terstruktur kita bisa menggunakan struct sehingga lebih
mudah mengakses data front, rear dan array datanya sendiri seperti sebuah
object.
5. Karena ini adalah program konsole maka tentu kita juga akan membuat
fungsi main().
Kode Program QUEUE
#include <iostream>
#define MAX 20 //maksimum data queue
using namespace std;
Disini kita hanya menggunakan dua baris preprocessor untuk mendefinisikan header
file iostream untuk standard input/output stream dan MAX untuk maksimum data array
pada queue/antrian.
2. Struct data
Pada struct kita mendeklarasikan front, rear dan array data[] dengan jumlah array dari
data maksimum yang telah di definisikan sebelumnya yaitu MAX.
Deklarasi variabel pada struct sama halnya dengan pendeklarasian variabel pada
umumnya, karena disini kita hanya memiliki tipe data yang sama, jadi kita bisa
menghemat baris dengan menyebariskan tiga variabel bertipe integer.
INFO : Disini kita hanya membuat program untuk mengetahui dasar implementasi queue di c++,
Sebenarnya kita juga bisa menggunakan variabel data dengan tipe data lain selain integer, atau sebagai
data struct seperti pada program sederhana ini.
3. Memeriksa antrian
1. Pada fungsi isFull() akan mengembalikan nilai true jika nilai Q.rear sama
dengan maksimum data array yang telah ditentukan MAX, atau false jika tidak
sama.
2. Pada fungsi isEmpty() akan mengembalikan nilai true jika nilai Q.rear sama
dengan 0, atau false jika tidak sama.
4. Menampilkan Antrian
//Menampilkan Queue
void printQueue() {
if (isEmpty()) {
cout << "Antrian kosong"<<endl;
}
else {
cout << "QUEUE : ";
for (int i = Q.front; i < Q.rear; i++)
//menambahkan koma jika data tidak terdapat di antrian pertama
cout << Q.data[i] << ((Q.rear-1 == i) ? "" : ",");
cout << endl;
}
}
Untuk menampilkan antrian, kita perlu memeriksa apakah antriannya kosong. Jika
kosong maka tidak ada data untuk ditampilkan, jadi cukup tampilkan pesan. Tapi jika
antrian berisi data atau ada antrian disana maka tampilkan data yang ada di antrian
menggunakan for loop.
Disini kode di dalam perulangan/loop hanyalah elemen setiap data yang telah
dimasukkan dengan menggunakan koma kecuali data terakhir.
Info : Mungkin kalian bertanya kenapa kita tidak memulai membuat fungsi yang utama dari program
yang kita tulis yaitu enqueue(), dequeue() dan fungsi dan kode lain setelahnya.
Ini dikarenakan kompiler pada c++ membaca kode yang kita tulis dari baris atas ke bawah. Kompiler tidak
akan mengkompile program jika ada variabel atau fungsi yang tidak di definisikan atau di deklarasikan.
Kompiler juga tidak akan mengkompile program dengan variabel atau fungsi yang di didefinisikan di baris
paling bawah, tapi di panggil pada baris kode di atasnya.
Untuk menginputkan data ke antrian hal utama yang perlu kita lakukan adalah
memeriksa apakah antrian penuh atau tidak, jika penuh, maka kita tidak dapat
menambahkan data ke antrian karena sudah tidak ada ruang lagi yang tersedia.
Jika masih ada ruang maka inputkan data ke antrian dan tambahkan satu nilai
ke Q.rear dimana data tersebut berada pada antrian paling belakang.
Disini kita juga memanggil fungsi printQueue() yang telah didefinisikan pada baris kode
sebelumnya, secara langsung setelah data ditambahkan. Jadi user bisa melihat data ada
di dalam antrian.
Sama halnya dengan menampilkan antrian, untuk mengambil data dari dalam antrian
atau mengeluarkannya (dequeue), pertama kali kita perlu memeriksa apakah ada data
dalam antrian. Karena kita tidak dapat menghapus data yang tidak ada pada antrian.
Jika ada data pada antrian, maka geser data ke antrian palng depan atau Q.front, disini
kita akan menimpa data yang keluar dari antrian yang paling depan dan kemudian
mengurangi satu nilai Q.rear.
7. Menampilkan Menu
int main() {
int choose;
do
{
//Tampilan menu
cout << "-------------------\n"
<< " Menu Pilihan\n"
<< "-------------------\n"
<< " [1] Enqueue \n"
<< " [2] Dequeue\n"
<< " [3] Keluar \n\n"
<< "-------------------\n"
<< "Masukkan pilihan : "; cin >> choose;
switch (choose)
{
case 1:
enqueue();
break;
case 2:
dequeue();
break;
default:
cout << "Pilihan tidak tersedia";
break;
}
} while (choose !=3);
return 0;
}
Setelah semua fungsi dan variabel yang kita butuhkan telah tersedia, langkah terakhir
adalah menggunakan fungsi-fungsi dan variabel tersebut menjadi sebuah program yang
kita inginkan (program queue) dengan memanggilnya dan memolesnya menjadi sebuah
menu pada fungsi main. Disini kita hanya perlu menggunakan
perulangan while dan switch untuk menentukan pilihan user.
switch akan memeriksa pilihan user (disini adalah nilai variabel choose dengan tipe data
integer). Disini hanya ada dua pilihan. pilihan pertama jika user ingin menambahkan
data ke antrian dan pilihan kedua jika user ingin menghapus atau mengeluarkan data
dari antrian. Selain dari kedua pilihan tersebut maka tampilkan pesan pilihan tidak
tersedia.
Sedangkan while sendiri akan mengulang pilihan pada switch, selama user tidak memilih
pilihan dengan nilai 3 atau choose == 3.
Full Code
Sebenarnya di C++ sudah ada library untuk membuat queue, jadi untuk membuat
queue kita cukup menambahkan header file queue pada awal baris dan selanjutnya kita
bisa menggunakan method dan fungsi yang telah disediakan untuk membuat antrian
seperti empty, size, front, back, push_back, pop_front dan lainnya.
Definisi stack
Stack merupakan suatu tumpukan dari benda dengan konsep utamanya adalah LIFO (Last In
Fist Out). Benda yang masuk terakhir dalam stack akan menjadi benda pertama yang di keluarkan
dari stack. Ilustrasinya bisa di liat di bawah :
Pada gambar diatas, jika kita ingin mengambil sesuatu dari tumpukan maka kita harus
mengambilnya dari tumpukan yang paling atas dahulu. Misalkan jika kita mengambil yang A
terlebih dahulu maka yang B akan jatuh. Dalam program c++ ada 2 cara penerapan prinsip stack
ini yakni dengan array dan linked list . operasi-operasi dalam stack :
1. Push : untuk menambahkan item pada tumpukan paling atas
2. Pop : untuk mengambil item paling atas
3. Clear : 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
Stack Dengan Array of Struct
1. Definisikan Stack dengan menggunakan suatu struct
2. Definisikan konstanta MAX_STACK untuk menyimpan maksimum isi stack
3. Elemen struct Stack adalah array data dan top untuk menadakan posisi data teratas
4. Buatlah variabel tumpuk sebagai implementasi dari struct Stack
5. Deklarasikan operasi-operasi/function di atas dan buat implemetasinya
Contoh stack dengan array
Contoh deklarasi MAX_STACK
#define MAX_STACK 10
Contoh deklarasi STACK dengan struct dan array data
Contoh programnya
DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
1. #include <iostream.h>
2. #include <conio.h>
3.
4. char stack[10];
5. int tdc,i;
6. char answer,tmp,e;
7. void speed();
8.
9.
10. void push1()
11. {
12. for(i=0;i<=17; i++)
13. {
14. gotoxy(22+i,7);cout<<" ";
15. gotoxy(23+i,7); cout<<tmp; speed();
16. }
17. for(i=1;i<=(14-tdc);i++)
18. {
19. speed();
20. gotoxy(40,6+i); cout<<" ";
21. gotoxy(40,7+i); cout<<tmp;
22. }
23. }
24.
25. void pop1(char temp)
26. {
27. for(i=1;i<=(14-tdc);i++)
28. {
29. speed();
30. gotoxy(40,22-i-tdc); cout<<" ";
31. gotoxy(40,21-i-tdc); cout<<tmp;
32. }
33. for(i=1;i<=19;i++)
34. {
35. speed();
36. gotoxy(38+i,7); cout<<" ";
37. gotoxy(39+i,7); cout<<tmp; speed();
38. }
39. gotoxy(58,7);cout<<" ";
40. }
41.
42. void push(char e)
43. {
44. tdc=tdc+1;
45. stack[tdc]=e;
46. push1();
47. }
48. void pop(char e)
49. {
50. if(tdc !=0)
51. {
52. gotoxy(1,7); cout<<" "<<endl;
53. e=stack[tdc]; pop1(e);
54. tdc=tdc-1;
55. }
56. else
57. {
58. gotoxy(1,7); cout<<"stack kosong!"<<endl;
59. gotoxy(1,7);
60. }
61. }
62.
63. void main()
64. {
65. clrscr();
66. cout<<"program stack dengan animasi"<<endl;
67. cout<<"1.push--> memasukkan data"<<endl;
68. cout<<"2.pop---> mengambil data"<<endl;
69. cout<<"3.clear-> membersihkan data"<<endl;
70. cout<<"4.exit--> keluar"<<endl;
71. //cout<<"pilih [1/2/3/4] ="<<endl;
72.
73.
74. clear:
75. gotoxy(59,6); cout<<"-";
76. gotoxy(59,9); cout<<"_";
77. gotoxy(37,10); cout<<"|| ||";
78. for(i=1;i<=11;i++)
79. {
80. gotoxy(38,10+i);
81. if(i==11)
82. cout<<"|___|";
83. else
84. cout<<"| |";
85. }
86. tdc=0;
87. do
88. {
89. input:
90. gotoxy(1,6);
91. cout<<"masukkan pilihan anda[1/2/3/4] : ";
92. answer=getche();
93. if(int(answer)==27 || answer=='4')
94. break;
95. else if(answer=='1')
96. {
97. if(tdc != 7)
98. {
99. gotoxy(1,7); cout<<"masukkan suatu huruf : ";
100. cin>>tmp;
101. push(tmp);
102. gotoxy(1,7); cout<<" ";
103. }
104. else
105. {
106. gotoxy(1,7); cout<<"stack penuh!";
107. getch();
108. gotoxy(1,7); cout<<" ";
109. }
110. }
111. else if(answer=='2')
112. pop(tmp);
113. else if(answer=='3')
114. goto clear;
115. else
116. goto input;
117. }
118. while(1);
119.
120. getch();
121. }
122.
123. void speed()
124. {
125. for(int y=1;y<77;y++)
126. for(int x=1;x<77;x++)
127. for(int p=1;p<77;p++)
128. cout<<"";
129. }