Sunday, May 20, 2012

Fungsi gotoxy tidak bisa digunakan di DEV C++?

Sebelumnya saya ingin menjelaskan apa itu fungsi gotoxy. Fungsi gotoxy adalah suatu fungsi yang telah disediakan oleh compiler, tepatnya ada pada header conio2.h. Lalu kenapa saya posting disini? karena fungsi ini banyak sekali gunanya. Fungsi utamanya adalah memindah kursor ke koordinat yang kita tentukan. Misal gotoxy(1,45) maka kursor akan berada pada koordinat x=1 dan y=45. Dengan bantuan pengulangan dan sedikit modifikasi, kita bisa membuat gambar bergerak maupun game menggunakan fungsi ini.
Kembali ke masalah utama, bagi kalian yang error ketika menggunakan fungsi ini, berarti pada compiler yang anda gunakan belum terinstall file header conio2.h.
Cara Instalasi:
1. Download dulu filenya disini
2. Klik 2x, tunggu instalasi selesai
3. Buka dev C++
4. Klik menu tools -> compiler option
5. Pada kolom add these commands to the linker command line, ketikkan -lconio, jangan lupa dicentang terlebih dahulu
6. Ok

Program C Queue - Simulasi Parkiran Mobil

Setelah liburan yang tidak terasa seperti liburan, saya ingin sharing program queue menggunakan bahasa C. Bayangkan Queue sebagai antrian. Jadi yang pertama masuk adalah yang pertama kali keluar. atau bahasa kerennya first in first out (FIFO). Berbeda dengan stack yang sudah saya share kemarin yang sifatnya (LIFO) last in first out.

Source Code :

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<conio2.h>

struct mobil{
       char platnomor[30];
       char pemilik[30];
       char merk_mobil[30];
       struct mobil *next;
       };
      
struct queue{
       mobil *head;
       int count;
       mobil *tail;
       };

int isFull(queue *queue);
int isEmpty(queue *queue);
void mobil_masuk(queue *queue);
void cetak(queue *queue);
void mobilout(queue *queue);
void kosongkan(queue *queue);
void mobil2an(queue *queue);
void mobil2an_out(queue *queue);

int main(){
    queue queue;
    queue.count=0;
    queue.head=NULL;
    queue.tail=NULL;
   
    char pilih;
    int isfull,isempty;
do{system("cls");
printf("\t\t\t\tPROGRAM SIMULASI PARKIR\n\n");  
printf("\n[1].cek antrian(full/tidak)");
printf("\n[2].cek antrian(kosong/tidak)");
printf("\n[3].kosongkan parkiran");   
printf("\n[4].mobil masuk");
printf("\n[5].mobil keluar");
printf("\n[6].lihat mobil urutan terdepan");
printf("\n[7].lihat semua mobil");
printf("\n[8].exit\n");
printf("\npilihan: "); scanf("%c",&pilih); fflush(stdin);
if(pilih=='1'){isfull=isFull(&queue);
               if(isfull==1){printf("\n parkiran penuh\n");getch();}
               else {printf("\ntidak penuh\n"); getch();}
               }
else if(pilih=='2'){isempty=isEmpty(&queue);
               if(isempty==1){printf("\nparkiran kosong\n");getch();}
               else {printf("\ntidak kosong\n"); getch();}
               }
else if(pilih=='3'){kosongkan(&queue);}
else if(pilih=='4'){mobil_masuk(&queue);}
else if(pilih=='5'){mobilout(&queue); mobil2an_out(&queue);}
else if(pilih=='6'){ }
else if(pilih=='7'){ cetak(&queue);}
}while(pilih!='8');  
}

int isFull(queue *queue){
     if(queue->count==5) return 1;
     else return 0;
     }
    
int isEmpty(queue *queue){
    if(queue->count==0) return 1;
    else return 0;
}

