Breaking News
Loading...
Jumat, 26 April 2013

Rekursi dan Linked List Pada C. Modul VII

     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.

3 komentar:

 
Toggle Footer