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

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

 
 

 [C] Tower of Hanoi (with ADT Stack)

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


Status : Ngacay :v
Posts : 424
Chips : 4172
Power : 14
Join date : 2010-09-22
Location : Antara ada dan tiada :-
Badge :

PostSubject: [C] Tower of Hanoi (with ADT Stack)   
Wed 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:





SIGGY KOSONG
Back to top Go down
View user profile https://bungatepijalan.wordpress.com
Prodixon
Head Administrator, ProDig Founder


Status : Akhirnya kembali...
Posts : 648
Chips : 4388
Power : 8
Join date : 2010-08-08
Location : ProDig
Badge :

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


Ampun Bunga :sembah:

Dewalah...

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





Situsku: Stitched
Guest, kasih Internet donk gan! (Tenang, internet di sini maksudnya adalah cendol XD)

Back to top Go down
View user profile http://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: