#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; } }
Subscribe to:
Post Comments
(
Atom
)
0 comments:
Post a Comment