Modul Ajar & Praktikum Pemrograman Lanjut TIF 4117 Program ...

6 downloads 183 Views 750KB Size Report
Modul Ajar & Praktikum. Pemrograman Lanjut. TIF 4117. Program Studi Teknik Informatika. Fakultas ..... 2.3.4 Array Dua Dimensi sebagai Parameter Fungsi .
Modul Ajar & Praktikum Pemrograman Lanjut TIF 4117

Program Studi Teknik Informatika Fakultas Teknik Universitas Brawijaya 2011

DAFTAR ISI 1 BAB 1: POINTER DASAR ................................................................................................................... 4 1.1 PENDAHULUAN.................................................................................................................................................................. 5 1.2 REFERENSI ....................................................................................................................................................................... 5 1.3 DEKLARASI VARIABEL POINTER ......................................................................................................................................... 6 1.4 PENDEFINISIAN POINTER DAN PROSES REFERENSI ............................................................................................................. 7 1.5 AKSES POINTER DAN PROSES DEREFERENSI ...................................................................................................................... 8 1.6 SIMBOL *: DEKLARASI VS DEREFERENSI .......................................................................................................................... 10 1.7 VOID POINTER ............................................................................................................................................................... 10 1.8 NULL POINTER ............................................................................................................................................................... 11 1.9 ARITMETIKA POINTER ..................................................................................................................................................... 12 1.10 POINTER SEBAGAI PARAMETER FORMAL FUNGSI ............................................................................................................. 13 1.11 TUGAS .......................................................................................................................................................................... 14 2 BAB 2: ARRAY ................................................................................................................................. 15 2.1 PENDAHULUAN................................................................................................................................................................ 16 2.2 ARRAY SATU DIMENSI .................................................................................................................................................... 16 2.2.1 Deklarasi Array Satu Dimensi ............................................................................................................................ 16 2.2.2 Inisialisasi Array Satu Dimensi .......................................................................................................................... 16 2.2.3 Akses array satu dimensi ................................................................................................................................... 18 2.2.4 Array dan Pointer ................................................................................................................................................ 19 2.2.5 Array sebagai Parameter Fungsi ...................................................................................................................... 21 2.3 ARRAY MULTIDIMENSI .................................................................................................................................................... 21 2.3.1 Deklarasi Array Dua Dimensi ............................................................................................................................ 22 2.3.2 Inisialisasi Array Dua Dimensi ........................................................................................................................... 22 2.3.3 Akses Array Dua Dimensi .................................................................................................................................. 24 2.3.4 Array Dua Dimensi sebagai Parameter Fungsi ............................................................................................... 24 2.4 TUGAS ........................................................................................................................................................................... 25 3 BAB 3: POINTER LANJUTAN - ALOKASI MEMORI DINAMIK........................................................... 26 3.1 PENDAHULUAN................................................................................................................................................................ 27 3.2 PENGALOKASIAN MEMORI SECARA DINAMIK .................................................................................................................... 27 3.2.1 Fungsi malloc ................................................................................................................................................... 27 3.2.2 Operator new ...................................................................................................................................................... 29 3.3 DEALOKASI ATAU PEMBEBASAN MEMORI .......................................................................................................................... 29 3.3.1 Fungsi free ........................................................................................................................................................ 30 3.3.2 Operator delete ............................................................................................................................................... 30 3.4 REALOKASI MEMORI ....................................................................................................................................................... 31 3.5 TUGAS ........................................................................................................................................................................... 32 4 BAB 4: STRING................................................................................................................................ 33 4.1 PENDAHULUAN................................................................................................................................................................ 34 4.2 DEKLARASI STRING......................................................................................................................................................... 34 4.2.1 Deklarasi via Array of Characters ..................................................................................................................... 34 4.2.2 Deklarasi via Pointer........................................................................................................................................... 34 4.3 INISIALISASI DAN PENDEFINISIAN STRING ....................................................................................................................... 36 4.3.1 Inisialisasi via Array ............................................................................................................................................ 36 4.3.2 Inisialisasi via Pointer ......................................................................................................................................... 38 4.4 PENANGANAN STRING ..................................................................................................................................................... 41 4.4.1 Fungsi strlen ................................................................................................................................................... 41 4.4.2 Fungsi strcmp ................................................................................................................................................... 41 4.4.3 Fungsi strcpy ................................................................................................................................................... 41 4.4.4 Fungsi strncpy ................................................................................................................................................. 42 4.4.5 Fungsi strcat ................................................................................................................................................... 42

