Anda di halaman 1dari 38

KU-1072 PTI-B:

ARRAY, POINTER dan


STRING

FTI-ITB 2011

PTI-B FTI 2011


Silabus
 Array
 Pemesanan

 Pengaksesan

 Algoritma standard
 Traversal, Pemilihan, Pencarian

 Min/Max, Pengurutan

 Pointer
 String

PTI-B FTI 2011


Pendahuluan
 Hitunglah jumlah lima bilangan bulat !
 Kita dapat mendeklarasikan lima varibel tipe integer
untuk menyimpan bilangan tersebut
 bil1, bil2, bil3, bil4, bil5 : integer
 Hitunglah jumlah 100 bilangan bulat !
 Apakah anda akan mendeklarasikan 100 variabel
integer untuk menyimpan bilangan tsb?
 bil1, bil2, bil3, bil4, bil5, bil6, bil7, bil8……masih
panjang sekali ……bil98, bil99, bil100 : integer
 CAPEK DEH!!!

PTI-B FTI 2011


Array
 Struktur data yang digunakan untuk menyimpan sekumpulan
TIPE DATA SEJENIS secara sekuensial di dalam memori
 Deklarasi
 <tipe data> <nama variable>[panjang array]

 Misal : int bil[100];


 bil[0], bil[1], bil[2], ….,bil[99] bil 20 8 19 … 80
bil[0] bil[1] bil[2] … bil[99]
 Unsur-unsur dalam Array
 Length: banyaknya item dalam array
• Sesuai pemesanan, misal untuk contoh diatas = 100
 Index: nomor untuk akses item tertentu
• Pada C selalu dimulai dengan 0 sampai (Length-1)
 Elemen: variabel, bisa berisi nilai apa saja sesuai tipenya
Dalam bahas C :
length of array = sizeof(array)/sizeof(data type)
PTI-B FTI 2011
Menulis dan Membaca Array
 Inisialisasi array dapat dilakukan terpisah atau bersamaan
dengan deklarasi
int bil[3] = {2 ,4, 6}; //inisialisasi bersamaan dengan deklarsi
atau int bil[5]; // deklarsi
bil[0] = 2; // inisialisasi atau penulisan data ke array
bil[1] = 2*2;
bil[2] = 6;

 Akses data elemen array dapat dilakukan dengan


memanggil array beserta indek elemen data yang ingin
diakses a = bil[2] atau a = bil[j*m+2]
syarat :
(j*m+2): integer dan 0<(j*m+2)<4

PTI-B FTI 2011


Inisialisasi Array
 Inisialisasi array dapat dilakukan juga dengan cara
 int a=2, b=3;
 int data[5] = {a, b+1, a+2, a-1, b};

 int data[5]={8,6,10};//data[3] = 0, data[4] = 0

 int data[ ] = {3,6,11,8,12}; //data[5]

 int data[5];// semuanya= 0

PTI-B FTI 2011


Penggunaan Array
 Array dapat digunakan untuk mengolah sekumpulan data
dalam bentuk list/record, misalnya kita memiliki
sekumpulan data peserta kuliah PTI-B yang terdiri dari
nama, nim, nilai pr, nilai uts dan nilai uas
 Kita dapat menghitung nilai total untuk masing-masing
peserta misalnya dengan menggunakan persamaan : total
= 0.4 uas + 0.3 uts + 0.3 pr, dan menghitung nilai rata-rata
kelas.
 Selain itu kita juga dapat mencari nilai terbesar dan
terkecil, mengurutkan data berdasarkan nim, nama atau
nilai total, mencari peserta dengan nilai dibawah/diatas
rata-rata, dsb

PTI-B FTI 2011


Pengolahan Array dgn Algoritma Standar
 Melakukan opresi yang sama untuk semua data
(misal : menghitung nilai total)
 Memilah-milah data (misal: menyatakan lulus/tidak
lulus berdasarkan nilai total)
 Selection Sort (misal : mencari Max/Min)
 Bubble Sort dan Optimized Bubble Sort, Insertion
Sort (mengurutkan data)
 Sequential Search dan Binary Search (mencari data)

PTI-B FTI 2011


Melakukan Oprasi pada Semua Data
 Menghitung nilai total
 Desklarasi :
