Kamis, 30 Maret 2017

LATIHAN WORKSHOP DIKTAT BAB V PERULANGAN/LOOP FUNGSI REKURSIF

LATIHAN WORKSHOP DIKTAT BAB V PERULANGAN/LOOP FUNGSI REKURSIF

Rekursif berasal dari bahasa Latin recur (re = kembali, curre : eksekusi). Fungsi rekursif
adalah fungsi yang melakukan proses perulangan dengan cara memanggil dirinya sendiri. Ini
berbeda dengan versi iteratif yang menggunakan perulangan for, while maupun repeat until. Fungsi rekursif dapat dipandang sebagai sebuah “operator”.

1. Buatlah fungsi fibonacci dengan cara iteratif.

Algoritma membuat fungsi fibonacci
{membuat fungsi fibonacci yang diinputkan nilainya sebelum ke piranti keluaran}
Deklarasi
n,c,first=0,second=1,next : integer
x : integer
Deskripsi
read (n)
for (c=0;c < n ; c++ )then
if (c<=1)
next = c
else
next <- first + second;
first <- second;
second <- next;
write (next)
endfor
endif

Translasi 1

#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int interatif (int x){
int n, c, first = 0, second = 1, next;
cout <<"Masukan Nilai =";cin>>n;cout<<endl;
    cout <<"Nilai =" <<n<< " fibonacci:- " <<endl;
for (c=0;c < n ; c++ )
   {
      if (c<=1)
         next = c;
      else
      {
         next = first + second;
         first = second;
         second = next;
      }
         cout<<next<<endl;
   }
}
int main(int argc, char** argv) {
   int x;
   interatif(x);
   
return 0;
}

Hasil Kasus 1



2. Buatlah fungsi fibonacci dengan 2 cara rekursif yang lain

Algoritma membuat fungsi fibonacci 2 cara rekursif
{membuat fungsi fibonacci 2 cara rekursif yang diinputkan nilainya sebelum ke piranti keluaran}
Deklarasi
n,c,first=0,second=1,next : integer
x : integer
Deskripsi
read (n)
for (c=0;c < n ; c++ )then
if (c<=1)
next = c
else
next <- first + second;
first=second;
second=next;
for (x=0;x<n;x++)
if (x<=1)
next=x;
else
next <- first + second;
first=second;
second=next;
write (next)
write (interatif(x),rekursif (x))
endfor
endif

Translasi 2

#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int interatif (int x){
int c,n,first = 0, second = 1, next;
cout <<"Masukan Nilai =";cin>>n;cout<<endl;

for (c=0;c < n ; c++ )
   {
      if (c<=1)
         next = c;
      else
      {
         next = first + second;
         first = second;
         second = next;
      }
         cout<<next<<endl;
   }
} int rekursif (int x){
int n,next,first=0,second=1;
cout <<"\nMasukan Nilai =";cin>>n;cout<<endl;

for (x=0;x<n;x++){
if (x<=1)
next=x;
else{
next = first + second;
first=second;
second=next;
}
cout<<next<<endl;
}
}

int main(int argc, char** argv) {
   int x;
   cout<<"Interatif ="<<interatif(x);cout<<endl;
   cout<<"Recurtif  ="<<rekursif (x);cout<<endl;
   
return 0;
}

Hasil Kasus 2



3. Algoritma perkalian dengan cara penjumlahan pada algoritma 5.3. belum sempurna
karena belum mencakup semua kemungkinan, misalnya untuk harga b negatif. Buatlah
fungsi perkalian dengan cara penjumlahan dengan menyempurnakan algoritma 5.3. di atas.

Algoritma menghitung perkalian dan penjumlahan
{menyempurnakan program penjumlahan dan perkalian dari program kasus 5.3}
Deklarasi
a,b,i : integer
jumlah <- 0 : integer
Deskripsi
read (a,b)
if (a>0 && a<0 || b>0)then
for(i=1;i<=b;i++)
jumlah+=a
else if(b<0 && a<0)
jumlah-=b
else
for(i=1;i<=a;i++)
jumlah+=b
endfor
endif
write (a,b)


Translasi 3

#include <iostream>
#include <math.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
class hitung{
private:
int a,b,i,jumlah=0;
public:
hitung(){
cout<<"Menghitung Perkalian dengan Penjumlahan"<<endl;
cout<<"Masukan Nilai pertama = ";cin>>a;
cout<<"Masukan Nilai Kedua   = ";cin>>b;
}
void output();
};
void hitung::output(){
if (a>0 && a<0 || b>0){
for(i=1;i<=b;i++)
jumlah+=a;
cout<<a<<"x"<<b<<"="<<jumlah;
}else if(b<0 && a<0){
for(i=0;i>a;i--)
jumlah-=b;
cout<<a<<"x"<<b<<"="<<jumlah;
}else{
for(i=1;i<=a;i++)
jumlah+=b;
cout<<a<<"x"<<b<<"="<<jumlah;
}
}
int main(int argc, char** argv) {
hitung x;
x.output();
return 0;
}