4.4.6 Fungsi 4.4.7 Fungsi 4.4.8 Fungsi 4.4.9 Fungsi

strncat ................................................................................................................................................. 43 atof ........................................................................................................................................................ 43 atoi ........................................................................................................................................................ 44 atol ........................................................................................................................................................ 44 4.5 TUGAS ........................................................................................................................................................................... 45 5 BAB 5: STRUCT................................................................................................................................ 46 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9

PENDAHULUAN................................................................................................................................................................ 47 STRUKTUR ATAU STRUCT................................................................................................................................................. 47 DEKLARASI TIPE STRUCT DAN VARIABEL BERTIPE STRUCT ................................................................................................ 47 KEYWORD TYPEDEF ........................................................................................................................................................ 48 INISIALISASI DAN AKSES ANGGOTA STRUCT ..................................................................................................................... 49 RUANG LINGKUP STRUCT ................................................................................................................................................ 50 POINTER TO STRUCT ....................................................................................................................................................... 50 UNION ........................................................................................................................................................................... 51 TUGAS ........................................................................................................................................................................... 53

6 BAB 6: OPERASI FILE...................................................................................................................... 54 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8

PENDAHULUAN................................................................................................................................................................ 55 FILE ............................................................................................................................................................................... 55 PORTAL I/O STANDAR: STDIN DAN STDOUT..................................................................................................................... 56 PENANGANAN FILE: TINGKAT TINGGI VS TINGKAT RENDAH ............................................................................................. 56 POSISI PROGRAM PADA FILE ........................................................................................................................................... 57 MEMBUKA FILE ............................................................................................................................................................... 57 MENUTUP FILE ............................................................................................................................................................... 58 MENULIS FILE ................................................................................................................................................................ 59 6.8.1 Fungsi fprintf ................................................................................................................................................. 59 6.8.2 Fungsi fputc...................................................................................................................................................... 59 6.8.3 Fungsi fputs...................................................................................................................................................... 60 6.9 MEMBACA FILE ............................................................................................................................................................... 60 6.9.1 Fungsi fscanf ................................................................................................................................................... 60 6.9.2 Fungsi fgetc...................................................................................................................................................... 60 6.9.3 Fungsi fgets...................................................................................................................................................... 61 6.9.4 Fungsi feof ........................................................................................................................................................ 61 6.10 CONTOH APLIKASI ........................................................................................................................................................ 61 6.11TUGAS ........................................................................................................................................................................... 63 7 DAFTAR PUSTAKA ........................................................................................................................... 64

3

1 BAB 1: Pointer Dasar Pokok bahasan:  Referensi  Deklarasi dan definisi pointer  Referensi dan dereferensi  Void pointer  Null pointer  Aritmetika pointer  Pointer sebagai parameter fungsi

4

1.1 Pendahuluan Sebuah pointer (kadang-kadang diterjemahkan sebagai “penunjuk”) adalah sebuah variabel yang bertipe khusus, yaitu yang menyimpan alamat dari sebuah variabel lainnya. Pointer memiliki peran yang sangat penting dalam C/C++. Secara khusus, pointer berperan vital dalam implementasi struktur data seperti array, string, dan linked list. Selain itu, pointer juga dapat digunakan untuk pengiriman parameter fungsi dan untuk menunjuk pada alamat fungsi. Untuk tujuan yang terakhir ini pembahasannya di luar fokus bab ini. Dalam memahami pointer, ada beberapa konsep dasar atau terkait yang perlu dipelajari. Diantaranya adalah referensi, pendeklarasian pointer, inisialisasi dan pendefinisian pointer, akses pointer, dereferensi, null ponter, void pointer, dan penggunaan pointer untuk pengiriman parameter fungsi.

