Pages

Wednesday, October 19, 2011

Permutasi dan kombinasi dengan bahasa C


Jenis-jenis fungsi pada Bahasa C :

            Suatu fungsi adalah suatu bagian dari program yang dimaksudkan untuk mengerjakan suatu tugas tertentu dan letaknya dipisahkan dari bagian program yang menggunakannya.

 Tujuan dari penggunaan fungsi adalah :
v  Program menjadi terstruktur
v  Dapat mengurangi pengulangan kode program
Fungsi dapat diimplementasikan dalam tiga bentuk yaitu :
v  Pendeklarasian fungsi sebagai prototype fungsi
v  Pendefinisian fungsi
v  Pemanggilan fungsi dari program lain.
Berikut ini merupakan bentuk umum dari fungsi :
            [jenis data] nama_fungsi ([jenis_data arg1], jenis data arg2], …)
            {
                        [deklarasi variabel];
                        [kode program];
                        [pernyataan return];
            }

Jenis-jenis fungsi adalah sebagai berikut :
  1. Fungsi tanpa nilai balik
  2. Fungsi dengan nilai balik
  3. Fungsi rekursif yang kemarin kita pelajari dalam praktikum

Fungsi C dapat dipakai secara rekursif maksudnya adalah suatu fungsi dapat memanggil dirinya sendiri dengan syarat :
v  Harus ada kasus penghentian
v  Tiap-tiap struktur pemanggilan harus lebih sederhana daripada struktur pemanggilan sebelumnya.
Proses rekursi :
1.      Semua variabel otomatis yang terdapat di dalam fungsi rekursif akan memiliki lokasi memory sendiri pada setiap pemanggilannya.
2.      Pernyataan-pernyataan yang terdapat sebelum rekursif akan dieksekusi dengan urutan yang sama.
3.      Pernyataan-pernyataan yang terdapat setelah rekursif akan dikerjakan dengan urutan yang terbalik terhadap pemanggilan.
4.      Kode program untuk fungsi rekursif tidak duplikat, wlaupun fungsi tersebut dipanggil beberapa kali.

Jenis-jenis fungsi rekursif :
1.      Rekursi akhir (tail rekursive), apabila pemanggilan dilakukan pada bagian akhir fungsi.
2.      Rekursi tunggal (singly rekursive), apabila tiap-tiap pemanggilan paling banyak membentuk satu pemanggilan lagi.
3.      Rekursi ganda (double rekursive), apabila tiap-tiap pemanggilan membentuk lebih dari satu pemanggilan.


Rumus permutasi dan kombinasi :

Ø  Permutasi

Permutasi adalah suatu susunan yang dibentuk oleh keseluruhan atau sebagian dari sekumpulan benda.
Rumus dari permutasi adalah sebagai berikut :
nPr  =   n!  
            (n-r)!
Ø  Kombinasi

Kombinasi adalah pengambilan sebagian dari sekumpulan benda ® dari keseluruhan benda (n) tanpa memperhatikan urutannya.
Rumus dari kombinasi adalah sebagai berikut :

  nCr  =        n!  
                    r!(n-r)!

 
LISTING PROGRAM  :
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>

int k, n;

class probabilitas
{
            public :
                        void input();
                        float fact(int bil);
                        void menu();
                        int permutasi(int x, int y);
                        int kombinasi(int x, int y);
};

void probabilitas :: input()
{
            clrscr();
            gotoxy(20,5); cout<<"PROGRAM INPUT NILAI";
            gotoxy(20,7); cout<<"Masukkan nilai n = ";cin>>n;
            do
            {
                        gotoxy(20,8); cout<<"Masukkan nilai k = ";
                        gotoxy(39,8); cin>>k;
                        if (k>n || k<=0)
                        {
                                    gotoxy(39,8); putchar(9);
                        }
            }while(k>n || k<=0);
}

float probabilitas :: fact(int bil)
{
            if (bil<=1)
            {
                        return 1;
            }
            else
            {
                        return bil * fact(bil-1);
            }
}

int probabilitas :: permutasi(int x, int y)
{
            float perm;
            clrscr();
            gotoxy(20,5); cout<<"MENCARI NILAI PERMUTASI";
            perm = fact(x)/fact(x-y);
            gotoxy(20,7);
            cout<<"P("<<n<<","<<k<<") = "<<n<<"! / ("<<x<<" - "<<y<<")! = "<< perm;
            getch();
            return perm;
}

int probabilitas :: kombinasi(int x, int y)
{
            float komb;
            clrscr();
            gotoxy(20,5); cout<<"MENCARI NILAI KOMBINASI";
            komb = fact(x)/(fact(y)*fact(x-y));
            gotoxy(20,7);
            cout<<"C("<<n<<","<<k<<") = "<<n<<"! / "<<y<<"!("<<x<<" - "<<y<<")! = "<< komb;
            getch();
            return komb;
}

void probabilitas :: menu()
{
            int pil;
            while (pil<=4 || pil!=0)
            {
                        clrscr();
                        gotoxy(20,4); cout<<"----------------------";
                        gotoxy(20,5); cout<<"|PROGRAM PROBABILITAS|";
                        gotoxy(20,6); cout<<"----------------------";
                        gotoxy(20,7); cout<<"|1. Input Bilangan   |";
                        gotoxy(20,8); cout<<"|2. Hitung Permutasi |";
                        gotoxy(20,9); cout<<"|3. Hitung Kombinasi |";
                        gotoxy(20,10); cout<<"|4. Keluar           |";
                        gotoxy(20,11); cout<<"----------------------";
                        gotoxy(20,12); cout<<"|   SELAMAT MENCOBA  |";
                        gotoxy(20,13); cout<<"----------------------";
                        gotoxy(20,15); cout<<"Pilihan Anda : "; cin>>pil;
                        switch (pil)
                        {
                                    case 1 : input();
                                                     break;
                                    case 2 : permutasi(n,k);
                                                             break;
                                    case 3 : kombinasi(n,k);
                                                     break;
                                    case 4 : exit(0);
                        }
            }
}

void main()
{
            probabilitas obj;
            obj.menu();
            getch();
}

output :
User diminta untuk memilih operasi yang akan dijalankan. Disini user memilih nomor satu yaitu menginput bilangan.


Setelah memilih nomor satu kemudian menekan tombol enter, maka program akan meminta nilai yang akan diinput untuk nilai n dan k (nilai n harus lebih besar dari nilai k)
 


Setelah menginput nilai dan menekan tombol enter, maka program akan kembali ke tampilan menu. Disini user memilih nomor 2, maka program yang dijalankan adalah menghitung nilai permutasi dari data-data yang sebelumnya telah diinput.


Program akan menjalankan perhitungan permutasi dengan rumus yang telah ditentukan dan akan mencetak hasilnya seperti tampilan di bawah ini :
 


Setelah itu, program kembali lagi ke menu awal. Disini user memilih nomor 3. Program yang dijalankan adalah menghitung nilai kombinasi.


Program akan menjalankan perhitungan kombinasi dari data-data yang sebelumnya diinput dan mencetak hasilnya seperti di bawah ini :
 

Kemudian program kmbali lagi ke menu pilohan.Disini user memilih nomor 4. Maka program yang dijalankan adalah program untuk keluar dari program yang sedang dijalankan.
 

1 comment: