mat 3

40
Struktur Data Pointer & Rekursi

Upload: ganti-nama

Post on 14-Nov-2015

224 views

Category:

Documents


6 download

DESCRIPTION

ASSALAMU'LAIKUM KAWAN

TRANSCRIPT

struktu

Struktur DataPointer & Rekursi

Defenisi PointerPointer merupakan sebuah variabel yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari variabel lain didalam memori. Dengan kata lain, pointer berisi alamat dari variabel yang mempunyai nilai tertentu. Pointer merupakan struktur data dinamis, berbeda dengan array yang merupakan struktur data statisPointer adalah suatu variabel penunjuk, berisi nilai yang menunjuk ke alamat suatu lokasi memori tertentu bukan nilai datanya . Dikatakan dinamis, karena pada saat digunakan pointer tidak perlu diberikan alokasi jumlah data yang akan diproses, berbeda dengan array dimana alokasi jumlah datanya harus ditentukan terlebih dahulu Defenisi PointerPointer berisi satu nilai yang berpadanan dengan alamat memori tertentuPointer tidak berisi nilai data, melainkan berisi suatu alamat memori atau null jika tidak berisi data.Lokasi memori tersebut bisa diwakili sebuah variabel atau dapat juga berupa nilai alamat memori secara langsung. Pointer Bentuk umum dari variabel pointer adalah :tipe_data *nama_var_pointer ;Dimana :tipe_data dapat berupa sembarang tipe seperti halnya pendeklarasian variabel bukan pointernama_var_pointer adalah nama variabel pointerOperator PointerSuatu pointer dapat berisi alamat dari suatu variabel lain dan untuk dapat mengakses nilai yang ada didalam variabel berpointer secara langsung, dapat dilakukan dengan menggunakan operatorOperator yang dapat digunakan yaitu Operator Dereference (&)Operator reference (*)Operator Dereference (&)Operator Dereference (&)Bentuk umum dari deklarasi pointer dengan menggunakan operator dereference (&) :

nama_var_pointer = &variabel ;Operator Reference (*)Operator Reference (*)Bentuk umum dari deklarasi pointer dengan menggunakan operator reference (*) :

tipe_data *nama_var_pointer;Contoh PointerKita memikili variabel X yang berisi nilai karakter AOleh kompiler C, nilai A akan disimpan disuatu alamat tertentu di dalam memoriAlamat variabel X dapat diakses dengan menggunakan statemen &XJika kita ingin menyimpan alamat dari variabel X ini, kita dapat menggunakan suatu variabel : char alamat_x = &x;Alamat_x adalah suatu variabel yang berisi alamat dimana nilai x yaitu a disimpanVariabel alamat_x disebut variabel pointer atau sering disebut pointer

ax0022ff73Alamat_x0022ff73Contoh Program

Perbedaan Pointer & Variabel BiasaVariabel BiasaBerisi data nilaiOperasi yang biasa digunakan seperti layaknya operasi biasa : +, -, *, / Bersifat statisDeklarasi : tipe_data nama_variabel;PointerBerisi alamat memori dari suatu variabel tertentuMembutuhkan operator khusus & yang menunjuk ke alamat dari suatu variabel tertentu. Operator & hanya dapat dilakukan kepada variabel dan akan menghasilkan alamat dari variabel ituContoh : p = &nOperator * digunakan untuk menunjuk nilai dari alamat variabel yang ditunjuk oleh pointer tersebutContoh : int *aBersifat dinamisDeklarasi : tipe_data *nama_var_pointer;

Operator PointerOperatorKegunaanContohOutput*Mendapatkan nilai data dari variabel pointerInt *alamat;Int nilai = 10;Alamat = &nilai;Printf(%d, *alamat);10&Mendapatkan alamat memori dari variabel pointerInt *alamat;Int nilai = 10;Alamat = &nilai;Printf(%d, alamat);22FF70Aturan Variabel pointer dapat dideklarasikan dengan menggunakan tipe data apapunPendeklarasian variabel pointer dengan tipe data tertentu digunakan untuk menyimpan alamat memori yang berisi data sesuai dengan tipe data yang dideklarasikan, bukan untuk berisi nilai bertipe data tertentuTipe data digunakan sebagai lebar data untuk alokasi memori ( contoh : char berarti lebar datanya 1 byte)Jika suatu variabel pointer dideklarasikan bertipe float, berarti variabel pointer tersebut hanya bisa digunakan untuk menunjuk alamat memori yang berisi nilai bertipe float saja

Operasi Pada PointerSecara umum ada dua operasi yang dapat dilakukan pada pointer yaitu :Mengkopi pointer, sehingga sebuah simpul akan ditunjuk oleh lebih dari sebuah pointerMengkopi isi simpul, sehingga dua atau lebih simpul yang ditunjuk oleh pointer yang bebeda mempunyai isi yang samaSyarat-syarat operasi pointer adalah bahwa kedua pointer yang dioperasikan harus mempunyai deklarasi yang sama Operasi Pada PointerOperasi AritmatikaPada pointer dapat dilakukan operasi aritmatika yang akan menunjuk suatu alamat memori baruHanya nilai integer saja yang bisa dioperasikan pada variabel pointerBiasanya hanya operasi penambahan / pengurangan sajaPointer Pada ArrayPada Array, pointer hanya perlu menunjuk pada alamat elemen pertama saja karena letak alamat array sudah terurut didalam memori Variabel pointer hanya perlu increment