1.2 Referensi Seperti yang telah diketahui, setiap variabel yang dideklarasikan akan dialokasikan tempat tertentu pada memori. Keberadaan variabel ini memudahkan kita untuk menggunakan data yang tersimpan pada memori, tanpa memedulikan lokasi fisik data tersebut. Untuk mengakses atau mengubah data tersebut cukup merujuknya melalui nama variabelnya. Tetapi sebenarnya kita masih bisa mengakses lokasi data tersebut melalui alamat variabelnya jika diperlukan. Alamat variabel ini sering juga disebut dengan “referensi” dari variabel tersebut. Dalam bahasa C/C++, proses me“referensi” atau mengakses alamat sebuah variabel dapat menggunakan operator alamat atau referensi yang direpresentasikan dengan simbol ampersand (&). Contoh di bawah ini menunjukkan cara mengakses alamat dari variabel menggunakan operator &. 1 #include 2 #include 3 4 int main(){ 5 int a = 17; 6 double b = 13.5; 7 8 printf("Isi variabel: \n"); 9 printf("\t a = %d",a); 10 printf("\t b = %.2lf",b); 11 12 printf("\n\nAlamat variabel: \n"); 13 printf("\t a = %d ",&a); 14 printf("\t b = %d ",&b); 15 system(“pause”);

5

16 17 }

return 0; Gambar 1.1

Sebagai latihan, ketiklah contoh di atas untuk menjadi sebuah program. Setelah menjalankan program tersebut dan memperhatikan hasilnya, cobalah untuk mengubah format keluaran &a dan &b pada baris ke-13 dan ke-14 dari %d menjadi %p lalu amati hasilnya. Ambillah kesimpulan dari perubahan tersebut. Saat variabel a dan b dideklarasikan dan diinisialisasikan dengan nilai masing-masing 17 dan 13.5, di memori dialokasikan tempat yang sesuai, seperti yang diilustrasikan pada gambar 1.2.

Gambar 1.2 Nilai alamat dari a dan b yang tertulis di sini hanya sebagai contoh; nilai yang sebenarnya dapat berbeda dalam setiap menjalankan program. Alamat a dan b dapat diakses dengan ekspresi masing-masing &a dan &b.

1.3 Deklarasi Variabel Pointer Sebelum diisikan dengan alamat dari variabel lainnya, sebuah pointer perlu dideklarasikan terlebih dahulu. Sintaksis pendeklarasiannya adalah sebagai berikut. tipedatavariabelyangditunjuk *namavariabelpointer; atau tipedatavariabelyangditunjuk * namavariabelpointer; Perhatikan penggunaan simbol bintang/asterisk (*) di atas. Simbol ini membedakan deklarasi sebuah variabel non-pointer dengan deklarasi variabel pointer. Tipe data variabel yang ditunjuk pointer dapat berupa sembarang tipe. Aturan penamaan variabel pointer harus mengikuti aturan yang sama dengan penamaan variabel biasa. Contoh deklarasi pointers: int* pi; // pointer to integer float* pf; // pointer to float

6

Pointer yang telah dideklarasikan hanya dapat diisikan dengan alamat dari variabel yang bertipe data sesuai dengan deklarasi pointernya. Sebagai contoh, sebuah pointer to integer hanya dapat menyimpan alamat dari variabel yang bertipe data integer.

1.4 Pendefinisian Pointer dan Proses Referensi Saat dideklarasikan, sebuah pointer menunjuk pada alamat yang ‘acak’ atau tidak terdefinisi. Dalam keadaan demikian usaha untuk mengakses pointer ini dapat berakibat fatal karena pointer ini mungkin berisi alamat dari memori yang sedang dikelola oleh sistem atau aplikasi lain. Oleh karena itu, untuk menggunakan sebuah pointer kita harus memastikan bahwa dia berisi alamat yang benar atau yang kita inginkan. Inisialisasi atau pendefinisian sebuah pointer dapat dilakukan dengan salah satu dari dua cara. Pertama, dengan proses referensi ke variabel yang sudah ada. Kedua, dengan alokasi memori dinamik. Sub bab ini hanya akan membahas cara yang pertama. Cara yang kedua akan didiskusikan di bab lainnya. Sintaksis proses referensi sebuah pointer ke variabel lain yang sudah ada adalah: namavariabelpointer = &namavariabellainnya; Perhatikan pemakaian operator referensi (&) pada pernyataan di atas. Tentunya, kedua variabel di atas sudah harus dideklarasikan sebelumnya. Contoh di bawah ini menunjukkan inisialisasi pointer dengan cara referensi ke variabel lainnya. Jalankanlah program ini dan perhatikan hasilnya. 1 #include 2 #include 3 4 int main(){ 5 int x; // Nilai x acak 6 int *px; // Nilai px acak 7 8 printf("\nKondisi x dan px sebelum inisialisasi "); 9 printf("\nNilai x: %d", x); 10 printf("\nAlamat x: %d", &x); 11 printf("\nNilai px = %d", px); 12 printf("\nAlamat px = %d\n", &px); 13 px = &x; 14 15 x = 10; 16 17 printf("\nKondisi x dan px setelah inisialisasi "); 18 printf("\nNilai x: %d", x); 19 printf("\nAlamat x: %d", &x); 7

