Selasa, 02 Februari 2010

Organisasi adalah sekelompok orang (dua atau lebih) yang secara formal dipersatukan dalam suatu kerjasama untuk mencapai tujuan yang telah ditetapkan.
Pengertian Pengorganisasian adalah merupakan fungsi kedua dalam Manajemen dan pengorganisasian didefinisikan sebagai proses kegiatan penyusunan struktur organisasi sesuai dengan tujuan-tujuan, sumber-sumber, dan lingkungannya. Dengan demikian hasil pengorganisasian adalah struktur organisasi.
Tipe tujuan dlm organisasi
1.Tujuan Kemasyarakatan (social goals), masyarakat pada umumnya dan berkenan dengan kelas-kelas organisasi luas yang memenuhi kebutuhan-kebutuhan manusia.
2.Tujuan Keluaran (output goals), publik dalam hubungannya dengan organisasi dan berkenaan dengan jenis-jenis keluaran tertentu dalam bentuk fungsi-fungsi konsumen.
3.Tujuan Sistem (system goals), cara pelaksanaan fungsi organisasi tidak tergantung pada barang atau jasa yang diproduksi. Contoh: Laba.
4.Tujuan Product (product goals) atau tujuan karakteristik produk, karakteristik barang-barang atau jasa yang diproduksi.
5.Tujuan Turunan (derived goals), yang digunakan organisasi untuk meletakkan kekuasaannya dalam pencapaian tujuan-tujuan.

Arti perencanaan adalah menyeleksi dan menghubungkan pengetahuan, fakta, imajinasi, dan asumsi untuk masa yang akan datang dengan tujuan memvisualisasi dan memformulasi hasil yang diinginkan, urutan kegiatan yang diperlukan, dan perilaku dalam batas-batas yang dapat diterima dan digunakan dalam penyelesaian.

Aspek utama organisasi
1 pembagian kerja,
2 departementasi,
3. bagan organisasi,
4. rantai perintah dan kesatuan perintah,
5. tingkat hierarki manajemen, dan

Dasar tahap perencanaan
1) menetapkan tujuan dan serangkaian tujuan,
(2) merumuskan keadaan saat ini,
(3) mengidentifikasi segala kemudahan dan hambatan dan
(4) mengembangkan rencana atau serangkaian kegiatan untuk pencapaian tujuan.

Senin, 01 Februari 2010

lanjutan algoritma

 Sebuah fungsi berisi sejumlah pernyataan yang dikemas dalam sebuah nama.
 Selanjutnya nama ini dapat dipanggil beberapa kali di beberapa tempat dalam program.
Tujuan pembuatan fungsi :
 Memudahkan dalam mengembangkan program.
 Menghemat ukuran program, terutama bila ada beberapa deretan instruksi yang sama digunakan pada beberapa tempat dalam program.



Parameter dan nilai balik:
 Umumnya fungsi menerima masukan yang disebut argumen atau parameter.
 Masukan / parameter diolah oleh fungsi dan menghasilkan sebuah nilai balik (return value).
Prototipe fungsi:
 Deklarasi fungsi dikenal dengan sebutan prototipe fungsi.
 Prototipe ini berupa :
– Nama fungsi
– Tipe nilai balik fungsi
– Jumlah dan tipe argumen
 Dan diakhiri dengan tanda titik koma (;) sebagaimana pada pendeklarasian variabel.
 Manfaat prototipe fungsi adalah untuk menjamin tipe argumen yang dilewatkan pada pemanggilan fungsi benar-benar sesuai .
 Pada prototipe fungsi, nama argumen boleh ditiadakan.

Defenisi fungsi:
 Setiap fungsi yang dipanggil di dalam program harus didefinisikan.
 Berikut merupakan contoh definisi fungsi kuadrat sesuai contoh prototipe sebelumnya.
long kuadrat(long l)
{
long hasil;
hasil = l * l;
return(hasil);
}
 Apabila fungsi tidak memiliki nilai balik, maka tipe nilai baliknya adalah void.
 Fungsi tanpa nilai balik tidak memerlukan pernyataan return pada definisinya.

Contoh :


Ruang lingkup fariable:
 Berdasarkan penyimpanan terkait dengan ruang lingkup variabel, terdapat 3 jenis variabel yaitu :
– Variabel otomatis
– Variabel eksternal
– Variabel statis
1.variable otomatis
 Variabel yang didefinisikan didalam suatu fungsi berlaku sebagai variabel lokal pada fungsi.
 Artinya variabel tersebut hanya dikenal pada fungsi dimana variabel tersebut di definisikan.
 Begitu juga variabel pada fungsi main()
 Variabel ini disebut variabel otomatis




3.variable statis
 Baik variabel eksternal maupun otomatis dapat berkedudukan sebagai variabel statis.


Jika variable lokal berdiri sebagai variable statis maka:

 Variabel tetap hanya dapat diakses pada fungsi yang mendefinisikannnya.
 Variabel tidak hilang saat eksekusi fungsi berakhir. Nilainya akan tetap dipertahankan, sehingga akan dikenali pada pemanggilan fungsi untuk tahap berikutnya.
 Inisialisasi oleh pemrogram akan dilakukan sekali saja selama program dijalankan. Jika tidak ada inisialisasi eksplisit, variabel diisi dengan nol.
