#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