20 21 22 23 24 25 }

printf("\nNilai px = %d", px); printf("\nAlamat px = %d", &px); system("pause"); return 0; Gambar 1.3

Beberapa proses yang terjadi saat program ini dijalankan dapat diilustrasikan pada gambar 1.4 berikut. deklarasi int x; int *px; inisialisasi pointer p dengan referensi px=&x; inisialisasi x x=10;

x px

x tidak terdefinisi px tidak terdefinisi

px

x

px

x

10

Gambar 1.4

1.5 Akses Pointer dan Proses Dereferensi Pengaksesan pointer dengan cara memanggil nama variabel pointer sama dengan mengakses alamat variabel yang ditunjuknya. Untuk mengakses nilai yang dikandung oleh variabel yang ditunjuknya, kita dapat menggunakan simbol bintang (*) yang diletakkan sebelum nama variabel pointer. Proses ini disebut dereferensi. Perhatikan contoh dereferensi pada kode di bawah ini. 1 #include 2 #include 3 4 int main(){ 5 int x; // Nilai x acak 6 int *px = &x; // Deklarasi dan inisialisasi px 7 x = 11; 8 9 printf("\nKondisi x dan px setelah inisialisasi"); 10 printf("\nNilai x: %d", x); 11 printf("\nNilai px: %d", px); 8

12 13 14 15 16 17 18 19 20 21 22 23 24 25 }

// dereferensi untuk mengakses nilai x via pointer px printf("\nNilai *px = %d", *px); // dereferensi untuk mengubah nilai x via pointer px *px = 5; printf("\nKondisi x dan px setelah x diubah"); printf("\nNilai x: %d", x); printf("\nNilai px: %d", px); printf("\nNilai *px = %d", *px); system("pause"); return 0; Gambar 1.5

Beberapa proses yang terjadi saat kode di atas ini dijalankan dapat diilustrasikan pada gambar berikut: deklarasi x int x;

x

x tidak terdefinisi

deklarasi & inisialisasi p int px=&x;

px

x

inisialisasi x x=11;

px

x

px

x

dereferensi px *px=5;

11

5

Gambar 1.6 Amati penggunaan dereferensi pada baris ke-14 dan ke-16 pada gambar 1.4, lalu ambil kesimpulan tentang perbedaan kegunaannya. Amati juga perbedaan antara px dan *px. Cobalah untuk menambahkan variabel baru y bertipe integer dan inisialisasikan dengan sebuah nilai, misalnya 100. Referensikan alamat y ini ke pointer px setelah baris ke-19, kemudian cetak nilai px dan *px. Amati dan simpulkan hasilnya. Setelah itu coba ubah nilai y melalui px, misalnya menjadi 1000, dan cetak nilai y dan *px untuk mengamati perubahan y.

9

