Selasa, 19 April 2016

DFS Implementation C#

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{   int m[100][2];
    int map[10][10] =   {{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
                         {0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1},
                         {0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0},
                         {0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0}};

   
    int ssx = 0,i; //start state koordinat x
    int tempx,tempy;
    int ssy = 0; //start state koordinat y
    int fsx = 3; //final state koordinat x
    int fsy = 2; //final state koordinat y
    int visited[100][2];
    int stack[100][2];
    int indexs=0,indexv = 0,cond;
    stack[indexs][0] = ssx;
    stack[indexs][1] = ssy;
    visited[indexv][0] = ssx;
    visited[indexv][1] = ssy;

   while(ssx != fsx || ssy != fsy){
    tempx = ssx;
    tempy = ssy;
    cond = 0;
system("cls");
printmap(map,visited,ssx,ssy,indexv+1);
printf("stack status : \n");
for(i=0;i<indexs;i++){
    if(i==indexs-1){
    printf("{%d %d}",stack[i][0],stack[i][1]);
    }
    else{
    printf("{%d %d}",stack[i][0],stack[i][1]);
    }
}
getch();

    //    printf("%d  %d\n", ssx, ssy);
    moveright(&ssx,&ssy);
   //printf("%d\n",map[ssx][ssy]);
    if(map[ssx][ssy] == 0 || in_array(visited,ssx,ssy,indexv+1) ){

    if(tempx == ssx && tempy == ssy){
    moveleft(&ssx,&ssy);
    }
    else{
    moveleft(&ssx,&ssy);
    moveleft(&ssx,&ssy);
    }
    if(map[ssx][ssy] == 0 || in_array(visited,ssx,ssy,indexv+1) ){
            if(tempx == ssx && tempy == ssy){
    movedown(&ssx,&ssy);
    }
    else{
            moveright(&ssx,&ssy);
            movedown(&ssx,&ssy);
    }
            if(map[ssx][ssy] == 0 || in_array(visited,ssx,ssy,indexv+1) ){
            if(tempx == ssx && tempy == ssy){
            moveup(&ssx,&ssy);
            }
            else{
            moveup(&ssx,&ssy);
            moveup(&ssx,&ssy);
            }
            if(map[ssx][ssy] == 0 || in_array(visited,ssx,ssy,indexv+1)){
                if(tempx != ssx && tempy != ssy){
                movedown(&ssx,&ssy);
                }
                indexs--;
                ssx = stack[indexs][0];
                ssy = stack[indexs][1];
                cond = 1;
            }
            }

    }
    }

    if(cond == 0){
    indexs++;
    indexv++;
    stack[indexs][0] = ssx;
    stack[indexs][1] = ssy;
    visited[indexv][0] = ssx;
    visited[indexv][1] = ssy;
    }

  //  printmap(map,visited,ssx,ssy,indexv);

 //   printmap(map, visited,ssx,ssy,indexv);

    }
system("cls");
    printmap(map,visited,fsx,fsy,0);

printf("jalur : \n");
for(i=0;i<indexs;i++){
    printf("%d %d\n",stack[i][0],stack[i][1]);
}
printf("%d %d",fsx,fsy);

}
void moveup(int *x, int *y){
if((*x) == 0){
    return;
}
else{
    (*x)--;
}
}
void movedown(int *x, int *y){
if((*x) == 3){
    return;
}
else{
    (*x)++;
}
}
void moveleft(int *x, int *y){
if((*y) == 0){
    return;
}
else{
    (*y)--;
}
}
void moveright(int *x, int *y){
if((*y) == 11){
    return;
}
else{
    (*y)++;
}
}



int in_array(int a[100][2], int x, int y,int jum){
int i,bool = 0;

for(i = 0;i<jum;i++){
    if(a[i][0] == x && a[i][1] == y ){
        bool = 1;
        break;
    }
}
return bool;
}

void printmap(int m[10][10], int v[100][2], int x, int y, int count){
int i,j;
for(i=0;i<4;i++){
    for(j=0;j<12;j++){
        if( x == i && y == j){
            printf("->* ");
        }
        else if(in_array(v,i,j,count)){
            printf("*   ");
        }
        else{
            printf("%d   ",m[i][j]);
        }


    }
    printf("\n");
}
}

Kamis, 11 Juni 2015

4th Semester Big Project, Plagiarism checker by winnowing method (Java source code)

kali ini saya ingin membagikan program penganalisis plagiarisme dokumen yang menampilkan skor akhir dalam bentuk skala dari 0 hingga 100%. Hal yang perlu diperhatikan: error pasti terjadi ketika proses compile dilakukan, karena anda harus menyesuaikan lokasi 2 buah direktori file yang akan dibandingkan sesuai dengan yang ada di komputer anda. Dan berikut adalah source code untuk versi Trialnya.


/**
 *
 * @author Daves-PC
 */
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.TreeSet;

public class Plagcheck2 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws FileNotFoundException {
        // TODO code application logic here
        int jum;
        double fs;
        int sim;
        Plagcheck doc1 = new Plagcheck();
        Plagcheck doc2 = new Plagcheck();
        doc1.mainframe("E:/text1.txt");
        doc2.mainframe("E:/text2.txt");
       
        sim = doCompare(doc1.fingerprint,doc2.fingerprint);
        jum = union(doc1.fingerprint,doc2.fingerprint,doc1.hitung(doc1.fingerprint),doc2.hitung(doc2.fingerprint));
        fs = (sim*1.0) / jum;
        fs *= 100;
        System.out.println(fs+"%");
       
    }
    static int union(long[] a, long[] b, int asize, int bsize){
        TreeSet<Long> t = new TreeSet<Long>();
        Plagcheck pc = new Plagcheck();
        for(int i = 0; i<asize;i++){
               t.add(a[i]);
        }
        for(int i = 0; i<bsize;i++){
               t.add(b[i]);
        }
        return t.size();
    }
    
    
     static int doCompare(long[] a, long[] b){
        int i = 0;
        int j = 0;
        int score = 0;
        while(a[i] != 0){
           j = 0;
            while(b[j] != 0){
                if(a[i] == b[j]){
                    score+=1;
                    //System.out.println(a[j]);
                }
                j++;
               
            }
            i++;
        }
        return score;
    }
   
}


class Plagcheck {

    /**
     * @param args the command line arguments
     */
    long[] fingerprint = new long[10000000];
    void mainframe(String DATA_PATH) throws FileNotFoundException{
        String  value = null;
        String words = null;
        File f = new File(DATA_PATH);
        StringBuilder sb = new StringBuilder();
        Scanner scanner = new Scanner(f);
        scanner.useDelimiter("\n");
       
        int i = 0;
        char[] a = new char[5];
        int j = 0;
        int z = 0;
        int c = 0;
        long temp = 0;
        long[] hash = new long[10000000];
        long[][] window = new long[1000000][5];
        while(scanner.hasNext()){
        value = scanner.next();
        value = value.replace("\n","");
        value = value.replace("\r","");
        value = value.replace(" ", "");
       
        sb.append(value+"");
    }
       
       
        words = doFilter(sb.toString());
        words = words.toLowerCase();
        for(i=0;i<=words.length()-5;i++){
            z = i;
            for(j=0;j<=4;j++){
                a[j] = words.charAt(z);
                z+=1;
            }
            hash[i] = rollingHash(a);
           
        }
        for(i=0;i<=words.length()-5;i++){
            z=i;
            for(j=0;j<=4;j++){
            window[i][j] = hash[z];
            z+=1;
               
            }
        }
       
        for(i=0;i<=words.length()-5;i++){
        temp = min(window[i]);
        j=0;
        while(fingerprint[j]!=0){
            if(temp == fingerprint[j]){
                break;
            }
            j++;
        }
        if(fingerprint[j] == 0){
            fingerprint[c] = temp;
            c+=1;
        }
        }
}
    public int hitung(long[] a){
        int b = 0, jum =0;
        while(a[b] != 0){
            b++;
            jum++;
           
        }
        return jum;
       
    }
    public long min(long[] a){
    long min = a[0];
    for(int i=1;i<4;i++){
        if(min > a[i]){
            min = a[i];
        }
    }
            return min;

    }
   
   
     
    public Long rollingHash(char[] sub) { 
        long hash_value = 0; 
        int ascii; 
        int prev_hash = 0; 
        int basis = 3; 
        int c_awal = 0; 
        int length = sub.length - 1; 
        if (prev_hash == 0) { 
            for (int i = 0; i <= length; i++) { 
                ascii = sub[i]; 
                hash_value += (long) (ascii * Math.pow(basis, length - i)); 
                 
            } 
        } else { 
            hash_value = prev_hash - (long) (c_awal * Math.pow(basis, length)); 
            hash_value *= basis; 
            hash_value += sub[length]; 
        } 
        c_awal = sub[0]; 
        prev_hash = (int) hash_value; 
         
        return hash_value; 
    }
    public static String doFilter(String sourceDocument){
        sourceDocument= sourceDocument.replaceAll("[^A-Za-z0-9]", "");
        sourceDocument=sourceDocument.replaceAll("\\s+", "");
        sourceDocument=sourceDocument.replace(".", "");
        sourceDocument=sourceDocument.replace(",", "");
        sourceDocument=sourceDocument.replace(":", "");
      
        return sourceDocument;
    }   
}

Kenapa saya bilang Trial Version? Karena source code di atas dijalankan dalam bentuk console tanpa GUI (Jframe form) dan hanya bisa membandingkan 2 buah file berformat txt. Jika anda berminat untuk memiliki versi Fullnya (bisa membaca file PDF dengan tampilan GUI) silahkan kontak saya di :
Facebook : David Kurniawan P
twitter : @trueintrovert
trimakasih.

Sabtu, 11 April 2015

Stack Implementation

Apa itu Stack dalam sebuah struktur data? Stack adalah sebuah tumpukan dan seperti halnya ketika kita menumpuk suatu barang, maka barang terakhir yang kita tumpuk adalah yang pertama kita ambil. Dengan konsep seperti ini saya membuat sebuah game tower of hanoi. Keterangan mengenai game bisa dilihat di : http://id.wikipedia.org/wiki/Menara_Hanoi. Dan berikut adalah source codenya dalam Bahasa C :

#include <stdio.h>
#include <time.h>

struct setek {
   int *v;
   int top;
   int sz;
};
struct disk_move{
   int from;
   int to;
};

int IsFull(struct setek s);
int IsEmpty(struct setek s);
void create_empty(struct setek *s, int sze);
void push(struct setek *s, int a);
void pop(struct setek *s, int *a);
void initialize_main_stack(struct setek *s);
void print_stack(struct setek s[]);
void play_title_screen();
void play_main_menu();
void play_game();
void play_ask_move(struct setek s[],struct disk_move *answer);
void play_rule();
void brute_solve();
int cek_urut(struct setek s);
int play_exit();

int turn = 1;
int game_over;

int main ()
{
   play_title_screen();
   play_main_menu();

   return 0;
}

void play_title_screen()
{
   printf("*******************************************************************************\n"
          "* Xtremiststudio                                                    *\n"
          "*                                                                             *\n"
          "*                                                                             *\n"
          "*                                                                             *\n"
          "*                                                                             *\n"
          "*                                                                             *\n"
          "*                                                                             *\n"
          "*                           TOWER OF HANOI v1.00                              *\n"
          "*                                                                             *\n"
          "*                              [press any key]                                *\n"
          "*                                                                             *\n"
          "*                                                                             *\n"
          "*                                                                             *\n"
          "*                                                                             *\n"
          "*                                                                             *\n"
          "*                                                                             *\n"
          "*                                                                             *\n"
          "*                                                                             *\n"
          "*                                                                             *\n"
          "* Stefano Felix Pranata   A11.2013.07394                                      *\n"
          "* David Kurniawan P        A11.2013.07426                                      *\n"
          "* Melita Widya Ningrum    A11.2013.07651                                      *\n"
          "*******************************************************************************\n");
   getch();
}

void play_main_menu()
{
   srand(time (NULL));

   int menu = 0;
   system("cls");

   printf("******************\n"
          "* 1. play        *\n"
          "* 2. rules       *\n"
          "* 3. brute solve *\n"
          "* 0. exit        *\n"
          "******************\n"
          "Select Menu [0..3] : ");
   scanf("%d",&menu);
   if (menu == 1) {
      play_game();
   }
   else if (menu == 2) {
      play_rule();
      play_main_menu();
   }
   else if (menu == 3) {
      brute_solve();
   }
   else if (menu == 0) {
      play_exit();
   }
}

int play_exit()
{
   return 0;
}

void play_rule()
{
   system("cls");
   printf("bla bla bla :v");
   getch();
}


void create_empty(struct setek *s, int sze)
{
   (*s).top = 0;
   (*s).v=(int*) malloc(sze*sizeof(int) + 2); // bug fixed angka 1 gila :V wkwkwwkkwkwwkk

   (*s).sz = sze;
   (*s).v[0]=sze+1;

}
int IsEmpty(struct setek s)
{
   return (s.top == 0 ? 1 : 0);
}
int IsFull(struct setek s)
{
   return (s.top == s.sz ? 1 : 0);
}

void push(struct setek *s, int a)
{
   (*s).v[++(*s).top] = a;
}

void pop(struct setek *s, int *a)
{
   *a=(*s).v[(*s).top--];
}




void initialize_main_stack (struct setek *s)
{
   int counter;
   for (counter = (*s).sz ; counter >0;counter--){
      (*s).v[++(*s).top] = counter;
   }
}

void print_stack(struct setek s[])
{
   int counter;
   int counter2;
   system ("cls");

   printf("%12s%12s%12s\n\n","stack 1","stack 2","stack 3");

   for(counter = s[1].sz ; counter >= 0 ;counter--){
      for(counter2 = 1; counter2 < 4;counter2++){
         if(counter > s[counter2].top) {
            printf("%12s"," ");
         }
         else if( counter == 0) {
            printf("%12s","|||");
         }
         else {
            printf("%12d",s[counter2].v[counter]);
         }
      }
      printf("\n");
   }
}

void play_ask_move(struct setek s[],struct disk_move *answer)
{
   printf("\nturn : %d\n\n", turn);
   printf("move from stack [1..3] : ");
   scanf("%d",&(*answer).from);
   while (s[(*answer).from].top == 0 || (*answer).from > 3 || (*answer).from < 0){
      system("cls");
      print_stack(s);
      printf("\nturn : %d\n\n", turn);
      printf("move from stack [1..3] : ");
      scanf("%d",&(*answer).from);
   }
   printf("move to stack [1..3] : ");
   scanf("%d",&(*answer).to);
   while ((*answer).to > 3 || (*answer).to <= 0 ){
      system("cls");
      print_stack(s);
      printf("\nturn : %d\n\n", turn);
      printf("move from stack [1..3] : %d\n",(*answer).from);
      printf("move to stack [1..3] : ");
      scanf("%d",&(*answer).to);
   }
}

