ListRA-92 The Headmaster
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:
| Subject: [C] Tower of Hanoi (with ADT Stack) Wed Oct 27, 2010 12:22 pm | |
| - Overview:
Menara Hanoi adalah salah satu permainan puzzle yang menggunakan tumpukan keping. Terdiri dari tiga batang (kolom) dan sejumlah keping dengan ukuran berbeda yang dapat masuk/keluar kolom. Tujuan permainan ini adalah memindahkan semua tumpukan keping dari satu kolom ke kolom lain.
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
Created by: Bunga Tepi Jalan
Credits - http://en.wikipedia.org/wiki/Tower_of_Hanoi
NB: Lihat konsep dan prinsip Menara Hanoi di: https://flashindo.rpg-board.net/math-science-f7/math-game-tower-of-hanoi-t21.htm | |
|
muhremantra Student E
Posts : 1 Cash : 1 Appreciations : 0 Join date : 2010-10-26
| Subject: 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 [...] | |
|
ListRA-92 The Headmaster
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:
| Subject: 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 | |
|
Sponsored content
| Subject: Re: [C] Tower of Hanoi (with ADT Stack) | |
| |
|