void mobil_masuk(queue *queue){
     mobil *pNew; int batas;
     pNew=(mobil*)malloc(sizeof(mobil));
     if(pNew!=NULL){
     if(queue->count==5) {printf("parkiran full"); getch();}
     else{
          pNew->next=NULL;
          printf("\nmasukkan nama pemilik: "); scanf("%[^\n]",&pNew->pemilik);fflush(stdin);
          printf("\nmasukkan plat nomor  : "); scanf("%[^\n]",&pNew->platnomor);fflush(stdin);
          printf("\nmasukkan merk mobil  : "); scanf("%[^\n]",&pNew->merk_mobil);fflush(stdin);
         
          if(queue->count==0){
          queue->head=pNew;
          }
          else{
          queue->tail->next=pNew;
        
          }
          queue->tail=pNew;
          queue->count=(queue->count)+1;
          }   
          }
}

void mobilout(queue *queue){
      mobil *dltPtr;
     char platout[15];
   
     dltPtr = queue->head;
   
     if(queue->count == 1){
            queue->head = queue->tail =NULL;
     }
     else {
     queue->head=queue->head->next;
     }
   
     queue->count--;
   
     free(dltPtr);
}

void cetak(queue *queue){
     mobil *pWalker;
     int i=1;
     pWalker=queue->head;
     if(queue->count==0){printf("\nparkiran kosong");getch();}
     else{ system("cls");
     mobil2an(queue);
     gotoxy(1,7);
     while(pWalker!=NULL){
                           printf("mobil ke-%d : %s atas nama %s\n",i,pWalker->platnomor,pWalker->pemilik);
                           pWalker=pWalker->next; i++;
                           }
                           getch();
         }
}

void kosongkan(queue *queue){
  while(queue->head!=NULL){
                       mobilout(queue);
                   
                       }
}

//animasi mobil2an
void mobil2an(queue *queue){
int jml;
jml=queue->count;
int a;int z=65; int y;
int n;
printf("     IN  ");gotoxy(68,1);printf("  OUT  ");
gotoxy(1,6); printf("--------------------------------------------------------------------------------");
for(n=0;n<jml;n++){ //pengulangan untuk jumlah mobil
   for(a=1;a<=z;a++){//pengulangan agar mobil terlihat bergerak
  _sleep(30);
  gotoxy(a+2,2);printf(" _______");
  gotoxy(a,3);printf(" _|       |_");
  gotoxy(a,4);printf(" |          |");
  gotoxy(a,5);printf(" ---@-----@--");
  } 
  z=z-15;
}  
}

void mobil2an_out(queue *queue){
int jml;
jml=queue->count+1;
int a;int z=65; int y;
int n;
gotoxy(1,13);printf("     IN  ");gotoxy(68,13);printf("  OUT  ");
gotoxy(1,20); printf("--------------------------------------------------------------------------------");
for(n=0;n<jml;n++){ //pengulangan untuk jumlah mobil
   for(a=1;a<=z;a++){//pengulangan agar mobil terlihat bergerak
  gotoxy(a+2,16);printf(" _______");
  gotoxy(a,17);printf(" _|       |_");
  gotoxy(a,18);printf(" |          |");
  gotoxy(a,19);printf(" ---@-----@--");
  } 
  z=z-15;
}  
getch();

for(n=0;n<=1;n++){//pengulangan ketika 1 paling depan keluar
if (jml==1){
  gotoxy(a+2,16);printf("        ");
  gotoxy(a,17);printf("             ");
  gotoxy(a,18);printf("             ");
  gotoxy(a,19);printf("             ");            
}
else{
y=50; z=65;
for(n=0;n<jml-1;n++){
                  
   for(a=y;a<=z;a++){
  _sleep(30);
  gotoxy(a+2,16);printf(" _______");
  gotoxy(a,17);printf(" _|       |_");
  gotoxy(a,18);printf(" |          |");
  gotoxy(a,19);printf(" ---@-----@--");
}
  y=y-15; z=z-15;
}
}
} 
   getch();
   
}



Screenshot:

Semoga bermanfaat :)

Sunday, May 13, 2012

Program C stack menggunakan linked list


Stack dianalogikan seperti tumpukan. sehingga data yang terakhir kali dimasukkan adalah data yang pertama kali keluar. Jika dibandingkan dengan linked list, stack hanya bisa melakukan operasi push dan pop. Push mirip dengan tambah awal pada linked list dan Pop mirip dengan hapus awal pada linked list.
Hal ini membuat stack lebih simpel dari linked list tapi menurut saya kurang flexibel.
Contoh program :

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