//void play_move(struct setek *s[],struct disk_move answer)
//{
//   push(& *s[answer.to] , (*s[answer.from]).v[(*s[answer.from]).top]);
//}
void play_game()
{
   system ("cls");

   struct setek s[4];
   struct disk_move answer;
   struct disk_move log[99999];
   int counter;
   int height;
   int win = 0;



   printf("input tinggi menara : ");
   scanf("%d",&height);
   printf("input target waktu, (-1 disable) : ");
   scanf("%d",&game_over);

   for(counter = 1;counter < 4;counter++){
      create_empty(&s[counter],height);
   }

   initialize_main_stack(&s[1]);
   while (win != 1) {

      print_stack(s);
      play_ask_move(s,&answer);
      if (s[answer.to].v[s[answer.to].top] > s[answer.from].v[s[answer.from].top]) {
         s[answer.to].v[++s[answer.to].top] = s[answer.from].v[s[answer.from].top--];
         log[turn] = answer;
         turn++;
         if (IsFull(s[3])){
            win = 1;
         }
         else if (turn == game_over + 1) {
            system("cls");
            printf("game over");
            exit(1);
         }
      }
   }
   print_stack(s);
   for (counter = 1; counter < turn; counter++) {
      printf("%d -> %d",log[counter].from,log[counter].to);
      printf("%s", (counter % 9 ? "   " : "\n"));
   }
   printf("solved in %d turn",turn - 1);

}

void brute_solve()
{
   system ("cls");

   struct setek s[4];
   struct disk_move answer;
   struct disk_move log[100000];
   int counter;
   int height;
   int win = 0;



   printf("input tinggi menara : ");
   scanf("%d",&height);

   for(counter = 1;counter < 4;counter++){
      create_empty(&s[counter],height);
   }

   initialize_main_stack(&s[1]);
   while (win != 1) {

      print_stack(s);

      answer.from = rand()% 3 + 1; // EDISI 1
      while (answer.from == 3 && cek_urut(s[3]) == 1) { // EDISI 2
         answer.from = rand()% 3 +1; // EDISI 2
      }
      answer.to = rand()% 3 + 1; // EDISI 1

   while(turn > 1 && answer.from == log[turn-1].to && answer.to == log[turn-1].from) { // EDISI 3
      answer.from = rand()% 3 + 1; // EDISI 3
      while (answer.from == 3 && cek_urut(s[3]) == 1) { // EDISI 3
         answer.from = rand()% 3 +1; // EDISI 3
      }
      answer.to = rand()% 3 + 1; // EDISI 3
   }

      if (s[answer.to].v[s[answer.to].top] > s[answer.from].v[s[answer.from].top]) {
         s[answer.to].v[++s[answer.to].top] = s[answer.from].v[s[answer.from].top--];
         log[turn] = answer;
         turn++;

         if (IsFull(s[3])){
            win = 1;
         }
      }
   }
   print_stack(s);
   for (counter = 1; counter < turn; counter++) {
      printf("%d -> %d",log[counter].from,log[counter].to);
      printf("%s", (counter % 9 ? "   " : "\n"));
   }
      printf("\nsolved in %d turn",turn - 1);
}

void delay(int s)
{
   int t1 = time(NULL);
   int t2 = time(NULL) + s;
   while(1){
   t1 = time(NULL);
   }
}

int cek_urut(struct setek s)
{
   int counter;
   int counter2 = 1;

   for(counter = s.sz; counter2 <= s.top; counter--){
      if (s.v[counter2] == counter){
         counter2++;
      }
      else {
         return 0;
      }
   }
   return 1;
}

Saya ingin menjelaskan tentang pilihan brute force. Apa itu brute force? Brute force adalah metode pengacakan tanpa arah untuk mencoba semua kemungkinan demi memindahkan elemen dari stack 1 ke stack 3 dengan menggunakan perantara stack 2. Metode ini efektif (jeda waktu tidak terlalu lama) hanya hingga stack ber elemen 5. Lebih dari itu prosesnya akan memakan waktu sangat lama. Oleh karena itu, metode paling baik untuk menyelesaikan game ini adalah mencobanya dengan kemampuan otak anda sendiri. Selamat mencoba dan terimakasih. 








Jumat, 10 April 2015

Queue Implementation

Tidak seperti linked list dalam struktur data dimana penginputan bisa dimasukkan di setiap bagian dari list, Queue bersifat FIFO (First in First Out). Apa maksudnya? seperti ketika kita mengantri memasuki sebuah pintu, ketika kita menduduki posisi terakhir, maka kita akan masuk terakhir juga, begitu pula sebaliknya. Berikut ini adalah sebuah source code tentang implementasi barisan yang digunakan untuk sebuah data pada kelurahan.
Berikut adalah source codenya :


//file header : queue.h

#include <stdio.h>
#include <stdlib.h>

#define boolean unsigned char
#define true 1
#define false 0

#define maxEl 20
#define nil 0
typedef int address;
typedef int infotype;

typedef struct{
int HH;
int MM;
int YY;
}tanggal;

typedef struct{
char nama[100];
char kelamin[100];
char alamat[100];
char kota[100];
tanggal lahir;
}identitas;
typedef struct{
long NIK;
identitas I;
}KTP;
typedef struct{
long nokk;
KTP angkel[20];
int jumlah;
}KK;

typedef struct{
long noskck;
identitas J;
}SKCK;
typedef struct{
long nosurat;
char keterangan[100];
identitas K;
}surpin;
typedef struct{
KTP W;
KK X;
SKCK Y;
surpin Z;
int jenis;
}kelurahan;
typedef struct{
    kelurahan T[20];
    int HEAD;
    int TAIL;
    int MAX;
}queue;

//file penguji : main.c 

#include "queue.h"

int main()
{
    int a,i,c;
    int e=0,f=0,g=0,h=0;
    queue q;
    kelurahan temp;
    createEmpty(&q);
    while(1){
            system("cls");
            rekap(e,f,g,h);
            printf("\npilih menu: \n1.masukkan data\n2.rekap data\n input :");
            scanf("%d",&a);
        switch(a){
        case 1: printf("Pilih jenis data : \n1.KTP\n2.KK\n3.SKCK\n4.Surat pindah\n input :");scanf("%d",&c);
            switch(c){
            case 1: printf("\nMasukkan nama :"); scanf("%s",&temp.W.I.nama);
                    printf("\nMasukkan alamat : ");scanf("%s",&temp.W.I.alamat);
                    printf("\nMasukkan kota asal :");scanf("%s",&temp.W.I.kota);
                    printf("\nMasukkan hari lahir :");scanf("%d",&temp.W.I.lahir.HH);
                    printf("\nMasukkan bulan lahir :");scanf("%d",&temp.W.I.lahir.MM);
                    printf("\nMasukkan tahun lahir :");scanf("%d",&temp.W.I.lahir.YY);
                    printf("\nMasukkan jenis kelamin :"); scanf("%s",&temp.W.I.kelamin);
                    addElm(&q, temp);acaknomor(&q);q.T[q.TAIL].jenis=1;break;
            case 2: printf("\nMasukkan jumlah anggota keluarga yang sudah memiliki KTP :");scanf("%d",&temp.X.jumlah);
                    for(i=0;i<temp.X.jumlah;i++){
                    printf("\nMasukkan nama :"); scanf("%s",&temp.X.angkel[i].I.nama);
                    printf("\nMasukkan no KTP :");scanf("%s",&temp.X.angkel[i].NIK);
                    printf("\nMasukkan alamat :");scanf("%s",&temp.X.angkel[i].I.alamat);
                    printf("\nMasukkan kota asal :");scanf("%s",&temp.X.angkel[i].I.kota);
                    printf("\nMasukkan hari lahir :");scanf("%s",&temp.X.angkel[i].I.lahir.HH);
                    printf("\nMasukkan bulan lahir :");scanf("%s",&temp.X.angkel[i].I.lahir.MM);
                    printf("\nMasukkan tahun lahir :");scanf("%s",&temp.X.angkel[i].I.lahir.YY);
                    printf("\nMasukkan jenis kelamin :"); scanf("%s",&temp.X.angkel[i].I.kelamin);
                    }

                    addElm(&q, temp);acaknomor(&q);q.T[q.TAIL].jenis=2; break;
            case 3: printf("\nMasukkan nama :"); scanf("%s",&temp.Y.J.nama);
                    printf("\nMasukkan alamat : ");scanf("%s",&temp.Y.J.alamat);
                    printf("\nMasukkan kota asal :");scanf("%s",&temp.Y.J.kota);
                    printf("\nMasukkan hari lahir :");scanf("%s",&temp.Y.J.lahir.HH);
                    printf("\nMasukkan bulan lahir :");scanf("%s",&temp.Y.J.lahir.MM);
                    printf("\nMasukkan tahun lahir :");scanf("%s",&temp.Y.J.lahir.YY);
                    printf("\nMasukkan jenis kelamin :"); scanf("%s",&temp.Y.J.kelamin);
                    addElm(&q, temp);acaknomor(&q);q.T[q.TAIL].jenis=3;break;


            case 4: printf("\nMasukkan nama :"); scanf("%s",&temp.Z.K.nama);
                    printf("\nMasukkan alamat : ");scanf("%s",&temp.Z.K.alamat);
                    printf("\nMasukkan kota asal :");scanf("%s",&temp.Z.K.kota);
                    printf("\nMasukkan hari lahir :");scanf("%s",&temp.Z.K.lahir.HH);
                    printf("\nMasukkan bulan lahir :");scanf("%s",&temp.Z.K.lahir.MM);
                    printf("\nMasukkan tahun lahir :");scanf("%s",&temp.Z.K.lahir.YY);
                    printf("\nMasukkan jenis kelamin :"); scanf("%s",&temp.Z.K.kelamin);
                    printf("\nKeterangan pindah : "); scanf("%s",&temp.Z.keterangan);
                     addElm(&q, temp);acaknomor(&q);q.T[q.TAIL].jenis=4;break;
            default : printf("tidak tersedia menu");break;

                    }break;
            case 2:dell(&q,&temp);
            if(temp.jenis==1){
                e++;
            }
            else if(temp.jenis==2){
                f++;
            }
            else if(temp.jenis==3){
                g++;
            }
            else if(temp.jenis==4){
                h++;
            }




            break;
            default : printf("tidak tersedia menu");break;
        }
        }

    }

//file prosedur dan fungsi : queue.c

#include "queue.h"
int isEmpty(queue q)
{
    return (q).HEAD==nil&&(q).TAIL==nil ? 1 : 0;
}
boolean isFull(queue q)
{
    return (q).HEAD==1&&(q).TAIL==(q).MAX;
}
int nbElmt(queue q)
{
    return ((q).TAIL-(q).HEAD+1);
}
void createEmpty(queue *q,int max)
{
        (*q).HEAD=nil;
        (*q).TAIL=nil;
        (*q).MAX=20;
}
void deAlokasi(queue *q)
{
    (*q).MAX=nil;
    free(&(*q).T[(*q).MAX]);
}
void addElm(queue *Q,kelurahan a)
{
int i;
if((*Q).HEAD==nil && (*Q).TAIL==nil){
(*Q).HEAD++;
(*Q).TAIL++;
(*Q).T[(*Q).HEAD]=a;
}
else if (isFull(*Q)){
    printf("penuh bro");
}
else if((*Q).TAIL==(*Q).MAX){
    while((*Q).HEAD>1){
            (*Q).HEAD--;
        for(i=(*Q).HEAD;i<(*Q).TAIL;i++){
            (*Q).T[i]=(*Q).T[i+1];
        }
        (*Q).TAIL--;
    }
    (*Q).TAIL++;
    (*Q).T[(*Q).TAIL]=a;
}

else{
    (*Q).TAIL++;
    (*Q).T[(*Q).TAIL]=a;
}
}
void dell(queue *q,kelurahan *x)
{
    if(isEmpty(*q)==0)
    {
        if(nbElmt(*q)==1)
        {
            (*x)=(*q).T[(*q).HEAD];
            (*q).HEAD=nil;
            (*q).TAIL=nil;
        }
        else
        {
            (*x)=(*q).T[(*q).HEAD];
            (*q).HEAD++;
        }
    }
    else
    {

        printf("kosong broo..\n");
        (*x).jenis=0;
    }

}

void acaknomor(queue *q){
static long a=1357810, b=225649,c=22769102,d=429898;
if((*q).T[(*q).TAIL].jenis==1){
    (*q).T[(*q).TAIL].W.NIK=a++;

}
else if((*q).T[(*q).TAIL].jenis==2){

        (*q).T[(*q).TAIL].X.nokk=b++;


    }
else if((*q).T[(*q).TAIL].jenis==3){

        (*q).T[(*q).TAIL].Y.noskck=c++;

}
else if((*q).T[(*q).TAIL].jenis==4){

        (*q).T[(*q).TAIL].Z.nosurat=d++;

}
}
void rekap(int a, int b, int c, int d){
printf("\njumlah orang yang mengurus KTP: %d",a);
printf("\njumlah orang yang mengurus KK: %d",b);
printf("\njumlah orang yang mengurus SKCK: %d",c);
printf("\njumlah orang yang mengurus surat pindah: %d\n",d);

}

//Your girlfriend loves you for a reason, while your parents love you entirely..
//Then be smart to choose whom you should love more..
Thanks 





Data Structure Big Project (Binary Tree Implementation) part 2

Pengimplementasian lain dari sebuah pohon adalah untuk sistem pakar atau sistem pendukung keputusan. Di mana kita akan melakukan perjalanan dari akar(elemen node ter atas dalam sebuah pohon) menuju ke daun (node dalam pohon yang tidak memiliki anak). Kesimpulan diisikan pada daun. sedangkan pertanyaan2 pendukung diisikan pada node akar sampai node sebelum daun.
Berikut adalah source codenya dalam bahasa C.

/** Header **/
#include<stdio.h>
/************/

/** ADT Tree **/
typedef char* infotype;
typedef struct Node* address;
typedef struct Node {
    infotype Kalimat;
    address Left;
    address Right;
}Node;
typedef address Pohon;
/**************/

/** Function Prototype **/
void InsertNode(address a,infotype x,int arah);
address PilihNode(Pohon P,int jumlah,int arah);
/************************/

int main() // Fungsi Utama
{
    system("color E0");
    /** Variabel **/
    Pohon P = NULL;
    address a;
    int yatidak;
    /**************/

    /** Inisialisasi **/
    P=(address)malloc(sizeof(Pohon));
    P->Kalimat = "Sendiri atau Banyak orang";
    P->Left = NULL;
    P->Right = NULL;
    /******************/

    /// Bentuk Pohon=======================================================================

    a = P;
    InsertNode(a,"Bekerja secara teoritis atau praktek",1); //2
    InsertNode(a,"Dalam membuat keputusan dibimbing intuisi atau kelima indra",2); //3

    a = P;
    a = PilihNode(a,1,1);
    InsertNode(a,"Berusaha menghindari perselisihan atau suka berdiskusi bahkan berdebat",1); //4
    InsertNode(a,"Sensitif cepat tersinggung atau dapat menerima kritikan",2); //5
    a = PilihNode(a,1,2);
    InsertNode(a,"Sudah merencanakan apa yang dilakukan di akhir pekan atau tidak tau apa yang akan dilakukan di akhir pekan",1); //10
    InsertNode(a,"Tepat waktu atau sulit tepat waktu",2); //11

    a = P;
    a = PilihNode(a,1,2);
    InsertNode(a,"Berusaha tidak menyakiti atau blak blakan",1); //6
    InsertNode(a,"Keputusan bedasarkan naluri atau pertimbangan",2); //7
    a = PilihNode(a,1,1);
    InsertNode(a,"Mengambil keputusan yang cepat dan jelas atau kesulitan dalam mengambil keputusan",1); //12
    InsertNode(a,"terstruktur atau spontanitas",2); //13

    a = P;
    a = PilihNode(a,2,1);
    InsertNode(a,"Bekerja dulu baru bersenang senang atau bekerja untuk hidup",1); //8
    InsertNode(a,"Melakukan hal yang tidak disukai lebih dahulu atau menunda hal yang tidak menyenangkan",2); //9

    a = P;
    a = PilihNode(a,2,2);
    InsertNode(a,"Mengerjakan satu per satu atau mengerjakan beberapa pekerjaan dalam satu waktu",1); //14
    InsertNode(a,"Merencanakan di awal atau menghadapi sebagaimana adanya",2); //15

    a = P;
    a = PilihNode(a,3,1);
    InsertNode(a,"Idealis penyelaras",1); //16
    InsertNode(a,"Idealis pemimpi",2); //17

    a = P;
    a = PilihNode(a,2,1);
    a = PilihNode(a,1,2);
    InsertNode(a,"Pemikir mandiri",1); //18
    InsertNode(a,"Pemikir analitis",2); //19

    a = P;
    a = PilihNode(a,1,1);
    a = PilihNode(a,1,2);
    a = PilihNode(a,1,1);
    InsertNode(a,"Realis baik hati",1); //20
    InsertNode(a,"Pelaku peka",2); //21

    a = P;
    a = PilihNode(a,1,1);
    a = PilihNode(a,2,2);
    InsertNode(a,"Realis terpercaya",1); //22
    InsertNode(a,"Pelaku individualistis",2); //23

    a = P;
    a = PilihNode(a,1,2);
    a = PilihNode(a,2,1);
    InsertNode(a,"Idiealis terlibat",1); //24
    InsertNode(a,"Idiealis spontan",2); //25

    a = P;
    a = PilihNode(a,1,2);
    a = PilihNode(a,1,1);
    a = PilihNode(a,1,2);
    InsertNode(a,"Pemikir dinamis",1); //26
    InsertNode(a,"Pemikir pendobrak",2); //27

    a = P;
    a = PilihNode(a,2,2);
    a = PilihNode(a,1,1);
    InsertNode(a,"Realis sosial",1); //28
    InsertNode(a,"Pelaku santai",2); //29

    a = P;
    a = PilihNode(a,3,2);
    InsertNode(a,"Realis bertekat",1); //30
    InsertNode(a,"Pelaku bersemangat",2); //31
    /// Bentuk Pohon=======================================================================

    /** User Interface **/
    a = P;

    while(a->Left != NULL && a->Right != NULL){
        printf("%s [1/0] :",a->Kalimat);
        do{
            scanf("%d",&yatidak);
            if(yatidak == 1){
                a=a->Left;
            }
            else if(yatidak == 0){
                a=a->Right;
            }
            else{
                printf("tolong input ulang jawaban: ");
            }
        }while(yatidak != 1 && yatidak != 0);
    }


    printf("kesimpulan : %s",a->Kalimat);
    /********************/

    return 0;
}

/** Fungsi dan Prosedur **/
address PilihNode(address a,int jumlah,int arah)
{
    while(jumlah != 0){
        if (arah == 1) {//kiri
            a=a->Left;
        }
        else if(arah == 2) {//kanan
            a=a->Right;
        }
        jumlah--;
    }
    return a;
}

void InsertNode(address a,infotype x,int arah)
{
    address g;

    g = (Pohon)malloc(sizeof(Node));
    if(g != NULL){
        g->Kalimat = x;
        g->Left = NULL;
        g->Right = NULL;
        if(arah == 1){//kiri
            a->Left = g;
        }
        else if(arah ==2) {//kanan
            a->Right = g;
        }

    }
}
/*************************/

Code is not anything but we can code everything..
Thanks, God Bless..






Data Structure Big Project (Binary Tree Implementation) part 1

Pelajaran terakhir dan paling sulit yang harus dikuasai dalam struktur data adalah Tree. Tree yang dipelajari masih berbentuk Binary artinya anak dari tiap node hanya maksimal 2. Pengimplementasiannya saya lakukan dengan membuat game turnamen sederhana yaitu, turnamen pingsut. Pengimplementasian tree terdapat pada jalur pemenang dalam sebuah turnamen. Misal dapat digambarkan :








                                      Pemula 1
                     Finalist 1<
Pemenang <                   Pemula 2                 
                                       Pemula 3
                      Finalist 2<
                                        Pemula 4


Gamenya cukup sederhana anda harus cukup beruntung untuk memenangkan pertandingan pingsut(anda menginputkan gunting batu atau kertas) selama 2 stage. Dimana stage 1 terdiri dari 8 Finalist (anda adalah salah satu finalistnya). dan Stage 2 terdiri dari 16 finalist. Berikut adalah source codenya dalam bahasa C: 


#include <stdio.h>
#include <Windows.h>
typedef struct Node *address;
typedef struct Node {
    char* Nama;
    address Left;
    address Right;
    int mark;
}Node;
typedef struct trank *Laddress;
typedef struct trank{
   int score;
   Laddress next;
   int id;
}rank;


