Modul 3 Praktikum Struktur Data
TUGAS PENYERAHAN LAPORAN PRAKTIKUM STRUKTUR DATA
Disusun Oleh:
Riqi Tricahyo(20160910064)
SI 2016 B
DASAR TEORI
FUNGSI REKURSI
Rekursi (recursion) merupakan suatu
fungsiyang dapat memanggil dirinya sendiri. Fungsi rekursif bisa dipakai karena
memiliki kelebihan, yaitu membutuhkan banyak memori karena setiap kali program
bagian dipanggil oleh dirinya sendiri, dibutuhkan sejumlah ruang memori
tambahan.
Untuk memahami penerapan fungsi
rekursi sebagai contoh yaitu untuk menghitung nilai:
Xn n adalah bilangan
bulat positif. Contoh kasus:
Jika n == 1 maka Xn =
X selain itu: Xn = X * Xn-1
Misal X=2 dan n=3, proses
pemecahannya sebagai berikut :
Untuk Menyelesaikan Syntax disini saya menggunakan aplikasi DEV C++ untuk menyelesaikannya.
PRAKTIKUM 1
Nah program ini membuat sebuah angka yang akan di pangkatkan, di mana
angka pertama itu angka yang ingin kita pangkattkan dan angka yang kedua
itu angka pangkat untuk angka pertama.
*Syntaxnya*
#include<stdio.h>
#include<conio.h>
int
pangkat (int x, int y);
main()
{
int
x,y;
printf("Masukan
Bilangan Yang Akan Dipangkatkan= ");
scanf("%d",
&x);
printf("\nPangkat
Bilangan= ");
scanf("%d",
&y);
printf("\nHasil
Bilangan %d Pangkat %d adalah %d", x, y, pangkat(x,y));
getch();
return
0;
}
int
pangkat (int x, int y)
{
if (y==0){
return 1;
}else{
return x*pangkat
(x,y-1);
}
}
*Hasilnya*
#include<stdio.h>
#include<conio.h>
di sini saya menggunakan file header conio.h dan juga stdio.h, gunanya stdio itu nantinya saya menggunakan printf dan juga scanf untuk mengoutput dan juga menginput.dan conio.h itu untuk membaca getch() dimana fungsinya untuk menahan sementara hasil yang akkan di tampilkan.
int
x,y;
printf("Masukan
Bilangan Yang Akan Dipangkatkan= ");
scanf("%d",
&x);
printf("\nPangkat
Bilangan= ");
scanf("%d",
&y);
printf("\nHasil
Bilangan %d Pangkat %d adalah %d", x, y, pangkat(x,y));
getch();
return
0;
pada Printf() disini sebagai fungsi keluaran,
yang berarti bahwa dimana fungsi keluaran printf(“Masukan Bilangan Yang Akan
Dipangkatkan = “); yang akan diproses oleh fungsi masukan
scanf("%d",&x); begitupun juga dengan printf("\nPangkat
Bilangan = "); yang akan diproses oleh fungsi masukan scanf("%d",&y);
Program pada praktikum 2 ini adalah program untuk menampilkan deret nilai factorial, dengan memasukan berapa nilai factorial yang akan difactorialkannya maka dengan itu akan menghasilkan deret bilangan dari nilai factorial yang dimasukan, dengan menggunakan fungsi rekursif ini maka akan menghasilkan sebuah hasil perkalian semua nilai dari nilai factorial tersebut.
*Analisisnya*
*Analisisnya*
*Syntaxnya*
Maka fungsi keluaran dari variabel x dan y akan disimpan
dalam printf("\nHasil Bilangan %d Pangkat %d adalah
%d",x,y,pangkat(x,y));
dan getch disitu untuk berhenti sementara tempilannya.
int pangkat
(int x, int y)
{
if(y==0){
return 1;
}else{
return x*pangkat(x,y-1);
}
jika y sama dengan 0 (if(y==0))
maka program akan menjalankan return 1, return 1 ini berarti untuk
mengembalikan nilai 1. Namun jika kondisi pertama yaitu if(y==0) tidak terpenuhi atau bernilai salah,
maka program akan menjalankan else yang akan menjalankan pernyataan ke-2
yaitu return x*pangkat(x,y-1);
PRAKTIKUM 2
Program pada praktikum 2 ini adalah program untuk menampilkan deret nilai factorial, dengan memasukan berapa nilai factorial yang akan difactorialkannya maka dengan itu akan menghasilkan deret bilangan dari nilai factorial yang dimasukan, dengan menggunakan fungsi rekursif ini maka akan menghasilkan sebuah hasil perkalian semua nilai dari nilai factorial tersebut.
*Syntaxnya*
#include<iostream>
using
namespace std;
int
factorial (int a)
{
if(a>0)
{
cout<<
a << " ";
return
(a*factorial(a-1));
}
else
return
1;
}
int
main()
{
int
a;
int
factorial (int a);
cout<<"Program
Menampilkan Deret Nilai Factorial"<<endl;
cout<<"Masukan
Nilai Factorial : ";
cin>>a;
cout<<endl;
cout<<"\n\nRekursif
-> Hasil Perkalian Semua Nilai Dari"<<a<<" =
"<<factorial (a);
return
0;
}
*Hasilnya*
#include<iostream>
using
namespace std;
disini saya menggunakan satu file header yaitu iostream.h, tetapi karena saya menggunakan DEV C++ .h nya di hilangkan dan diganti dengan using namespace std;. dimana nantinya saya menggunakan cout dan cin untuk menginput dan outputnya.
int
factorial (int a)
{
if(a>0)
{
cout<<
a << " ";
return
(a*factorial(a-1));
}
else
return
1;
}
disni pakai function int factorial dimana gunanya untuk mempermudah program.dimana dalam function ini juga menggunakan if else.Yang berarti bahwa dimana jika a lebih dari 0 (if(a>0))
yang akan diproses perhitungannya dengan rumus return(a*factorial(a-1)); maka berarti
bawa akan diketahui berapa deret bilangannya. Sedangkan jika kondisi pertama
yaitu if(a>0) bernilai salah (false) maka akan digunakan fungsi else untuk melakukan pernyataan ke-2 yaitu return 1
int
main()
{
int
a;
int
factorial (int a);
cout<<"Program
Menampilkan Deret Nilai Factorial"<<endl;
cout<<"Masukan
Nilai Factorial : ";
cin>>a;
cout<<endl;
cout<<"\n\nRekursif
-> Hasil Perkalian Semua Nilai Dari"<<a<<" =
"<<factorial (a);
return
0;
}
disini saya pakai tipe data integer, setelah itu ada cout untuk menampilkanya, dan juga di ujung itu ada endl; nah itu tuh fungsiny untuk memberi garis baru pada tampilan setelahnya. dan ada cin>>a. dimana itu untuk menginput variabel a.dan di bagian sebelum akhir ada <<a<< itu berarti memanggil si variabel tersebut, dan juga <<factorial(a); itu juga sama.
PRAKTIKUM 3
Program
pada praktikum 3 ini merupakan program untuk menampilkan fungsi rekursif dari
bilangan Fibonanci. Lalu dengan menginput sebuah bilangan maka akan keluar
hasil fibonanci dari bilangan yang di inputkan. Bilangan Fibonanci adalah
bilangan yang melakukan penambahan terhadap dirinya sendiri dan nilai
penjumlahan dari bilangan pada dirinya yang sebelumnya.
*Syntaxnya*
#include<iostream>
#include<conio.h>
using
namespace std;
int
fibo (int i)
{
if
(i==0)
return
0;
else
if(i==1)
return
1;
else
//Fungsi
Rekursif
return
fibo (i-1)+fibo(i-2);
}
int
main()
{
int
bil, i;
cout<<"\tFungsi
Rekursif Bilangan Fibonacci"<<endl;
cout<<"\t=================================="<<endl;
cout<<"\nMasukan
Bilangan: ";
cin>>bil;
//Pemanggilan
Nilai Fibonacci
for
(i=1; i<=bil; i++)
//Pemanggilan
Fungsi
cout<<"
"<<fibo(i);
cout<<"\nFibonacci("<<fibo(bil);
getch();
return
0;
}
*Hasilnya*
#include<iostream>
#include<conio.h>
using
namespace std;
disini saya menggunakan 2 fle header yaitu ada iostream.h dan juga conio.h , penjelasannya masih sama dengan yang di atas tidak berbeda.
int
fibo (int i)
{
if
(i==0)
return
0;
else
if(i==1)
return
1;
else
//Fungsi
Rekursif
return
fibo (i-1)+fibo(i-2);
}
di sini menggunakan function untuk variabel fibo(int i).dan juga di dalam function tersebut ternyata terdapat fungsi if else dimana berguna untuk apabila if pertama terpenuhi maka akan melakukannya aksinya dan apabila if kedua yang terpenuhi maka akan melakukan aksinya yang kedua.
int
main()
{
int
bil, i;
cout<<"\tFungsi
Rekursif Bilangan Fibonacci"<<endl;
cout<<"\t=================================="<<endl;
cout<<"\nMasukan
Bilangan: ";
cin>>bil;
//Pemanggilan
Nilai Fibonacci
for
(i=1; i<=bil; i++)
//Pemanggilan
Fungsi
cout<<"
"<<fibo(i);
cout<<"\nFibonacci("<<fibo(bil);
getch();
return
0;
}
sama seperti diatas kegunannya masih sama disini menggunakan cout dan juga cin, dan ada for untuk membatasi lopimng atau pengulangannya.
LATIHAN 1
Program berikut ini berfungsi untuk membalikan urutan deret
bilangan yang diinput menggunakan fungsi rekursif Contoh
: 12345678 -> 87654321
Perhatikan
fungsi membandingkan bilangan sebelum dan berikutnya.
#include<stdio.h>
#define
MAX 100
void
rekursif_angka_terbalik(int);
main()
{
int
i,j,jml=0;
char
bil[MAX];
printf("\nProgram
Pembalik Angka");
printf("\n");
printf("\nMasukkan
bilangan yang akan dibalik kawan = ");
gets(bil);
for(i=0;bil[i];i++)
jml=jml++;
printf("\n");
printf("Maka
hasilnya adalah = ");
for(j=jml-1;j>=0;j--)
printf("%c",bil[j]);
printf("\n");
return
0;
}
*Hasilnya*
Menggunakan header <stdio.h> dan juga menggunakan sebuah statemen #define MAX 100 yang berarti (maksimal
diisi 100). #define disini maksudnya adalah mensubsitusikan suatu teks dalam
program.
*Analisisnya*
void rekursif_angka_terbalik(int); Yang merupakan fungsi rekursif untuk angka terbalik dengan
parameternya yaitu int.
int i, j, jml=0; selanjutnya
masukan
tipe data integer untuk variabel i, j, dan jml=0.
char bil[MAX]; kemudian
juga masukan
tipe data character untuk bil[MAX].
printf("Masukan bilangan yang
akan dibalik kawan = ");
gets(bil); Proses selanjutnya untuk memasukan
fungsi keluaran printf("Masukan bilangan yang akan dibalik kawan =
"); yang akan diproses oleh fungsi inputan gets(bil). Fungsi Gets ini sebagai
fungsi inputan yang bisa membaca spasi.
printf("Maka Hasilnya Adalah =
");
printf("%c",bil[j]); Kemudian
masukan kembali fungsi keluaran printf("Maka Hasilnya Adalah = ");
yang akan diproses dengan fungsi masukan printf("%c",bil[j]);
jml=jml++; maksudnya adalah increment jumlah
(++jml) akan terus menambahkan 1 nilai.
Selain itu juga progam ini menggunakan instruksi perulangan FOR. FOR digunakan apabila kita
mengetahui secara pasti banyaknya pengulangan yang akan dilakukan.
for(i=0; bil[i]; i++) Maksudnya adalah i sebagai nilai awal adalah 0, bil[i]
merupakan pembatas nilai akhir, sedangkan i++ itu adalah dimana nilai i akan
ditambah sampai nilai i itu terpenuhi sampai batas akhir nilai i.
for(j=jml-1; j>=0; j--) Maksudnya adalah j sebagai nilai
awal adalah jml-1, j>=0 merupakan pembatas nilai akhir, sedangkan j-- itu
adalah dimana nilai j akan dikurangi sampai nilai j itu terpenuhi sampai batas
akhir nilai j.
LATIHAN 2
Deret
fibonanci adalah deret unik yang dapat dirumuskan dalam rumus matematika
sederhana bagaimana membuat menampilkan deret fibonanci dengan menggunakan
batasan akhir dari sebuah angka fibonanci dengan menggunakan statement #define
variabel
*Syntaxnya*
#include <iostream>
using namespace std;
#define MAX 10
long fibo[MAX];
int i,j, suku, a, b, c;
int main(){
cout<<"Membuat Deret Fibonacci\n";
for(int
i=0; i<MAX; i++)
{
cout<<"Masukkan nilai suku ke-: ";cin>>suku;
}
cout<<"Bilangannya adalah: \n";
a=0;b=1;
cout<<a<<endl<<b<<endl;
for(int
j=1; j<suku; j++)
{
c = a +
b;
a = b;
b = c;
cout<<c<<endl;
}
return 0;
}
*Hasilnya*
*Analisisnya*
#include <iostream>
using namespace std;
disini program menggunakan file header iostream sajah, dimana nantinya menggunakan cout dan cin untuk menginput dan ouputnya.serta menggunakan statement #define MAX 10 (maksimal diisi 10).
#define MAX 10
disini program menggunakan file header iostream sajah, dimana nantinya menggunakan cout dan cin untuk menginput dan ouputnya.serta menggunakan statement #define MAX 10 (maksimal diisi 10).
long
fibo[MAX]; Maksudnya
adalah fungsi rekursi long fibo dengan array MAX.
int i,j, suku, a, b, c;
int main(){
cout<<"Membuat Deret Fibonacci\n";
for(int
i=0; i<MAX; i++)
{
cout<<"Masukkan nilai suku ke-: ";cin>>suku;
}
cout<<"Bilangannya adalah: \n";
a=0;b=1;
cout<<a<<endl<<b<<endl;
for(int
j=1; j<suku; j++)
{
c = a +
b;
a = b;
b = c;
cout<<c<<endl;
}
return 0;
}
menggunakan tipe data integer.
menggunakan tipe data integer.
cout<<MAX<<"Bilangan
Fibonanci pertama adalah : ";
cin>>suku; Kemudian masukan fungsi keluaran
dari cout<<MAX<<"Bilangan Fibonanci pertama adalah : ";
yang akan diproses oleh fungsi masukan cin>>suku;
cout<<"Deret Bilangannya
Adalah : "<<endl; Merupakan syntxax sebagai fungsi
keluaran yang akan diproses dengan menggunakan rumus :
a=0; b=1; cout<<a<<endl<<b<<endl;
for(int j=1; j<suku; j++)
{
c = a + b; a = b; b = c; cout<<c<<endl;
}
Maka dari rumus tersebutlah kita dapat mengetahui
deret bilangan fibonancinya.FOR digunakan apabila kita
mengetahui secara pasti banyaknya pengulangan yang akan dilakukan.
*Analisisnya*
*Analisisnya*
for(int i=0; i<MAX; i++) Maksudnya adalah i sebagai nilai awal adalah 0,i<MAX
merupakan pembatas nilai akhir, sedangkan i++ itu adalah dimana nilai i akan
ditambah sampai nilai i itu terpenuhi sampai batas akhir nilai i.
LATIHAN 3
Dalam
perhitungan matematika dikenal perpangkatan dengan menentukan bilangan dasar
yang akan dipangkatkan dan menentukan pangkat yang akan diterapkan pada
bilangan dasar tersebut, bagaimana perhitungan matematika tersebut jika dibuat
kedalam sebuah program yang dapat menampilkan deret nilai yang dipangkatkan
tersebut. Contoh : 32 -> 9
*Syntaxnya*
#include<stdio.h>
#include<conio.h>
int pangkat (int x, int y);
main()
{
int x,y;
printf("Masukan Bilangan Yang Akan Dipangkatkan=
");
scanf("%d", &x);
printf("\nPangkat Bilangan= ");
scanf("%d", &y);
printf("\nHasil Bilangan %d Pangkat %d adalah %d",
x, y, pangkat(x,y));
getch();
return 0;
}
int pangkat (int x, int y)
{
if
(y==0){
return 1;
}else{
return
x*pangkat (x,y-1);
}
}
*Hasilnya*
#include<stdio.h>
#include<conio.h>
Di program ini menggunakan 2 file header yaitu stdio.h dan juga conio.h.
int pangkat (int x, int y);
main()
{
int x,y;
printf("Masukan Bilangan Yang Akan Dipangkatkan=
");
scanf("%d", &x);
printf("\nPangkat Bilangan= ");
scanf("%d", &y);
printf("\nHasil Bilangan %d Pangkat %d adalah %d",
x, y, pangkat(x,y));
getch();
return 0;
}
int pangkat (int x, int y)
{
if
(y==0){
return 1;
}else{
return
x*pangkat (x,y-1);
}
}
int pangkat(int
x, int y);
Maksudnya,
program ini menggunakan fungsi pangkat.
int x, y; juga
menggunakan tipe data integer untuk variabel x dan y.
printf("Masukan Bilangan Yang Akan
Dipangkatkan = ");
scanf("%d",&x);
printf("\nPangkat Bilangan =
");
scanf("%d",&y);
printf("\nHasil Bilangan %d
Pangkat %d adalah %d",x,y,pangkat(x,y));
Printf()
disini gunanya sebagai fungsi keluaran, maka dari itu fungsi keluaran
printf(“Masukan Bilangan Yang Akan Dipangkatkan = “); akan diproses oleh fungsi
masukan scanf("%d",&x); begitupun dengan
printf("\nPangkat Bilangan = "); yang akan diproses oleh fungsi
masukan scanf("%d",&y);
Maka
fungsi keluaran dari variabel x dan y akan disimpan dalam
printf("\nHasil Bilangan %d Pangkat %d adalah %d",x,y,pangkat(x,y));dimana jika y sama dengan
0 (if(y==0)) maka program akan menjalankan return 1 (mengembalikan nilai 1),
namun jika kondisi pertama yaitu if(y==0) tidak terpenuhi atau bernilai salah,
maka program akan menjalankan else yang akan menjalankan/melaksanakan
pernyataan ke-2 yaitu return x*pangkat(x,y-1);
sudah diperiksa
BalasHapus