T0616 ALGORITMA DAN PEMROGRAMAN (16-17) UNIVERSITAS BINA NUSANTARA

Download Report

Transcript T0616 ALGORITMA DAN PEMROGRAMAN (16-17) UNIVERSITAS BINA NUSANTARA

T0616
ALGORITMA DAN PEMROGRAMAN
(16-17)
SUBANDIJO
UNIVERSITAS BINA NUSANTARA
FAKULTAS ILMU KOMPUTER
JAKARTA, 2005
6/28/2016
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.
6/28/2016
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.
6/28/2016
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.
6/28/2016
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
•
•
•
•
6/28/2016
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.
6/28/2016
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
•
6/28/2016
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));
6/28/2016
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.
6/28/2016
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’};
6/28/2016
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]);
6/28/2016
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);
}
6/28/2016
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}};
6/28/2016
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!
6/28/2016
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]);
}
6/28/2016
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.
6/28/2016
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.
6/28/2016
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
6/28/2016
•
•
•
•
•
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));
}
6/28/2016
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);
}
6/28/2016
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.
6/28/2016
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);
6/28/2016
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)
6/28/2016
T0616 - Algoritma dan Pemrograman
23
POINTER KE SEKELOMPOK
ARRAY
• int (*x)[5];
•
x
• (x + 1)
*(*(x+1)+2)
• (x + 2)
6/28/2016
T0616 - Algoritma dan Pemrograman
24
ARRAY POINTER
• int *x[3];
• x[0]
• x[1]
*(x[1]+2)
• x[2]
6/28/2016
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);
…
}
6/28/2016
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.
6/28/2016
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
6/28/2016
T0616 - Algoritma dan Pemrograman
28
THE END
“...ALL YOU NEED IS LOVE…”
6/28/2016
T0616 - Algoritma dan Pemrograman
29