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 X= 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*
 
*Analisinya*

#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);
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*

*Analisisnya*
#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*
 
*Analisisnya*
  

#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.
*Syntaxnya*
#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*
 
*Analisisnya*
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.
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;
#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.
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.
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*
 
*Analisisnya*
#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);
                }
                         }        
  *Analisisnya*
 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); 

 















 
 
  
 

Komentar

Posting Komentar

Postingan populer dari blog ini

Modul 1 Praktikum Struktur Data

Modul 5 Praktikum Struktur Data