latest Post

Program Tower Of Hanoi rekursif dan iterative dengan validasi di C++




#include <iostream>
#include <math.h>
#include <limits>
#include <cstdlib>
#include <cstring>
using namespace std;

void Hanoi1(int N, char asal, char bantu, char tujuan);
void Hanoi(int piringan);
void tower(unsigned int piringan);
void Hanoi2(int piringan);

int kata;
char val [100];

int validasi()
{
    do
    {
        kata=0;
        cout<<"\t\t";cin>>val;
        for(int i=0; i<strlen(val); i++)
        {
            if(isdigit(val[i])==0)
                kata++;
        }
        if(kata !=0)
            cout<<"\t\tInput salah !\n"<<endl;

    }
 while(kata!=0);
    return 0;
}


int main(){
      int piringan,pilihan;
      
      cout<<"\tFungsi Rekursif dan Iterative Tower Of Hanoi"<<endl;
      cout<<"\t============================================"<<endl; 
   cout<<"\t\tTekan 1 untuk Tower of Hanoi Rekursif\n\t\tTekan 2 untuk Tower of Hanoi1 Iterative\n\t\tTekan 3 untuk Berehenti"<<endl;
   
   balik:
   cout<<"\n\t\tMasukkan Pilihan : ";
   validasi(); pilihan=atoi(val);
   
   switch(pilihan){
   
   case 1 : {
    cout<<"\n\t\tTower of Hanoi Rekursif ";
    cout<< "\n\t\tBanyaknya piringan: ";
  validasi(); piringan=atoi(val);
  if (piringan<=0)
   cout<<"\t\tNilai harus berupa bilangan bulat positif";
  else
   Hanoi(piringan); 
  break;
  }  
      
   case 2 :{
    cout<<"\n\t\tTower of Hanoi Iterative ";
    cout<< "\n\t\tBanyaknya piringan: ";
  validasi(); piringan=atoi(val);
  if (piringan<=0)
   cout<<"\t\tNilai harus berupa bilangan bulat positif";
  else
   Hanoi2(piringan);

  break;
   }   
   
   case 3:{
    cout<<"\t\tBye ";
    return 0;
   }
    
   default :
    cout<<"\t\tPilihan salah !";
   
   }
   
 cout<<"\n\t--------------------------------------------"<<endl; 
 system("pause");
 goto balik;
      
}

void Hanoi1(char A, char C, char B, int n)
{
     if (n==1) 
      cout<<"\t\tpindahkan cakram ke-"<<n<<" dari "<<A<<" ke "<<C<<"\n";
  else {
      Hanoi1(A,B,C,n-1);
       cout<<"\t\tpindahkan cakram ke-"<<n<<" dari "<<A<<" ke "<<C<<"\n";
       Hanoi1(B,C,A,n-1);
    }
}

void Hanoi(int piringan){
 int jum;
 int v;
 char X='A';
 char Y='B';
 char Z='C';
  
  if (piringan>0){
   cout<<endl;
   Hanoi1(X,Z,Y,piringan);
   jum=pow(2,piringan)-1;
   cout<<endl<<"\t\tjumlah perpindahan sebanyak = "<<jum<<" kali"<<endl;
     }
}

void tower(unsigned int piringan) {
 unsigned int c, i, zeros, m = 1 << piringan;
 char huruf,huruf1;
  for(i=1; i < m; i++) {
      for(c=i, zeros=1; !(c&1); c>>=1, zeros++); 
       if ((i&i-1)%3==0)
       huruf='A';
       else if ((i&i-1)%3==1)
       huruf='B';
       else
       huruf='C';
       
       if (((i|i-1)+1)%3==0)
       huruf1='A';
       else if (((i|i-1)+1)%3==1)
       huruf1='B';
       else
       huruf1='C';
       cout<<"\t\tpindahkan cakram ke-"<<zeros<<" dari "<<huruf<<" ke "<<huruf1<<"\n"; 
  }
}

void Hanoi2(int piringan){
 int jum;
 int v;
 char X='A';
 char Y='B';
 char Z='C';
  
  if (piringan>0){
   cout<<endl;
   tower(piringan);
   jum=pow(2,piringan)-1;
   cout<<endl<<"\t\tjumlah perpindahan sebanyak = "<<jum<<" kali"<<endl;
     }
}




About Unknown

Unknown
Recommended Posts × +

0 comments:

Post a Comment