Prodig - Komunitas Proyek Digital
Selamat datang di ProDig!
Di sini adalah tempat untuk berbagi proyek (game, seni, program, dan situs).
Di sini Anda juga bisa mendapatkan hal lainnya seperti permainan, berbagi karya, ilmu pengetahuan, kesenangan, dan sebagainya. :)

Ayo daftar lalu langsung login tanpa perlu konfirmasi email sama sekali :D!
Prodig - Komunitas Proyek Digital
Selamat datang di ProDig!
Di sini adalah tempat untuk berbagi proyek (game, seni, program, dan situs).
Di sini Anda juga bisa mendapatkan hal lainnya seperti permainan, berbagi karya, ilmu pengetahuan, kesenangan, dan sebagainya. :)

Ayo daftar lalu langsung login tanpa perlu konfirmasi email sama sekali :D!
Prodig - Komunitas Proyek Digital
Would you like to react to this message? Create an account in a few clicks or log in to continue.
Prodig - Komunitas Proyek Digital

Tempat untuk berbagi proyek digital : Situs, Game, Seni, Program
 
PortalHomeRulesSearchLatest imagesRegisterLog in
Welcome to the ProDig, Guest!

 [C] Tower of Hanoi (with ADT Stack) Resize
 

 [C] Tower of Hanoi (with ADT Stack)

View previous topic View next topic Go down 
AuthorMessage
Alissa
Ngacay Princess
Alissa

Status : Ngacay :v
Posts : 424
Chips : 6865
Power : 14
Join date : 2010-09-22
Location : Antara ada dan tiada :-
Badge : [C] Tower of Hanoi (with ADT Stack) Visual13 [C] Tower of Hanoi (with ADT Stack) Ntitle10[C] Tower of Hanoi (with ADT Stack) Visualart20112

[C] Tower of Hanoi (with ADT Stack) _
PostSubject: [C] Tower of Hanoi (with ADT Stack)   
[C] Tower of Hanoi (with ADT Stack) Icon_minitimeWed Oct 27, 2010 11:52 am


Overview:

Tipe bikinan: boolean.h
Code:
#ifndef boolean_H
#define boolean_H
#define true 1
#define false 0
#define boolean unsigned char
#endif

ADT Stack Header: stack.h
Code:
#include <stdio.h>
#include "boolean.h"
#ifndef STATIK_STACK_H
#define   STATIK_STACK_H

#define Nil 0
#define MaxEl 50

typedef int infotype;
typedef int address;
typedef struct
    {
      infotype T [MaxEl];
      address TOP;
    } Stack;

/***************************KONSTRUKTOR*************************/
void CreateEmpty (Stack *S);
/*I.S. Sembarang
  F.S. Membuat sebuah stack S yang kosong berkapasitas MaxEl
  jadi indeksnya antara 1..MaxEl
  Ciri stack kosong : TOP bernilai Nil */

/**********************Predikat Untuk test keadaan KOLEKSI***********************/
boolean IsEmpty (Stack S);
/*Mengirim true jika Stack kosong */

boolean IsFull (Stack S);
/*Mengirim true jika array penampung nilai elemen stack penuh*/

/*********************OPERATOR*********************/
void Push (Stack *S, infotype X);
/*Menambahkan X sebagai elemen Stack S.
  I.S. S mungkin kosong, tabel penampung elemen stack TIDAK penuh
  F.S. X menjadi TOP yang baru, TOP bertambah 1 */

void Pop (Stack *S, infotype *X);
/*Menghapus X dari Stack S.
  I.S. S tidak kosong
  F.S. X adalah nilai elemen TOP yang lama, TOP berkurang 1 */

void ShowS (Stack S);

#endif

ADT Stack Body: stack.c
Code:
#include <stdio.h>
#include "stack.h"

/***************************KONSTRUKTOR*************************/
void CreateEmpty (Stack *S)
/*I.S. Sembarang
  F.S. Membuat sebuah stack S yang kosong berkapasitas MaxEl
  jadi indeksnya antara 1..MaxEl
  Ciri stack kosong : TOP bernilai Nil */
{
   (*S).TOP=Nil;
}

/**********************Predikat Untuk test keadaan KOLEKSI***********************/
boolean IsEmpty (Stack S)
/*Mengirim true jika Stack kosong */
{
   return (S.TOP==Nil);
}