nim[65], i, n : integer
pr[65], uts[65], uas[65], total[65]:riil
 Deskripsi :
n = length of array
FOR i = 0 to n-1
do total[ i ] = 0.4*uas[ i ] + 0.3*uts[ i ] + 0.3*pr[ i ]
ENDFOR

PTI-B FTI 2011


Algoritma memilah data
 Misal total >= 60 lulus, total < 60 tidak lulus
 Deklarasi :
nim[65], i, n : integer
total[65]:riil
lulus[65]:boolean
 Deskripsi :
n = length of array
FOR i = 0 to n-1
do IF (total[ i ] >= 60) THEN lulus[ i ] = TRUE
ELSE lulus[ i ] = FALSE
ENDIF
ENDFOR

PTI-B FTI 2011


Algoritma Mencari Data Maximum
 Deklarasi :
nim[65], i, n : integer
total[65], max : riil
 Deskripsi :
max = data[0] {inisialisasi max}
n = length of array
FOR i = 1 to n-1
do IF data[ i ] > max THEN max = data[ i ]
ENDFOR

PTI-B FTI 2011


Algoritma Sorting (misal descending)
 Bubble Sort
 Optimized Buble Sort
 Insertion Sort

PTI-B FTI 2011


ILLUSTRASI BUBBLE SORT

ITERASI KE 1 ITERASI KE 2

4 9 7 2 Bandingkan 2 dgn 7, 2 < 7 2 4 9 7 Bandingkan 7 dgn 9, 7 < 9

4 9 2 7 Tukarkan 2 dgn 7 2 4 7 9 Tukarkan 7 dgn 9

4 9 2 7 Bandingkan 2 dgn 9, 2 < 9 2 4 7 9 Bandingkan 7 dgn 4, 7 > 4

4 2 9 7 Tukarkan 2 dgn 9 2 4 7 9

4 2 9 7 Bandingkan 2 dgn 4, 2 < 4


ITERASI KE 3
2 4 9 7 Tukarkan 2 dgn 4
2 4 7 9 Bandingkan 9 dgn 7, 9 > 7

2 4 7 9

PTI-B FTI 2011


ILLUSTRASI BUBBLE SORT

Sorting dioptimasi dengan menggunakan flag sorted f


ITERASI KE 1 ITERASI KE 2
f f
4 9 7 2 1 Bandingkan 2 dgn 7, 2 < 7 2 4 9 7 1 Bandingkan 7 dgn 9, 7 < 9

4 9 2 7 0 Tukarkan 2 dgn 7 2 4 7 9 0 Tukarkan 7 dgn 9

4 9 2 7 0 Bandingkan 2 dgn 9, 2 < 9 2 4 7 9 0 Bandingkan 7 dgn 4, 7 > 4

4 2 9 7 0 Tukarkan 2 dgn 9 2 4 7 9 0
4 2 9 7 0 Bandingkan 2 dgn 4, 2 < 4
ITERASI KE 3
2 4 9 7 f
0 Tukarkan 2 dgn 4
2 4 7 9 1 Bandingkan 9 dgn 7, 9 > 7

krn f=0, maka iterasi 2 4 7 9 0


berikutnya
harus dijalankan PTI-B FTI 2011
ILLUSTRASI BUBBLE SORT

ITERASI KE 1 ITERASI KE 2

2 4 7 9 Bandingkan 9 dgn 7, 9 > 7 2 4 7 9 Bandingkan 9 dgn 7, 9 > 7

2 4 7 9 Bandingkan 7 dgn 4, 7 > 4 2 4 7 9 Bandingkan 7 dgn 4, 7 > 4

2 4 7 9 Bandingkan 4 dgn 2, 4 > 2 2 4 7 9

2 4 7 9
ITERASI KE 3
2 4 7 9 Bandingkan 9 dgn 7, 9 > 7

2 4 7 9

Pada bubble sort, walaupun data sudah terurut,


namun iterasi tetap akan dijalankan

PTI-B FTI 2011


ILLUSTRASI OPTIMIZED BUBBLE SORT

Sorting dioptimasi dengan menggunakan flag sorted f


ITERASI KE 1
f
2 4 7 9 1 Bandingkan 9 dgn 7, 9 > 7

2 4 7 9 1 Bandingkan 7 dgn 4, 7 > 4

2 4 7 9 1 Bandingkan 4 dgn 2, 4 > 2

2 4 7 9 1

krn f=1, artinya data sudah terurut


maka iterasi berikutnya TIDAK akan dijalankan

PTI-B FTI 2011


Algoritma Bubble Sort (ascending)
 Deklarasi :
nim[65], i, j, n : integer
pr[65], uts[65], uas[65], total[65], temp : riil
nama[65] : string
 Deskripsi :
n = length of array
FOR i = 1 to n - 1
FOR j = n - 1 to i step -1
IF total[ j ] < total[ j-1 ] THEN
temp = total[ j-1 ], total[ j-1 ]= total[ j ], total[ j ]=temp
//tukarkan juga untuk nim, nama, pr, uts dan uas
ENDIF
ENDFOR
ENDFOR

PTI-B FTI 2011


Algoritma OPT Bubble Sort (ascending)
 Deklarasi :
nim[65], i, j, n : integer
pr[65], uts[65], uas[65], total[65], temp : riil
nama[65] : string; flag : boolean
 Deskripsi :
n = length of array
flag = TRUE {anggap dulu data sudah terurut}
WHILE (!flag AND i <= n)
do
FOR j = n - 1 to i step -1
IF total[ j ] < total[ j-1 ] THEN
temp = total[ j-1 ], total[ j-1 ]= total[ j ], total[ j ]=temp
//tukarkan juga untuk nim, nama, pr, uts dan uas
flag = FALSE {data belum terurut}
ENDIF
ENDFOR
i++
ENDWHILE
PTI-B FTI 2011
ILLUSTRASI INSERTION SORT

ITERASI KE 1 ITERASI KE 3

4 9 7 2 Bandingkan 2 dgn 7, 2 < 7 4 2 7 9 Bandingkan 2 dgn 4, 2 < 4

masukan 7 ke posisi 3
4 9 2 7 masukan 2 ke posisi 2
2 ? 7 9 masukan 2 ke posisi 0

ITERASI KE 2 2 ? 7 9 Bandingkan 4 dgn 7, 4 < 7

4 9 2 7 Bandingkan 2 dgn 9, 2 < 9 2 ? 7 9 Bandingkan 4 dgn 9, 4 < 9

4 2 ? 7 masukan 2 ke posisi 1 2 4 7 9 masukan 4 ke posisi 1

4 2 ? 7 Bandingkan 9 dgn 7, 7 < 9

masukan 9 ke posisi 3
4 2 7 9 masukan 7 ke posisi 2

PTI-B FTI 2011


ALGORITMA INSERTION SORT (ascending)
 Deklarasi :
nim[65], i, j, n : integer
pr[65], uts[65], uas[65], total[65], temp : riil
nama[65] : string
 Deskripsi :
n = length of array
FOR i = 1 to n-1
tkr = n - i - 1
FOR j = n - i to n - 1 step 1
IF total[tkr] > total[ j ] THEN
temp = total[ j ], total[ j ]= total[tkr], total[tkr ]=temp, tkr = j
//tukarkan juga untuk nim, nama, pr, uts dan uas
ENDIF
ENDFOR
ENDFOR
PTI-B FTI 2011
Algoritma Sequential Search
 Mencari peserta dengan nilai terbaik
 Deklarasi :
nim[65], i, n, index_max : integer
total[65], max:riil
function max(array[ ], n) : riil {fungsi mencari nilai max}
 Deskripsi :
n = length of array
max = max(total[ ], n) {mencari nilai max}
FOR i = 0 to n - 1
do IF total[ i ] = max THEN
do index_max = i
break
ENDIF
ENDFOR
PRINT “Nim dgn nilai terbaik :”, nim[ index_max ]

PTI-B FTI 2011


Searching Algoritma
Sequential Searching
• Data boleh tdk terurut
• Data dibandingkan satu persatu dengan nilai yang dicari