struct node{
       int bil;
       struct node *next;
       };

struct stack{
       int count;
       struct node *top;
       };
      
int isFull(stack *stack){
     if(stack->count==5) return 1;
     else return 0;
     }
    
int isEmpty(stack *stack){
    if(stack->count==0) return 1;
    else return 0;
}  

void Push(stack *stack){
     node *pNew;
     if(stack->count>=5) {printf("stack full"); getch();}
     else{pNew=(node*)malloc(sizeof(node*));
          printf("\nmasukkan nilai yang ingin dipush ke stack: "); scanf("%d",&pNew->bil);
          pNew->next=stack->top;
          stack->top=pNew;
          stack->count++;
          printf("\nproses push sukses"); getch();
          }   
}

void cetak(stack *stack){
     node *pWalker;
     pWalker=stack->top;
     if(stack->count==0){printf("\nstack kosong");getch();}
     else{system("cls");
          printf("\n   TOP   \n");
     while(pWalker!=NULL){
                           printf("---------\n");
                           printf("|   %d   |\n",pWalker->bil);
                           printf("---------\n");
                           pWalker=pWalker->next;
                           }
                           getch();
         }
}


void Pop(stack *stack){
     int dataOut;
     node *dltPtr;
     dltPtr=stack->top;
     if(stack->count==0){}
     else{
     dataOut=stack->top->bil;
     stack->top=stack->top->next;
     stack->count--;
     free(dltPtr);
     printf("\nproses pop berhasil\n");getch();
     }
}

void Top(stack *stack){
    int dataout;
    if(stack->count==0){printf("\ntop = NULL\n");getch();}
    else{ dataout=stack->top->bil;
          printf("\ntop = %d\n",dataout);getch();
}
}

void destroy(stack *stack){
    node *destroyer;
    while(stack->top!=NULL){
                            destroyer=stack->top;
                            stack->top=stack->top->next;
                            free(destroyer);
                            }
    stack->count=0;
}



      
int main(){
stack stack;
stack.count=0;
stack.top=NULL;

int isfull,isempty;
char pilih;
do{system("cls");
printf("\t\t\t\tSTACK\n\n");  
printf("\n[1].isFull");
printf("\n[2].isEmpty");
printf("\n[3].makeEmpty");   
printf("\n[4].push");
printf("\n[5].pop");
printf("\n[6].top");
printf("\n[7].tampilkan stack");
printf("\n[8].exit\n");
printf("\npilihan: "); scanf("%c",&pilih); fflush(stdin);
if(pilih=='1'){isfull=isFull(&stack);
               if(isfull==1){printf("\n stack penuh\n");getch();}
               else {printf("\ntidak penuh\n"); getch();}
               }
if(pilih=='2'){isempty=isEmpty(&stack);
               if(isempty==1){printf("\n stack kosong\n");getch();}
               else {printf("\ntidak kosong\n");getch();}
               }
if(pilih=='3'){destroy(&stack);}
if(pilih=='4'){Push(&stack);}
if(pilih=='5'){Pop(&stack);}
if(pilih=='6'){Top(&stack);}
if(pilih=='7'){cetak(&stack);}
}while(pilih!='8');

}



Friday, May 11, 2012

Program C Simulasi Antrian (Praktikum ASD)

MODUL V LINKED LIST

Buatlah sebuah program simulasi antrian peminjaman buku perpustakaan. Kondisinya adalah sebagai berikut:
  • - Jika belum ada antrian, peminjam yang masuk berada di urutan terdepan
  • - Peminjam yang baru masuk harus mengantri di belakang antrian yang sudah ada
  • - Peminjam dapat keluar dari antrian kapan saja
  • - Petugas melayani peminjaman dari peminjam yang mengantri paling depan. Setelah meminjam, peminjam keluar dari antrian


SOURCE CODE :

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


struct antrian{
        int nomor;
        char nama[30];
        char buku[40];
        struct antrian *next;       
};

antrian *pHead = NULL;//inisialisasi linkedlist

//LIST FUNGSI YANG DIGUNAKAN
void cetak();
void outantrian();
void melayani();
void antrianbaru(antrian *pNew, int counter);
antrian *alokasiNodeBaru();
void bebaskan();

int main(){
    int counter=1;
    antrian *pNew;
    char pilih;
    do{system("cls");
    printf("\t\t\tPROGRAM SIMULASI ANTRIAN\n\n");
    printf("[1].antrian baru\n");
    printf("[2].keluar dari antrian\n");
    printf("[3].transaksi peminjaman\n");
    printf("[4].tampilkan antrian\n");
    printf("[5].exit\n");
    printf("pilihan: "); scanf("%c",&pilih);fflush(stdin);
    if(pilih=='1'){pNew=alokasiNodeBaru();
                   antrianbaru(pNew,counter);
                   counter++;
    }
    else if(pilih=='2'){outantrian();}
    else if(pilih=='3'){melayani();}
    else if(pilih=='4'){cetak();}
}while(pilih!='5');
bebaskan();
}


//fungsi untuk menampilkan list
void cetak(){
     antrian *pWalker = pHead;
     while(pWalker!=NULL){
         printf("nomor antrian : %d\n",pWalker->nomor); fflush(stdin);
         printf("nama          : %s\n",pWalker->nama); fflush(stdin);
         printf("judul buku    : %s\n",pWalker->buku); fflush(stdin);
         pWalker=pWalker->next;       
     }
     printf("\n");
     getch();
}



//pengunjung keluar dari antrian
void outantrian(){
     antrian *pCari,*pPre;int hapus;
     pCari=pHead;
     pPre=pHead;
     cetak();
     printf("nomor antrian yang ingin keluar dari antrian: "); scanf("%d",&hapus);
     while(pCari!=NULL && pCari->nomor!=hapus){
                               pCari=pCari->next;
                               while(pPre->next!=pCari){
                               pPre=pPre->next; } 
                               }
     if(pCari==pHead){pHead=pHead->next;
                      free(pCari);
                      }
    
     else{                     
     pPre->next=pCari->next;
     free(pCari);
     }
}



//fungsi melayani antrian = hapus awal
void melayani(){
     antrian *pHapus;
     pHapus=pHead;
     pHead=pHead->next;
     free(pHapus);
}

//fungsi antrian baru
void antrianbaru(antrian *pNew, int counter){
antrian *pEnd;
pNew->nomor=counter;
printf("masukkan nama         : "); scanf("%[^\n]",pNew->nama); fflush(stdin);
printf("masukkan judul buku   : "); scanf("%[^\n]",pNew->buku); fflush(stdin);

if(pHead == NULL){
              pNew->next = pHead;
              pHead = pNew;
     }
else {
     pEnd=pHead;//inisialisasi
     while(pEnd->next!=NULL){//untuk mencari node terakhir
                         pEnd=pEnd->next; }
     pNew->next=NULL;
     pEnd->next=pNew;
     }
}




//fungsi alokasi node baru
antrian *alokasiNodeBaru(){
  antrian *pNew = NULL;
  pNew = (antrian *) malloc(sizeof(antrian));
  return(pNew); //mengembalikan alamat yang sudah dipesan ke pemanggil
}

//fungsi free memori
void bebaskan(){
     antrian *pFree=pHead;
     while(pFree!=NULL){
                        pHead=pHead->next;
                        free(pFree);
                        pFree=pHead;
                        }
     }



Sunday, May 6, 2012

Download Emulator PS1 | ePSXe v1.6.0

Sebenarnya emulator PS1 ini sudah lama. Sekedar sharing bagi yang belum punya PS1 tapi ingin bermain game-game PS1. Dengan emulator ini, kita bisa bermain game-game PS1 tadi di laptop atau PC. Jadi tidak perlu beli alat PS1nya yang harganya 600ribuan (tahun 2000-an tapi) hehe.
Format file yang bisa dimainkan ISO, BIN, IMG, CUE, CCD, MDS, MDF.
Untuk konfigurasinya. sudah saya sertakan di dalamnya. Jadi tinggal setting sendiri.
download emulator ePSXe v1.6.0
Oh iya, file gamenya tidak saya archive juga. Jadi hanya emulator saja. Untuk gamenya silahkan searching sendiri di google. Saya lihat sudah banyak game-game PS1 yang sudah bisa dimainkan diemulator.
Semoga bermanfaat :)