Kali ini kembali saya akan membagikan beberapa source code terkait dengan pemrograma c. Pada kali ini saya akan membagikan source mengenai fungsi rekursi pada bahasa c. Apa itu fungsi rekursi?? apakah sama dengan yang sering kita duduki setiap hari??? hehehehe. Tentu saja bukan kursi yang dimaksud. Fungsi rekursi adalah sebuah fungsi yang memanggil dirinya sendiri untuk menyelesaikan proses yang ada didalam fungsi tersebut. Fungsi rekursi akan sangat berguna untuk memecahkan kasus permasalahan terterntu, dimana solusinya didapat dari bentuk permasalahan yang lebih sederhana dari permasalahan serupa. Untuk lebih jelasnya mari kita liat source code program faktorial dibawah ini yang sudah menggunakan fungsi rekursi, serta tidak lupa saya sertakan dengan video dokumntasinya.
video 1. Dokumentasi Program
Coding 1
|
|
Source Code Contoh
Program modul VII.1.1
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#include <conio.h>//header conio
#include <stdio.h>//header stdio
int main(void)//fungsi utama
{
int k;//deklarasi variabel k bertipe integer
untuk menerima masukan angka
printf("Masukkan angka yang akan di
faktorial : ");
scanf("%d",&k);//menerima masukan
angka yang akan difaktorialkan
printf("Hasil Faktorial dengan
rekursi %d! adalah %d",k,faktorial(k));
//pemanggilan fungsi faktorial dg parameter
k
printf("\nHasil Faktorial dengan perulangan %d! adalah %d",k,perulangan(k));
//pemanggilan fungsi perulangan dg
parameter k
getch();//menehan eksekusi program
return 0;//tidak terdapat nilai balikan
}
int faktorial(int k)//fungsi faktorial
{
if(k==0)//jika k=0
{
return 1;//mengembalikan nilai 1
}else//jika tidak
{
return k*faktorial(k-1);
/*memanggil fungsi faktorial dengan
nilai k yang terus berkurang
sesuai dengan formulasi (k*faktorial(k-1))
sampai bertemu k=0
atau dapat dijelaskan sebagai
berikut:
k=4
4*faktorial(4-1)
3*faktorial(3-1)
2*faktorial(2-1)
1*faktorial(1-1)
0=1*/
}
}
//perbandingan
pencarian faktorial dengan fungsi perulangan
int perulangan(int k)//fungsi perulangan
{
int i, y=1;
for ( i = k; i >=1; i--)
/*melakukan perulangan dari i=k
sampai 1
guna mencari nilai i*/
{
y=y*i;//mendapatkan
jumlah faktorial
}
return y;//mengembalikan nilai y
}
|
|
Deskripsi Singkat
|
Penggalan
program diatas merupakan salah satu contoh penggunaan fungsi rekursi seperti yang
sudah dijelaskan pada modul VII, latihan 1.1. Pada program diatas juga saya
bandingkan pencarian faktorial menggunakan fungsi rekursi dengan menggunakan
perulangan. Untuk penjelasan masing-masing baris program sudah saya beri
komentar pada setiap baris.
|
Coding 2
|
|
Source Code Contoh
Program modul VII.1.4
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#include <stdio.h>//header standard
input output
#include <stdlib.h>//header standard
library
#include <math.h>//header fungsi
matematika
int main(void)//fungsi utama
{
int k, BS;//deklarasi variabel
int genap(int n);//prototype fungsi genap
int ganjil(int m);//prototype fungsi ganjil
printf("Masukan sembarang bilangan
bulat>");
scanf("%d",&k);//menerima masukkan
angka
if (k==0)//jika angka nol
printf("\nNol bukan
bilangan genap dan bukan bilangan ganjil.\n");
else//jika angka tidakl samadengan nol
{
BS = genap(k);//memanggil fungsi
genap sebagai variabel BS
if (BS==1)//jika BS samadengan 1
printf("\nBilangan
%d adalah bilangan genap.\n",k);
//merupakan bilangan genap
else if (BS==0)//jika BS samadengan nol
printf("\nBilangan
%d adalah bilangan ganjil.\n",k);
//merupakan bilangan ganjil
}
system("pause");
return 0;
}
int genap(int n)//fungsi genap
dengan parameter integer n
{
if (n==0)//jika n yang diterima 0
return 1;//mengembalikan nilai 1
else//jika tidak
return ganjil(abs(n)-1);//memanggil fungsi
ganjil(mutual recursion)
}
int ganjil(int m)//fungsi ganjil
dengan parameter integer m
{
if (m==0)//jika parameter m yang diterima nol
return 0;//mengembalikan nilai 0
else//jika tidak
return genap(abs(m)-1);//memangil fungsi
genap
}
|
|
Deskripsi Singkat
|
Penggalan
program diatas merupakan salah satu contoh penggunaan fungsi rekursi seperti yang
sudah dijelaskan pada modul VII, latihan 1.4. Program diatas merupakan
program pencarian bilangan genap dan bilangan ganjil menggunakan fungsi
rekursi. Untuk penjelasan masing-masing baris program sudah saya beri
komentar pada setiap baris.
|
Coding 3
|
|
Source Code Contoh
Program modul VII.2.1
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct simpul {/*deklarasi struct
sampul
dengan anggota
sebagai berikut ini*/
char nama[20];
float nilai;
struct simpul *next_simpul;
} simpulku;
void main()
{
simpulku *simpul1, *simpul2, *simpul3,
*simpul4, *temp;
//mengalokasikan memori untuk sampul yang
akan dibuat
simpul1 = (simpulku *)malloc(sizeof(simpulku));
simpul2 = (simpulku *)malloc(sizeof(simpulku));
simpul3 = (simpulku *)malloc(sizeof(simpulku));
//mengisikan data masing-masing sampul
strcpy(simpul1->nama, "Amin");
strcpy(simpul2->nama, "Budi");
strcpy(simpul3->nama, "Citra");
simpul1->nilai=90;
simpul2->nilai=20;
simpul3->nilai=100;
simpul1->next_simpul = NULL;
//menyambung setiap sampul dengan sampul
lainnya
simpul1->next_simpul = simpul2;
simpul2->next_simpul = simpul3;
simpul3->next_simpul = NULL;
//menampilkan isi sampul mulai dari q
temp = simpul1; //cara satu per satu
printf("%s, %f\n", temp->nama,
temp->nilai);
temp = temp->next_simpul;
printf("%s, %f\n", temp->nama,
temp->nilai);
temp = temp->next_simpul;
printf("%s, %f\n", temp->nama,
temp->nilai);
printf("\n");
/*cara perulangan
temp = simpul1;
for(;temp!=NULL;
temp=temp->next_simpul)
printf("%s, %f\n",
temp->nama, temp->nilai);*/
simpul4 = (simpulku *)malloc(sizeof(simpulku)); //menyiapkan sampul
strcpy(simpul4->nama, "Dewi");simpul4->nilai=80;
//mengisi
sampul
simpul2->next_simpul = simpul4; //update link sampul
simpul4->next_simpul = simpul3;
printf("\n");
temp = simpul1;//temporari guna
menyambung sampul
for(;temp!=NULL; temp=temp->next_simpul) //cara perulangan
printf("%s,
%f\n", temp->nama, temp->nilai);
//menghapus simpul budi
simpul1->next_simpul =
simpul4; //update
link
free(simpul2); //hapus simpul
printf("\n");
temp = simpul1;
for(;temp!=NULL; temp=temp->next_simpul) //cara perulangan
menggunakan variabel temp
printf("%s,
%f\n", temp->nama, temp->nilai);
system("pause");
return 0;
}
|
|
Deskripsi Singkat
|
Penggalan
program diatas merupakan salah satu contoh penggunaan fungsi linked list seperti
yang sudah dijelaskan pada modul VII, latihan 2.1. Program diatas merupakan
programpembuatan simpul menggunkan linked list. Untuk penjelasan
masing-masing baris program sudah saya beri komentar pada setiap baris.
|
Coding 4
|
|
Source Code Latihan
modul VII.d
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <conio.h>//header conio
#include <stdio.h>//header standard
input output
#include <stdlib.h>//header standard
library
int main(void)//fungsi utama
{
int x,n,luas,ulang;//deklarasi
variabel
ulang =1;//inisialisasi ulang = 1
printf("=== Soal d. Modul VII. Ketut
Agus Seputra ===\n");
do{
printf("Masukkan bilangan : ");
scanf("%d",&x);//menerima masukkan
bilangan integer sebagai variabel x
printf("Masukkan jumlah pangkat :
");
scanf("%d",&n);//menerima jumlah
pangkat integer sebagai variabel n
printf("Hasil Perpangkatan %d
pangkat %d = %d\n",x,n,pangkat(x,n));
//memanggil fungsi pangkat dengan parameter
x dan n
printf("Ulang/Tidak ? [1/0] : ");//konfirmasi ulang
atau tidak
scanf("%d",&ulang);//menerima masukkan
ulang
system("cls");//printah bersihkan
layar peraga
}while(ulang==1);//proses diatas berulang jika variable ulang masih
samadengan 1
getch();
return 0;
}
int pangkat(int x,int n)//fungsi pangkat
{
if (n<=0)//jika n sama dengan nol
{
return 1;//mengembalikan nilai 1
}else//jika tidak
{
return x*pangkat(x,n-1);/*memanggil fungsi
pangkat, sampai bertemu
n samadengan nol, inilah yang merupakan
fungsi rekursi*/
}
}
|
|
Deskripsi Singkat
|
Source Code diatas merupakan
penggalan program pencarian jumlah pemangkatan bilangan menggunakan fungsi
rekursi pada soal modul VII.d. berikut soal dari latihan d.
Buatlah program untuk menghitung
bilangan-bulat-tak-negative pangkat bilangan-bulattak-negative (xn
) secara rekursif.
Untuk penjelasan masing-masing baris program
sudah saya beri komentar pada setiap baris.
|
Coding 5
|
|
Source Code Latihan
modul VIII.b
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#include <stdio.h> //header standard input output
int main (void) //fungsi utama
{
int kumpul_angka[6], angka, n, info, Y=1;//deklarasi
variabel
char yesno[2];
int pencarian1 (int data[6], int dicari);
printf("=== Soal latihan modulVIII.b. Ketut Agus Seputra
===\n");
printf("Masukkan 6 angka sebarang: \n");
for (n=0;n<6;n++)//melakukan perulangan untuk memasukkan
data
{
printf("Indeks ke-%d = \n", n);
scanf("%d", &kumpul_angka[n]);//menerima masukan data
} while(Y) //saat masukaan yesno = y
{
printf("Masukan angka yang posisinya ingin dicari> ");
scanf("%d", &angka);//menerima masukkan angka yang akan dicari
posisinya
info = pencarian1(kumpul_angka, angka); /*memanggil
fungsi pencarian1 sebagai variabel info*/
if (info==-1) //jika nilai balikan fungsi pencarian1 = -1
printf("Angka %d tidak ada pada array kumpul_angka\n", angka);
//angka tidak ditemukan
else //jika tidak
printf("Angka %d yang pertama ada di array kumpul_angka pada
indeks ke- %d\n", angka, info);
//angka ditemukan dan ditampilkan sesuai dengan nilai balikan
dari fungsi pencarian1
printf("\nIngin mencari angka yang lain? <y/n> ");
scanf("%s",&yesno[0]);//menerima masukkan yesno
if (yesno[0]=='Y'||yesno[0]=='y')
Y=1;
else if (yesno[0]=='N'||yesno[0]=='n'||yesno[0]!='Y'||yesno[0]!='y') Y=0;
}
return(0);
}
int pencarian1 (int data[6], int dicari) //fungsi pencarian1
{
int m=0, indeks, ada=0; //deklarasi variabel lokal
while(m<6 ) //saat kondisi m<6
{
if (data[m]==dicari)
//jika data indeks ke m sama dengan angka yang dicari
{
do{
m++;//increament m
}while(data[m]==dicari);/*proses increment terus
terjadi jika data indeks ke m masih ditemukan sama degan data
yang dicari*/
ada=1; //inisialisasi ada=1;
indeks=m-1; /*nilai indeks m-1,untuk menampilkan indeks data yang
ditemukan*/
} else
m++; //increment m
} if (ada==0) //jika data tidak ditemukan
indeks=-1; //nilai balikan indeks -1
return indeks;
}
|
|
Deskripsi Singkat
|
Source Code diatas merupakan penggalan program pencarian nilai
indeks array pada soal modul VIII.b. berikut soal dari latihan b modul VIII.
Modifikasi Contoh Program
VI.1.1 sehingga jika di dalam array kumpul_angka[6] terdapat lebih dari
satu angka yang sama, maka yang dicari
adalah angka yang kedua.
Untuk
penjelasan masing-masing baris program sudah saya beri komentar pada setiap
baris.
|
Coding 6
|
|
Source Code Latihan
modul VIII.c
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#include <stdio.h>
#include <string.h>
int main (void)
{
char kalimat[100], karakter[2], info, Y=1;
char yesno[2];
int pencarian1 (char data[], char dicari);
printf("=== Soal latihan modulVIII.c.
Ketut Agus Seputra ===\n");
printf("Ketikan sebuah kata atau
kalimat sebarang: \n");
gets(kalimat);
while(Y)
{
printf("Masukan
karakter yang posisinya ingin dicari> ");
scanf("%s", &karakter[0]);
/*menerima
masukkan
kalimat dengan panjang maksimal
100 karater*/
info = pencarian1(kalimat,
karakter[0]);/*pemanggilan
fungsi pencarian1 sebagai
variabel info*/
if (info==-1)//jika info = -1
printf("Karakter %s
tidak ada pada array kalimat\n", karakter);
else /*jika tidak
menampilkan indeks dari data yang dicari*/
printf("Karakter %s
yang pertama ada di array kalimat pada indeks ke-%d\n", karakter, info);
printf("\nIngin
mencari karakter yang lain? <y/n> ");
scanf("%s",&yesno[0]);
if (yesno[0]=='Y'||yesno[0]=='y') Y=1;
else if
(yesno[0]=='N'||yesno[0]=='n'||yesno[0]!='Y'||yesno[0]!='y') Y=0;
}
return(0);
}
int pencarian1 (char data[], char dicari)
{
int m=0, indeks, ada=0, panjang;
panjang = strlen(data); //fungsi mencari
panjang karakter kalimat
while(m<panjang) //saat m masih lebih
kecil dari panjang karakter
{
if (data[m]==dicari) /*jika data indeks
ke m
ditemukan sama dengan huruf yang
dicari*/
{
while(data[m]==dicari)
{
m++;/*m terus mengalami
increament jika
data indeks ke m masih
ditemukan
samadengan huruf yang dicari*/
}
ada=1;
indeks=m; //mengisikan nilai
indeks dengan m terakhir
} else m++;
} if (ada==0) /*jika data tidak ditemukan, indeks =
-1*/
indeks=-1;
return indeks; //mengembalikan indeks
}
|
|
Deskripsi Singkat
|
Source Code diatas merupakan penggalan program pencarian nilai
indeks array pada soal modul VIII.c. berikut soal dari latihan c modul VIII.
Modifikasi Contoh Program VI.1.2 sehingga jika di dalam
array kalimat[100] terdapat lebih dari dua karakter yang sama, maka yang
dicari adalah karakter yang terakhir.
Untuk
penjelasan masing-masing baris program sudah saya beri komentar pada setiap baris.
|
Coding 7
|
|
Source Code Latihan
modul VIII.d
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main (void)
{
char kalimat[100], karakter[2], info, Y=1;
char yesno[2];
int pencarian1 (char data[],char dicari);
printf("=== Soal latihan modulVIII.d.
Ketut Agus Seputra ===\n");
printf("Ketikan sebuah kata atau
kalimat sebarang: \n");
gets(kalimat); //menerima masukkan
kalimat
strlwr(kalimat);//merubah seluruh
karakter menjadi lowercase
karakter[0]='s';//karakter yang akan
diganti
pencarian1(kalimat,karakter[0]);
getch();
return(0);
}
int pencarian1 (char data[], char dicari)
{
int m=0, indeks, ada=0, panjang,i;
panjang = strlen(data); //fungsi mencari
panjang karakter kalimat
printf("Kalimat Asli adalah \n");
for ( i = 0; i < panjang; i++)
{
printf("%c",data[i]);/*perulangan
menampilkan kalimat asli*/
}
while(m<panjang) //saat m masih lebih
kecil dari panjang karakter
{
if (data[m]==dicari) /*jika data indeks
ke m
ditemukan sama dengan huruf yang
dicari*/
{
while(data[m]==dicari)
{
data[m]='5';//pengisian data
indeks ke m dengan angka 5
m++;/*m terus mengalami
increament jika
data indeks ke m masih
ditemukan
samadengan huruf yang dicari*/
}
ada=1;
indeks=m; //mengisikan nilai
indeks dengan m terakhir
} else m++;
}
printf("\n\nHasil Replace karakter s
dengan 5 adalah \n");
for (i = 0; i < panjang; i++)
{
printf("%c",data[i]);/*perulangan
menampilkan data[100] yang
baru*/
}
}
|
|
Deskripsi Singkat
|
Source Code diatas merupakan penggalan program pencarian karakter
s pada array kalimat dan menggantinya dengan angka 5 seperti pada soal modul VIII.d.
berikut soal dari latihan d modul VIII.
Modifikasi Contoh Program
VI.1.2 sehingga jika di dalam array kalimat[100] terdapat karakter “s”, maka
seluruh karakter “s” tersebut harus diganti dengan karakter “5”.
Untuk
penjelasan masing-masing baris program sudah saya beri komentar pada setiap
baris.
|
thanks,,sangat membantu,,
BalasHapussule prikitiewww
BalasHapusartikelnya bermanfaat kak, ini sya jga punya artikel tentang Linked List Dalam Bahasa C, smoga dpt saling melengkapi
BalasHapusLinked List Dalam Bahasa C
Kumpulan Materi Bahasa C, Lengkap dengan contoh program
BalasHapusthanks artikelnya sangat membantu dan berguna
TV Online
streaming rcti
streaming sctv