Binary Searching
• Data harus terurut
• Dicari nilai tengah data, lalu data dibagi dua yaitu diatas nilai
tengah dan dibawah nilai tengah
• Bandingkan nilai tengah dengan nilai yg dicari
• Jika nilai tengah > nilai yg dicari cari di nilai bawah
• Jika nilai tengah < nilai yg dicari cari di nilai atas
• nilai tengah = nilai yg dicari nilai tengah

PTI-B FTI 2011


Algoritma Binary Search (1)
 Mencari peserta dengan nilai terbaik
 Deklarasi :
nim[65], i, n, tengah, index_max, u, d : integer;
{u : data diatas tengah-tengah}
{d : data dibawah tengah-tengah}
total[65], max:riil
function max(array[ ], n) : riil {fungsi mencari nilai max}
function urut(array[ ], n) :void {prosedur mengurutkan nilai total}
 Deskripsi :
n = length of array
tengah = n/2 {nilai tengah-tengah}
d = tengah -1 {batas atas nilai dibawah nilai tengah}
u = tengah + 1 {batas bawah nilai diatas nilai tengah}
max = max(total[ ], n) {mencari nilai max}
urut(total[ ], n) {urutkan berdasarkan nilai total secara ascending}

PTI-B FTI 2011


Algoritma Binary Search (2)
 Deskripsi :
IF tengah > max THEN
FOR i = 0 to d
do IF total[ i ] = max THEN
do index_max = i
break
ENDIF
ENDFOR
ELSEIF tengah < max THEN
FOR i = u to n - 1
do IF total[ i ] = max THEN
do index_max = i
break
ENDIF
ENDFOR
ELSE index_max = tengah
ENDIF
PRINT “Nim dgn nilai terbaik :”, nim[ index_max ]

PTI-B FTI 2011


Array Multidimensi
 Misal kita diminta menjumlahkan matrik berikut
1 2 5 6 1 2 5 6
A  , B  ,C  A  B  
       
3 4 3 9 3 4 3 9

 Array 1 dimensi tidak akan cukup untuk


melakukannya
 Gunakan array 2 dimensi
 int A[2][2]; //A[0][0], A[0][1], A[1][0], A[1][1]

 int B[2][2];

 int C[2][2];

PTI-B FTI 2011


Inisialisasi Array Multidimensi
 int A[2][2];
 A[0][0] = 1, A[0][1] = 2, A[1][0] = 3, A[1][1] = 4;

atau
 int A[2][2] ={{1,2}, {3,4}};

atau
Kolom
 int A[ ][ ] ={{1,2}, {3,4}};
1 2
Baris
3 4

PTI-B FTI 2011


Contoh Pemakaian Array 2 Dimensi
 Menjumlahkan array 2D A dan B
 Deklarasi :
A, B, C : integer array 2D
i, j : integer
 Deskripsi :
A[ ][ ] = {{1,2}, {3,4}}
B[ ][ ] = {{5,6}, {3,9}}
FOR i = 0 to 1
FOR j = 0 to 1
C[ i ][ j ] = A[ i ][ j ] + B[ i ][ j ]
ENDFOR
ENDFOR

PTI-B FTI 2011


Array dan Alamat Array
 int A= 10; //isi variabel A = 10
 &A //dalam bahasa C berisi alamat di memori

dimana isi variabel A disimpan


 int data[ ]={1, 2, 3};

data[0] = 1, data[1] = 2, data[2] = 3


 &data[0], &data[1] = 2, &data[2] //alamatnya

 Di C, nama variabel array  menyatakan alamat


tempat awal array disimpan
 data = &data[0], data+i =&data[i]

PTI-B FTI 2011


Pointer
 Pointer adalah variable yang menyimpan alamat pada C.
 Pointer memberikan programmer power dan utilitas yang
besar untuk mengakses dan memanipulasi data dengan
cara yang tidak ditemui pada bahasa pemrograman
lainnya.
 Pointer juga sangat berguna untuk passing parameter
kedalam fungsi yang memungkinkan fungsi untuk
memodifikasi dan mengembalikan nilai pada routine
yang memanggilnya.
 Tapi jika penggunaannya tidak benar, pointer dapat
menjadi sumber kesalahan program dan frustasi
programmer.

PTI-B FTI 2011


Pointer
 int hitung = 2;