Jika variable external berdiri sebagi variable statis maka:
 Variabel ini dapat diakses oleh semua file yang didefinisikan pada file yang sama dengan variabel eksternal tersebut.
 Hal ini bermanfaat pada pemrogram file berganda atau kode program ditaruh pada beberapa file


Operator resolusi lingkup

 Pada C++ terdapat sebuah operator berupa dua buah tanda titik-dua (::).
 Operator ini disebut operator resolusi lingkup (scope resolution operator).
 Kegunaanya untuk mengakses variabel yang didefinisikan di luar suatu fungsi atau blok.
 Hal ini sangat berguna apabila ada variabel lokal dengan nama yang sama.

Fungsi overloading
 Cara seperti di depan biasa dilakukan pada C.
 Untuk membentuk fungsi sama dengan tipe data yang berbeda-beda maka dibuatkan nama fungsi yang berbeda-beda pula.
 Pada C++ dapat digunakan function overloading.

Fungsi overloading


 Contoh fungsi di depan digunakan untuk membaca data bertipe int atau double.
 Namun pendefinisian fungsi ini tidak benar, karena C++ tidak dapat membedakan kedua fungsi tersebut. Misalnya terdapat pemanggilan :

Baca_bilangan ( );
 C++ akan bingung memilih fungsi yang mana yang akan dijalankan.
 Oleh karena itu janganlah menggunakan tipe nilai balik sebagai acuan overloading tapi gunakan tipe dan jumlah argumen.

REKURSI

 Fungsi dalam C++ dapat dipakai secara rekursi. Artinya suatu fungsi dapat memanggil fungsi yang merupakan dirinya sendiri.
 Contoh penerapan adalah untuk menghitung nilai perpangkatan : xn
 Dimana n adalah bilangan bulat positif.
Program multifile

 Materi ini sekaligus contoh untuk variabel eksternal yang menggunakan kata kunci extern.


MELEWATKAN ARRAY SEBAGAI ELEMENT FUNGSI

Beberapa fungsi menggunakan array

 Operasi yang umumnya dilakukan menggunakan array adalah :
– Mencari bilangan terbesar / terkecil.
– Mencari suatu data pada array.
– Mengurutkan data.
MENCARI SUATU DATA PADA ARRAY


MENGGURUTKAN DATA PADA ARRAY

 Ada berbagai teknik untuk mengurutkan data, salah satunya adalah metode bubble sort.
 Pengurutan dilakukan dengan membandingkan setiap elemen array dengan seluruh elemen yang terletak sesudah posisinya.


STRING

 String sangat memudahkan pemrogram.
 Dengan string kita dapat menampilkan prompt, pesan kesalahan dan berbagai informasi lainnya.
 Seperti halnya tipe data lain, string juga dapat berupa konstanta atau variabel.

KONSTANTA STRING
 Konstanta string ditulis dengan awalan dan akhiran tanda petik ganda.

“C++
 Setiap karakter menempati memori 1 byte. Setelah karakter yang terakhir terdapat karakter NULL.

VARIABLE STRING

 Variabel string adalah variabel yang digunakan untuk menyimpan string. Misalnya :

char teks[10];

 Pernyataan diatas merupakan pernyataan untuk mendefinisikan variabel string dengan panjang maksimal 10 karakter (sudah termasuk karakter NULL).
 Sebenarnya variabel string adalah variabel array bertipe karakter.



 Program di depan dapat berjalan dengan normal jika diinputkan sebuah kata.
 Namun jika terdapat spasi (lebih dari satu kata) maka kata sesudah spasi tidak ditampung dalam variabel string.
 Ini disebabkan karena operator >> pada cin hanya bisa membaca masukan hingga terdapat spasi, tab atau enter.
 Untuk mengatasi permasalahan diatas, dapat digunakan fungsi anggota get() pada cin yaitu cin.get()
 Program di depan dapat dimodifikasi menjadi seperti berikut :




Untuk menghindari kesalahan, pada program di depan, baris
cin.get(teks, 20);
 Dapat ditulis menjadi :
cin.get(teks, sizeof(teks));


FUNGSI ANGGOTA GETLINE

 Penggunaan cin.get() akan menimbulkan masalah jika pada program cin.get() digunakan lebih dari sekali.
 Seperti pada contoh program dibawah ini.

FUNGSI ANGGOTA GETLINE

 Pada program di depan, cin.get() yang kedua tidak berfungsi sebagaimana mestinya.
 Untuk mengatasi hal tersebut, dapat digunakan fungsi anggota getline()
 Program di depan dimodifikasi menjadi seperti berikut :

MEMBACA SEJUMLAH GARIS

 Fungsi anggota getline() juga bisa dipakai untuk membaca sejumlah baris hingga suatu karakter yang ditentukan dijumpai.
 Hal seperti ini dapat diperoleh dengan menyertakan argumen ketiga pada fungsi tersebut.
 Argumen ini merupakan karakter pengakhir.






