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 :)

Download basic photography guide | Tutorial fotografi bagi pemula

Hehe, Saya tidak terlalu suka dengan fotografi sebenarnya. Jadi saya kurang tahu persis harus komentar apa. Jadi saya hanya ingin share ebook yang saya dapatkan dari website yang biasa saya kunjungi. Isinya tentang tutorial fotografi bagi pemula.

link download
semoga bermanfaat :)

Program C Double linked list

Kali ini saya akan posting tentang variasi lain dari linked list. Sebelumnya saya sudah posting tentang single linked list dan circular linked list. Kali ini adalah double linked list.
Agar  lebih jelas, lihat ilustrasi berikut :





Pada single linked list dan circular linked list hanya terdapat satu pointer pada masing-masing node yang berfungsi sebagai penghubung dengan node setelahnya. Sedangkan pada double linked list, setiap node memiliki dua pointer yang berfungsi sebagai penghubung dengan node sebelum dan setelahnya.
Untuk membuatnya mungkin menjadi sedikit lebih rumit. Tapi menjadi lebih praktis daripada single linked list atau circular linked list. Contohnya pada single linked list, untuk menghapus node di tengah list, kita memerlukan dua pointer. Tapi jika menggunakan double linked list, kita hanya memerlukan satu pointer.

Contoh Source Code double linked list :

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


struct node{
        struct node *prev;
        int data;
        struct node *next;       
};

typedef struct node node;

node *pHead = NULL;

node *alokasiNodeBaru(){
  node *pNew = NULL;
  pNew = (node *) malloc(sizeof(node));
  return(pNew);
}


void tambahAwal(node *pNew){
     printf("masukkan bilangan: "); scanf("%d",&pNew->data);
    
     if(pHead == NULL){
              pNew->prev = pHead;
              pNew->next = pHead;
              pHead = pNew;
     }
     else{
              //cari node yang menunjuk ke pHead
              pNew->prev = pHead;
              pNew->next = pHead;
              pHead->prev= pNew;
              pHead = pNew;  
     }
}



void cetak(){
     node *pWalker = pHead; int i=1;
     while(pWalker!=NULL){
         printf("node ke-%d = %d\n",i,pWalker->data);
         i++;
         pWalker=pWalker->next;       
     }
     printf("NULL\n");
}


void tambahTengah(node *pNew){
     node *pWalker;
     pWalker=pHead;
     int nilai,sisip;
     printf("masukkan nilai yang ingin ditambahkan: "); scanf("%d",&pNew->data);
     cetak();
     printf("data disisipkan setelah nilai : "); scanf("%d",&sisip);
     while(pWalker!=NULL && pWalker->data!=sisip){
                         pWalker=pWalker->next; }
                      
     if(pWalker==NULL) {printf("\ndata tidak ditemukan"); getch();}
     else {
           pNew->next=pWalker->next;
           pWalker->next->prev=pNew;
           pWalker->next=pNew;
           pNew->prev=pWalker;
           }

}

void tambahAkhir(node *pNew){
     node *pEnd;
     pEnd=pHead;
     printf("masukkan nilai yang ingin ditambahkan: "); scanf("%d",&pNew->data);
    
     while(pEnd->next!=NULL){
                         pEnd=pEnd->next; }
     pEnd->next=pNew;
     pNew->prev=pEnd;
     pNew->next=NULL;       
}

void hapusAwal(){
     node *pHapus;
     pHapus=pHead;
     pHead=pHead->next;
     pHead->prev=NULL;
     free(pHapus);
}

void hapusTengah(){
     node *pCari;int hapus;
     pCari=pHead;
     cetak();
     printf("masukkan bilangan yang ingin dihapus: "); scanf("%d",&hapus);
     while(pCari!=NULL && pCari->data!=hapus){
                               pCari=pCari->next;
                               }                     
    pCari->prev->next=pCari->next;
    pCari->next->prev=pCari->prev;
     free(pCari);
    
}