1.6 Simbol *: Deklarasi vs Dereferensi Perlu diingat benar bahwa simbol bintang (*) dalam pembahasan pointer memiliki dua semantik (makna) dan penggunaan yang berbeda. Makna pertama adalah untuk menunjukkan bahwa sebuah variabel merupakan sebuah pointer. Makna ini didapat dari pendeklarasian pointer tersebut. Contoh * untuk deklarasi dapat dilihat di baris ke-6 gambar 1.2 dan baris ke-6 gambar 1.3, seperti di bawah ini. int *px; // Deklarasi px: px adalah sebuah “pointer to integer” int *px = &x; // Deklarasi dan inisialisasi px Makna kedua adalah untuk mengambil isi dari alamat yang disimpan oleh pointer tersebut. Proses ini disebut dengan “dereferensi” seperti yang telah dijelaskan sebelumnya. Contoh * untuk deklarasi dapat dilihat di baris ke-14 dan baris ke-16 gambar 1.3, seperti di bawah ini. // dereferensi untuk mengakses nilai x via pointer px printf("\nNilai *px = %d", *px); // dereferensi untuk mengubah nilai x via pointer px *px = 5; Dua makna yang berbeda dari simbol * ini sangat penting untuk diperhatikan dan diingat karena sering disalahpahami.

1.7 Void Pointer Void pointer adalah pointer dengan tipe khusus. Dalam C/C++ void melambangkan ketiadaan tipe data, sehingga void pointer adalah pointer yang menunjuk pada nilai yang tidak bertipe data.

Dengan demikian void pointer dapat menunjuk pada data dari sembarang tipe, seperti integer, float, double, char atau string. Tetapi void pointer ini memiliki keterbatasan. Karena pointer ini bersifat ‘void’, data yang ditunjuknya tidak dapat secara langsung didereferensikan. Agar dapat didereferensikan, pointer ini (atau alamat yang tersimpan di dalamnya) harus dikonversi paksa (dicast ) dahulu menjadi pointer yang dapat menunjuk pada tipe data kongkrit. Untuk memahami konsep void pointer dan proses casting di atas, kerjakan dan analisis kode di bawah ini. 1 #include 2 #include 3 4 int main(){ 5 void* pv; // Pointer terhadap void 6 int* pi; // Pointer terhadap integer 7 double* pd; // Pointer terhadap double 8 int ivalue = 100; 9 double dvalue = 50.55; 10

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 }

// pv dapat menunjuk pada variabel bertipe data integer pv = &ivalue; printf("pv=%d, sizeof(pv)=%d\n",pv, sizeof(pv)); // pernyataan ini salah krn pv tidak dapat didereferensikan printf("*pv=%d, sizeof(*pv)=%d\n",*pv, sizeof(*pv)); // pv dapat menunjuk pada variabel bertipe data double pv = &dvalue; printf("pv=%d, sizeof(pv)=%d\n",pv, sizeof(pv)); // pernyataan ini salah krn pv tidak dapat didereferensikan printf("*pv=%.2lf, sizeof(*pv)=%d\n",*pv, sizeof(*pv)); // pd menerima hasil casting dari pv pd = (double*)pv; printf("pd=%d, sizeof(pd)=%d\n",pd, sizeof(pd)); // pernyataan ini benar, pd dapat didereferensikan printf("*pd=%.2lf, sizeof(*pd)=%d\n",*pd, sizeof(*pd)); system("pause"); return 0; Gambar 1.7

1.8 Null Pointer Sebuah null pointer adalah sebuah pointer yang memiliki nilai khusus yang menununjukkan bahwa pointer tersebut tidak menyimpan alamat memori manapun. Nilai ini dihasilkan dari penugasan nilai NULL atau 0 ke sebuah pointer. Contoh: int *p; p = NULL; // atau p = 0; Null pointer berbeda dengan void pointer. Null pointer adalah pointer yang tidak menunjuk pada alamat memori manapun, sedangkan void pointer adalah pointer yang dapat menunjuk pada sebuah alamat memori tanpa tipe data tertentu. Istilah null diasosiasikan dengan nilai yang disimpan pada pointer, sedangkan void mengacu pada tipe data yang ditunjuk oleh pointer.

11

1.9 Aritmetika Pointer Operasi aritmetika dapat juga diterapkan pada pointer, tetapi dengan lebih banyak keterbatasan daripada operasi aritmetika pada tipe data integer, float, atau, double. Hanya penjumlahan dan pengurangan yang berlaku pada operasi aritmetika pointer. Perilaku kedua operasi ini bergantung pada ukuran tipe data yang ditunjuk oleh pointer yang bersangkutan. Dalam bahasa C/C++ tipe-tipe data yang berbeda dapat memiliki ukuran yang berbeda pula tergantung pada kompilator (compiler) dan jenis platform target programnya. Sebagai contoh, dengan kompilator dan platform tertentu, char akan berukuran 1 byte, short 2 bytes, dan long 4 bytes. Misalkan kita mendefiniskan 3 buah pointer berikut: char *mychar; short *myshort; long *mylong;

