Jenis-Jenis Array
OLEH:
I PUTU ARY PRADNYA PUTRA NIM: 14102202
PROGRAM STUDI SISTEM KOMPUTER
STMIK STIKOM INDONESIA
DENPASAR
Kata pengantar
Dengan mengucapkan puji syukur kepada Tuhan Yang Maha Esa yang telah melimpahkan segala rahmat dan karunia-Nya, sehingga dapat mengerjakan makalah ini dengan baik dan lancar. Saya berharap makalah ini dapat memberikan motivasi kepada para pembaca untuk lebih giat mempelajarinya.
Saya juga meminta maaf yang sebesar-besarnya apabila ada kekurangan, kesalahan bahkan kata-kata yang tidak berkenan di hati dan disisi lain saya sangat mengharapkan ada masukan baik kritik maupun saran dari saudara. Sehingga penyusun dapat memperbaiki apa yang jadi kekurangan kami karena tidak ada manusia yang sempurna kecuali Tuhan Yang Maha Esa. Akhir kata saya mengharapkan makalah ini banyak manfaatnya bagi saya sendiri khususnya maupun semua pihak pada umumnya.
Batubulan, Oktober 2015
BAB: I Pendahuluan
1.1 LATAR BELAKANG
Dengan adanya kemajuan Tekhnologi di dunia ini akal pikiran manusia semakin mahir dalam menciptakan sesuatu yang bermanfaat bagi kehidupan mereka, salah satunya dalam pembuatan program – program yang sangat membantu mereka dalam menyelesaikan pekerjaan mereka dengan cepat, baik dan memuaskan.Maka dari itu penulis menyusun makalah mengenai array, queue, record dan stack merupakan salah satu bagian dari
kemajuan zaman yang betul betul terlihat manfaatnya. Array bisa juga disebut sebagai salah satu program yang terlahir dari dunia tekhnologi lewat pola pikir manusia yang bermanfaat untuk menyelesaikan suatu penghitungan.
1.2 MAKSUD DAN TUJUAN
Maksud dan tujuan penulis dalam penyusunan makalah ini sebagi penambah informasi bagi penulis yang di outputkan lewat tulisan yang terdapat pada makalah ini dan berharap penulis memberikan informasi dipenyusunan makalah ini yang isinya tentang array yang sangat jelas bagi pembaca. Dengan mengetahui tentang array maka penulis maupun pembaca dapat menambah pengetahuan ilmu yang menyangkut dalam dunia tekhnologi pemograman.
1.3 RUMUSAN MASALAH
Sesuai dengan mata kuliah ini “ Struktur Data ” untuk menambah ilmu pengetahuan mahasiswa. Rumusan masalah dari materi Array ini sebagai berikut :
1. Apa saja yang termasuk Materi dalam mata kuliah Array? 2. Bagaimana penjelasan tentang materi Array ?
3. Apa saja jenis-jenis Array?
4. Bagaimana bahasa penulisan Array di pemograman?
1.4 METODE PENULISAN
BAB : II Pembahasan
2.1 PENGERTIAN ARRAY
Array atau larik di definisikan sebagai pemesanan alokasi memory berurutan.definisi ini kurang tepat, karena terjadi kerancuan antara struktur data dan representasinya. Memang benar array hampir selalu di implementasikan menggunakan memory berurutan tapi tidak selalu demikian. Semua elemem array bertipe sama. Array cocok untuk organisasi kumpulan data homogen yang ukuran atau jumlah elemen maksimumnya telah diketahui dari awal. Homogen adalah bahwa setiap elemen dari sebuah array tertentu haruslah mempunyai tipe data yang sama.
2.2 KARAKTERISTIK ARRAY
· Mempunyai batasan dari pemesanan alokasi memori (bersifat statis). · Mempunyai tipe data sama (bersifat homogen).
· Dapat diakses secara acak.
2.2.1 DEKLARASI ARRAY
Ada tiga hal yang harus di ketahui dalam mendeklarasikan array, yaitu : · Type data array
· Nama variable array · Subkrip / index array.
Contoh deklarasi dari array adalah sebagai berikut :
int A[5] ; artinya variabel A adalah kumpulan data sebanyak 5 bilangan bertipe integer.
2.2.2 JENIS ARRAY
ARRAY DIMENSI SATU
Deklarasi : Type_Data Nama_Variabel [index]
(Index Array) i = 1
Ket:
· = Perkalian dari index sebelumnya (untuk array dua dan tiga dimensi). Pemetaan (mapping) array dimensi satu ke storage
Rumus : @A[i] = B + (i – 1) * L
Dimana : @A[i] : Posisi array yang dicari B : Posisi awal index di memori computer i : Subkrip atau index array yang di cari L : Ukuran atau besar memori suatu tipe data
ARRAY DIMENSI DUA
Deklarasi : Type_Data Nama_Variabel [index1] [index2] Menentukan jumlah elemen dalam array dimensi dua :
n
(Index Array) i = 1
Ket:
· = Perkalian dari statemen sebelumnya
Pemetaan (mapping) array dimensi dua ke storage terbagi dua cara pandang (representasi) yang berbeda yaitu :
1) Secara kolom per kolom (coloumn major order / CMO) @M[i][j] = M[0][0] + {(j – 1) * K + (i – 1)} * L 2) Secara baris per baris (row major order / RMO)
@M[i][j] = M[0][0] + {(i – 1) * N + (j – 1)} * L
Keterangan :
@M[i][j] = Posisi array yang di cari, M[0][0 = Posisi alamat awal index array, i = Baris, j = Kolom, L = Ukuran memory type data, K = Banyaknya elemen per kolom, N = Banyaknya elemen per baris.
Adalah suatu array yang setiap elemennya merupakan tipe data array juga yang merupakan array dimensi dua.
Contoh :
Penyajian data mengenai banyaknya mahasiswa dari 20 perguruan tinggi di Jakarta, berdasarkan tingkat (1 sampai 5), dan jenis kelamin (pria atau wanita). Misalkan array tersebut dinamakan MHS. Ambil subskrip pertama, tingkat = 1, 2, ..., 5; subskrip kedua, jenis kelamin (pria = 1, wanita = 2), dan subskrip ketiga, perguruan tinggi adalah K = 1, 2, ..., 20. Jadi MHS(4,2,17) menyatakan jumlah mahasiswa tingkat 4, wanita, dari perguruan tinggi 17.
ARRAY DIMENSI BANYAK
ARRAY atau Larik dapat juga berdimensi lebih dari satu yang disebut dengan larik dimensi banyak, yang dapat berdimensi dua, dimensi tiga dan seterusnya.
Larik dimensi 2 mewakili suatu bentuk table atau matrik, yaitu index yang pertama dapat menunjukkan baris dan index kedua dapat menunjukkan kolom dari table atau metric.
Bentuk Umum :
Nama_larik = array [tipe index1] of array [tipe index2] of tipe larik Atau
Nama_larik = array [tipe index1, tipe index2] of tipe larik
2.3 PENGURUTAN ARRAY
Pengurutan atau sorting adalah proses yang paling sering di lakukan dalam pengolahan data.pengurutan di bedakan menjadi dua, yaitu :
a. Pengurutan internal
Pengurutan dilakukan terhadap sekumpulan data di media memory internal komputer dimana data dapat di akses elemennya secara langsung.
b. Pengurutan eksternal
Pengurutan data di memory sekunder. Biasanya data bervolume besar sehingga tidak mampu dimuat semuanya di memori utama.
A. Keunggulan array adalah sebagai berikut :
1. Array sangat cocok untuk pengaksesan acak. Sembarang elemen di array dapat diacu secara langsung tanpa melalui elemen-elemen lain.
2. Jika berada di suatu lokasi elemen, maka sangat mudah menelusuri ke elemen-elemen tetangga, baik elemen pendahulu atau elemen penerus
3. Jika elemen-elemen array adalah nilai-nilai independen dan seluruhnya harus terjaga,maka penggunaan penyimpanannya sangat efisien.
B. Kelemahan array adalah sebagai berikut :
Array mempunyai fleksibilitas rendah, sehingga tidak cocok untuk berbagai aplikasi karena array mempunyai batasan sebagai berikut :
1. Array harus bertipe homogen. Kita tidak dapat mempunyai array dimana satu elemen adalah karakter, elemen lain bilangan, dan elemen lain adalah tipe-tipe lain.
2. Kebanyakan bahasa pemrograman mengimplementasikan array statik yang sulit diubah ukurannya di waktu eksekusi.
Bila penambahan dan pengurangan terjadi terus-menerus, maka representasi statis : · Tidak efisien dalam penggunaan memori.
· Menyiakan banyak waktu komputasi.
· Pada suatu aplikasi, representasi statis tidak dimungkinkan.
2.5 ARRAY DALAM BEBERAPA BAHASA PEMOGRAMAN
Bahasa Pascal
Larik dalam bahasa Pascal dapat didefinisikan dengan indeks awal dan indeks akhirnya.
Contoh:
program larik;
var arr: array[1..10] of integer; //larik dengan indeks awal 1 dan indeks akhir 10 begin
arr[1] := 5; //memasukkan nilai ke indeks 1 writeln(arr[i]); //mencetak angka 5
Bahasa C
Larik dalam bahasa C selalu dimulai dari indeks 0. Larik dapat didefinisikan secara statik atau dinamik. Jika didefinisikan statik, ukuran larik akan tetap dari awal program hingga akhir program. Jika didefinisikan dinamik, ukuran larik dapat berubah selama program berjalan karena memesan tempat pada memori heap. Proses pemesanan tempat pada memori disebut dengan alokasi. Sedangkan proses pembebasan memori yang sudah dipesan disebut dengan dealokasi.
Contoh larik statik:
#include <stdio.h> int main(){
int arr[10]; //indeks awal 0 dan indeks akhir 9 arr[0] = 5;
arr = (int *) malloc(10 * sizeof(int)); //memesan 10 tempat pada memori arr[0] = 5;
free(arr); //menghancurkan larik. Memori pada heap dibebaskan
arr = (int *) malloc(5 * sizeof(int)); //memesan 5 tempat baru pada memori
free(arr); //di akhir program jangan lupa untuk menghancurkan larik dinamik
}
Bahasa Java
Dalam bahasa Java tipe data larik direpresentasikan sebagai sebuah objek khusus. Karena itu pada bahasa Java larik yang dibuat selalu bersifat dinamik. Namun walaupun bersifat dinamik, larik pada bahasa Java tidak perlu dihancurkan karena proes penghancuran dilakukan secara otomatis melalui suatu prosedur yang disebut dengan Pengumpulan
sampah (Inggris: Garbage Collecting).
Sama seperti bahasa C, indeks larik selalu dimulai dari 0.
public class larik {
public static void main(String args[]) { int[] arr = new arr[10];
Sama seperti di JAVA larik di PHP juga merupakan sebuah object lebih tepatnya lagi map terorder. Ada dua tipe larik di PHP, indexed array (simple array) dan associated array (key=>value array). Di PHP, element larik bisa berupa string, Bilangan, boolean, dan semua tipe data primitive lainnya, termasuk larik juga bisa menjadi element larik lainnya.
Cara medefinisikan larik:
#mendefinisikan array kosong $larik = array();
Contoh indexed array (simple array):
$jam = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
$hari = array('senin', 'selasa', 'selasa', 'rabu', 'kamis', 'jumat', 'sabtu');
Contoh associated array:
$bulan = array('1'=>'January', '2'=>'February', '3'=>'Maret', '4'=>'April');
$komponenKalender = array(
'bulan'=> array(1, 2, 3, 4, 5, 6, 7, 8, 9 ,10 , 11, 12),
'hari' => array('senin', 'selasa', 'selasa', 'rabu', 'kamis', 'jumat', 'sabtu') );
//deklarasi
int matrixa[3][3],matrixb[3][3],matrixc[3][3]; int i,j;
char opr;
//input nilai matriks ke-1 dari baris dan kolom for(i=1;i<=2;i++){
for(j=1;j<=2;j++){
cout<<"Masukkan matriks(1) nilai baris ke-"<<i<<" kolom ke-"<<j<<" : ";cin>>matrixa[i][j];
//input nilai matriks ke-2 dari baris dan kolom for(i=1;i<=2;i++){
for(j=1;j<=2;j++){
}
cout<<endl; }
//Input Operator
cout<<"Pilih Operator +,- :";cin>>opr; //switching operator
for(i=1;i<=2;i++){ for(j=1;j<=2;j++){ switch(opr){
case '+' : matrixc[i][j] = matrixa[i][j] + matrixb[i][j]; break;
case '-' : matrixc[i][j] = matrixa[i][j] - matrixb[i][j]; break;
default:
cout<<"keyword yang anda masukkan salah/tidak terdaftar"; }
//Output Hasil matriks dari Operator cout<<matrixc[i][j]<<"\t";
}
cout<<endl; }
getch(); return 0;
#include <iostream.h>
#include <conio.h>
main (){
int matrikA[2][3],matrikB[3][3],has[2][3];
int i,j;
cout<<"\nMasukkan matrik A\n";
cout<<"=====================================\n";
for(i=0;i<2;i++){
for(j=0;j<3;j++){
cout<<"Input baris "<<i+1<<" kolom "<<j+1<<" : ";
cin>>matrikA[i][j];
}
cout<<endl;
}
for(i=0;i<2;i++){
for(j=0;j<3;j++){
cout<<matrikA[i][j]<<"\t";
}
cout<<endl;}
cout<<"\nMasukkan matrik B\n";
cout<<"=====================================\n";
for(i=0;i<3;i++){
for(j=0;j<3;j++){
cout<<"Input baris "<<i+1<<" kolom "<<j+1<<" : ";
cin>>matrikB[i][j];
}
cout<<endl;
cout<<endl;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
cout<<matrikB[i][j]<<"\t";
}
cout<<endl;
}
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
has[i][j]=matrikA[i][0]*matrikB[0][j]+matrikA[i][1]*matrikB[1][j]+matrikA[i] [2]*matrikB[2][j];
}
}
cout<<endl;
cout<<"\nHasil :";
for(i=0;i<2;i++){
for(j=0;j<3;j++){
cout<<"\t\t"<<has[i][j];
}
}
getch ();}
2.7 PEMETAAN ARRAY KE STORAGE
PEMETAAN ARRAY DIMENSI SATU KE STORAGE
Seperti halnya struktur data yang lain, ada beberapa cara untuk menyajikan array di dalam memori. Skema penyajian dapat dievaluasi berdasarkan 4 karakteristik, yakni :
1. kesederhanaan dari akses elemen 2. mudah untuk ditelusuri
3. efisiensi dari utilitasi storage 4. mudah dikembangkan
Umumnya tidaklah mungkin untuk mengoptimalkan keempat faktor tersebut
sekaligus. Pandang array satu dimensi NOPEG dengan batas bawah subscript 1, dan batas atas subscript = N. Salah satu cara untuk menyimpan array ini adalah sedemikian sehingga urutan fisik dari elemen sama dengan urutan logik dari elemen. Storage untuk elemen NOPEG(I+1) adalah berdampingan dengan storage untuk elemen NOPEG(I), untuk setiap I = 1, 2, 3,..., N-1. Untuk menghitung alamat (address) awal dari elemen NOPEG(I),
diperlukan untuk mengetahui 2 hal yakni :
1. address awal dari ruang storage yang dialokasikan bagi array tersebut. 2. ukuran dari masing-masing elemen array.
Address awal dari array, kita nyatakan dengan B, disebut juga base-location. Misalkan bahwa masing-masing elemen dari array menduduki S byte.
Maka, address awal dari elemen ke-I adalah : B + (I-1) * S
Sekarang kita perluas persamaan di atas untuk mendapat address dari elemen ke-I dari array yang mempunyai batas bawah subscript tidak sama dengan 1. Perhatikan array Z(4:10), maka address awal dari Z(6) adalah :
B + (64) * S
Untuk array Z2 (-2:2) misalnya, address awal dari Z2(l) adalah : B + (I -(-2)) * S
elemen ARRAY(I) mempunyai address awal B + (U-L) * S
PEMETAAN KE STORAGE TERHADAP ARRAY DIMENSI BANYAK
Karena memori komputer adalah linear, maka array dimensi banyak harus dilinearkan apabila akan dipetakan ke dalam storage. Salah satu alternatif untuk pelinearan tersebut adalah menyimpan pertama kali baris pertama dari array, kemudian baris ke-2, baris ke-3 dan seterusnya. Ini disebut row major order.
Misalkan B adalah base-location dari array RATE tersebut, dan masing-masing elemen dari array berukuran S. Address awal dari elemen RATE(I,J) adalah :
B + (I-1) * 6 * S + (J-1) * S
karena ada I-1 baris, masing-masing dengan panjang 6 * S, sebelum baris elemen RATE(I,J) terletak, dan terdapat J- 1 elemen, masing-masing dengan panjang S sebelum elemen RATE(I,J) pada baris ke-I. Jadi, pada contoh di atas RATE(2,4) mempunyai address awal :
B+ (2-1) * 6 * S + (4-1) * S = B + 9 * S
Secara umum elemen ARRAY(I,J) dari array yang didefinisikan sebagai ARRAY(L1:U1, L2 : U2) mempunyai address awal :
B + (I-L1) * (U2 -L2+ 1) * S + (J-L2) * S
Terdapat 2 baris (I-L1, 0 – (-2)) sebelum baris nol, yang masing-masing panjangnya 3* S(U2-L2+1 = 6-4+1) dan terdapat 2 elemen (J-L2 = 6-4) pada baris ke nol sebelum elemen Z (0,6). Jadi address awal dari Z(0,6) adalah :
B + 2 * 3 * S + 2 * S = B + 8 * S
Alternatif lain untuk melinearkan array dimensi dua adalah dengan menyimpan
elemen dalam column major order, yakni pertama kali menyimpan kolom pertama, lalu kolom kedua, kolom ketiga dan seterusnya.
ARRAY(I,J) dari array yang didefinisikan sebagai ARRAY(L1:U1,L2 :U2), menggunakan address awal :
B + (J-L2) * (U1-L1 +1) * S + (I-L1) * S
Misalkan array A berorder 50 x 225. Hendak dihitung jumlah / total elemennya. Kalau dipergunakan column-major storage, dapat kita buat,
dalam COBOL.
Dalam Pascal dapat kita tulis : Total := 0;
for j = 1 to 225 do for i = 1 to 50 do total := total + a[I,j];
Kalau dipergunakan row-major storage, kita dapat tulis dalam COBOL sebagai berikut : COMPUTE TOTAL = 0.
dan dalam Pascal dapat ditulis total:=0;
for i := 1 to 50 do for j := 1 to 225 do total := total + a[i,j];
Struktur data merupakan salah satu bahan dasar pembuatan program. Pemakaian struktur data yang tepat di dalam proses pemrograman, akan menghasilkan algoritma yang jelas dan tepat sehingga menjadikan program secara keseluruhan lebih sederhana.
Array merupakan bagian dari struktur data yaitu termasuk kedalam struktur data sederhana yang dapat di definisikan sebagai pemesanan alokasi memory sementara pada komputer. Apabila kita membuat program dengan data yang sudah kita ketahui batasnyamaka kita menggunakan Array (type data statis), namun apabila datanya belum kita ketahui batasnya maka gunakan pointer (type data dinamis).
3.2 KRITIK DAN SARAN
Penulis menyadari tentang penyusunan makalah, tentu masih banyak kesalahan dan kekurangannya, kerena terbatasnya pengetahuan dan kurangnya rujukan atau referensi yang ada hubungannya dengan judul makalah ini.
Penulis banyak berharap para pembaca yang budiman memberikan kritik dan saran yang membangun kepada penulis demi sempurnanya makalah ini dan dan penulisan makalah di kesempatan-kesempatan berikutnya. Semoga makalah ini berguna bagi penulis pada khususnya juga para pembaca yang budiman pada umumnya.
http://www.w3schools.com/php/php_arrays.asp
http://www.w3schools.com/php/php_arrays_multi.asp
http://www.nulis-ilmu.com/2014/10/jenis-jenis-array-pada-php.html https://id.wikipedia.org/wiki/Larik