Hasil Kasus 3



4. Buatlah algoritma rekursif dari algoritma 5.3.


Algoritma : algoritma rekrusif
(diberikan masukan a,b,i,jumlah)
Deklarasi :
I,n,jumlah,x : integer
Deskripsi :
Read(n)
jumlah <- 0
for i <- 1 to n do
read(x)
jumlah <- jumlah+x
endfor
rata <- jumlah/n
write(rata)

Translasi 4

#include <iostream>
#include <math.h>
using namespace std;
int rekursif (int x){
int a,b,i,jumlah=0;
cout<<"Menghitung Perkalian dengan Penjumlahan"<<endl;
cout<<"Masukan Nilai pertama = ";cin>>a;
cout<<"Masukan Nilai Kedua   = ";cin>>b;
if (a>0 && a<0 || b>0){
for(i=1;i<=b;i++)
jumlah+=a;
cout<<a<<"x"<<b<<"="<<jumlah;
}else if(b<0 && a<0){
for(i=0;i>a;i--)
jumlah-=b;
cout<<a<<"x"<<b<<"="<<jumlah;
}else{
for(i=1;i<=a;i++)
jumlah+=b;
cout<<a<<"x"<<b<<"="<<jumlah;
}
}
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
int x;
rekursif(x);
return 0;
}

Hasil Kasus 4



5. Diberikan suatu bilangan bulat positif. Cetaklah bilangan bulat tersebut secara terbalik, secara iteratif maupun rekursif.

Algoritma mencetak bilangan terbalik
{mencetak bilangan bulat positif fungsi secara terbalik menggunakan dua fungsi yaitu secra iteratif dan rekursif}
Deklarasi
x : integer
iteratif : integer
rekursif : integer
Deskripsi
for(int i=10; i>=0; i--)
write (i)
if(x>=0)
for(x=10; x>=1; x--)
write (x)
endfor
endif
write (iteratif(x))
write (rekursif(x))

Translasi 5

#include <iostream>
#include <conio.h>
using namespace std;
int iteratif(int x){
for(int i=10; i>=0; i--){
cout<<endl<<i;
}
}
int rekursif(int x){
if(x>=0){
for(x=10; x>=1; x--){
cout<<x<<endl;
}
cout<<x;
}
}
int main(){
int x;
cout<<"\nIteratif : ";
iteratif(x);
cout<<"\nRekursif : \n";
rekursif(x);
getch();
return 0;
}

Hasil Kasus 5



6. Buatlah suatu subprogram yang mengembalikan nilai maksimum pertama (misal m1) dan nilai maksimum kedua (misal m2, dan m1 <- m2) dari array dengan n bilangan bulat.

Algoritma mengembalikan nilai maksimum
{mengembalikan nilai maksimum pertama (m1) dan nilai maksimum kedua (m2) dengan n sebagai bilangan bulat}
Deklarasi
max,min,i,n : integer
A [] : float
Deskripsi
read (n)
for(i=0;i<n;i++)
write (i+1)
max = A[0]
for (i=1;i<n;i++)
if (max < A [i])

max = A[i]
endfor
endif
write (max)

Translasi 6

#include <iostream>
using namespace std;

int main()
{
int max,n,i,min;
float A[100];
cout <<"Masukkan Jumlah Data : ";cin>>n;
for(i=0;i<n;i++){
cout << "masukkan bilangan ke "<< i+1 << " : ";
cin >> A[i];}
max = A[0];
for (i=1;i<n;i++){
if (max < A [i])
max = A[i];
}

cout <<"Nilai Terbesar adalah : "<<max<<endl;

return 0;
}

Hasil Kasus 6



7. Algoritma 5.5 menggunakan fungsi untuk menghitung n faktorial secara rekursif. Buatlah  algoritma menghitung n faktorial dengan menggunakan prosedur !

Algoritma menghitung n faktorial
{membuat algoritma menghitung n faktorial dengan menggunkan prosedur}
Deklarasi
n,faktorial (k) : integer
Deskripsi
read (n)
write faktorial (n) 
if (k==0)
k <- k*faktorial(k-1)
endif

Translasi 7

#include <iostream>

#include <stdio.h>

#include <stdlib.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main(void) {
int n;
int faktorial (int k);
printf("Masukkan sembarang bilangan positif : ");
scanf("%d",&n);
printf("\nMelalui perhitungan rekursif, %d! = %d\n",n,faktorial(n));
system("pause");
return 0;
}
int faktorial (int k){
if (k==0)
return 1;
else
return k*faktorial(k-1);
}

Hasil Kasus 7



8. [Pengamatan : membayar barang belanja di kasir] Amatilah kejadian di mana seorang pembeli (yang membeli barang cukup banyak) pada sebuah took swalayan. Perhatikan apa yang dilakukan pembeli dan apa yang dilakukan oleh kasir ketika mengambil barangnbelanjaan untuk menghitung berapa harga keseluruhan yang harus dibayar pembeli. Laporkan konsep counter dan konsep total yang anda temukan pada kejadian tersebut.

Algoritma sistem kasir
{membuat sistem dasar pembayaran dan ada diskon terkait barang yang dibeli sesuai dengan inputan yang diberikan}
Deklarasi
nm_brg : char
diskon,Total_Belanja,bayar,kd_brg,jml_brg,hrg_brg,jml_uang,kembali : integer
Deskripsi
do
read (kd_brg,nm_brg,jml_brg,hrg_brg)
Total_Belanja <- hrg_brg*jml_brg
write (Total_Belanja)
if(Total_Belanja<=100000)
diskon <- Total_Belanja*0
else if(Total_Belanja>=100000)
diskon <- Total_Belanja*5/100
write (diskon)
bayar <- Total_Belanja-diskon
write (bayar)
read (cin>>jml_uang)
kembali <- jml_uang-bayar
write (kembali)
read lnjt
while(lnjt=='Y' || lnjt=='y')
endif
endwhile

Translasi 8

#include <iostream>
#include <windows.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main(int argc, char** argv) {
char nm_brg [200],lnjt='Y';
int diskon,Total_Belanja,bayar,kd_brg,jml_brg,hrg_brg,jml_uang,kembali;
do{
system("cls");
cout<<"Program kasir sederhana"<<endl;
cout<<"======================="<<endl;
cout<<"Masukkan kode barang : ";cin>>kd_brg;
cout<<"Masukkan nama barang : ";cin>>nm_brg;
cout<<"Masukkan harga barang : ";cin>>hrg_brg;
cout<<"Masukkan jumlah barang : ";cin>>jml_brg;
cout<<"========================="<<endl;
Total_Belanja=hrg_brg*jml_brg;
cout<<"Total : Rp."<<Total_Belanja<<endl;
cout<<"========================="<<endl;
if(Total_Belanja<=100000){
diskon=Total_Belanja*0;
}
else if(Total_Belanja>=100000){
diskon=Total_Belanja*5/100;
}
cout<<"Diskon : Rp."<<diskon<<endl;
bayar=Total_Belanja-diskon;
cout<<"Total bayar : Rp."<<bayar<<endl;
cout<<"========================"<<endl;
cout<<"Masukkan jumlah uang : Rp.";cin>>jml_uang;
cout<<"========================(-)"<<endl;
kembali=jml_uang-bayar;
cout<<"Kembali : Rp."<<kembali<<endl<<endl;
cout<<"Brang yang sudah dibeli tidak dapat ditukar atau dikembalikan"<<endl;
cout<<"Terimakasih atas kunjungan anda"<<endl<<endl;
cout<<"Ulangi lagi : ";cin>>lnjt;
cout<<endl<<endl;
}while(lnjt=='Y' || lnjt=='y');
system("pause");

}

Hasil Kasus 8



9. [Proyek] Buatlah suatu class yang akan mengeksplorasi kalimat. Kalimat dapat disimpan dalam bentuk array (kumpulan) karakter.



Algoritma menghitung jumlah huruf vokal dan konsonan
{mengeksplorasi kalimat yang dinputkan, kemudian akan menghitung jumlah vokal dan konsonan yang terdapat sebuah kalimat yang telah diinputkan}
Deklarasi
i,vokal,konsonan,x : Integer
kalimat : Char
Deskripsi
Read (kalimat)
i=0,vokal=0,konsonan=0
for(i=0;i<x;i++)do
if(kalimat[i]=='a'||kalimat[i]=='i'||kalimat[i]=='u'||kalimat[i]=='e'||kalimat[i]=='o')then
vokal+1;

konsonan+1
write (vokal,konsonan)
endfor
endif

Translasi 9

#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;

class konvo{
 private:
 int i,vokal,konsonan,x;
 char kalimat[50];

 public:
 konvo();
 void input();
 void proses();
 void output();
};

konvo::konvo(){
 cout<<"\t\tPEROGRAM MENGHITUNG HURUF KONSONAN DAN VOKAL\n";
 cout<<endl<<endl;
}
void konvo::input(){
 cout<<"Silahkan Masukkan Kalimat: ";
 cin.getline(kalimat,50);
}
void konvo::proses(){
 i=0,vokal=0,konsonan=0;
 x=strlen(kalimat);
 for(i=0;i<x;i++)
{
 if(kalimat[i]=='a'||kalimat[i]=='i'||kalimat[i]=='u'||kalimat[i]=='e'||kalimat[i]=='o')
 vokal++;
 konsonan++;
}
}
void konvo ::output(){
 cout<<"Jumlah Huruf Vokal\t: "<<vokal<<" huruf"<<endl;
 cout<<"Jumlah Huruf Konsonan\t: "<<konsonan<<" huruf"<<endl;
}

int main()
{
 konvo fen;
 fen.input();
 fen.proses();
 fen.output();
 return 0;

}

Hasil Kasus 9







0 komentar:

Posting Komentar

Popular Posts

Diberdayakan oleh Blogger.