dan kita ketahui bahwa pointer-pointer tersebut masing-masing menunjuk pada alamat 1000, 2000 and 3000 pada memori. Lalu kita tuliskan: mychar++; //ekivalen mychar +=1; myshort++; //ekivalen myshort +=1; mylong++; //ekivalen mylong +=1;

Setelah itu mychar akan bernilai 2002 (bukan 1001), myshort bernilai 2002 (bukan 2001), dan mylong 3004 (bukan 3001), walaupun masing-masing hanya ditambah dengan 1. Alasannya adalah penambahan satu tersebut menyebabkan masing-masing pointer menunjuk pada elemen yang bertipe data sama pada lokasi memori berikutnya. Jadi, penambahan satu di sini bermakna perpindahan 1 unit tipe data pada elemen berikutnya, seperti yang diilustrasikan pada gambar di bawah ini.

Gambar 1.8 12

1.10

Pointer sebagai Parameter Formal Fungsi

Pointer dapat dimanfaatkan sebagai parameter formal dalam sebuah fungsi. Pointer ini akan menyimpan alamat dari variabel yang dilewatkan sebagai parameter aktual pada pemanggilan fungsi tersebut. Dengan demikian nilai variabel yang bersangkutan dapat diubah di dalam fungsi melalui proses dereferensi. Mekanisme pengiriman alamat variabel sebagai parameter pada fungsi disebut dengan passing by reference. Sebagai contoh, kerjakan dan amati kode di bawah ini. Kode ini menyediakan 2 buah fungsi, masing-masing untuk konversi nilai dari standar satuan metrik (cm) ke standar satuan Inggris (inch) dan sebaliknya. Penggunaan pointer sebagai parameter fungsi dapat diamati pada definisi fungsi inchToCm() di baris ke-7 sampai ke-9. Contoh passing by reference dapat dilihat pada baris ke-21. Bandingkanlah dengan mekanisme passing by value pada baris ke-17, menggunakan fungsi yang didefinisikan pada baris ke-4 sampai ke-6. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

#include #include double cmToInch(double a){ return a*0.393700787; } void inchToCm(double* a){ *a *= 2.54; } int main(){ // Panjang dalam cm double panjang=15; printf("panjang: %.2lf cm\n",panjang); // Konversi dari cm ke inch, passing by value panjang = cmToInch(panjang); printf("panjang: %.2lf inch\n",panjang); // Konversi kembali dari inch ke cm, passing by reference inchToCm(&panjang); printf("panjang: %.2lf cm\n",panjang);

}

system("PAUSE"); return 0; Gambar 1.9

13

1.11

Tugas



Tugas yang relevan dengan topik bab ini diberikan oleh dosen/asisten praktikum.



Tugas bab ini dapat dikombinasikan dengan tugas bab lain atas arahan dan ijin dosen/asisten praktikum.



Tugas bab ini dikumpulkan kepada dosen/asisten sesuai format yang diminta.

14

2 BAB 2: Array Pokok bahasan:  Array satu dimensi o Deklarasi o Inisialisasi o Akses o Array dan pointer o Array sebagai parameter fungsi  Array dua dimensi o Deklarasi o Inisialisasi o Akses o Array sebagai parameter fungsi

15

2.1 Pendahuluan Array (kadang-kadang diterjemahkan sebagai “larik”) adalah serangkaian elemen-elemen yang berasal dari tipe data yang sama, disusun secara berurutan di dalam memori, dan masing-masing dapat diakses dengan menambahkan indeks pada nama array tersebut. Tipe data dari elemen array dapat berupa tipe data sederhana maupun tipe data kompleks. Setiap elemen array mempunyai nomor indeks yang unik dan disimpan secara berurutan di dalam memori. Array dapat berdimensi satu, dua, tiga, ataupun lebih, sesuai dengan kebutuhan pemrogram.