void hapusAkhir(){
     node *pEnd;
     pEnd=pHead;
     while(pEnd->next!=NULL){
                              pEnd=pEnd->next;
                              }
     pEnd->prev->next=NULL;
     free(pEnd);
}

    
    
int main(int argc, char *argv[])
{
  node *pNew; int pilih,bil;
  do{system("cls");
   printf("----------MENU-----------");
    printf("\n1.tambah awal");
    printf("\n2.tambah tengah");
    printf("\n3.tambah akhir");
    printf("\n4.hapus awal ");
    printf("\n5.hapus tengah");
    printf("\n6.hapus akhir");
    printf("\n7.cetak");
    printf("\n9.exit");
    printf("\npilihan : ");scanf("%d",&pilih);
   
    if(pilih==1){pNew=alokasiNodeBaru();
                 tambahAwal(pNew);
                 }
    else if(pilih==2){pNew=alokasiNodeBaru();
                 tambahTengah(pNew);
                 }
    else if(pilih==3){pNew=alokasiNodeBaru();
                 tambahAkhir(pNew);
                 }
    else if(pilih==4){hapusAwal();}
    else if(pilih==5){hapusTengah();}
    else if(pilih==6){hapusAkhir();}
    else if(pilih==7){cetak();getch();}

              
                
}while(pilih!=9);
 
 
  printf("\n");
  system("PAUSE");   
  return 0;
}

Saturday, May 5, 2012

Download C Compiler - dev c++

Bingung mau posting apa, Jadi kali ini saya ingin sharing compiler yang biasa saya gunakan saja, yaitu dev C++.

Compiler sendiri adalah program yang menerjemahkan source code(kumpulan instruksi dr programmer) menjadi object code(code yang dihasilkan oleh compiler) agar dapat dimengerti oleh mesin.
Source code adalah format yang bisa dibaca oleh manusia. Ketika kita membeli suatu program, biasanya kita menerimanya sudah dalam format bahasa mesin. Sehingga kita hanya bisa mengeksekusi secara langsung tapi tidak bisa memodifikasinya.

Menurut tingkat kedekatannya dengan mesin komputer, bahasa pemrograman terdiri dari:

1.Bahasa Mesin, yaitu memberikan perintah kepada komputer dengan memakai kode bahasa                biner,contohnya 01100101100110
2. Bahasa Tingkat Rendah, atau dikenal dengan istilah bahasa rakitan (bah.Inggris Assembly), yaitu memberikan perintah kepada komputer dengan memakai kode-kode singkat (kode mnemonic), contohnya MOV, SUB, CMP, JMP, JGE, JL, LOOP, dsb.
3. Bahasa Tingkat Menengah, yaitu bahasa komputer yang memakai campuran instruksi dalam kata-kata bahasa manusia  dan instruksi yang bersifat simbolik, contohnya {, }, ?, <<, >>, &&, ||, dsb.
4. Bahasa Tingkat Tinggi, yaitu bahasa komputer yang memakai instruksi berasal dari unsur kata-kata bahasa manusia, contohnya begin, end, if, for, while, and, or, dsb.

Sebagian besar bahasa pemrograman digolongkan sebagai Bahasa Tingkat Tinggi, hanya bahasa C yang digolongkan sebagai Bahasa Tingkat Menengah dan Assembly yang merupakan Bahasa Tingkat Rendah.

link download dev C++

Maaf ya postnya ngalor ngidul..tapi semoga bermanfaat :)

Wednesday, May 2, 2012

Program C Circular Linked List

Kali ini saya ingin share tentang circular linkedlist. Apa itu circular linkedlist? circular linkedlist sebenarnya mirip dengan linkedlist biasa. Bedanya hanya pointer next pada node terakhir menunjuk node paling awal. Sehingga bentuknya menjadi seperti lingkaran.