boolean IsFull (Stack S)
/*Mengirim true jika array penampung nilai elemen stack penuh*/
{
   return (S.TOP>=MaxEl);
}

/*********************OPERATOR*********************/
void Push (Stack *S, infotype X)
/*Menambahkan X sebagai elemen Stack S.
  I.S. S mungkin kosong, tabel penampung elemen stack TIDAK penuh
  F.S. X menjadi TOP yang baru, TOP bertambah 1 */
{
   if(!IsFull (*S)){
      (*S).TOP++;
      (*S).T[(*S).TOP-1]=X;
   }
}

void Pop (Stack *S, infotype *X)
/*Menghapus X dari Stack S.
  I.S. S tidak kosong
  F.S. X adalah nilai elemen TOP yang lama, TOP berkurang 1 */
{
   if(!IsEmpty (*S)){
      *X=(*S).T[(*S).TOP-1];
      (*S).TOP--;
   }
}

void ShowS (Stack S){
   Stack ST;
   infotype X;
   CreateEmpty (&ST);
   printf("|");
   if(!IsEmpty (S)){
      while(!IsEmpty (S)){
         Pop (&S, &X);
         Push (&ST, X);
      }
      while(!IsEmpty (ST)){
         printf("%d",ST.T[ST.TOP-1]);
         Pop (&ST, &X);
      }
   }
   printf("\n");
}

Main Program: hanoi.c
Code:
#include <stdio.h>
#include "stack.h"

void ShowStacks();
void MovePiece();
void MoveTower();

int main() {
   Stack S[3];
   int n,i;
   
   printf("n = ");
   scanf("%d",&n);
   for(i=1;i<=3;i++){
      CreateEmpty (&S[i]);
   }
   for(i=n;i>=1;i--){
      Push (&S[1], i);
   }
   ShowStacks(S);
   MoveTower(S,n,1,3);
   printf("Done.");
    return 0;
}

void ShowStacks(Stack S[3]){
   int i;
   for(i=1;i<=3;i++){
      ShowS (S[i]);
   }
   printf("\n");
   getch();
}

void MovePiece(Stack S[3],int si,int sf){
   infotype X;
   Pop (&S[si], &X);
   Push (&S[sf], X);
   ShowStacks(S);
}

void MoveTower(Stack S[3],int m,int si,int sf){
   if(m==1){
      MovePiece(S,si,sf);
   }else{
      MoveTower(S,m-1,si,6-si-sf);
      MovePiece(S,si,sf);
      MoveTower(S,m-1,6-si-sf,sf);
   }
}

Cara penggunaan:
- Buat file header, body ADT dan drivernya (program utama) dari script diatas
- Pastikan semua file tersebut yang dibutuhkan berada di direktori yang sama dengan compiler gcc
- Compile dengan menggunakan gcc di command prompt, ketiknya: gcc -o hanoi.exe hanoi.c stack.c
- Selanjutnya tinggal jalankan aja program hanoi.exe :kabur:

Created by: Bunga Tepi Jalan

Credits
- http://en.wikipedia.org/wiki/Tower_of_Hanoi

NB: Lihat konsep dan prinsip Menara Hanoi di: http://flashindo.forumotion.net/math-science-f7/math-game-tower-of-hanoi-t21.htm :kabur:



Back to top Go down
https://bungatepijalan.wordpress.com
Prodixon
Head Administrator, ProDig Founder
Prodixon

Status : Akhirnya kembali...
Posts : 648
Chips : 7081
Power : 8
Join date : 2010-08-08
Location : ProDig
Badge : [C] Tower of Hanoi (with ADT Stack) Visual11 [C] Tower of Hanoi (with ADT Stack) 378138

[C] Tower of Hanoi (with ADT Stack) _
PostSubject: Re: [C] Tower of Hanoi (with ADT Stack)   
[C] Tower of Hanoi (with ADT Stack) Icon_minitimeWed Oct 27, 2010 12:07 pm


Ampun Bunga :sembah:

Dewalah...

Mantap juga Struktur Data Stack diaplikasikan ke dalam Tower of Hanoi :sembah:



Back to top Go down
https://prodig.forumotion.net
 

[C] Tower of Hanoi (with ADT Stack)

View previous topic View next topic Back to top 
Page 1 of 1

Permissions in this forum:You cannot reply to topics in this forum
Prodig - Komunitas Proyek Digital  :: Education Chamber :: Programming :: C-
Jump to: