Showing posts with label Belajar 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:
- Dideklarasikan
sebuah variabel bernama maks.
- Variabel
maks tersebut diisi dengan data pertama dari kumpulan data.
- Program
melakukan iterasi dengan looping for menuju ke data kedua, ketiga, dan
seterusnya hingga data terakhir.
- 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:
- Dideklarasikan
sebuah variabel bernama min.
- Variabel
min tersebut diisi dengan data pertama dari kumpulan data.
- Program
melakukan iterasi dengan looping for menuju ke data kedua, ketiga, dan
seterusnya hingga data terakhir.
- 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.
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.