Pada Gambar diatas, P adalah pointer yang menunjuk node pertama. Kemudian Node terakhir menunjuk node awal sehingga membentuk lingkaran.
Contoh Program circular linkedlist :

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


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

typedef struct node node;

node *pList = NULL;

node *alokasiNodeBaru(){
  node *pNew = NULL;
  pNew = (node *) malloc(sizeof(node));
  return(pNew);
}


void tambahAwal(node *pNew){
     node *temp;
     if(pList == NULL){
              pNew->next = pNew;
              pList = pNew;
     }
     else{
              //cari node yang menunjuk ke pList
              temp = pList;
              while(temp->next != pList){
                    temp = temp->next;          
              }
             
              temp->next = pNew;
              pNew->next = pList;
              pList = pNew;  
     }
}



void cetak(){
     node *pWalker = pList;
     node *pNext = NULL;
     while(pNext != pList){
         printf("pWalker = %d, ", pWalker->data);
         pNext = pWalker->next;
         pWalker = pNext;
         printf("pWalker->next = %d \n", pWalker->data);         
     }

}


void tambahTengah(node *pNew){
     node *pWalker;
     pWalker=pList;
     int nilai,sisip;
     printf("masukkan nilai yang ingin ditambahkan: "); scanf("%d",&nilai);
     pNew->data = nilai;
     cetak();
     printf("data disisipkan setelah nilai : "); scanf("%d",&sisip);
     while(pWalker->next!=pList && pWalker->data!=sisip){
                         pWalker=pWalker->next; }
                      
     if(pWalker->next==pList) printf("\ndata tidak ditemukan");
     else {pNew->next=pWalker->next;
           pWalker->next=pNew; }
     cetak();

}

void tambahAkhir(node *pNew){
     node *pPre;
     pPre=pList;
     int nilai;
     printf("masukkan nilai yang ingin ditambahkan: "); scanf("%d",&nilai);
     pNew->data = nilai;
     while(pPre->next!=pList){
                         pPre=pPre->next; }
     pNew->next=pList;
     pPre->next=pNew;
                            
}

void hapusAwal(){
     node *pEnd, *pHapus;
     pEnd=pList;
     pHapus=pList;
     while(pEnd->next!=pList){
                              pEnd=pEnd->next;}
     pEnd->next=pHapus->next;
     pList=pList->next;
     free(pHapus);
}

void hapusTengah(){
     node *pCari,*pPre;int hapus;
     pPre=pList;
     pCari=pList;
     cetak();
     printf("masukkan bilangan yang ingin dihapus: "); scanf("%d",&hapus);
     while(pCari->data!=hapus){
                               pCari=pCari->next; }
     while(pPre->next!=pCari){
                              pPre=pPre->next;}
     pPre->next=pCari->next;
     free(pCari);
    
}

void hapusAkhir(){
     node *pEnd,*pPre;
     pEnd=pList;
     pPre=pList;
     while(pEnd->next!=pList){
                              pEnd=pEnd->next;}
     while(pPre->next!=pEnd){
                             pPre=pPre->next;}
     pPre->next=pList;
     free(pEnd);
}
    
    
int main(int argc, char *argv[])
{
  node *pNew; int pilih,bil;
  do{system("cls");
   printf("----------MENU-----------");
    printf("\n1.tambah awal");
    printf("\n2.tambah tengah");
    printf("\n3.tambah akhir");
    printf("\n4.hapus awal ");
    printf("\n5.hapus tengah");
    printf("\n6.hapus akhir");
    printf("\n7.cetak");
    printf("\n8.exit");
    printf("\npilihan : ");scanf("%d",&pilih);
   
    if(pilih==1){pNew=alokasiNodeBaru();
                 printf("masukkan bilangan: ");
                 scanf("%d",&bil);
                 pNew->data=bil;
                 tambahAwal(pNew);
                 }
    else if(pilih==2){pNew=alokasiNodeBaru();
                 tambahTengah(pNew);
                 }
    else if(pilih==3){pNew=alokasiNodeBaru();
                 tambahAkhir(pNew);
                 }
    else if(pilih==4){hapusAwal();}
    else if(pilih==5){hapusTengah();}
    else if(pilih==6){hapusAkhir();}
    else if(pilih==7){cetak();getch();}
                
                
                
}while(pilih!=8);
 
 
  printf("\n");
  system("PAUSE");   
  return 0;
}