I
Menyalin String dengan strcpy()

 Menyalin string berbeda dengan menyalin bilangan.
 Misalnya teks1 dan teks2 adalah variabel string. Untuk menyalin string teks1 ke teks2, kita tidak bisa memberikan pernyataan :
teks2 = teks1; //salah
 Untuk menyalin string, kita dapat menggunakan fungsi strcpy()

Menyalin String dengan strcpy()


BEBERAPA FUNGSI OPERASI STRING

 Kompiler Borland C++ maupun Turbo C++ menyediakan sejumlah fungsi yang berkaitan dengan operasi string. Beberapa diantaranya : strlen(), strcat(), strcmp(), stricmp(), strncmp(), strlwr(), strupr(), strstr(), strrev()
 Semua fungsi diatas mempunyai prototipe string.h

STRLEN()
 Fungsi strlen() digunakan untuk mencari panjang suatu string.

STRCMP()

 Fungsi strcmp() digunakan untuk membandingkan dua buah string. Misalnya st1 dan st2 adalah variabel string, maka :

hasil = strcmp(st1, st2);

Akan memberikan nilai int berupa :
– Nilai negatif bila st1 < st2
– Nilai nol bila st1 == st2
– Nilai positif bila st1 > st2


 Pembandingan string pada strcmp() berdasarkan urutan karakter dalam tabel ASCII.
 Misalnya A lebih kecil dari a.

STRICMP()

 Fungsi stricmp() berguna untuk membandingkan dua buah string tanpa membedakan huruf kecil ataupun huruf kapital.


 Akan memberikan nilai balik berupa 0, yang, menyatakan kedua string tersebut adalah sama (karena huruf kapital dan huruf kecil dianggap sama).


STRLWR() DAN STRUPR()

 Fungsi strlwr() digunakan untuk mengubah string menjadi huruf kecil.
 Fungsi strupr() digunakan untuk mengubah string menjadi huruf kapital.



 Fungsi strstr() digunakan untuk keperluan mencari substring dalam suatu string.

STRREV()

 Fungsi strrev() digunakan untuk membalik isi string.

STRREV()



1. mencariu tipe data di C++ dan rentannya

Tipe data terdapat 5 data tipe c yaitu ;

1. void ; diartikan sebagai tanda tipe data dan tanpa pengambilan nilai.
2. int ; bilangan bulat ( integer )
3. float ; bilangan pecahan ( floating point )
4. double ; bilangan pecahan dengan jangkauan data yang lebih luas.
5. char ; karakter.

Sedangkan pada C++ sendiri menambahkan 2 tipe data lagi yaitu ;

1. bool ; isi bilangan boolean ( true and false )
2. wchart ; wide caracter.



Tipe ukuran (bits ) range
1. unsigned char 8 0 s/d 255
2. char 8 -128 s/d 127
3. short int 16 -32,768 s/d 32,767
4. unsigned int 32 0 s/d 4,294,967,295
5. int 32 -2147,483,648 s/d 2,147,483,647
6. unsigned long 32 0 s/d 4,294,697,295
7. long 32 -2,147,648 s/d 2,417,483,647
8. float 32 3.4E-38 s/d 1.7E + 308
9. double 64 1.7E-308 s/d 3.4E +308
10. long double 80 3.4E-4932 s/d 1.1E+4932


2. mencari bagaimana mengisi variable di c++











Tipe Data Primitif
Jenis-jenis tipe data :
- Tipe data Integer
Tipe data bilangan bulat decimal yang dapat menampung angka antara -2147483648 dan 2147483647. Tipe data ini berukuran 32 bits atau 4 bytes.
- Tipe data Character
Tipe data yang hampir mirip dengan tipe data integer tetapi hanya cukup untuk menampung 1 karakter ASCII. Karena tipe data character hanya memiliki ukuran 1 byte, tipe data ini sangat sering digunakan untuk menyimpan tipe data karakter sesuai dengan namanya. Tipe data ini dikatakan ideal untuk menampung data karakter karena ukuran 1 byte cukup besar untuk menyediakan 1 slot untuk tiap karakter ASCII. Saat compile, semua tipe data karakter akan diubah ke bentuk integer kode ASCIInya.
- Tipe data Float
Float merupakan kependekan dari floating point. Tipe data ini dapat menampung bilangan real tetapi kurang presisi karena hanya dapat menyimpan single precision floating point numbers.
- Tipe data Double
Tipe data double sangat mirip dengan tipe data float tetapi tipe data double dapat menyimpan double precision floating point numbers. Biasanya memiliki ukuran 8 bytes.
- Tipe data Void
Tipe data yang tidak bertipe.




(1). Pengertian dan urutan SDLC sebagai berikut :

Pengertian;
SDLC ( systems development life cycle ) siklus hidup pengembangan sistem pengembangan sistem dalam rekayasa sistem dan rekayasa perangkan lunak adalah proses pembuatan dan pengubah sistem serta model dan metologi yang digunakan untuk mengembangkan sistem-sistem tersebut. Konsep in9i umumnya merujuk pada sistem komputer atau informasi-informasi.

