Flashindo Academy
Selamat datang di Flashindo Academy, akademi pembuat Flash :wave:
Di sini Anda bisa berbagi proyek/karya Flash-mu dan lain-lain disini :)

Ayo langsung join :D dan akun langsung aktif lho.. :-


Akademi Pembuat Flash
 
HomeTata TertibFAQSearchMemberlistUsergroupsRegisterLog in

Share | 
 

 [C] Tower of Hanoi (with ADT Stack)

View previous topic View next topic Go down 
AuthorMessage
ListRA-92
The Headmaster
avatar

Posts : 93
Cash : 394
Appreciations : 0
Location : antara ada dan tiada~ :-
Jenjang Pendidikan : Kuliah
Join date : 2010-10-15
Status : ADT Listra Linier Berkait :hammer:

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

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
View user profile http://flashindo.forumotion.net
muhremantra
Student E
avatar

Posts : 1
Cash : 1
Appreciations : 0
Join date : 2010-10-26

PostSubject: Re: [C] Tower of Hanoi (with ADT Stack)   Sun Oct 31, 2010 8:53 pm

oia, setelah dicompile pake gcc, kalo mau langsung run tinggal ketik ./hanoi.exe (untuk contoh di atas)

misal:
[...] gcc -o coba.exe tes.c drivertes.c -lm
[...] ./coba.exe

*jangan pedulikan simbol [...]
Back to top Go down
View user profile
ListRA-92
The Headmaster
avatar

Posts : 93
Cash : 394
Appreciations : 0
Location : antara ada dan tiada~ :-
Jenjang Pendidikan : Kuliah
Join date : 2010-10-15
Status : ADT Listra Linier Berkait :hammer:

PostSubject: Re: [C] Tower of Hanoi (with ADT Stack)   Sun Oct 31, 2010 9:04 pm

Nama programnya, tergantung yg di command gcc-nya
Jadi, kalo:
gcc -o coba.exe ... , ya jalaninnya ./coba.exe
gcc -o muhremantra.exe ... , ya jalaninnya ./muhremantra.exe
Back to top Go down
View user profile http://flashindo.forumotion.net
Sponsored content




PostSubject: Re: [C] Tower of Hanoi (with ADT Stack)   

Back to top Go down
 
[C] Tower of Hanoi (with ADT Stack)
View previous topic View next topic Back to top 
Page 1 of 1
 Similar topics
-
» My Life Behind A Tower...(Silver Shadows)
» Windsong tower of Wizardy
» Sir Frederick Tower Hamilton
» The Black Dragon in the Tower!
» Twisted Tower Rubble

Permissions in this forum:You cannot reply to topics in this forum
Flashindo Academy :: Education Class :: Programming :: Scripts Lounge-
Jump to: