Algoritma dan Pemrograman
4/13/2008
ARRAY Algoritma dan Pemrograman Tahar Agastani Teknik Informatika UIN - 2008
Karakteristik • Hubungan antar elemen adalah LINEAR • Umumnya letak elemen Array di memory secara physical & logical adalah sama • Terdiri dari INDEX dan KOMPONEN, hubungan INDEX dan KOMPONEN adalah one-to-one • Semua komponen mempunyai tipe sama (HOMOGENOUS) • Cara access: RANDOM
Kuliah Minggu ke 12
1
Algoritma dan Pemrograman
4/13/2008
Operasi pada Array • Dua operasi dasar terhadap Array adalah: retrieve dan update – Retrieve(S,k,i); Mengambil nilai yang ke-i dari Array S dan diassign ke variable k Dalam bahasa C: k = S[i]; – Update(S,k,i); Mengubah nilai yang ke-i dari Array S dengan nilai dari variable k Dalam bahasa C: S[i] = k;
Array Dimensi Satu pada Bahasa C Definisi dari sebuah array terdiri dari 4 komponen yaitu : 1.Type specifier 2.Identifier (nama array) 3.Operator index ([ ]) 4.Nilai dimensi dalam operator [ ] Sintaks deklarasi array dimensi satu : type nama_array[ukuranArray]; Contoh : int A[10]; Dengan menggunakan contoh deklarasi sebelumnya dapat digambarkan alokasi untuk variabel A
Kuliah Minggu ke 12
2
Algoritma dan Pemrograman
4/13/2008
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9]
• Elemen-elemen suatu Array diindeks (subscript) mulai dari 0. • Dua cara yang ekivalen untuk mengakses unsur ke-i dari suatu array. Misal untuk i=2; A[2] atau *(A+2) • A ekivalen dengan &A[0] atau pointer constant ke elemenpertama dari array tersebut. • Mengisi data ke elemen array dilakukan dengan menggunakan assignment operator.
Contoh :
A[6]= 15; 27
A[3]= 27; 15
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9]
Bila elemen A[4] hendak ditampilkan di layar monitor, gunakan statemen sbb: printf(“%d”,A[4]) atau printf(“%d\n”,*(A+4));
Statement A[2] = A[3] - A[6], menghasilkan : 12
27
15
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9]
Kuliah Minggu ke 12
3
Algoritma dan Pemrograman
4/13/2008
Array dapat diinisialisasi secara eksplisit pada saat didefinisikan dan tidak perlu diberikan nilai dimensinya. Contoh: int B[ ] = {1, 2, -4, 8};
Contoh inisialisasi array setelah didefinisikan : int A[5]; for (i=0; i<5; i++) A[i]=0; int B[5]; Error B[5]={0,0,0,0,0};
Jika array digunakan sebagai parameter dalam suatu fungsi, maka passing parameter harus by location (pointer).
Contoh: #include <stdio.h> void cetak_array(int index, int *Array) { printf(“Array[%d]=%d\n”, index, Array[index]); }
void main() { int Array[] = {1, 6, 2, 8, 12}; cetak_array (2, Array); }
Kuliah Minggu ke 12
4
Algoritma dan Pemrograman
4/13/2008
Perhitungan Memori • Disimpan sebagai urutan elemen dalam memori • Nama array = address elemen pertama array type A[UkuranArray]; jika sizeof(type) = M Array A menempati jumlah memori: M*UkuranArray bytes
• Compiler menyediakan table disebut dope vector, yang memberi informasi: – Address awal A – Jumlah elemen array UkuranArray – Ukuran tipe M = sizeof(type)
• Tabel digunakan compiler untuk implementasi fungsi akses untuk identifikasi address dari elemen di memori: Address A[i] = ArrayAccess(A,i,M) = A + i*M
String dan Array • Dalam bahasa C String adalah Array of character, yang diakhiri dengan null character (null character nilai asciinya=0 atau ‘\0’). • String constant diapit oleh tanda petik dua, sedangkan character constant diapit oleh tanda petik satu. Contoh : ”a”; ’a’;
Kuliah Minggu ke 12
/* string */ /* character */
5
Algoritma dan Pemrograman
4/13/2008
Inisialisasi array of character: char A[ ]={‘A’,’R’,’R’,’A’,’Y’}; /* 5 elemen */ char B[ ]=”ARRAY”; /* 6 elemen */ char C[8]=”ARRAY”; /* 8 elemen */
‘A’
‘R’
‘R’
‘A’
‘Y’
‘A’
‘R’
‘R’
‘A’
‘Y’
‘\0’
A[0]
A[1]
A[2]
A[3]
A[4]
B[0]
B[1]
B[2]
B[3]
B[4]
B[5]
‘A’
‘R’
‘R’
‘A’
‘Y’
‘\0’
C[0]
C[1]
C[2]
C[3]
C[4]
C[5]
C[6]
C[7]
Pointer dan Array Tipe dari Array adalah pointer constant ke elemen pertama dari Array tersebut. Jadi pointer bisa di-assign untuk menunjuk sebuah Array. Contoh : int Arr[10]; int *ptrArr; ptrArr = Arr; Untuk mengakses elemen ke-i dapat dilakukan dengan cara sbb: • ptrArr[i]; • Arr[i]; • *(ptrArr + i); • *(Arr + i); • ptrArr = ptrArr +i; *ptrArr;
Kuliah Minggu ke 12
6
Algoritma dan Pemrograman
4/13/2008
Pointer dan Array Deklarasi: Type array[ukuranArray]; Type* pPtr = array + i; Type *qPtr = array + j;
• Nama array ekuivalen dengan &array[0] • pPtr++ menambah (satu) pPtr untuk menunjuk ke elemen berikutnya dari array. • pPtr += n menambah (n) pPtr untuk menunjuk n elemen berikutnya dimana saat ini ditunjuk. • pPtr-qPtr sama dengan i-j.
Pointer dan Array (cont) Sebuah array dimensi satu: Type array[ukuranArray];
• array[0] ekivalen dengan *array • array[n] ekivalen dengan *(array + n)
Kuliah Minggu ke 12
7
Algoritma dan Pemrograman
4/13/2008
Aritmetika Pointer (dlm Array) array:
0x2008
0x200C
0x2010
0x2014
0x2018
0x2008 0
1
2
pPtr: 0x2004
float
3
4
qPtr:
0x2008
NULL
0x2000
array[5];
float* pPtr = array; float* qPtr = NULL;
array:
0x2008
0x200C
0x2010
0x2014
0x2018
0x2008 0
1
pPtr: 0x2004
float
2
3
4
qPtr:
0x200C
0x2000
NULL
array[5];
float* pPtr = array; float* qPtr = NULL;
pPtr++; /* pPtr sekarang alamat: &array[1] */
Kuliah Minggu ke 12
8
Algoritma dan Pemrograman
array:
4/13/2008
0x2008
0x200C
0x2010
0x2014
0x2018
0x2008 0
1
pPtr: 0x2004
float
2
3
4
qPtr:
0x2018
0x2000
NULL
array[5];
float* pPtr = array; float* qPtr = NULL;
pPtr++; /* pPtr = &array[1] */ pPtr += 3; /* pPtr sekarang alamat: &array[4] */
array:
0x2008
0x200C
0x2010
0x2014
0x2018
0x2008 0
1
pPtr: 0x2004
float
2
3
4
qPtr:
0x2018
0x2000
0x2010
array[5];
float* pPtr = array; float* qPtr = NULL;
pPtr++; /* pPtr = &array[1] */ pPtr += 3; /* pPtr = &array[4] */ qPtr = array + 2; /*qPtr sekarang = alamat &array[2]*/
Kuliah Minggu ke 12
9
Algoritma dan Pemrograman
4/13/2008
0x2008
array:
0x200C
0x2010
0x2014
0x2018
0x2008 0
1
2
pPtr: 0x2004
float
3
4
qPtr:
0x2018
0x2000
0x2010
array[5];
float* pPtr = array; float* qPtr = NULL; pPtr++; /* pPtr = &array[1] */ pPtr += 3; /* pPtr = &array[4] */ qPtr = array + 2; /* qPtr = &array[2] */ printf(“%d\n”, pPtr-qPtr);
Pointer dan String Dalam bahasa C String adalah Array of character, yang diakhiri dengan null character, dan Array punya tipe sbg pointer constant ke elemen pertama, berarti pointer juga bisa di-assign ke string. Contoh: char str[10] = “Hello”; char *ptrStr; ptrStr = str; Untuk mengakses character ‘e’ bisa digunakan cara sbb: • • • • •
Kuliah Minggu ke 12
str[1]; ptrStr[1]; *(ptrStr+1); *(str+1); ptrStr= ptrStr+1;
*ptrStr;
10
Algoritma dan Pemrograman
char* strcpy(char* s, char* t) { int i = 0; while (t[i] != 0) { s[i] = t[i]; i++; } s[i] = '\0'; return s; }
4/13/2008
String, Fungsi & Pointer
Char *strcpy(char* s, char* t) { char* p = s; while (*p != 0) { *p = *t; p++; t++; } return s; }
Tugas / Latihan : 1. Buatlah program dengan fungsi sbb: • fungsi untuk meng-input 10 bilangan ke dalam array • fungsi untuk mencari bilangan terbesar dalam array tersebut • fungsi untuk mencari bilangan terkecil dalam array tersebut • fungsi untuk menampilkan : - 10 bilangan tersebut - Bilangan terbesar dan terkecil 2. Buat program untuk: • mengambil string dari keyboard • membalik susunan karakter dalam string tsb • menampilkan string yg sudah dibalik ke layar monitor Contoh: string yg di-input : KASUR Ditampilkan : RUSAK
Kuliah Minggu ke 12
11