Dalam rekayasa perangkat lunak konsep SDLC mendasari berbagai jenis metologi pengembangan perangkat lunak . metologi ini membentuk suatu kerangka kerja untuk perancangan dan pengendalian pembuatan sistem informasi , yaitu proses pengembangan perangkat lunak.






Urutan SDLC :

1.Planning : perencanaan pembuatan

2. Analisa : proses analisa suatu program yg akan dibuat

3. Design : design system,design database,design communication dll.

4. coding: pengkodean software

5. testing: testing komponen, testing system,testing integrasi system,
UAT / user acceptance test dsb...

6. deployment

7. maintenance
(deployment dan maintenance) : masa saat software sudah diuji dan lolos dan siap diimpelementasikan .



(2) simbol dan fungsi flowchart sebagai berikut :


SIMBOL NAMA FUNGSI

TERMINATOR Permulaan/akhir program

GARIS ALIR
(FLOW LINE) Arah aliran program

PREPARATION Proses inisialisasi/pemberian harga awal

PROSES Proses perhitungan/proses pengolahan data

INPUT/OUTPUT DATA Proses input/output data, parameter, informasi

PREDEFINED PROCESS
(SUB PROGRAM) Permulaan sub program/proses menjalankan sub program

DECISION Perbandingan pernyataan, penyeleksian data yang memberikan pilihan untuk langkah selanjutnya

ON PAGE CONNECTOR Penghubung bagian-bagian flowchart yang berada pada satu halaman

OFF PAGE CONNECTOR Penghubung bagian-bagian flowchart yang berada pada halaman berbeda

algoritma dan struktur data