Kesimpulan Deklarasi variabel bertipe pointer . Cirinya ada tanda asterixMengarahkan pointer ke alamat yang dituju menggunakan operator & (Operator Dereference)Mengarahkan pointer ke nilai dari alamat variabel yang dituju menggunakan operator * (Operator Reference)Akses data melalui pointer dimungkinkan ada pertambahan / pengurangan alamat pointer

Struktur dataREKURSIFPENGANTARRekursif adalah salah satu metode dalam dunia matematika dimana defenisinya adalah sebuah fungsi yang mengandung fungsi itu sendiri. Rekursif merupakan suatu metode pada procedure atau function yang didalamnya terdapat perintah untuk memanggil procedure atau function itu sendiri.Dalam dunia pemrograman, rekursi dapat diimplementasikan kedalam sebuah fungsi yang memanggil dirinya sendiri 26

Fungsi rekursifFungsi rekursifFungsi yang berisi defenisi dirinya sendiriFungsi yang memanggil dirinya sendiriProsesnya terjadi secara berulang-ulang Yang harus diperhatikan adalah stopping rolePenerapan fungsi rekursif dapat ditemukan pada Pangkat, Faktorial dan Deret Fibonacci Dalam fungsi pangkat xy, semua bilangan selain 0 nilainya sama dengan 1. jika x dipangkatkan dengan y, dengan nilai y lebih dari 0 maka hasilnya sama dengan x dikalikan dengan x dipangkatkan y-1.Fungsi rekursifJika dituliskan dalam notasi matematika, defenisinya adalah sebagai berikut :

xy = 1, jika y = 0xy = x * xy-1, jika y > 0

Bila dilihat dari defenisi diatas, maka bentuk pemangkatan akan muncul kembali disisi kanan. Hal yang demikian dapat disebut rekursifFungsi rekursifDefenisi rekursif selalu dimulai dengan kasus penyetop, penghenti atau kasus dasar dari suatu permasalahan, dalam hal ini terjadi ketika nilai y = 0

Defenisi rekursif yang lebih kompleks mengandung inti dari permasalahan yang akan dipecahkan, namun lebih sederhana. Dalam hal ini yang tadinya x dipangkatkan dengan y, maka kini pemangkatannya menjadi lebih sederhana yaitu y - 1

Hal ini dimaksudkan untuk mengarahkan masalah yang kompleks ke kasus dasar atau penyetop rekursinyaFungsi rekursifUntuk x = 10 dan y = 0 maka hasil dari xy adalah 1. Untuk x = 10 dan y = 3 hasilnya dapat digambarkan sebagai berikut :103 = 10 * 102102 = 10 * 101101 = 10 * 1=10100 = 1101 = 10 * 100102 = 10 * 10 = 100103 = 10 * 100=1000Contoh program Faktorial

Dari contoh faktorial sebelumnya, kita dapat menuliskan fungsi penghitung faktorial seperti dibawah ini :Pada baris ke 3 dari fungsi diatas nilai n dicek sama dengan 0 atau 1. Jika ya, maka fungsi mengembalikan nilai 1 (baris ke 4) dan jika tidak maka fungsi mengembalikan nilai n * faktorial (n-1) {baris ke 6}

Disinilah letak proses rekursif itu, dimana pada fungsi faktorial ini terjadi proses pemanggilan dirinya sendiri tetapi dengan parameter (n-1)deret fibonacciBaris ke n = 11 1 2 3 5 8 13 21 34Algoritma (untuk n > 2) adalah :

fn = fn-1 + fn-2

Dimana : f1 = 1 dan f2 = 1

Misalnya : Untuk mendapatkan deret ke 4 maka :

f4 = f3 + f2f4 = (f2+f1) + f2f4 = (1+1) + 1f4 = 3

Merupakan suatu deret matematika yang berasal dari penjumlahan dua bilangan sebelumnyaDeret fibonacciIf ( n==1 II n == 2 ) thenreturn (1)Else return (Fibonacci(n-1) + Fibonacci(n-2) endifKelebihan dan kelemahan rekursiKelebihanSolusi sangatlah efisienDapat memecahkan masalah yang sulit dengan tahapan yang mudah dan singkat KelemahanMenggunakan memori yang sangat besar, karena setiap kali terjadi proses perulangan maka dibutuhkan sejumlah ruang memori tambahan Studi kasus 1 Output deret S = 1 + 2 + 3 + 4 + 5 +..+n

Dimana n : integer

Source code :if (n==1) then return (n)elsereturn (n+S(n-1))endif Output deret S = n + + 5 + 4 + 3 + 2 + 1Dimana n : integerSource code :Int nilai (int n){if (n==1){ printf (%d, n);.;}else {printf(%d,n);..; }} Terima Kasih