Popular Post

Showing posts with label Pemrograman Bahasa C. Show all posts

Mencari Bilangan Prima Dengan Bahasa C

By : DG Comic
            Salah satu hal yang sering bikin pusing dalam dunia matematika adalah menentukan apakah suatu bilangan merupakan bilangan prima atau bukan. Kali ini akan diberikan contoh program untuk mencari atau memeriksa apakah suatu bilangan termasuk ke dalam bilangan prima.
            Sebagaimana telah diketahui, bilangan prima adalah suatu bilangan yang hanya habis dibagi 1 dan bilangan itu sendiri. Bilangan 1 karena merupakan faktor pembagi tidak dapat disebut bilangan prima. Kemudian sebagai titik tolak perhitungan, bilangan prima yang terkecil harus diketahui. Dalam hal ini akan diambil bilangan 2 dan 3 sebagai bilangan prima yang terkecil. Bilangan 2 merupakan bilangan prima yang unik karena merupakan satu-satunya bilangan prima yang genap. Bilangan prima yang lain pastilah gasal (ganjil).
            Nah, langsung saja, program untuk mencari bilangan prima tersebut diberikan pada listing 1.

Listing 1. Mencari bilangan prima

#include <stdio.h>

main()
{
            int bilangan;
            int prima;
            int cekprima();         

            clrscr();
            printf("======================\n");
            printf("MENCARI BILANGAN PRIMA\n");
            printf("======================\n\n");
            printf("Masukkan sebuah bilangan integer : ");
            scanf("%d",&bilangan);
            prima = cekprima(bilangan);
            if (prima == 1)
            {
                        printf("Bilangan %d adalah bilangan prima",bilangan);
            } else {
                        printf("Bilangan %d bukan bilangan prima",bilangan);
            }
}

int cekprima(bil)
int bil;
{
            int bagi=3;
            int batas;
            if (bil == 1)
            {
                        return(0);
            } else if (bil==2||bil==3) {
                        return(1);
            } else if (bil % 2 == 0) {
                        return(0);
            } else {
                        while (batas > bagi)
                        {
                                    if (bil % bagi == 0)
                                    {
                                                printf("Karena habis dibagi %d\n",bagi);
                                                return(0);
                                                break;
                                    }
                                    batas = bil / bagi;
                                    bagi += 2;                 
                        }
                        return(1);
            }
}

            Jika program tersebut dijalankan, hasilnya akan terlihat seperti gambar 1.

Gambar 1

            Pada prinsipnya, inti dari program tersebut terletak pada fungsi cekprima(). Jika fungsi cekprima() menghasilkan nilai 1, berarti bilangan yang diperiksa adalah bilangan prima. Sebaliknya dengan mudah dapat diterka bahwa jika fungsi cekprima() menghasilkan nilai 0, maka bilangan yang diperiksa bukan merupakan bilangan prima.
            Mula-mula fungsi cekprima() akan memeriksa apakah bilangan yang diinputkan adalah bilangan 1. Jika ya, maka fungsi akan menghasilkan nilai 0. Selanjutnya diperiksa apakah bilangan yang diinputkan adalah 2 atau 3 (ingat, kedua bilangan tersebut diambil sebagai patokan). Jika ya, maka sudah pasti kedua bilangan tersebut adalah bilangan prima. Jadi fungsi akan menghasilkan nilai 1.
            Berikutnya diperiksa apakah bilangan yang diinputkan merupakan bilangan genap. Suatu bilangan merupakan bilangan genap apabila habis dibagi 2. Oleh karena itu dalam program dituliskan bil % 2 == 0. Ingat, tanda % berarti modulus yaitu operand yang menghitung nilai sisa hasil bagi. Jika suatu bilangan merupakan bilangan genap, sudah pasti bilangan tersebut bukan bilangan prima.
            Yang ketiga, jika bilangan yang diinputkan bukan 2, 3, atau bilangan genap, maka dilakukan pemeriksaan apakah bilangan tersebut habis dibagi oleh suatu bilangan yang dimasukkan dalam variabel bagi. Karena merupakan bilangan gasal, maka bilangan pembagi sudah pasti bilangan gasal juga. Oleh sebab itu diambil nilai 3 sebagai nilai awal variabel bagi. Jika bilangan tersebut tidak habis dibagi 3, diperiksa apakah bilangan tersebut habis dibagi 5. Jika tidak, diperiksa apakah bilangan tersebut habis dibagi 7. Itu sebabnya pada program tersebut terdapat baris bagi += 2. Namun jika dilakukan pemeriksaan pada semua bilangan gasal yang mungkin digunakan sebagai pembagi, maka program akan menjadi tidak efisien.
            Ambil contoh, misalnya bilangan yang hendak diperiksa adalah 17. Jika bilangan 17 tersebut diperiksa dengan cara dibagi dengan 3, 5, 7, 9, 11, 13, 15, maka ada 7 langkah pemeriksaan. Padahal sudah jelas 17 tidak akan habis dibagi 9, 11, 13, 15. Angka 9 dikali 2 saja sudah 18, bukan? Karena itu perlu diberi batas akan program tetap efisien. Batas dicari dengan cara membagi bilangan yang diperiksa dengan variabel bagi. Selama nilai batas lebih besar daripada nilai variabel bagi, perhitungan akan terus dilakukan. Itu sebabnya program dibatasi dalam loop while (batas > bagi).
            Sebagai variasi dari program tersebut akan dibuat program untuk mencari bilangan prima dalam rentang 1 sampai dengan 1000. Contoh program tersebut diberikan pada listing 2.
