1
ARRAY Array adalah deretan variabel yang berjenis sama dan mempunyai nama sama. Pada bahasa C, array mempunyai lokasi yang bersebelahan. Alamat terkecil menunjuk ke elemen pertama dan alamat terbesar menunjuk ke alamat terakhir. Sebuah elemen pada array diakses melalui indeksnya. Bentuk umum deklarasi array : type nama_array[ukuran] tipe : menyatakan tipe dasar array ukuran : menyatakan banyaknya elemen pada array Contoh : int nilai[10]; hal ini menyatakan array nilai mempunyai 10 elemen, yaitu : nilai[1], nilai[1], nilai[2], …, nilai [10] Untuk array 1 dimensi, rumus ukuran total array dalam satuan byte adalah : byte total = ukuran dari tipe dasar * banyaknya elemen Contoh : int nilai[10]; byte total = 2 * 10 = 20 byte (variabel bertipe int memerlukan tempat sebesar 2 byte.) Bahasa C tidak melakukan pengecekan batas array, artinya Anda dapat memproses array meskipun sudah melewati elemen terakhirnya, Jika hal ini terjadi pada saat Anda mengisi array, berarti tanpa sadar Anda telah mengisi variabel yang terletak bersebelahan dengan array tersebut. Contoh : main() { int i; int a[10]; clrscr(); for(i=1; i<=99; i++) { a[i] = i*2; printf("\n a[%2d] = %3d", i,a[i]); } getch(); } Pada contoh di atas, pengulangan dilakukan sebanyak 99 kali (dari 1 sampai 99), padahal array a hanya mempunyai 10 elemen. Sebagai pemogram Anda harus yakin bahwa array yang Anda buat dapat mencukupi kebutuhan. Bahasa C memang tidak mengecek batas array, tidak seperi bahasa yang lain. Alasannya karena bahasa C dirancang untuk menggantikan bahasa assembly dan diharapkan agar prosesnya lebih cepat.
Pemrograman Bahasa C
2
ARRAY MULTI DIMENSI Bahasa C mengijinkan array dengan beberapa dimensi, contoh array 2 dimensi. Array 2 dimensi adalah sebuah daftar yang terdiri atas array-array 1 dimensi. Misalnya kita akan membuat array 2 dimensi dengan ukuran 3x5, bertipe int, maka deklarasinya adalah : int a[3] [5]; Deklarasi array pada bahasa C tidak sama dengan bahasa-bahasa lain. Biasanya setiap dimensi dipisahkan oleh tanda koma, tetapi bahasa C meletakan setiap dimensi di dalam kurung siku. Contoh : main() { int i,j; int b[3] [5]; clrscr(); for(i=1; i<=3; i++) { for(j=1; j<=5; j++) { b[i] [j] = i*j; printf("%3d", b[i] [j]); } printf("\n"); } getch(); } Array 2 dimensi disimpan di dalam matriks yang tersusun menjadi baris dan kolom. Index pertama menunjukkan barisnya dan index kedua menunjukkan kolomnya. Ukuran array di dalam memori yaitu : total byte = baris * kolom * ukuran dari tipe. Untuk array di atas total byte = 3*5*2 = 30 byte ARRAY STRING Array string sama dengan array karakter 2 dimensi. Indeks pertama menunjukkan banyaknya string dan indeks kedua menunjukkan panjang maksimum string. Contoh : char nama[10] [25] nama terdiri dari 10 elemen dengan panjang maksimum 25 karakter. Untuk membaca data string, Anda dapat memakai fungsi gets(). Misalnya, Anda ingin membaca nama ketiga, maka gets(nama[3]); Contoh : main() { char nama[10] [25]; float nilai[10], jumlah, rata; int data,i; clrscr(); printf("Banyaknya data : "); scanf("%d",&data); for (i=1; i<=data; i++) { printf("Nama Mahasiswa : "); scanf("%s",&nama[i]); printf("Nilai : "); scanf("%f",&nilai[i]);
Pemrograman Bahasa C
3 jumlah += nilai[i]; } clrscr(); printf("\nDaftar Nilai Ujian Bahasa C"); printf("\n=================================="); printf("\nNama Mahasiswa Nilai"); printf("\n=================================="); for (i=1; i<=data; i++) { printf("\n %-25s %5.1f", nama[i], nilai[i]); } printf("\n=================================="); rata= jumlah / data; printf("\nRata-rata adalah %5.2f ", rata); getch(); } INISIALISASI ARRAY Bentuk umum : tipe nama_array [ukuran1, ukuran2, …, ukuran n] = {daftar nilai}; Daftar nilai berisi konstanta yang sesuai dengan tipe array. Setiap konstanta dipisahkan oleh tanda koma. Konstanta pertama akan mengisi elemen pertama, konstanta kedua untuk elemen kedua dan seterusnya. Misal : int i[10] = {12,45,67,34,2,5,60,7,19,21}; POINTER Pointer adalah sebuah variabel yang berisi alamat dari variabel lain
A
B
20
17 0
1004
1005
Perhatikan gambar di atas, variabel A berada di alamat 1004 , variabel B di 1005 dan seterusnya. 1004 ini adalah alamatnya, sedangkan 20 adalah isinya. Operator Pointer Ada 2 operator pointer : 1. Operator & Bersifat unary (hanya memerlukan satu operan). Operator ini menghasilkan alamat dan operannya. Contoh : x = &a, jika kita mengacu pada gambar di atas, maka isi variabel x adalah 1004. 2. Operator * Operator * dan operator & bersifat saling komplemen. Operator * juga bersifat unary dan menghasilkan nilai yang berada pada sebuah alamat..
Contoh: #include<stdio.h> main() {
Pemrograman Bahasa C
4 int a, *x, b; clrscr(); a=5; x=&a; b=*x; printf("\n Isi variabel a adalah %4d", a); printf("\n Isi variabel x adalah %4u", x); printf("\n Isi variabel b adalah %4d", b); getch(); } Hasil : Isi variabel a adalah 5 Isi variabel x adalah 65494 Isi variabel b adalah 5 Keterangan : Variabel a berisi 5 Variabel x berisi alamat dari variabel a. Karena variabel x berisi alamat dari variabel yang bertipe int, maka deklarasi variabel x adalah int *x. Tanda * di depan x menyatakan variabel x berisi alamat, sedangkan int menyatakan variabel x berisi alamat dari variabel int. Jika variabel x berisi alamat dari variabel yang bertipe float, maka deklarasinya adalah float *x Variabel b berisi nilai yang ditunjuk oleh x, yaitu 5. Jadi a=b Alamat dapat dicetak dengan format %u sebab alamat adalah bilangan bulat tanpa tanda (unsigned integer) OPERASI PADA POINTER Operasi aritmatika pada pointer hanya ada 2, yaitu penambahan dan pengurangan. Contoh : main() { int a, *p1, *p2; clrscr(); a=5; p1=&a; printf("\n Isi p1 sebelum ditambah adalah %5u", p1); p1++; printf("\n Isi p1 sesudah ditambah adalah %5u", p1); p2=&a; printf("\n Isi p2 sebelum dikurangi adalah %5u", p2); p2 --; printf("\n Isi p2 sesudah dikurangi adalah %5u", p2); p2 = p2 + 5; printf("\n Isi p2 sesudah ditambah dengan 5 adalah %5u", p2); getch(); } Hasil : Isi p1 sebelum ditambah adalah 65494 Isi p1 sesudah ditambah adalah 65496 Isi p2 sebelum dikurangi adalah 65494 Isi p2 sesudah dikurangi adalah 65492 Isi p2 sesudah ditambah dengan 5 adalah 65502 Keterangan :
Pemrograman Bahasa C
5
Variabel a bertipe int, variabel p1 dan p2 adalah pointer yang menunjuk ke variabel int Pernyataan p1 ++ menyebabkan p1 bertambah dengan 2 sebab variabel integer berukuran 2 byte juga dengan p2-- akan berkurang 2 Pernyataan p2=p2+5 menunjuk ke 5 elemen berikutnya sesuai dengan tipe int
POINTER DAN ARRAY Contoh : char nama[20], *p1; p1=nama; Variabel p1 berisi alamat dari elemen pertama dari variabel nama. Didalam bahasa C, nama array tanpa index sama dengan alamat dari awal array. Pernyataan p1=nama sama dengan p1=&nama[1] Pernyataan p2=str[4] artinya p2 akan menunjuk elemen ke empat dari nama, cara lainnya adalah : p1=nama; p2=*(p1+4); Array dapat ditunjuk dengan index-nya dan dengan alamat. Penunjukan dengan alamat akan lebih cepat daripada penunjukan dengan index-nya. Biasanya program C lebih mementingkan kecepatan sehingga dipilih penggunaan alamat. Contoh : /* menggunakan index array */ main() { char str[80]; int i; clrscr(); printf("Masukkan string dalam huruf besar : "); gets(str); printf("String dalam huruf kecil : "); for(i=0; str[i]; i++) printf("%c",tolower(str[i])); getch(); } /* menggunakan pointer */ #include <stdio.h> #include
main() { char str[80], *p; clrscr(); printf("Masukkan string dalam huruf besar : "); gets(str); printf("String dalam huruf kecil : "); p=str; while (*p) printf("%c",tolower(*p++)); getch(); } POINTER DAN STRING Nama array tanpa index adalah pointer ke elemen pertama dari array. Fungsi string yang mempunyai parameter berupa string hanya mengirimkan alamatnya bukan stringnya sendiri. Contoh : #include <stdio.h> main() {
Pemrograman Bahasa C
6 char s[80]; char *p; int i; clrscr(); printf("Masukkan dua buah kalimat : "); gets(s); for (i=0; s[i] && s[i] != '.'; i++); p=&s[i+1]; printf("Kalimat keduanya adalah : \n"); printf(p); getch(); } Keterangan : Pada pengulangan FOR akan berhenti jika pada string tersebut ditemukan karakter titik atau null Pernyataan p=&s[i+1], akan menunjuk ke karakter sesudah titik atau null. Misalnya karakter kelima adalah titik, maka p akan menunjuk ke karakter ke enam. Pernyataan tersebut dapat diganti dengan p=&s[i]+1 ARRAY POINTER Pernyataan int *x[10] mendeklarasikan array x yang berisi pointer integer. Untuk mengisi elemen keempat dengan alamat dari variabel a yang bertipe int, pakailah : x[4] =&a, sedangkan untuk memperoleh isi variabel a adalah : *x[4] Contoh : main() { char *menu[] = { "Nasi Goreng + Telur Mata Sapi\n", "Bistik Ayam\n", "Soto Ayam Madura\n", "Gado-gado\n" }; int no_menu; clrscr(); printf("Masukkan menu pilihan Anda (1-4) : "); scanf("%d",&no_menu); printf("\nMenu yang Anda minta adalah : \n"); printf("%s",menu[no_menu-1]); getch(); }
Pemrograman Bahasa C