T0616 ALGORITMA DAN PEMROGRAMAN (16-17) SUBANDIJO UNIVERSITAS BINA NUSANTARA FAKULTAS ILMU KOMPUTER JAKARTA, 2005 7/11/2017 T0616 - Algoritma dan Pemrograman 1 ARRAY • DEFINISI. • SIFAT-SIFAT ARRAY. ARRAY DIMENSI SATU. DEKLARASI ZERO BASE INDEXING. AKSES ELEMEN ARRAY: INDEKS VS POPINTER. PENCEKAN UKURAN ARRAY. INISIALISASI ARRAY. ARRAY SEBAGAI PARAMETER. • ARRAY DIMENSI DUA DAN TIGA. 7/11/2017 T0616 - Algoritma dan Pemrograman 2 DEFINISI • ARRAY ADALAH SEKUEN OBYEK YANG SAMA TIPENYA. • MASING-MASING OBYEK DISEBUT ELEMEN ARRAY DAN DIBERI NOMOR BERTURUT-TURUT 0, 1, 2, 3, …, N-1. YANG DISEBUT INDEKS ATAU SUBSKRIP. • SETIAP NOMOR MENENTUKAN LOKASI ATAU POSISI ELEMEN DALAM ARRAY. 7/11/2017 T0616 - Algoritma dan Pemrograman 3 SIFAT-SIFAT ARRAY • HOMOGEN: SELURUH ELEMEN ARRAY BERTIPE SAMA. • RANDOM AKSES: SEMBARANG ELEMEN ARRAY DAPAT DIAKSES TANPA MENGAKSES ELEMENELEMEN SEBELUMNYA. • LINEAR: HUBUNGAN ANTARELEMEN ADALAH 11. 7/11/2017 T0616 - Algoritma dan Pemrograman 4 ARRAY DIMENSI SATU • ARRAY TERDIRI DARI 4 KOMPONEN YAITU: • • • • TYPE SPECIFIER IDENTIFIER (ARRAY NAME) OPERATOR INDEKS [ ] UKURAN ARRAY DALAM OPERATOR INDEKS [ ] • SINTAKS • TIPE_SPECIFIER ARRAY_NAME[ ARRAY_SIZE]; • CONTOH • • • • 7/11/2017 INT A[10]; #DEFNE SIZE 80 … CHAR TEKS[SIZE]; T0616 - Algoritma dan Pemrograman 5 ARRAY DIMENSI SATU • SKEMA ARRAY A[10] • A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] • ELEMEN-ELEMEN ARRAY DI-INDEKS MUALAI DARI 0. SISTEM INI DISEBUT ZERO BASE INDEXING. 7/11/2017 T0616 - Algoritma dan Pemrograman 6 ARRAY DIMENSI SATU • AKSES ELEMEN ARRAY:ELEMEN KE-I ARRAY A[ ] DIAKSES SBB: • INDEKS • POINTER : A[ I ] : *( A+I ) • NAMA ARRAY A BERISI ALAMAT ARRAY. IA SETARA DENGAN &A[0] ATAU CONSTANT POINTER KE ELEMEN PERTAMA ARRAY. • ASSIGNMENT OPERATOR DIGUNAKAN UNTUK MENGISI ELEMEN ARRAY. MIS. A[1]=9, A[9]=1 • 7/11/2017 1 9 T0616 - Algoritma dan Pemrograman 7 ARRAY DIMENSI SATU • UNTUK MENGISI SELURUH ELEMEN ARRAY A DAPAT DIGUNAKAN PERNYATAAN SBB: for(i=0; i<10; i++) scanf(“\n%d”, &A[i]); • UNTUK MENCETAK ELEMEN ARRAY A[1] GUNAKAN PERNYATAAN SBB: • printf(“\n%d”, A[1]); ATAU • printf(”\n%d”, *(A+1)); 7/11/2017 T0616 - Algoritma dan Pemrograman 8 PENCEKAN UKURAN ARRAY • C TIDAK MEN-CEK APAKAH INDEKS TELAH MELAMPAUI UKURAN ARRAY ATAU BELUM. • ELEMEN DENGAN INDEKS LEBIH BESAR DARIPADA UKURAN ARRAY BIASANYA AKAN DITIMPAKAN DI ATAS ELEMEN SEBELUMNYA. 7/11/2017 T0616 - Algoritma dan Pemrograman 9 INISIALISASI ARRAY • SINTAKS • TIPE_SPEC NAMA_ARRAY[UKURAN_ARRAY] = {NIL_0, NIL_1, …, NIL_N}; • CONTOH • INT DIGIT[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; • STATIC FLOAT X[4] = {0.25, 0, -0.50, -0.75}; • ARRAY DAPAT DIINISIALISASI TANPA MEMBERIKAN UKURAN ARRAY • STATIC FLOAT X[4] = {0.25, 0, -0.50, -0.75}; • CHAR WARNA[ ] = {‘R’, ‘G’, ‘B’}; 7/11/2017 T0616 - Algoritma dan Pemrograman 10 INISIALISASI ARRAY • ELEMEN ARRAY YANG TIDAK DIBERI NILAI AWAL OTOMATIS AKAN DI-SET = 0 • INT X[5] = {1, 2, 3}; • ARRAY DAPAT DIINISIALISASI SETELAH DI DEKLRASIKAN • INT X[5]; • FOR (I=0; I<5; I++) X[I] = 0; • JANGAN LUPA MENGINISIALISASI ARRAY. JIKA TIDAK, IA AKAN BERISI GARBAGE VALUE. • FLOAT X[5]; • FOR(I=0; I<5; I++) PRINTF(“\N%F”, X[I]); 7/11/2017 T0616 - Algoritma dan Pemrograman 11 ARRAY SEBAGAI PARAMETER • TRANSFER BY LOCATION KARENA NAMA ARRAY ISINYA ADALAH ALAMAT ARRAY. void cetakArray(int index, int *array) { printf(“Array[%d] = %d\n”, index, array[index]); } main() { int array[ ] = {1, 2, 3, 4, 5}; cetakArray(2, array); } 7/11/2017 T0616 - Algoritma dan Pemrograman 12 ARRAYDIMENSI DUA X[M][N] • X[M][N]: ARRAY DENGAN M BARIS DAN N KOLOM • CONTOH • FLOAT TABEL[10][10]; • STATIC CHAR PAGE[24][80]; • INISIALISASI: MENGGUNAKAN ATURAN RMO (ROW MAJOR ORDER). • CONTOH: • INT X[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; • INT X[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; 7/11/2017 T0616 - Algoritma dan Pemrograman 13 ARRAYDIMENSI DUA X[M][N] INT X[3][4] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; INT X[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 0}; INT X[3][4] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}}; //ERROR! 7/11/2017 T0616 - Algoritma dan Pemrograman 14 ARRAYDIMENSI TIGA X[M][N][O] • ARRAY DENGAN M BARIS, N KOLOM DAN O ELEMEN DISETIAP SEL. INT X[3][2][4] = {{{1,2,3,4}, {5,6,7,8}}, {{11,12,13,14}, {15,16,17,18}}, {{21,22,23,24}, {25,26,27,28}}}; main() { X[4][3][5] = {{{1, 2, 3}, {0, 4, 3, 4}, {1, 2}}, {{9, 7, 5}, {5, 7, 2}, {9}}, {{3, 3, 5}, {2, 8, 9, 9}, {1, 2, 1}}, {{0}, {1}, {0, 1, 9}}}; printf(“%5d”, x[2][1][3]); } 7/11/2017 T0616 - Algoritma dan Pemrograman 15 POINTER DAN ARRAY DIMENSI 1 • SELAIN MENGGUNAKAN INDEKS, ELEMEN ARRAY JUGA DAPAT DIAKSES MENGGUNAKAN POINTER. • UNTUK ARRAY X[ ] • • • • ALAMAT ELEMEN KE-1 ARRAY : &X[0] ATAU X ALAMAT ELEMEN KE-2 ARRAY : &X[1] ATAU {X+1} … ALAMAT ELEMEN KE-I+1 ARRAY : &X[I] ATAU X+I) • EKSPRESI (X+I) DI MANA X NAMA ARRAY DAN I INTEGER ADALAH REPRESENTASI SIMBOLIK ALAMAT ELEMEN KE I+1 ARRAY X. 7/11/2017 T0616 - Algoritma dan Pemrograman 16 POINTER DAN ARRAY DIMENSI 1 • NOTASI INDEKS • NOTASI POINTER ALAMAT &X[I], ISI X[I] ALAMAT (X+1), ISI *(X+I) • NAMA ARRAY ADALAH KONSTANTA POINTER KE ELEMEN PERTAMA ARRAY SEHINGGA POINTER BISA DI ASSIGN UNTUK MENUNJUK ARRAY. DISEBUT KONSTANTA KARENA ALAMAT ARRAY TIDAK BISA DIUBAH SELAMA EKSEKUSI PROGRAM SEDANG BERLANGSUNG. 7/11/2017 T0616 - Algoritma dan Pemrograman 17 CONTOH 1 • INT X[10]; • INT *PX; • PX = X; • UNTUK MENGAKSES ELEMEN KE-I+1 DAPAT DILAKUKAN SEBAGAI BERIKUT: • X = KONSTANTA POINTER • PX = VARIABEL POINTER 7/11/2017 • • • • • PX[I]; X[I]; *(PX+I); *(X+I); PX=PX+I; *PX; T0616 - Algoritma dan Pemrograman 18 CONTOH 2 main() { static int x[ ] = { 50, 40, 30, 20, 10}; int i; for(i=0; i<5; i++) printf(“\n%5d “, *(x+i)); } 7/11/2017 T0616 - Algoritma dan Pemrograman 19 CONTOH 3 main() { static int x[ ] = { 50, 40, 30, 20, 10}; int b; b = proses(a); printf(“\n%5d “, b); } 7/11/2017 proses(int *x) { int i, j=0; for(i=0; i<5; i++) j+=*(x+i); return (j/5); } T0616 - Algoritma dan Pemrograman 20 KONSTANTA POINTER VS VARIABEL POINTER • POINTER DAN ARRAY DIMENSI SATU. • KONSTANTA POINTER • VARIABEL POINTER. • X ADALAH ARRAY OF INTEGER. NAMA ARRAY X ADALAH KONSTANTA POINTER. NILAI X TIDAK BISA DIUBAH SEHINGGA X++ DAN ++X ILLEGAL. • PX TIPE DATA POINTER DAN PX DI-ASSGN KE X, PX=X. PX ADALAH VARIABEL POINTER, TEMPAT MENAMPUNG ALAMAT. NILAI PX BISA DIUBAH SEHINGGA P++ DAN ++P LEGAL. 7/11/2017 T0616 - Algoritma dan Pemrograman 21 CONTOH main() { float jum=0.0, x[40]; int n, j = 0; float *ptr = x; do { printf(“\nInput data ke %d”, j++); scanf(“%f”, ptr); } while(*(ptr++) > 0); 7/11/2017 ptr = x; n=j-1; for(j=0; j< n; j++) jum + = *(ptr++); printf(“\nRata-rata = %.3f”, jum/n); } T0616 - Algoritma dan Pemrograman 22 POINTER DAN ARRAY DIMENSI DUA • POINTER DAN ARRAY DIMENSI DUA. • POINTER KE SEKELOMPOK ARRAY. • ARRAY POINTER. • ARRAY INTEGER DIMENSI DUA DENGAN 3 BARIS DAN 5 KOLOM DAPAT DITULIS DENGAN TIGA CARA BERBEDA SBB: ELEMEN X DI BARIS KEDUA KOLOM int x[3][5]; KETIGA DIAKSES DENGAN CARA SBB: int (*x)[5]; x[1][2] int *x[3]; *(*(x+1)+2) *(x[1]+2) 7/11/2017 T0616 - Algoritma dan Pemrograman 23 POINTER KE SEKELOMPOK ARRAY • int (*x)[5]; • x • (x + 1) *(*(x+1)+2) • (x + 2) 7/11/2017 T0616 - Algoritma dan Pemrograman 24 ARRAY POINTER • int *x[3]; • x[0] • x[1] *(x[1]+2) • x[2] 7/11/2017 T0616 - Algoritma dan Pemrograman 25 POINTER SEBAGAI RETURN VALUE main() { static int a[]={1,2,3,4}; int *ptMax; int *fungsi(int *p); … ptMax = fungsi(a); printf(“Max = %d”, *ptMax); … } 7/11/2017 int *fungsi(int *p) { int i, iMax, max = 0; for(i=0; i<4; i++) if(*[p+i] > max) { max = *(p+i); iMax = i; } return(p+iMax); } T0616 - Algoritma dan Pemrograman 26 SIEVE OF ERATOSTHENES UNTUK MENCARI BILANGAN PRIMA • SET ARRAY INTEGER A[N] DAN A[0]=A[1]=0 (0 DAN 1 BUKAN BILANGAN PRIMA) DAN A[2] SAMPAI A[N-1] = 1. KEMUDIAN, UNTUK I DARI 3 SAMPAI N-1, SET A[I] = 0 JIKA I HABIS DIBAGI 2. SELANJUTNYA, UNTUK SETIAP I DARI 4 SAMPAI N-1, SET A[I] = 0 JIKA I HABIS DIBAGI 3. ULANGI PROSES INI UNTUK SETIAP PEMBAGI YANG MUNGKIN DARI 2 SAMPAI N/2. SESUDAH SELESAI, UNTUK SEMUA I DI MANA A[I] TETAP BERNILAI 1 ADALAH BILANGAN PRIMA. 7/11/2017 T0616 - Algoritma dan Pemrograman 27 PERFECT SUHFFLE • INTERLEAVES THE FIRST HALF OF THE ARRAY WITH THE SECOND HALF. 11 22 33 44 55 66 77 88 11 55 22 66 33 77 44 88 7/11/2017 T0616 - Algoritma dan Pemrograman 28 THE END “...ALL YOU NEED IS LOVE…” 7/11/2017 T0616 - Algoritma dan Pemrograman 29
© Copyright 2024 Paperzz