Listing 2. Mencari bilangan prima dalam rentang 1-1000

#include <stdio.h>

main()
{
            int i;
            int prima;
            int cekprima();         

            clrscr();
            printf("======================\n");
            printf("MENCARI BILANGAN PRIMA\n");
            printf("DALAM RENTANG 1-1000\n");
            printf("======================\n\n");
            printf("Bilangan prima yang ditemukan : \n");
            for (i=1;i<=1000;i++)
            {
                        prima = cekprima(i);
                        if (prima == 1)
                        {
                                    printf(" %d",i);
                        }
            }
}

int cekprima(bil)
int bil;
{
            int bagi=3;
            int batas;
            if (bil == 1)
            {
                        return(0);
            } else if (bil==2||bil==3) {
                        return(1);
            } else if (bil % 2 == 0) {
                        return(0);
            } else {
                        while (batas > bagi)
                        {
                                    if (bil % bagi == 0)
                                    {
                                                return(0);
                                                break;
                                    }
                                    batas = bil / bagi;
                                    bagi += 2;                 
                        }
                        return(1);
            }
}

            Jika program tersebut dijalankan, maka hasilnya akan nampak seperti gambar 2.

Gambar 2

            Nah, sebagai latihan, Anda bisa memodifikasi program listing 1 dengan menambahkan sebuah looping “Apakah Anda ingin mencoba lagi?”
            Kemudian program listing 2 juga dapat dimodifikasi agar user dapat memasukkan sendiri rentang pencarian (tentunya dengan batasan tertentu) dan kemudian pada output dituliskan juga “Bilangan prima yang ditemukan ada n buah”.
            Selamat mencoba.

            

Mencari Nilai Maksimum/Minimum dengan Bahasa C

By : DG Comic
            Program untuk mencari nilai maksimu/minimum ini merupakan kombinasi dari penggunaan array dan fungsi.
            Bagan alur program yang akan dibuat ditampilkan pada gambar 1 dan gambar 2.


Gambar 1

Gambar 2

Pencarian nilai maksimum
            Pada prinsipnya alur dari pencarian nilai maksimum adalah sebagai berikut:

  1. Dideklarasikan sebuah variabel bernama maks.
  2. Variabel maks tersebut diisi dengan data pertama dari kumpulan data.
  3. Program melakukan iterasi dengan looping for menuju ke data kedua, ketiga, dan seterusnya hingga data terakhir.
  4. Setiap kali iterasi, data dibandingkan dengan nilai data variabel maks. Jika data pada langkah iterasi tersebut nilainya lebih besar daripada data variabel maks, maka data tersebut dimasukkan ke variabel maks menggantikan data sebelumnya.

Program mencari nilai maksimum diberikan pada listing 1.

Listing 1. Mencari nilai maksimum

#include <stdio.h>
#define N 20

float maks();
int i;