typedef address Tree;
typedef Laddress List;
List AlokasiL(int x, int b);
void Alokasi(Tree *T, char* x, int b);
void InsertNode(Tree *Turnamen, Tree T);
Tree jumperlokasi(Tree T,int a);
void jumper(Tree *T, int a, char* x);
void jumper2(Tree *T, Tree *Tr, int a);
int main()
{   // Initial State
    List playerdet = NULL;
    Laddress player;
    char nama[10] = "player";
    startgame();
    system("cls");
    Loading();
    while(1){

    Tree Turnamen = NULL, T,temp, temp1;
    srand(time(NULL));
    int i,choice,score = 0;
    static int wave = 0;
    wave++;
    system("cls");
    system("cls");
    initiator();
    printf("Select : ");scanf("%d",&choice);
    switch(choice){

    case 1 :
    system("cls");
    printf("your play id is : 0%d\n",wave);
    system("pause");
    system("cls");
    //stage 1
    Alokasi(&T,"NULL", 8);
    InsertNode(&Turnamen, T);
    Alokasi(&T,"NULL", 4);
    InsertNode(&Turnamen, T);
    Alokasi(&T,"NULL", 12);
    InsertNode(&Turnamen, T);
    Alokasi(&T,"NULL", 2);
    InsertNode(&Turnamen, T);
    Alokasi(&T,"NULL", 6);
    InsertNode(&Turnamen, T);
    Alokasi(&T,"NULL", 10);
    InsertNode(&Turnamen, T);
    Alokasi(&T,"NULL", 14);
    InsertNode(&Turnamen, T);
    Alokasi(&T,"Player",1 );
    InsertNode(&Turnamen, T);
    Alokasi(&T,"Mr.A", 3);
    InsertNode(&Turnamen, T);
    Alokasi(&T,"Mr.B", 5);
    InsertNode(&Turnamen, T);
    Alokasi(&T,"Mr.C", 7);
    InsertNode(&Turnamen, T);
    Alokasi(&T,"Mr.D", 9);
    InsertNode(&Turnamen, T);
    Alokasi(&T,"Mr.E", 11);
    InsertNode(&Turnamen, T);
    Alokasi(&T,"Mr.F",13);
    InsertNode(&Turnamen, T);
    Alokasi(&T,"Mr.G",15);
    InsertNode(&Turnamen, T);
    printtree(Turnamen);
    printf("Press any key to continue ...");
    getch();
    system("cls");
    round1(Turnamen,&i);
    if(i == 1){
            score++;
        round2(Turnamen, &i);
        if(i == 1){
            score++;
            Finalround(Turnamen);
            if(Turnamen->Nama = "Player"){
                    score++;
                    system("cls");
                    printtree(Turnamen);
                    system("pause");
                    system("cls");
                    //stage 2
                    Loading2();
                    Turnamen = NULL;
                    Alokasi(&T,"NULL", 16);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 8);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 24);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 4);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 12);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 20);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 28);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 2);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 6);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 10);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 14);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 18);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 22);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 26);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 30);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"player", 1);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"NULL", 3);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. H", 5);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. I", 7);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. J", 9);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. K", 11);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. L", 13);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. M", 15);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. N", 17);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. O", 19);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. P", 21);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. Q", 23);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. R", 25);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. S", 27);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. T", 29);
                    InsertNode(&Turnamen,T);
                    Alokasi(&T,"Mr. U", 31);
                    InsertNode(&Turnamen,T);
                    printtree2(Turnamen);
                    printf("Press any key to continue ...");
                    getch();
                    round21(Turnamen,&i);
                    if(i == 1){
                        score++;
                        round22(Turnamen,&i);
                        if(i == 1){
                            score++;
                            round23(Turnamen,&i);
                            if(i == 1){
                                score++;
                                Finalround();
                                system("pause");
                                system("cls");
                                winner();
                            }
                            else{
                                gameover();
                                system("pause");
                            }
                        }
                        else{
                            gameover();
                            system("pause");
                        }
                    }
                    else{
                        gameover();
                        system("pause");
                    }





            }
            else{
                gameover();
                system("pause");
            }

        }
        else{
        system("cls");
        gameover();
    }
    }
    else{
        system("cls");
        gameover();
        system("pause");
    }
    system("cls");
    player = AlokasiL(wave, score);
    autosort(&playerdet,player);
    printf("\n");
    system("pause"); break;
    case 2: system("cls"); printlist(playerdet); printf("\n");system("pause"); break;
    case 3: exit(0); break;
    default : printf("anda salah ketik");
    }
    }

}
void winner(){
    int i;
    char win[17] = "You win this game";
    gotoxy(30,10);
for(i=0;i<17;i++){
        printf("%c",win[i]);
        Sleep(200);
    }
}
void round1(Tree Turnamen,int *c){
int a = 2,b,i;
Tree temp,temp1;
    for(i=0;i<4;i++){
    system("cls");
    temp = jumperlokasi(Turnamen,1);
    temp1 = jumperlokasi(Turnamen, a);
    if(temp1->Left == temp || temp1->Right == temp)
    {
        b = Pingsute(temp1->Left->Nama,temp1->Right->Nama);
        if(b == 0){
            break;
        }
        else{
            temp1->Nama = temp->Nama;
        }
    }
    else{
        b = PingsuteAI(temp1->Left->Nama,temp1->Right->Nama);
        if(b == 1){
            temp1->Nama = temp1->Right->Nama;
        }
        else{
            temp1->Nama = temp1->Left->Nama;
        }
    }
    a+=4;
    printtree(Turnamen);
    system("pause");
    }
    if(i==0){
        *c = 0;
    }
    else{
        *c = 1;
    }
}
void printlist(List L){
Laddress P = L;
int i;
printf("No.          id number        Score");
for(i = 0; i < 10; i++){
if(P != NULL){
printf("\n");
printf("%d.             0%d                %d   ",i+1,P->id,P->score);
P = P->next;
}
else{
printf("\n");
printf("%d.",i+1);
}
}
}
int nbelmt(List L){
Laddress P = L;
int i = 0;
while(P != NULL){
    i++;
    P = P->next;
}
return i;
}
void startgame(){
 printf("*******************************************************************************\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                         Hunger Games for Kids                               *\n"
           "*                              v1.0                                           *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                 [Press any button to start the game]                        *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*                                                                             *\n"
           "*******************************************************************************\n");

            getch();
}
void initiator(){
printf("***************\n"
       "*1.Play       *\n"
       "*2.Highscores *\n"
       "*3.exit game  *\n"
       "***************\n");
}
void gotoxy(int x, int y){
HANDLE hConsoleOutput;
COORD dwCursorPosition;
dwCursorPosition.X = x;
dwCursorPosition.Y = y;
hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hConsoleOutput,dwCursorPosition);
}
void round2(Tree Turnamen, int *c){
int a = 4,b,i;
Tree temp,temp1;
    for(i=0;i<2;i++){
    system("cls");
    temp = jumperlokasi(Turnamen,2);
    temp1 = jumperlokasi(Turnamen, a);
    if(temp1->Left == temp || temp1->Right == temp)
    {
        b = Pingsute(temp1->Left->Nama,temp1->Right->Nama);
        if(b == 0){
            break;
        }
        else{
            temp1->Nama = temp->Nama;
        }
    }
    else{
        b = PingsuteAI(temp1->Left->Nama,temp1->Right->Nama);
        if(b == 1){
            temp1->Nama = temp1->Right->Nama;
        }
        else{
            temp1->Nama = temp1->Left->Nama;
        }
    }
    a+=8;
    printtree(Turnamen);
    system("pause");
    }
    if(i==0){
        *c = 0;
    }
    else{
        *c = 1;
    }
}
void Finalround(Tree Turnamen){
if(Pingsute(Turnamen->Left->Nama,Turnamen->Right->Nama)){
   Turnamen->Nama = Turnamen->Left->Nama;
   }
   else{
    Turnamen->Nama = Turnamen->Right->Nama;
   }
printtree(Turnamen);
}
void printtree(Tree Turnamen)
{
    printf("\n%-15s\n"
           "      >  %-15s\n"
           "%-15s\n"
           "               > %15s\n"
           "%-15s\n"
           "      >  %-15s\n"
           "%-15s\n"
           "                                > %15s\n"
           "%-15s\n"
           "      >  %-15s\n"
           "%-15s\n"
           "               > %15s\n"
           "%-15s\n"
           "      >  %-15s\n"
           "%-15s\n"
           ,
           jumperlokasi(Turnamen,1)->Nama,
           jumperlokasi(Turnamen,2)->Nama,
           jumperlokasi(Turnamen,3)->Nama,
           jumperlokasi(Turnamen,4)->Nama,
           jumperlokasi(Turnamen,5)->Nama,
           jumperlokasi(Turnamen,6)->Nama,
           jumperlokasi(Turnamen,7)->Nama,
           jumperlokasi(Turnamen,8)->Nama,
           jumperlokasi(Turnamen,9)->Nama,
           jumperlokasi(Turnamen,10)->Nama,
           jumperlokasi(Turnamen,11)->Nama,
           jumperlokasi(Turnamen,12)->Nama,
           jumperlokasi(Turnamen,13)->Nama,
           jumperlokasi(Turnamen,14)->Nama,
           jumperlokasi(Turnamen,15)->Nama

           );
}
void printtree2(Tree Turnamen)
{
    printf("\n%-15s\n"
           "      >  %-15s\n"
           "%-15s\n"
           "               > %15s\n"
           "%-15s\n"
           "      >  %-15s\n"
           "%-15s\n"
           "                                > %15s\n"
           "%-15s\n"
           "      >  %-15s\n"
           "%-15s\n"
           "               > %15s\n"
           "%-15s\n"
           "      >  %-15s\n"
           "%-15s\n"
           "                                                  >%15s\n"
           "%-15s\n"
           "      >  %-15s\n"
           "%-15s\n"
           "               > %15s\n"
           "%-15s\n"
           "      >  %-15s\n"
           "%-15s\n"
           "                                 > %15s\n"
           "%-15s\n"
           "      >  %-15s\n"
           "%-15s\n"
           "               > %15s\n"
           "%-15s\n"
           "      >  %-15s\n"
           "%-15s\n"
           ,
           jumperlokasi(Turnamen,1)->Nama,
           jumperlokasi(Turnamen,2)->Nama,
           jumperlokasi(Turnamen,3)->Nama,
           jumperlokasi(Turnamen,4)->Nama,
           jumperlokasi(Turnamen,5)->Nama,
           jumperlokasi(Turnamen,6)->Nama,
           jumperlokasi(Turnamen,7)->Nama,
           jumperlokasi(Turnamen,8)->Nama,
           jumperlokasi(Turnamen,9)->Nama,
           jumperlokasi(Turnamen,10)->Nama,
           jumperlokasi(Turnamen,11)->Nama,
           jumperlokasi(Turnamen,12)->Nama,
           jumperlokasi(Turnamen,13)->Nama,
           jumperlokasi(Turnamen,14)->Nama,
           jumperlokasi(Turnamen,15)->Nama,
           jumperlokasi(Turnamen,16)->Nama,
           jumperlokasi(Turnamen,17)->Nama,
           jumperlokasi(Turnamen,18)->Nama,
           jumperlokasi(Turnamen,19)->Nama,
           jumperlokasi(Turnamen,20)->Nama,
           jumperlokasi(Turnamen,21)->Nama,
           jumperlokasi(Turnamen,22)->Nama,
           jumperlokasi(Turnamen,23)->Nama,
           jumperlokasi(Turnamen,24)->Nama,
           jumperlokasi(Turnamen,25)->Nama,
           jumperlokasi(Turnamen,26)->Nama,
           jumperlokasi(Turnamen,27)->Nama,
           jumperlokasi(Turnamen,28)->Nama,
           jumperlokasi(Turnamen,29)->Nama,
           jumperlokasi(Turnamen,30)->Nama,
           jumperlokasi(Turnamen,31)->Nama
            );
}


