Rangkuman 5.7 - 5.16
-
Upload
diamond-ravi -
Category
Documents
-
view
221 -
download
2
description
Transcript of Rangkuman 5.7 - 5.16
Tugas Rangkuman 5.7 – 5.16 (Jumat, 13 Maret 2015)
Bagus Muhammad Satriyo – 120 620 150 4
Diamond Ravi – 120 623 720 1
Yusuf Hafidzun Alim – 120 626 374 2
Rangkuman
5.7 Function Call Stack and Activation Records
Pertama kita harus menganggap sutatu struktur data sebagai stack. Lalu ada istilah pushing
yaitu memasukan data ke dalam stack, dan sebaliknya yaitu popping. Stack dikenal sebagai
data struktur yang berkonsep last-in, first-out (LIFO), yaitu data terakhir yang di-push atau
dimasukkan ke dalam stack, merupakan data pertama yang di-pop / diambil dari stack. Agar
pemanggilan suatu fungsi berhasil, maka alamat pemanggilan dimasukkan ke program
execution/function call stack. Stack ini juga memuat memori untuk lokal variabel, data ini
disimpan dan disebut activation record/stack frame. Keterbatasan memori menyebabkan
stack overflow bila pemanggilan melebihi dari jumlah activation record yang telah disimpan
program execution stack.
5.8 Headers
Setiap library standard memiliki header yang sesuai, yang berisi fungsi prototype untuk
semua fungsi yang terdapat dalam library tersebut dan beragam tipe data serta konstanta
yang dibutuhkan fungsi. Programmer-defined headers juga harus menggunakan ekstensi
yaitu .h.
Contohnya: #include ”square.h” .
5.9 Calling Functions by Value and by Reference
Terdapat 2 cara untuk memanggil fungsi pada bahasa pemrograman yaitu call-by-value dan
call-by-reference. Ketika argumen dipanggil berdasarkan value, salinan valu tersebut akan
terbentuk dan memanggil fungsi tersebut dan perubahan pada salinan tidak mempengaruhi
nilai variabel asli. Sedangkan apabila melalui reference, caller mengizinkan nilai asli variable
fungsi ersebut untuk dimodifikasi. Pemanggilan dengan value dibuthkan apabila tidak
diperlukan modifikasi nilai variabel dan hal ini mencegah efek samping yaitu modifikasi
variabel. Pemanggilan berdasarkan reference digunakan hanya pada fungsi yang terpercaya
yang memerlukan modifikasi variabel.
5.10 Random Number Generation
Elemen peluang atau probabilitas digunakan melalui fungsi rand (random) pada C standard
library dari header <stdlib.h>. Fungsi rand menghasilkan bilangan bulat antara 0 dan RAND-
_MAX. Maksimal nilai RAND_MAX yaitu 32767 yang mana nilai max untuk 2 buah byte (16
bit) integer. Contoh untuk menghasilkan bilangan bulat dengan rentang antara 0 sampai 5
maka ditulis rand() %6 didalam <stdlib.h>. hal ini disebut scaling dan 6 adalah scaling factor.
Tidak ada kondisi default yang disediakan oleh switch statement. Penggunaan %s penentu
konversi untuk mem-print/mencetak string. Fungsi rand sebenarnya menghasilkan
peudorandom number.
Ketika program benar-benar debugged , akan dikeluarkan urutan angka acak. Inilah yang
disebut dengan randomizing dan ini dapat diselesaikan dengan fungsi srand. Srand
mengambil bilangan bulat tak bertanda dan mengeumpankan ke rand unutk menghasilkan
suatu sequence of random number yang berbeda untuk setiap eksekusi program. Penentu
konversi %u digunakan untuk membaca unsigned value sebagai argument srand pada
<stdlib.h> dengan scanf. Untuk randomize tanpe memasukan umpan, digunakan statement:
srand( time (NULL)); sehingga komputer membaca clock dan mengumpan secara otomatis.
Fungsi time mengabil NULL sebagai argument. Fungsi prototype time ada pada <time.h>.
5.11 A Game of Chance
Seperti contoh game melempar 2 buah dadu. Saat mendifinikan fungsi rolldice, program
akan me-roll dan menghitung/menampilkan total nilai dadu. Fungsi ini didefinisikan sekali
namun dipanggil dari 2 tempat pada program (line 23 dan 51). Variable game status
didefinisikan sebgai enum status yang baru. Enum adalah suatu set konstanta bilangan bulat
yang diripresentasikan dengan identifiers atau disebut juga symbolic constants. Nilai enum
dimulai dengan 0 dan bertambah dengan angka 1. Kontstanta CONTINUE bernilai 0, menang
bernilai 1 dan LOST bernilai 2 (Line 8). While statement pada line 50 dilewatkan karena
gamestatus tidak lanjut dan ke line 65 yaitu mencetak player wins atau lose.
5.12 Storage Classes
Pada bagian 2-4, kita menggunakan identifier untuk nama variabel. Atribut variabel termasuk
nama, jenis, ukuran, dan nilai. Pada bagian ini juga menggunakan identifier sebagai nama
untuk fungsi terdefinisi pengguna(user-defined). Tiap identifier memiliki atribut lain termasuk
storage class, storage duration, scope, dan linkage. C memberikan empat kelas penyimpanan
diantaranya : auto, register, extern, dan statis.
Kelas penyimpanan identifier menentukan durasi penyimpanan, scope dan linkage.
Sedangkan durasi penyimpanan identifier adalah periode sepanjang identifier ada di
memori.Scope identifer adalah dimana identifier dapat direferensikan dalam program.
5.13 Scope Rules
Scope pada identifier merupakan porsi program dimana identifier dapat direferensikan.
Sebagai contoh ketika kita mendefinisikan sebuah variabel lokal dalam sebuah blok. Ia dapat
direferensikan hanya mengikuti definisinya sendiri pada blok tersebut atau dalam blok
tersarang diantara blok tersebut.
Ada empat identifier scope, yakni function scope , file scope, block scope, dan function-
prototype scope. Label dapat digunakan dimana saja di dalam fungsi dimana mereka tampil,
tetapi tidak dapat direferensikan diluar kerangka fungsi.
Label digunakan dalam statement switch dan goto. Label merupakan detail implementasi
yang berfungsi sembunyi satu sama lain. Penyembunyian ini lebih formalnya disebut dengan
penyembunyian informasi atau information hiding.
5.14 Recursion
Fungsi rekursif adalah fungsi yang memanggil sendirinya baik langsung maupun tidak
langsung melalui fungsi lain. Rekursi merupakan topik kompleks yang dibahas secara lengkap
di mata ajar ilmu komputer tingkat atas. Pada bagian ini dan selanjutnya, contoh sederhana
pada rekusi dipersembahkan. Sebuah fungsi rekursif digunakan untuk menyelesaikan sebuah
masalah. Fungsi ini sebenarnya mengetahui bagaimana menyelesaikan hanya kasus yang kecil
atau juga disebut so-called base case.
Jika fungsi dipanggil dengan base case, maka fungsi tersebut mengembalikan sebauh hasil.
Apabila fungsi dipanggil dengan masalah yang lebih kompleks, fungsi memisahkan masalah
menjadi dua bagian konseptual; sebuah bagian dimana fungsi mengethaui apa yang harus
dilakukan dan bagian yang tidak mengetahui hal tersebut. Agar layak, bagian terbawah harus
mencerminkan masalah aslinya, tetapi dengan versi yang lebih sederhana ataupun kecil.
5.15 Fibonacci Series
Deret Fibonacci dimulai dengan 0 dan satu dan memiliki properti dimana setiap angka
fibonacci merupakan penjumlahan dari duang angka fibonacci sebelumnya. Deret terjadi
secara sendirinya/alami, dan sebagian menggambarkan bentuk spiral. Rasio keberhasilan
angka Fibonacci adalah 1.618...
5.16 Rekursi vs Iterasi
Di bagian ini akan dibandingkan antara rekursi dengan iterasi yang merupakan dua
pendekatan yang berbeda. Keduanya berasal dari struktur kendali, hanya saja iterasi
menggunakan struktur repetisi sedangkan rekursi menggunakan dtruktur seleksi. Keduanya
melibatkan struktur repetisi, rekursi mendapatkan repetisi melalui panggilan dungsi yang
berulang.
Keduanya melibatkan tes terminasi. Iterasi berhenti ketika keadaan kelanjutan lingkar gagal,
sedangkan rekursi berakhir ketika base case dikenali. Iterasi dengan repetisi counter-
controlled dan rekursi masing-masing mencapai akhir secara bertahap. Iterasi tetap
memodifikasi penghitung hingga penghitung mengasumsikan nilai yang membuat kelanjutan
lingkar gagal. Rekursi teap menghasilkan versi yang lebih sederhana pada masalah aslinya
hingga kasus dasar tercapai.