main()
{

float nmaks, bil[N];
int jml;
clrscr();
printf("Program mencari nilai maksimum \n\n");
           
// input jumlah bilangan
           
printf("Jumlah bilangan (maks 20) : ");
scanf("%d",&jml);
printf("\n");
           
// input data
           
for (i=0;i<jml;i++)
{
            printf("Bilangan ke %d : ",i+1);
            scanf("%f",&bil[i]);
}
           
// mencari nilai maksimum

nmaks = maks(bil,jml);

// mencetak nilai maksimum
           
printf("Nilai maksimum adalah : %f",nmaks);
}

// fungsi menentukan nilai maksimum

float maks(X,k);
float X[];
int k;
{
float maksimum = X[0];
for (i=0;i<k;i++)
{
            if (X[i] > maksimum)
            {
                        maksimum = X[i];
            }
}
return maksimum;
}

            Jika program tersebut dijalankan, salah satu kemungkinan hasilnya adalah sebagai berikut:

Program mencari nilai maksimum

Jumlah bilangan (maks 20) : 5

Bilangan ke 1 : 12
Bilangan ke 2 : 65
Bilangan ke 3 : 32
Bilangan ke 4 : 73
Bilangan ke 5 : 49
Nilai maksimum adalah : 73.000000

            Bandingkan dengan gambar 3.

Gambar 3

Pencarian nilai minimum
            Pada prinsipnya alur dari pencarian nilai minimum sama dengan pencarian nilai maksimum, hanya ada sedikit perbedaan pada pembandingan nilai variabel. Alurnya adalah sebagai berikut:

  1. Dideklarasikan sebuah variabel bernama min.
  2. Variabel min tersebut diisi dengan data pertama dari kumpulan data.
  3. Program melakukan iterasi dengan looping for menuju ke data kedua, ketiga, dan seterusnya hingga data terakhir.
  4. Setiap kali iterasi, data dibandingkan dengan nilai data variabel min. Jika data pada langkah iterasi tersebut nilainya lebih kecil daripada data variabel min, maka data tersebut dimasukkan ke variabel min menggantikan data sebelumnya.

Program mencari nilai minimum diberikan pada listing 2.

Listing 2. Mencari nilai minimum

#include <stdio.h>
#define N 20

float min();
int i;

main()
{

float nmin, bil[N];
int jml;
clrscr();
printf("Program mencari nilai minimum \n\n");
           
// input jumlah bilangan
           
printf("Jumlah bilangan (maks 20) : ");
scanf("%d",&jml);
printf("\n");
           
// input data
           
for (i=0;i<jml;i++)
{
            printf("Bilangan ke %d : ",i+1);
            scanf("%f",&bil[i]);
}
           
// mencari nilai minimum

nmin = min(bil,jml);

// mencetak nilai minimum
           
printf("Nilai minimum adalah : %f",nmin);
}

// fungsi menentukan nilai minimum

float min(X,k)
float X[];
int k;
{
float minimum = X[0];
for (i=0;i<k;i++)
{
            if (X[i] < minimum)
            {
                        minimum = X[i];
            }
}
return minimum;
}

            Salah satu kemungkinan hasil apabila program tersebut dijalankan adalah sebagai berikut:

Program mencari nilai minimum

Jumlah bilangan (maks 20) : 5

Bilangan ke 1 : 12
Bilangan ke 2 : 65
Bilangan ke 3 : 32
Bilangan ke 4 : 73
Bilangan ke 5 : 49
Nilai minimum adalah : 12.000000

            Bandingkan dengan gambar 4.
 
Gambar 4
Nah, sebagai latihan, Anda bisa menggabungkan kedua program tersebut menjadi satu program dengan misalnya ditambah suatu kondisi agar pengguna program memilih apakah akan mencari nilai maksimum atau nilai minimum. Jika yang ingin dicari adalah nilai maksimum, maka program akan menjalankan fungsi maks(), sedangkan bila yang ingin dicari adalah nilai minimum, maka program akan menjalankan fungsi min().
            Namun bisa juga dalam satu program yang sama, output yang dihasilkan adalah nilai maksimum dan minimum sekaligus.

            Selamat mencoba.

Metoda Pengurutan String Dengan Bahasa C