Algoritma merupakan kumpulan perintah untuk menyelesaikan suatu masalah. Perintah-perintah ini dapat diterjemahkan secara bertahap dari awal hingga akhir. Masalah tersebut dapat berupa apa saja, dengan catatan untuk setiap masalah, ada kriteria kondisi awal yang harus dipenuhi sebelum menjalankan algoritma. Algoritma akan dapat selalu berakhir untuk semua kondisi awal yang memenuhi kriteria, dalam hal ini berbeda dengan heuristik. Algoritma sering mempunyai langkah pengulangan (iterasi) atau memerlukan keputusan (logika Boolean dan perbandingan) sampai tugasnya selesai.
Desain dan analisis algoritma adalah suatu cabang khusus dalam ilmu komputer yang mempelajari karakteristik dan performa dari suatu algoritma dalam menyelesaikan masalah, terlepas dari implementasi algoritma tersebut. Dalam cabang disiplin ini algoritma dipelajari secara abstrak, terlepas dari sistem komputer atau bahasa pemrograman yang digunakan. Algoritma yang berbeda dapat diterapkan pada suatu masalah dengan kriteria yang sama.
Kompleksitas dari suatu algoritma merupakan ukuran seberapa banyak komputasi yang dibutuhkan algoritma tersebut untuk menyelesaikan masalah. Secara informal, algoritma yang dapat menyelesaikan suatu permasalahan dalam waktu yang singkat memiliki kompleksitas yang rendah, sementara algoritma yang membutuhkan waktu lama untuk menyelesaikan masalahnya mempunyai kompleksitas yang tinggi.
Sejarah algoritma
Kata algoritma berasal dari latinisasi nama seorang ahli matematika dari Uzbekistan Al Khawārizmi (hidup sekitar abad ke-9), sebagaimana tercantum pada terjemahan karyanya dalam bahasa latin dari abad ke-12 "Algorithmi de numero Indorum". Pada awalnya kata algorisma adalah istilah yang merujuk kepada aturan-aturan aritmetis untuk menyelesaikan persoalan dengan menggunakan bilangan numerik arab (sebenarnya dari India, seperti tertulis pada judul di atas). Algortima adalah jantung ilmu computer atau informatika. Banyak cabang dari ilmu komputer yang diacu dalan terminologi algoritma,misalnya algoritma perutean (routing) pesan di dalam jaringan komputer, algoritma berensenham untuk menggambar garis lurus (bidang grafik kumputer), algoritma Knuth-Morris-Pratt untuk mencari suatu pola di dalam teks (bidang information retrievel), dan sebagainya.
Ditinjau dari asal usul kata, kata “algoritma” sendiri mempunyai sejarah yang cukup aneh. Kata ini tidak muncul di dalam kamus Webster sampai akhir tahun 1957. Orang hanya menemukan kata algorism yang berarti proses menghitung dengan angka Arab. Anda dikatakan algorist jika Anda menggunakan angka Arab. Para ahli bahasa berusaha menemukan asal kata algorism ini, namun hasilnya kurang memuaskan. Akhirnya para ahli sejarah matematika menemukan asal mula kata tersebut. Kata algorism berasal dari nama penulis buku arab yang terkenal, yaitu Abu Ja’afarMuhammad Ibnu Musa al-Khuwarizmi (al-Khuwarizmi dibaca orang barat menjadi algorism).Al-Khuwarizmi menulis buku yang berjudul Kital al jabar wal-muqabala, yang artinya “Buku pemugaran dan pengurangan” (The book of restoration and reduction). Dari judul buku ini kita juga memperoleh akar kata “aljabar” (algebra). Perubahan dari kata algorism menjadi algoritm muncul karena kata algorism sering dikelirukan dengan arithmetic, sehingga akhiran –sm beubah menjadi –thm. Karena perhitungan dengan angka Arab sudah menjadi hal yang biasa/lumrah, maka lambat laun kata algorithm berangsur-angsur dipakai sebagai metode perhitungan (komputasi) secara umum, sehingga kehilangan makna aslinya. Dalam bahasa Indonesia, kata algorithm diserap menjadi “algoritma”.
Pada tahun 1950, kata algoritma perama kali digunakan pada “algoritma Euclidean” (Euclid’s algorithm). Euclid, seorang matematikawan Yunani (lahir pada tahun 350 M), dalam bukunya yang berjudul Element menuliskan langkah-langkah untuk menemukan pembagi bersama terbesar (common greatest divisor atau gcd), dari dua buah bilangan bulat, m dan n (tapi Euclid tidak menyebut metodenya itu sebagai algoritma, baru abad modernlah ornag-orang menybut metodenya itu sebagai “algoritma Euclidean”), Pembagi terbesar dari dua buah bilangan bulat tak-negatif adalah bilangan bulat positif terbesar yang habis membagi kedua bilangan tersebut.
Misalnya, m=80 dan n=12.
Semua factor pembagi adalah
1, 2, 4, 5, 8, 10, 16, 20, 40, 80
Dan semua factor pembagi 12 adalah
1, 2, 3, 4, 6, 12
Maka gcd(80,12)=4
Langkah-langkah mencari gcd(80,12) dengan algoritma Euclidean sebagai berikut :
80 dibagi 12 hasilnya = 6, sisa = 8 (atau: 80 = 6.12 +
12 dibagi 8 hasilnya = 1, sisa = 4 (atau: 12 = 1.8 + 4)
8 dibagi 4 hasilnya = 2, sisa = 0 (atau: 8 = 4.2 + 0)
Karena pembagian yang terakhir menghasilkan 0, maka sisa pembagian terakhir sebelum 0, yaitu 4, menjadi gcd(80,12). Jadi, gcd(80,12) = gcd(12,8) = gcd(4,0) = 4.
Contoh-contoh algoritma yang sudah dijelaskan di atas memberi dua pesan penting. Pertama, sebuah algoritma harus benar. Kedua, algoritma harus berhenti, dan setelah berhenti,algoritma membri hasil yang benar. Menurut Donald E. Knuth dalam bukunya yang berjudul The art of Computer Programming, sebuah algoritma harus mempunyai lima ciri penting:
1. Algoritma harus berhenti setelah mengerjakan sejumlah langkah trbatas.
2. Setiap langkah harus didefinisikan dengan tepat dan tidak brarti-dua (ambiguous). Misalnya, pernyataan “bagilah p dengan sejumlah beberapa bilangan bulat positif”,pernyataan ini dapat bermakna ganda. Berapakah yang dimaksud dengan “beberapa”? Algoritma menjadi jelas jika langkah tersebut ditulis “bagilah p dengan 10 buah bilangan bulat positif”.
3. Algoritma memiliki nol atau lebih masukan (input). Maukan ialah besaran yang diberikan kepada algoritma untuk diproses. Algoritma Euclidean mempunyai dua buah masukan, m dan n.
4. Algortima mempunyai nol atau lebih keluaran (output). Keluaran dapat berupa pesan atau besaran yang memiliki hubungan dengan masukan.
5. Algoritma harus sangkil (effective). Setiap langkah harus sederhana shingga dapat dikerjakan dalam sejumlah waktu yang masuk akal.
Pada abad ke-18, istilah ini berkembang menjadi algoritma, yang mencakup semua prosedur atau urutan langkah yang jelas dan diperlukan untuk menyelesaikan suatu permasalahan.

Jenis-jenis Algoritma
Terdapat beragam klasifikasi algoritma dan setiap klasifikasi mempunyai alasan tersendiri. Salah satu cara untuk melakukan klasifikasi jenis-jenis algoritma adalah dengan memperhatikan paradigma dan metode yang digunakan untuk mendesain algoritma tersebut. Beberapa paradigma yang digunakan dalam menyusun suatu algoritma akan dipaparkan dibagian ini. Masing-masing paradigma dapat digunakan dalam banyak algoritma yang berbeda.
Divide and Conquer, paradigma untuk membagi suatu permasalahan besar menjadi permasalahan-permasalahan yang lebih kecil. Pembagian masalah ini dilakukan terus menerus sampai ditemukan bagian masalah kecil yang mudah untuk dipecahkan. Singkatnya menyelesaikan keseluruhan masalah dengan membagi masalah besar dan kemudian memecahkan permasalahan-permasalahan kecil yang terbentuk.
Dynamic programming, paradigma pemrograman dinamik akan sesuai jika digunakan pada suatu masalah yang mengandung sub-struktur yang optimal (, dan mengandung beberapa bagian permasalahan yang tumpang tindih . Paradigma ini sekilas terlihat mirip dengan paradigma Divide and Conquer, sama-sama mencoba untuk membagi permasalahan menjadi sub permasalahan yang lebih kecil, tapi secara intrinsik ada perbedaan dari karakter permasalahan yang dihadapi.
Metode serakah. Sebuah algoritma serakah mirip dengan sebuah Pemrograman dinamik, bedanya jawaban dari submasalah tidak perlu diketahui dalam setiap tahap; dan menggunakan pilihan "serakah" apa yang dilihat terbaik pada saat itu.


FUNGSI
Program komputer yang dibuat untuk menjawab permasalahan umumnya berukuran sangat besar. Pengalaman telah menunujukkan bahwa cara terbaik untuk mengembangkan dan menangani program besar adalah menyusunnya dari potongan-potongan program yang berukuran kecil-kecil (atau disebut modul) yang lebih mudah untuk ditangani dibandingkan dengan program yang terdiri dari banyak sekali baris.
Modul program di dalam C++ disebut fungsi (function). Program C++ ditulis dengan mengkombinasikan fungsi baru yang ditulis oleh pemprogram (disebut programmer-defined function) dengan fungsi yang telah tersedia di dalam pustakanya (disebut standard library).
Fungsi merupakan blok dari kode yang dirancang untuk melakukan tugas khusus. Adapun tujuan dari pembuatan fungsi ini adalah :
Program menjadi terstruktur. Program yang besar dapat dipecah menjadi beberapa program yang lebih kecil, yang setiap satu program kecil tersebut mempunyai tugas tertentu.
Dapat mengurangi duplikasi kode.
Fungsi dapat dipanggil dari program atau fungsi yang lain.
Dasar Fungsi
Pada umumnya fungsi memerlukan masukan yang dinamakan argumen atau parameter. Hasil akhir fungsi akan berupa sebuah nilai (nilai balik fungsi).
Adapun bentuk umum definisi sebuah fungsi adalah :
Penentu-tipe nama_fungsi (daftar parameter)
Deklarasi parameter
{
Tubuh fungsi
}
Penentu tipe berfungsi untuk menentukan tipe keluaran fungsi yang dapat berupa salah satu tipe data C++ yang berlaku, misalnya char atau int. Default tipe fungsi yang tidak disebutkan dianggap sebagai int.
Sebuah fungsi dapat saja tidak mengandung parameter. Tentu saja untuk kondisi ini deklarasi parameter juga tidak ada.
Contoh:
Inisialisasi ()
{
Return (0)
}
Pada fungsi diatas dapat dijelaskan sebagai berikut:
Penentu tipe fungsi tidak disebutkan, berarti keluaran bertipe int.
Inisialisasi adalah nama fungsi.
Tanda () menyatakan bahwa fungsi tidak memiliki parameter.
Tanda { dan } merupakan awal dan akhir fungsi.
Return (0) merupakan pernyataan dalam tubuh fungsi.
Suatu fungsi cukup didefinisikan sekali tetapi dapat digunakan beberapa kali. Seandainya tubuh fungsi banyak mengandung pernyataan maka pemakaian fungsi dapat menghindari dupliukasi kode dan menghemat penulisan program maupun kode dalam memori. Jadi fungsi merupakan semacam subprogram.
Adapun bentuk umumnya adalah sebagai berikut:
Inisialisasi ()
{
Return (0);
}
main()
{
Int x,y;
.... . .
x=inisialisasi();
............. . .
y=inisialisasi()
}
Misalkan anda diminta membuat algoritma dan program untuk menentukan bilangan terbesar dari 2 buah bilangan yang diketahui dengan menggunakan fungsi . Anda terlebih dahulu harus mendeklarasikan fungsi untuk menampung dan membandingkan 2 buah bilangan tersebut .
Adapun alogaritma dari permasalahan diatas adalah sebagai berikut:
1. Deklarasikan fungsi untuk menampung 2 buah bilangan (bilangan pertama dan bilangan kedua).
2. Deklarasikan fungsi untuk mencari bilangan terbesar.
3. Tentukan 2 buah bilangan tersebut.
4. Tentukan sebuah variabel untuk menampung fungsi dari bilangan terbesar.
5. Sesuai dengan langkah 1, lakukan pengujian untuk 2 buah bilangan tersebut.
6. Jika bilangan pertama lebih besar dari bilangan kedua, dan jawabannya ya maka bilangan pertama yang menjadi bilangan terbesar.
7. Dari langkah 6, jika jawabannya tidak maka bilangan kedua yang menjadi bilangan terbesar.
8. Sesuai langkah 2, cetak bilangan terbesar.
Adapun inplementasi dari algoritma diatas pada program adalah sebagai berikut:
Program contoh implementasi fungsi
/*program:fungsi1.cpp */
#include
/*deklarasi fungsi*/
Int findMax(int n1, int n2);
Void PrintMax (int m);
Main ()
{
Int i = 5;
Int j = 7;
Int k;
k = FindMax (i,j);
PrintMax(k);
Return 0;
}
/* definisi fungsi */
Int FindMax (int n1, int n2)
{
If (n1 >n2)
{
Return n1;
}
Else
{
Return n2
}
}
Void PrintMax (int m)
{
Printf (“Bilangan yang terbesar adalah :%d\n”,m);
}
Bila program diatas dijalankan, maka hasilnya adalah sebagai berikut:
Bilangan yang terbesar adalah : 7
Penjelasan:
Program diatas adalh contoh fungsi untuk menampilkan bilangan terbesar diantara 2 buah bilangan. Dimana sebelum bilangan pertama dengan bilangan kedua dibandingkan, terlebih dahulu didefinisikan fungsi yaitu:
Int FindMax (int n1, n2)
{
If (n1>n2)
{
Return n1;
}
Else
{
Return n2;
}
Jika nantinya bilangan pertama waktu dibandingkan dengan bilangan kedua menghasilkan hasil terbesar atau angkanya lebih besar maka bilangan pertama yang terbesar. Sedangkan sebaliknya, kalau waktu dibandingkan bilangan pertama lebih kecil, maka bilangan kedualah yang di cetak. Untuk bilangan pertama diwakili i yang nilainya 5 dan nantinya akan mengisi n1 dan bilangan kedua yang diwakili j yang nilainya 7 dan nantinya akan mengisi n2.
Parameter Formal dan Parameter Aktual
Parameter formal adalah variabel yang ada pada daftar parameter dalam fungsi. Parameter aktual adalah parameter yang dapat berupa variabel atau konstanta maupun ungkapan yang dipakai dalam pemanggilan fungsi.
Adapun cara melewatkan parameter adalah :
Pemanggilan dengan nilai
Pemanggilan dengan referensi
Sebagai contoh perhatikan keterangan berikut ini:
A...x
B...y
Dengan cara ini nilai parameter aktual tidak dapat berubah sekalipun nilai parameter formal berubah-ubah sebab x merupakan salinan dari A dan y salinan dari B.
Pada saat pemanggilan suatu fungsi, misalnya:
A bernilai 20 → x juga bernilai 20
B bernilai 30 → y juga bernilai 30
Selanjutnya nilai x dan y diproses tetapi nilai A dan B akan tetap.
Pemanggilan dengan referensi merupakan usaha melewatkan alamat dari suatu variabel ke dalam fungsi. Dengan pengubahan dilakukan di dalam fungsi untuk mengubah variabel di luar fungsi.
Perhatikan penggalan program berikut ini:
Tukar (int *px, int *py)
{
Int z;
Z=*px;
*px=*py;
*py=z;
. . . . . . . . .
}
Parameter aktualnya:
Tukar (&a, &b);
Dalam deklarasi parameternya:
Int *px, int *py
Dalam hal ini, px menunjukkan variabel a dan py menunjukkan variabel b.
(*adalah tanda pointer)
Dapat digambarkan sebagai berikut:
px py
alamat a alamat b
a b
Apabila penggalan program tersebut, kita implementasikan pada program, hasilnya adalah sebagai berikut:
Program contoh parameter formal dan aktual
/* program: fungsi2.cpp*/
#include
Void tukar (int x, int y);
Main()
Int a, b;
a=99;
b=11;
printf (“nilai sebelum pemanggilan fungsi:\n”);
printf (“nilai a=%d nilai b=%d\n\n”,a,b);
tukar (a, b);
printf (“nilai sesudah pemanggilan fungsi: \n”);
printf (“nilai a=%d nilai b=%d\n\n”,a,b);
}
Void tukar (int px, int py)
{
Int z;
z=px;
px=py;
py=z;
printf (“nilai diakhir fungsi : \n”);
printf (“nilai px=%d niali py=%d\n\n”,px,py);
Bila program diatas dijalankan, hasilnya adalah sebagai berikut:
Nilai sebelum pemanggilan fungsi:
nilai a=99 nilai b=11
nilai diakhir fungsi:
nilai px=11 nilai py=99
Nilai sesudah pemanggilan fungsi:
nilai a=99 nilai b=11
penjelasan:
Setelah px menunjukkan a dan py menunjukkan b, proses penukaran isi a dan b dilakukan dengan cara sebagai berikut:
z=px;
px=py;
py=z;
Dengan melalui tiga pernyataan diatas, nilai a dan nilai b dapat diubah dalam fungsi.
File Header
Setiap pustaka baku mempunyai file header yang mengandung prototipe fungsi untuk semua fungsi yang ad di dalam pustaka dan definisi dari tipe-tipe data maupun konstanta yang diperlukan oleh fungsi tersebut. Berikut dicantumkan daftar file header yang dapat di include ke dalam program.
berisi makro dan informasi untuk diagnosis yang membantu pemeriksaan kesalahan proses dalam program.
mengandung prototipe fungsi untuk menguji properti dari karakter, dan dapat digunakan untuk mengubah karakter huruf kecil ke besar.
berisi batasan di dalam sistem bilangan bertipe float.
berisi batasan sistem integral.
berisi prototipe fungsi dan informasi lainnya yang dapat memodifikasi sistem data pada saat program diproses.
berisi prototipe fungsi untuk pustaka matematika.
berisi prototipe fungsi yang menuntun urutan pemanggilan fungsi.
berisi prototipe fungsi dan makro untuk menangani kondisi yang bermacam-macam saat program diproses
mendefinisikan makro untuk menangani daftar argumen fungsi yang nilai dan tipenya tidak diketahui.
berisi definisi umum dari tipe yang digunakan C untuk membentuk perhitungan tertentu.
berisi prototipe fungsi untuk fungsi pustaka baku input/output.
berisi prototipe fungsi untuk konversi nilai ke text atau sebaliknya, alokasi memori, bilangan acak, dan utilitas lainnya.
berisi prototipe fungsi untuk pemrosesan string.
berisi prototipe fungsi dan tipe untuk memanipulasi data waktu (jam dan tanggal)
Rekursi
Fungsi yang telah dibahas sebelumnya dipanggil dari bagian lain di luar tubuh fungsi yang bersangkutan. Fungsi rekursif adalah suatu fungsi yang memanggil dirinya sendiri, artinya fungsi tersebut dipanggil di dalam tubuh fungsi itu sendiri.
Fungsi faktorial, yang menghitung nilai faktorial dari suatu bilangan bulat positif, merupakan pokok bahasan yang memudahkan pemahaman fungsi rekursif. Berikut adalah fungsi faktorial yang diselesaikan dengan cara biasa:
Int faktorial (int n)
{
Int counter, hasil = 1;
For (counter = n ; counter >= 1 ; counter--)
Hasil *= counter;
Return hasil;
}
Fungsi tersebut menunjukkan bahwa nilai faktorial dihitung menggunakan looping sehingga melakukan proses sebagai berikut:
Hasil = 1;
Hasil = hasil * n; artinya hasil = n;
Hasil =hasil * (n-1) artinya hasil = n x (n-1);
Demikian seterusnya sampai n bernilai 1, atau jika dituliskan sekaligus menjadi:
Faktorial = n! = n x (n-1) x (n-2) .... x 1;
Fungsi ini dapat dituliskan dalam bentuk:
Faktorial (n) = n! = n x (n-1) !;
Yang menunjukan sifat rekursif dari suatu fungsi, yaitu (n-1)!. Oleh karena itu, fungsi faktorial yang telah ditulis dalam program C++ sebelumnya, dapat ditulis kembali dalam bentuk rekursif sebagai berikut:
Int faktorial (int n)
{
If (n == 0)
Return 1;
Else
Return (n * faktorial (n-1));
}
Contoh lain adalah menghitung jumlah dari suatu deret fibonacci, dimana deret tersebut didefinisikan sebagai:
Fibonacci (1) = 1
Fibonacci (2) = 2
Fibonacci (n) = fibonacci (n-1) + fibonacci (n-2)
Sehingga fungsi dalam program C++ dapat dibuat sebagai berikut:
Long fibonacci (long n)
{
If (n == 1 || n == 2)
Return 1;
Else
Return fibonacci (n-1) + fibonacci (n-2);
}
Dari penggalan program rekursi untuk faktorial di bagian atas, hasil selengkapnya dapat dilihat pada keterangan di bawah ini:
Program contoh rekursi untuk faktorial
/*program: fungsi3.cpp*/
#include
Int faktorial (int n)
{
If (n==1)
Return (1);
Else
Return (n*faktorial (n-1));
}
Main ()
{
Int x;
Printf (“mencari nilai faktorial\n”);
Printf (“masukkan nilai x:”) ; scanf (“%d”,&x) ;
Printf (“nilai faktorial dari %d=%d\n”,x,faktorial (x) );
}
Bila program diatas dijalankan, maka hasilnya adalah sebagai berikut:
Mencari nilai faktorial
Masukkan nilai x: 4
Nilai faktorial dari 4=24
Penjelasan:
Fungsi tersebut menunjukkan bahwa nilai faktorial dihitung menggunakan looping sehingga melakukan proses sebagai berikuit:
Faktorial (1) = 1;
Faktorial (2) = 1 * 2=2
Faktorial (3) = 3*faktorial (2)
= 3x2=6
Faktorial (4) = 4*faktorial (3)
=4x6=24
Sedang penggalan program rekursi untuk bilangan fibonacci di bagian atas, hasil selengkapnya dapat dilihat pada keterangan dibawah ini:
Program contoh rekursi untuk fibonacci
/*program: fungsi4 . cpp*/
#include
Long fibonacci (long n)
{
If (n == 1 || n == 2)
Return 1;
Else
Return fibonacii (n-1) + fibonacci (n-2);
}
Main ()
{
Int x;
Printf (“mencari nilai fifonacci\n”);
Printf (“masukkan nilai x:”) ;scanf (“%d”,”&x);
Printf (“nilai fibonacci dari %d=%d\n”,x,fibonacci (x));
}
Bila program diatas dijalankan, maka hasilnya adalah sebagai berikut:
Mencari nilai fibonacci
Masukkan nilai x: 6
Nilai fibonacci dari 6=8
Penjelasan:
Fibonacci (1) = 1
Fibonacci (2) = 1
Fibonacci (3) = fibonacci (3-1) + fibonacci (3-2)
= 1+1 = 2
Fibonacci (4) = fibonacci (4-1) + fibonacci (4-2)
= 2+1 = 3
Fibonacci (5) = fibonacci (5-1) + fibonacci (5-2)
= 3+2 = 5
Fibonacci (6) = fibonacci (6-1) + fibonacci (6-2)
= 5+3= 8