2.2 Array Satu Dimensi 2.2.1 Deklarasi Array Satu Dimensi Penamaan array harus mengikuti aturan-aturan penamaan variabel. Seperti halnya variabel sederhana, array pun harus dideklarasikan dahulu sebelum digunakan. Deklarasi array berisi tipe data array, nama array, dan jumlah elemen yang dimilikinya. Sintaksis deklarasi array adalah sebagai berikut: tipedataelemen namaarray[jumlahelemen]; Contoh deklarasi array bernama A dengan 5 elemen integer: int A[5]; Dalam bahasa C/C++, elemen pertama suatu array diberi indeks nol, elemen kedua diberi indeks satu, dan seterusnya. Array billy dapat digambarkan sebagai berikut: A A[0] int

A[1] int

A[2] int

A[3] int

A[4] int

Gambar 2.1 Dalam deklarasi yang tidak langsung menyertakan inisialisasi array, jumlah elemen dalam array haruslah didefinisikan. Sebagai contoh, pernyataan berikut tidaklah valid. int A[]; // invalid, compile error

2.2.2 Inisialisasi Array Satu Dimensi Setelah dideklarasikan, array dapat didefinisikan atau diisi dengan nilai-nilai. Inisialisasi array dapat dilakukan dengan beberapa cara berikut. 16

1. Inisialisasi dalam satu pernyaatan dengan deklarasi Contoh: int Ai[4] = {2,4,5,7}; float Af[] = {2.2,4,6.5,8}; char Ac[] = {‘i’,’a’}; int B[4] = {1,3}; Sebagai catatan, jika jumlah elemen array dalam kurung tegak [] di sebelah kiri tanda penugasan (=) dideklarasikan, maka jumlah elemen ini harus sama dengan atau lebih besar daripada jumlah dari elemen yang dinisialisaskikan dalam kurung kurawal {} di sebelah kanan tanda penugasan. Hal ini terlihat pada contoh inisialisasi array Ai dan B di atas. Sementara itu, jika jumlah elemen array dalam kurung tegak [] di sebelah kiri tanda penugasan (=) tidak dideklarasikan, maka jumlah elemen array-nya adalah jumlah dari elemen yang dinisialisasikan dalam kurung kurawal {} di sebelah kanan tanda penugasan. Contohnya adalah pada inisialisasi array Af dan Ac di atas. Jika jumlah elemen array dalam kurung tegak [] di sebelah kiri tanda penugasan (=) lebih besar daripada jumlah dari elemen yang dinisialisasikan dalam kurung kurawal {} di sebelah kanan tanda penugasan, maka jumlah elemen yang valid adalah yang di sebelah kiri tanda penugasan. Elemen yang tidak tertulis akan by default diber nilai nol (0). Contohnya adalah pada inisialisasi array B di atas. Elemen-elemen dari B adalah 1, 3, 0, dan 0. Ai

2 Ai[0] Int

4 Ai[1] int

5 Ai[2] int

7 Ai[3] int

Af

2.2 Af[0] Float

4 Af[1] float

6.5 Af[2] float

8 Af[3] float

Ac

'i' Ac[0] Char

'a' Ac[1] char

Ai

1 Ai[0] int

3 Ai[1] int

0 Ai[2] int

0 Ai[3] int

Gambar 2.2 2. Inisialisasi elemen-elemen array secara individu melalui indeksnya masing-masing 17

Sintaksis pengisian nilai ke dalam indeks tertentu dari sebuah array: namaarray[indeksarray] = nilai; Contoh: double Ad[3]; // deklarasi array Ad[0] = 3.3; // inisialisasi elemen dari Ad pada indeks ke-0 Ad[1] = 1.5; // inisialisasi elemen dari Ad pada indeks ke-1 Ad[2] = 2.43; // inisialisasi elemen dari Ad pada indeks ke-2 Ad

3.3 Ad[0] double

1.5 Ad[1] double

2.43 Ad[2] double

Gambar 2.3 Jika nilai-nilai elemen array memiliki pola tertentu, inisialisasinya dapat memanfaatkan mekanisme seleksi dan/atau perulangan. Contohnya, array X yang berisi bilangan bulat antara 1 dan 5, inklusif. Deklarasi dan inisialisasi tersebut adalah sebagai berikut: int X[5]; for(int i=0; i