By : DG Comic
            Sebelumnya telah dibahas tentang quick sort dan bubble sort yang dapat dipergunakan untuk mengurutkan data. Pada pembahasan tersebut data yang diurutkan berupa angka. Sekarang bagaimana apabila yang diurutkan adalah sebuah string? Artikel ini akan membahas hal tersebut. Sebagai basis pengurutan akan digunakan metoda bubble sort.
            Kasus yang diambil kali ini adalah pembuatan sebuah program yang digunakan untuk mengurutkan beberapa nama yang diinputkan. Listing program selengkapnya diberikan pada listing 1.

Listing 1. Pengurutan String

#include <stdio.h>
#define N 20

char nama[N][20];
int i, j, k, l;

main()
{
            int jml;
            char jumlah[10];
            clrscr();
           
            printf("Jumlah Nama yang akan diurutkan = ");
            gets(jumlah);
            jml=atoi(jumlah);
           
            //input data
            for (i=0;i<jml;i++)
            {
                        printf("\nNama ke %d : ",i+1);
                        gets(&nama[i][0]);
            }
           
            // memanggil fungsi bubble()
            bubble(jml);
           
            //output
            printf("\nNama yang telah diurutkan");
            for (i=0;i<jml;i++)
            {
                        printf("\n%-20s",&nama[i][0]);
            }
}

//fungsi bubble()
bubble(n)
int n;
{
            char temp;
            for (i=1;i<=n;i++)
            {
                        for (j=i;j<n;j++)
                        {
                                    for (l=0;l<20;l++)
                                    {
                                                if (nama[i-1][l]<nama[j][l])
                                                {
                                                            break;
                                                }
                                                if (nama[i-1][l]>nama[j][l])
                                                {
                                                            //menukar semua karakter dalam satu nama
                                                            for (k=0,k<20;k++)
                                                            {
                                                                        temp=nama[i-1][k];
                                                                        nama[i-1][k]=nama[j][k];
                                                                        nama[j][k]=temp;
                                                            }
                                                            break;
                                                }
                                    }
                        }
            }
}

            Sekarang cobalah jalankan program tersebut dan inputkan nama-nama berikut ini untuk diurutkan:

·         Superman
·         Suparman
·         Supartinah
·         Supardiono
·         Supersonicman
·         Suparjo

            Hasil pengurutan yang akan diberikan oleh program adalah sebagai berikut:

Supardiono
Suparjo
Suparman
Supartinah
Superman
Supersonicman

            Bandingkan hasilnya dengan gambar 1.
Gambar 1

            Perhatikan bahwa program akan mengurutkan nama-nama tersebut sampai ditemukan karakter yang berbeda.
            Program tersebut akan bersifat case sensitive dan biasanya huruf kapital akan diurutkan terlebih dahulu. Sebabnya adalah nomor ASCII untuk huruf kapital lebih kecil daripada nomor ASCII huruf kecil. Jadi misalnya input program di atas dituliskan sebagai berikut:

·         SUPERMAN
·         SUPARMAN
·         Supartinah
·         supardiono
·         SUPERsoniCMAN
·         suparJO

            Maka hasil pengurutan adalah sebagai berikut:

SUPARMAN
SUPERMAN
SUPErsoniCMAN
Supartinah
suparJO
supardiono

            Bandingkan dengan gambar 2.

Gambar 2

            Dengan demikian untuk dapat mengurutkan dengan hasil yang benar, maka penulisan nama-nama tersebut harus konsisten. Jika hendak dituliskan dengan huruf kapital, maka semua huruf kapital, jika hendak dituliskan dengan huruf kecil, maka semua huruf kecil. Demikian pula jika hanya huruf pertama saja yang huruf kapital.
            Bagaimana jika program tersebut “nekad” digunakan untuk mengurutkan angka? Kita coba saja untuk mengurutkan angka-angka sebagai berikut:

125
54
1463
9
744

            Ternyata hasil yang diberikan adalah sebagai berikut:

125
1463
54
744
9

Gambar 3


            Jadi program tersebut tidak dapat digunakan untuk mengurutkan bilangan. Bilangan akan dianggap sebagai string dan diurutkan berdasarkan “kepalanya”, bukan nilainya. 

- Copyright © Komputer Skills (Serba Serbi Tehnik Komputer) - Date A Live - Powered by Blogger - Designed by Johanes Djogan - Published By Responsive blogger Templates