Kemudian pertanyaan selanjutnya, apa kelebihannya dibandingkan linkedlist biasa? Nah, Saya juga masih bingung, karena menurut saya fungsinya sama saja. Untuk mengolah data secara dinamis. Jika ada yang tahu silahkan komen :)

Tuesday, May 1, 2012

Program C generator NIM (Praktikum ASD)

Buatlah struct dengan isi

kode_angkatan
kode_prodi
kode_jalur
nomor_urut
NIM

Buatlah sebuah generator nim 9 digit dengan ketentuan :
a. kode_angkatan merupakan 2 digit terakhir tahun masuk
b. inisial kode_prodi :

01 -> Teknik Informatika (ti)
02 -> Sistem Komputer (sk)
03 -> Sistem Informasi (si)

c. kode jalur :

01 -> reguler (r)
02 -> non reguler (n)

d. nomor urut digenerate otomatis oleh program secara berurut mulaidari 001 – 010
e. Program dapat digunakan untuk menggenarate nim secara berulang
f. hasil dari penggabungan data nim disimpan di final_nim
g. ada fungsi generate dan fungsi output yang menampilkan semua nim
yang pernah digenarate
h. Deklarasi struct menggunakan pointer to struct

SOURCE CODE :

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


typedef struct {
        int kode_angkatan;
        char kode_prodi[2];
        char kode_jalur[1];
        int nomor_urut;
        int final_NIM;
       
}mhs;

int generate(int kode_angkatan, char kode_jalur[1], char kode_prodi[2], int nomor_urut,int final_NIM){
    int a,b,c,d;
    if(strcmp (kode_prodi,"ti")==1) a=100000;
    else if (strcmp (kode_prodi,"sk")==1) a=200000;
    else if (strcmp (kode_prodi,"si")==1) a=300000;
    if (strcmp (kode_jalur,"r")==0)b=1000;
    else b=2000;
    c=(kode_angkatan%100)*10000000;
    d=nomor_urut;
    final_NIM=c+a+b+d;
    printf("NIM            : %09d",final_NIM);  
    return(1);
}   
   
   
void input(mhs *bio,int a){
                     printf("Angkatan       : "); scanf("%d",&bio[a].kode_angkatan);fflush(stdin);
                     printf("jurusan        : "); gets(bio[a].kode_prodi);fflush(stdin);
                     printf("jalur          : "); gets(bio[a].kode_jalur);
                     bio[a].nomor_urut=a+1;
}

int main(){
   
   
    int n;
    printf("             ___                      ____            |\n");
    printf("|--------------@-----------------------@--------------|\n");
    printf("|-------vvvvvvvvvvVvvvvvvvvvvvvvvvvvVvvvvvvvvvv-------|\n");
    printf("|-------|        Program Generater NIM        |-------|\n");
    printf("|-------|                                     |-------|\n");
    printf("|-------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-------|\n");
    printf("|-----------------------------------------------------|\n\n");
    mhs *bio;
    printf("masukkan jumlah nim yang akan digenerate: ");scanf("%d",&n);
    bio=(mhs*)malloc(n*sizeof(mhs));
    for(int a=0;a<n;a++){
                     input(bio,a);
                     generate(bio[a].kode_angkatan,bio[a].kode_jalur,bio[a].kode_prodi,bio[a].nomor_urut,bio[a].final_NIM);
                     printf("\n\n");
                     } 
                        
    system("pause");
    return(0);
}