int *ptr; // deklarasi pointer ke data integer
ptr = &hitung //inisialisasi – simpan alamat
//variabel hitung di dlm ptr
 Misalkan data untuk variabel hitung disimpan di
alamat 12300 dan untuk ptr di 23411

&hitung hitung *&hitung

Address Value Variabel


12300 2 hitung
23411 12300 ptr

&ptr *&ptr ptr *ptr

PTI-B FTI 2011


Contoh Pemakaian Pointer
 Fungsi mencari minimum
int minimum(int *a, int n)
{ int small, *p,
small = *a;
for (p = a+1; p < a+n; p++)
if (*p < small) small = *p;
return small;
}
 Pemanggilan fungsi : minimum(array, 10)

PTI-B FTI 2011


Pointer dan Array
 Pointer dan array memiliki hubungan yang erat.
 nama variabel array  alamat awal data array
disimpan
 pointer adalah tipe variabel yang menyimpan alamat
int A[5];
int* ptr;
ptr = &A[0] atau ptr = A
ptr + i = &A[ i ] atau ptr + i = A + i
*(ptr + i) = A[ i ]
 Operasi pada array bisa diganti dengan operasi pada
pointer yang merujuknya

PTI-B FTI 2011


Operasi pada Pointer
 int A[5];
 int* ptr;
 ptr = A; // ptr menunjuk ke A[0]
 ptr = ptr +1; // Menggerakan pointer dari A[0] ke A[1]
 *ptr = 10;// A[1] = 10
 A= A+4; //error : alamat tdk bisa ditukarkan
 ptr = ptr +5; //menunjuk ke akhir array (setelah A[5])
 *ptr= 4; //error krn akhir array harus null

PTI-B FTI 2011


STRING
 String adalah array dari tipe data character
 Seperti juga array, string menyatakan alamat dari
karakter pertama pada string
 Misal string "ABC"
* "ABC"  'A' "ABC" [0]  'A'
*("ABC" + 1)  'B' "ABC" [1]  'B'
*("ABC" + 2)  'C' "ABC" [2]  'C'
*("ABC" + 3)  '\0' "ABC" [3]  '\0'

 String “ABC“ setara dengan sebuah pointer (pointer


to char)

PTI-B FTI 2011


STRING
 String berisi array dari karakter yang diakhiri oleh karakter
'\0' (and-of-string character)
 Deklarasi string pada umumnya menggunakan batas atas
panjang string dengan memperhitungkan karakter '\0 ' pada
akhir string
 char tingkat[10] = "TPB"
 Memesan 10 karakter (termasuk '\0')

 Berisi : 'T', 'P', 'B', '\0'

 Inisialisasi string
 char nama[5] = "Amir"

 char nama[ ] = "Amir"

 char nama[ 5] ;

 nama = "Amir" //illegal

PTI-B FTI 2011


Fungsi-fungsi STRING di C
 Beberapa fngsi pada pustaka string.h dapat
digunakan untuk memanipulasi data pada string di C
 strcpy(destinasi, sumber) mengcopy string dari
sumber ke destinasi
 strcpy dapat digunakan untuk memasukan sebuah
string kedalam variabel array dari karakter
 char nama[8]; //deklarasi array of character
 strcpy(nama,”Amir”); //nama[ ]=“Amir”
 strncpy(destinasi, sumber, n) mengcopy string dari
sumber ke destinasi sebanyak n buah karakter

PTI-B FTI 2011


Fungsi-fungsi STRING di C
 strlen untuk mencari panjang string
 strlwr untuk mengubah semua karakter dalam string
ke huruf kecil (lower case)
 strupr untuk mengubah semua karakter dalam string
ke huruf kecil (upper case)
 strcat untuk menambahkan string ke string lainnya
 strncat untuk menambahkan n buah karakter
pertama sebuah string ke string lainnya
 strcmp untuk membandingkan dua string
 strncmp untuk membandingkan n buah karakter
pertama dari dua string

PTI-B FTI 2011


PENCERAHAN
 Array
 Sangat membantu untuk mengolah data setipe

yang banyak
 Algoritma standard
 Luas pemakaiannya

 Banyak kasus sebenarnya cuma kembangan dari

algoritma standard tersebut

PTI-B FTI 2011

Anda mungkin juga menyukai