void InsertNode(Tree *Turnamen, Tree T)
{
    Tree P=(*Turnamen);
    if (P == NULL)
    {
        (*Turnamen) = T;
    }
    else
    {
        if (T->mark < P->mark)
        {
            InsertNode(&P->Left, T);
        }
        else
        {
            InsertNode(&P->Right, T);
        }
    }
}
void Alokasi(Tree *T, char* x, int b){
(*T)=(address)malloc(sizeof(Node));
if(T != NULL){
    (*T)->Nama = x;
    (*T)->Left = NULL;
    (*T)->Right = NULL;
    (*T)->mark = b;
}
}
List AlokasiL(int x, int b){
Laddress T = (address)malloc(sizeof(rank));
if(T != NULL){
    T->id = x;
    T->next = NULL;
    T->score = b;
}
return T;
}

void autosort(List *L, Laddress Q){
         Laddress P=(*L),Prec;
    if((*L) == NULL || (*L)->score <= Q->score)
    {
        InsertFirst(&(*L), Q);
    }
    else{

        while(P->next != NULL){
            Prec=P;
            P = P->next;
            if((*L)->score <= Q->score){
                InsertAfter(Q, Prec);
                break;
            }
        }
        if(P->next == NULL){
            P->next = Q;
        }

        }
    }

void InsertFirst(List *L, Laddress P)
{
    P->next= (*L);
    (*L)= P;
}

void InsertAfter(Laddress P, Laddress Prec)
{
    P->next = Prec->next;
    Prec->next = P;
}

void jumper(Tree *T, int a, char* x){
Tree jump = (*T);
if(jump->mark == a){
    (*T)->Nama = x;
}
else if(jump->Left != NULL && jump->Right != NULL){
   jumper(&jump->Right,a,x);
   jumper(&jump->Left,a,x);
}
else{
    (*T);
}
}

void jumper2(Tree *T, Tree *Tr, int a){
Tree jump = (*T);
if(jump->mark == a){
    (*Tr) = jump;
}
else if(jump->Left != NULL && jump->Right != NULL){
   jumper2(&jump->Right,&Tr,a);
   jumper2(&jump->Left,&Tr,a);
}
else{
    (*T);
}
}

Tree jumperlokasi(Tree T, int a){
if(T->mark == a){
    return T;
}
else if(T->mark > a){
    return jumperlokasi(T->Left,a);
}
else{
    return jumperlokasi(T->Right,a);
}

}
int PingsuteAI(char* a,char* b)
{
    int point[3];
    int ans[3];
    char* weapon[4];

    weapon[1] = "paper";
    weapon[2] = "scissor";
    weapon[3] = "rock";
    point[1]=0;
    point[2]=0;

    while(point[1] !=3 && point[2] != 3){

        system("cls");
        printf("%15s%15s\n",a,b);
        printf("%15d%15d\n",point[1],point[2]);
        printf("1. paper\n");
        printf("2. scissor\n");
        printf("3. rock\n");
        ans[1] = rand()%3+1;
        ans[2] = rand()%3+1;
        printf("%s : %s\n%s : %s\n",a,weapon[ans[1]],b,weapon[ans[2]]);
        FILE *pf; /*pointer ke file*/
        char kar;
        if(ans[1]==1) {
            if((pf = fopen("C:\\Users\\DELL PC\\Desktop\\coding iseng\\Turnamen pingsut\\Kertas.txt","r"))==NULL){
                puts("Kertas\r");
                exit(1);
            }
            while((kar = getc(pf))!=EOF) {
                putch(kar);
            }
            fclose(pf);
            printf("\n");
        }else if(ans[1]==2) {
            if((pf = fopen("C:\\Users\\DELL PC\\Desktop\\coding iseng\\Turnamen pingsut\\Gunting.txt","r"))==NULL){
                puts("Gunting\r");
                exit(1);
            }
            while((kar=getc(pf))!=EOF) {
                putch(kar);
            }
            fclose(pf);
            printf("\n");
        }else if(ans[1]==3) {
            if((pf = fopen("C:\\Users\\DELL PC\\Desktop\\coding iseng\\Turnamen pingsut\\Batu.txt","r"))==NULL){
                puts("Batu\r");
                exit(1);
            }
            while((kar=getc(pf))!=EOF) {
                putch(kar);
            }
            fclose(pf);
            printf("\n");
        }
        if(ans[2]==1) {
            if((pf = fopen("C:\\Users\\DELL PC\\Desktop\\coding iseng\\Turnamen pingsut\\Kertas.txt","r"))==NULL){
                puts("Kertas\r");
                exit(1);
            }
            while((kar=getc(pf))!=EOF) {
                putch(kar);
            }
            fclose(pf);
            printf("\n");
        }else if(ans[2]==2) {
            if((pf = fopen("C:\\Users\\DELL PC\\Desktop\\coding iseng\\Turnamen pingsut\\Gunting.txt","r"))==NULL){
                puts("Gunting\r");
                exit(1);
            }
            while((kar=getc(pf))!=EOF) {
                putch(kar);
            }
            fclose(pf);
            printf("\n");
        }else if(ans[2]==3) {
            if((pf = fopen("C:\\Users\\DELL PC\\Desktop\\coding iseng\\Turnamen pingsut\\Batu.txt","r"))==NULL){
                puts("Batu\r");
                exit(1);
            }
            while((kar=getc(pf))!=EOF) {
                putch(kar);
            }
            fclose(pf);
            printf("\n");
        }
        if(ans[1] == ans[2]) printf("draw");
        else if( ans[1] - 1 == ans[2] || ((ans[1]==1)&&(ans[2]==3)) ) point[1]++;
        else point[2]++;
        Sleep(500);
    }



    if(point[1]==3) return 1;
    else return 0;
}
int Pingsute(char* a,char* b)
{
    int point[3];
    int ans[3];
    char* weapon[4];
    /// point[1] -> player a
    /// point[2] -> player b
    /// ans[1] -> player a
    /// ans[2] -> player b

    weapon[1] = "paper";
    weapon[2] = "scissor";
    weapon[3] = "rock";
    point[1]=0;
    point[2]=0;
    while(point[1] !=3 && point[2] != 3){

        system("cls");
        printf("%15s%15s\n",a,b);
        printf("%15d%15d\n",point[1],point[2]);
        printf("1. paper\n");
        printf("2. scissor\n");
        printf("3. rock\n");
        printf("select weapon : ");
        scanf("%d",&ans[1]);
        ans[2] = rand()%3+1;
        printf("%s : %s\n%s : %s\n",a,weapon[ans[1]],b,weapon[ans[2]]);

        int i;
        FILE *pf; /*pointer ke file*/
        char kar;
        if(ans[1]==1) {
            if((pf = fopen("Kertas.txt","r"))==NULL){
                puts("Kertas\r");
                exit(1);
            }
            while((kar=getc(pf))!=EOF) {
                putch(kar);
            }
            fclose(pf);
            printf("\n");
        }else if(ans[1]==2) {
            if((pf = fopen("Gunting.txt","r"))==NULL){
                puts("Gunting\r");
                exit(1);
            }
            while((kar=getc(pf))!=EOF) {
                putch(kar);
            }
            fclose(pf);
            printf("\n");
        }else if(ans[1]==3) {
            if((pf = fopen("Batu.txt","r"))==NULL){
                puts("Batu\r");
                exit(1);
            }
            while((kar=getc(pf))!=EOF) {
                putch(kar);
            }
            fclose(pf);
            printf("\n");
        }
        if(ans[2]==1) {
            if((pf = fopen("Kertas.txt","r"))==NULL){
                puts("Kertas\r");
                exit(1);
            }
            while((kar=getc(pf))!=EOF) {
                putch(kar);
            }
            fclose(pf);
            printf("\n");
        }else if(ans[2]==2) {
            if((pf = fopen("Gunting.txt","r"))==NULL){
                puts("Gunting\r");
                exit(1);
            }
            while((kar=getc(pf))!=EOF) {
                putch(kar);
            }
            fclose(pf);
            printf("\n");
        }else if(ans[2]==3) {
            if((pf = fopen("Batu.txt","r"))==NULL){
                puts("Batu\r");
                exit(1);
            }
            while((kar=getc(pf))!=EOF) {
                putch(kar);
            }
            fclose(pf);
            printf("\n");
        }
         if(ans[1] == ans[2]) printf("draw");
        else if( ans[1] - 1 == ans[2] || ((ans[1]==1)&&(ans[2]==3)) ) point[1]++;
        else point[2]++;
        getch();
    }
    if(point[1]==3) return 1;
    else return 0;
}
void Loading(){
 int i;
  printf("\n\n\n\n\n\n\n\n\n%50s\n","Please wait while loading");
    for(i=0;i<35;i++){
        if(i == 0){
    printf("%20c",254);
        }
        printf("%c",254);
    Sleep(50);
    }

}
void Loading2(){
 int i;
  printf("\n\n\n\n\n\n\n\n\n%50s\n","Stage 2 will begin, Please wait...");
    for(i=0;i<35;i++){
        if(i == 0){
    printf("%20c",254);
        }
        printf("%c",254);
    Sleep(50);
    }

}
void gameover(){

printf("\n\n\n\n\n\n\n\n\n%50s\n","Game over");
}
void round21(Tree Turnamen,int *c){
int a = 2,b,i;
Tree temp,temp1;
    for(i=0;i<8;i++){
    system("cls");
    temp = jumperlokasi(Turnamen,1);
    temp1 = jumperlokasi(Turnamen, a);
    if(temp1->Left == temp || temp1->Right == temp)
    {
        b = Pingsute(temp1->Left->Nama,temp1->Right->Nama);
        if(b == 0){
            break;
        }
        else{
            temp1->Nama = temp->Nama;
        }
    }
    else{
        b = PingsuteAI(temp1->Left->Nama,temp1->Right->Nama);
        if(b == 1){
            temp1->Nama = temp1->Right->Nama;
        }
        else{
            temp1->Nama = temp1->Left->Nama;
        }
    }
    a+=4;
    printtree2(Turnamen);
    system("pause");
    }
    if(i==0){
        *c = 0;
    }
    else{
        *c = 1;
    }
}

void round22(Tree Turnamen, int *c){
int a = 4,b,i;
Tree temp,temp1;
    for(i=0;i<4;i++){
    system("cls");
    temp = jumperlokasi(Turnamen,2);
    temp1 = jumperlokasi(Turnamen, a);
    if(temp1->Left == temp || temp1->Right == temp)
    {
        b = Pingsute(temp1->Left->Nama,temp1->Right->Nama);
        if(b == 0){
            break;
        }
        else{
            temp1->Nama = temp->Nama;
        }
    }
    else{
        b = PingsuteAI(temp1->Left->Nama,temp1->Right->Nama);
        if(b == 1){
            temp1->Nama = temp1->Right->Nama;
        }
        else{
            temp1->Nama = temp1->Left->Nama;
        }
    }
    a+=8;
    printtree2(Turnamen);
    system("pause");
    }
    if(i==0){
        *c = 0;
    }
    else{
        *c = 1;
    }
}
void round23(Tree Turnamen, int *c){
int a = 8,b,i;
Tree temp,temp1;
    for(i=0;i<2;i++){
    system("cls");
    temp = jumperlokasi(Turnamen,4);
    temp1 = jumperlokasi(Turnamen, a);
    if(temp1->Left == temp || temp1->Right == temp)
    {
        b = Pingsute(temp1->Left->Nama,temp1->Right->Nama);
        if(b == 0){
            break;
        }
        else{
            temp1->Nama = temp->Nama;
        }
    }
    else{
        b = PingsuteAI(temp1->Left->Nama,temp1->Right->Nama);
        if(b == 1){
            temp1->Nama = temp1->Right->Nama;
        }
        else{
            temp1->Nama = temp1->Left->Nama;
        }
    }
    a+=16;
    printtree2(Turnamen);
    system("pause");
    }
    if(i==0){
        *c = 0;
    }
    else{
        *c = 1;
    }
}

Dalam source code ini saya menambahkan tehnik filing yaitu membuka file berbentuk txt untuk menampilkan gunting, batu kertas dalam bentuk gambar, supaya bisa berjalan di komputer lain, selain komputer saya copy lah bentuk simbol di bawah ini ke notepad dan ubah lokasi fopen "" sesuai dengan lokasi direktori file txt yang sudah disimpan tadi.




||||     ||||
||||||   ||||||   ||||
       |||||||| |||||||| ||||||  |||
       ||||||||||||||||||||||||||||||
      ||||||||||||||||||||||||||||||||
      ||||||||||||||||||||||||||||||||
     |||||||||||||||||||||||||||||||||
     |||||||||||||||||||||||||||||||||
      ||||||||||||||||||||||||||||||||
       ||||||||||||||||||||||||||||||
        |||||||||||||||||||||||||||
          |||||||||||||||||||||||





||||        ||||
      ||||||   ||||||
     ||||||||  ||||||||
     ||||||||  ||||||||
     ||||||||  ||||||||
     ||||||||  ||||||||
     ||||||||| |||||||||
     ||||||||| |||||||||
     ||||||||||||||||||||
      \|||||///\\\|||||/
     ||||||||||||||||||||
   |||||||||||||||||||||||
  |||||||||||||||||||||||||
 |||||||||||||||||||||||||||
  |||||||||||||||||||||||||
   |||||||||||||||||||||||
    |||||||||||||||||||||
      ||||||||||||||||||

 
      

||||
      ||||||
      ||||||
      ||||||     ||||
     ||||     ||||||    ||||||
    ||||||    ||||||    ||||||
    ||||||    ||||||    ||||||
    ||||||    ||||||    ||||||     |||
    ||||||    ||||||    ||||||    |||||
    ||||||    ||||||    ||||||    |||||
 ||||||     ||||||    ||||||    ||||||    |||||
||||||||    ||||||    ||||||    ||||||    |||||
        ||||||||||  ||||||||  ||||||||  ||||||||  ||||||
         ||||||||  |||||||||||||||||||||||||||||||||||||
          ||||||  |||||||||||||||||||||||||||||||||||||
          |||||| ||||||||||||||||||||||||||||||||||||||
          ||||||||||||||||||||||||||||||||||||||||||||
          ||||||||||||||||||||||||||||||||||||||||||||
           ||||||||||||||||||||||||||||||||||||||||||
           ||||||||||||||||||||||||||||||||||||||||||
            ||||||||||||||||||||||||||||||||||||||||
     |||||||||||||||||||||||||||||||||||||
                 ||||||||||||||||||||||||||||||||
  


If you saw on how much others could do, u won't achieve anything..
Do something and you'll see how wonderful your brain actualy is..
Thx and GBU