Showing posts with label bahasa C. Show all posts
Showing posts with label bahasa C. Show all posts

Sunday, January 6, 2013

Program C Metode Biseksi

Program di bawah ini merupakan program penyelesaian non linear menggunakan metode biseksi.
Flowchart Program :

Source Code :


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


void input(int *a,int *b,int *c,int *d,int *e,float *xn, float *xn1,float *error);
float hitungxmid(float xn, float xn1);
float hitungfxn(float a,float b, float c, float d,float e,float xn);
float hitungfxn1(float a,float b, float c, float d,float e,float xn1);
float hitungfxmid(float a,float b, float c, float d,float e,float xmid);
void switchval(float *xn, float*xn1,float*xmid,float*fxn,float*fxmid);
void output(float *xn,float *xn1,float *xmid,float *fxn,float *fxn1,float *fxmid,int *count);

//FUNGSI UTAMA
int main(){
    char repeat;
    do{
    SetConsoleTitle("Created By Herdian");
    int a,b,c,d,e,count=1;
    float xn, xn1,error,xmid,fxn,fxn1,fxmid;
 
    system("cls");
 
    printf("\t\t\tPROGRAM BISEKSI\n\n");
    input(&a,&b,&c,&d,&e,&xn,&xn1,&error);
 
    while(fabs(xn1-xn)>= error){
    xmid=hitungxmid(xn,xn1);
    fxn=hitungfxn(a,b,c,d,e,xn);
    fxn1=hitungfxn(a,b,c,d,e,xn1);
    fxmid=hitungfxmid(a,b,c,d,e,xmid);
    output(&xn,&xn1,&xmid,&fxn,&fxn1,&fxmid,&count);
    switchval(&xn,&xn1,&xmid,&fxn,&fxmid); count++;
    }
    printf("Ingin Mengulang Program ? <Y/N>"); repeat=getch();
    }while(repeat=='y'||repeat=='Y');
}

//FUNGSI INPUT
void input(int *a,int *b,int *c,int *d,int *e,float *xn, float *xn1,float *error){

printf("f(x)= (a)x^4 + (b)x^3 + (c)x^2 + (d)x + e\n");
printf("\nINPUT:\n");
printf("a = "); scanf("%d",a); fflush(stdin);
printf("b = "); scanf("%d",b); fflush(stdin);
printf("c = "); scanf("%d",c); fflush(stdin);
printf("d = "); scanf("%d",d); fflush(stdin);
printf("e = "); scanf("%d",e); fflush(stdin);
printf("\ninputkan xn, xn+1 dan batas error\n");
printf("xn   = "); scanf("%f",xn); fflush(stdin);
printf("xn+1 = "); scanf("%f",xn1); fflush(stdin);
printf("batas error = "); scanf("%f",error); fflush(stdin);

}
//FUNGSI HITUNG XMID
float hitungxmid(float xn, float xn1){
float xmid;
xmid = (xn + xn1)/2;
return(xmid);  
}

//FUNGSI HITUNG F(xn)
float hitungfxn(float a,float b, float c, float d,float e,float xn){
float fxn;
fxn = ((a*pow(xn,4))+(b*pow(xn,3))+(c*pow(xn,2))+(d*xn)+e);
return (fxn);
}

//FUNGSI HITUNG F(xn+1)
float hitungfxn1(float a,float b, float c, float d,float e,float xn1){
float fxn1;
fxn1 = ((a*pow(xn1,4))+(b*pow(xn1,3))+(c*pow(xn1,2))+(d*xn1)+e);
return (fxn1);
}

//FUNGSI HITUNG F(xmid)
float hitungfxmid(float a,float b, float c, float d,float e,float xmid){
float fxmid;
fxmid = ((a*pow(xmid,4))+(b*pow(xmid,3))+(c*pow(xmid,2))+(d*xmid)+e);
return (fxmid);
}

//FUNGSI MENUKAR NILAI
void switchval(float *xn, float*xn1,float*xmid,float*fxn,float*fxmid){
if((*fxn) * (*fxmid) < 0 ) {*xn1 = *xmid; }
else if ((*fxn) * (*fxmid) > 0 )*xn = *xmid;
}

//FUNGSI OUTPUT
void output(float *xn,float *xn1,float *xmid,float *fxn,float *fxn1,float *fxmid,int *count){
if(*count==1){
printf("ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ\n");
printf("no    xn       xn+1      xmid      f(xn)      f(xn+1)    f(xmid) \n");
printf("ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ\n");}
printf("%0d   %f  %f  %f  %f  %f   %f  \n",*count,*xn,*xn1,*xmid,*fxn,*fxn1,*fxmid);

}

Monday, October 29, 2012

Program C Latihan Pengulangan (Loop)




Source code dibawah ini merupakan latihan pengulangan menggunakan bahasa C. Keluaran atau outputnya seperti gambar diatas. User menginputkan nilai n yang berupa nilai ganjil.  nilai tertinggi berada di pusat dan dikelilingi nilai -1 dari bilangan tertinggi. nilai n menentukan panjang dan lebar kotak.

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

int main(){
int n,a,b,c,indeks=1,decrement;

//filter input agar selalu ganjil
while(n%2!=1){
system("cls");
printf("masukkan n : "); scanf("%d",&n);
}

decrement=n;
//pengulangan ke bawah
for(a=1;a<=n;a++) {
                  c=1;
                 //pengulangan ke samping
                  for(b=1; b<=n; b++) {
                                                                   printf("%d ",c);
                                                                   if(b>=1 && b<indeks) c= c+1;
                                                                   else if(b>=decrement) {c=c-1; }
                                                                   }
               
                  if(a>=(n/2)+1) {indeks= indeks - 1;
                                  decrement=decrement+1;}
                  else {indeks=indeks+1;
                        decrement = decrement-1;}
                 
                
                 printf("\n");
                 }  
   
   
getch();   
}

Soal ini diambil dari Tutorial Turbo Pascal 7.01
Selamat Berlatih..

Saturday, July 14, 2012

Program konverter desimal ke biner & biner ke desimal

Program ini berfungsi sebagai konverter dari bilangan desimal ke biner ataupun sebaliknya. Program ini merupakan program sederhana tapi di dalamnya sudah mengandung konsep array, alokasi memori dinamis, looping dan percabangan. Untuk membuat konverter ke hexa maupun oktal, logikanya sama saja.

Sekedar review saja.
Semoga bermanfaat :)

Source Code bisa didownload disini

Monday, July 9, 2012

Program Administrasi Perpustakaan (Projek akhir pemrograman lanjut)


    Deskripsi Program

Program ini merupakan program administrasi perpustakaan yang berfungsi untuk me-manage database buku dan transaksi peminjaman buku. Program administrasi perpustakaan ini menggunakan konsep linked list, struct dan array di dalamnya. Terdapat dua mode pada program ini, yaitu mode administrator dan mode guess. Mode administrator memiliki hak untuk mengelola database secara penuh, sedangkan mode guess hanya diberi hak untuk mencari  dan meminjam buku.


B.                Fitur-fitur Utama Program dan Kegunaannya

Mode Guess :
1.      Fitur pinjam buku : Fungsi dari fitur ini adalah untuk memudahkan guess dalam meminjam buku. Guess menginputkan identitas dirinya dan menginputkan judul buku yang ingin dipinjam beserta jumlahnya. Guess hanya diperbolehkan meminjam maksimal 3 judul buku. Proses peminjaman akan langsung tercatat dalam file dan secara otomatis mengurangi jumlah buku yang berada di database.
2.      Fitur cari buku : Fitur ini memudahkan guess untuk menemukan buku yang diinginkan. Pencarian dibedakan menjadi dua. Pencarian berdasarkan judul buku dan pencarian berdasarkan pengarang.

Mode  Administrator :
1.      Fitur tambah buku : Fitur ini berfungsi untuk menambah buku baru ke dalam database.
2.      Fitur Cari buku : Fitur ini memudahkan Administrator untuk menemukan buku yang diinginkan. Pencarian dibedakan menjadi dua. Pencarian berdasarkan judul buku dan pencarian berdasarkan pengarang.
3.      Fitur hapus buku : Fitur ini berfungsi untuk menghapus buku dari database.
4.      Fitur ubah status buku : Fitur ini berfungsi untuk mengupdate status buku. Administrator dapat mengupdate jumlah, lokasi, dan kategori buku berdasarkan data yang baru.
5.      Fitur lihat daftar buku : Fitur ini berfungsi untuk menampilkan daftar buku yang berada pada database. Data yang ditampilkan adalah judul, jumlah, lokasi, kategori dan pengarang buku.
6.      Fitur lihat transaksi peminjaman : Fitur ini berfungsi untuk menampilkan transaksi peminjaman. Data yang ditampilkan adalah kode peminjaman, identitas peminjam dan buku-buku yang dipinjam.
7.      Fitur transaksi pengembalian buku : Fitur ini merupakan fasilitas untuk proses pengembalian buku. Administrator diminta untuk menginputkan kode peminjaman. Jika kode tersebut cocok, maka jumlah buku yang telah dipinjam dimasukkan kembali ke dalam database. Dan Transaksi peminjaman tersebut dihapus.


Source Code bisa di download disini  
Jika ada bug atau kritik, silahkan dikomen. semoga bermanfaat :) 
 

Monday, July 2, 2012

Operasi File pada C

Sudah lama tidak posting karena sibuknya kuliah, kali ini saya ingin sharing tentang file operasi pada C. File operasi ini berguna sebagai storage atau media penyimpanan pada C. Jadi seperti halnya memory card pada PS, kita bisa me-load kembali data-data sebelumnya.

Pada dasarnya, operasi file hanya memiliki dua operasi, yaitu membaca file dan menulis ke file. Untuk membaca atau menulis ke file, kita memerlukan sebuah pointer yang menunjuk ke file tersebut. syntaxnya : FILE *namapointer;  . Untuk mengakses sebuah file, Sebelumnya file tersebut harus dibuka terlebih dahulu menggunakan fungsi: fopen(ptr_to_file). Kemudian jangan lupa untuk menutup file tersebut jika sudah selesai, menggunakan fungsi: fclose(ptr_to_file). Terdapat fungsi-fungsi yang lain juga. Seperti fwrite(buffer,size1,size2,ptr_to_file) untuk menulis data pada buffer ke file, fread(buffer,size1,size2,ptr_to_file) untuk membaca data dari file dan dimasukkan ke buffer, fprintf() untuk mencetak output pada file dan fungsi-fungsi lainnya.


Yang harus dimengerti adalah file disini merupakan sebuah media penyimpanan. Jadi jika kita ingin mengolah data yang ada pada file, data tersebut dibaca terlebih dahulu dan dimasukkan nilai-nilainya ke suatu variabel ataupun array. Barulah kemudian kita edit. Setelah itu dapat kita masukkan kembali nilai yang baru ke dalam file tadi. Untuk mengetahui data mana yang kita inginkan, gunakan perintah fseek( ) untuk mencari data yang kita inginkan di dalam file.
Untuk lebih detailnya, silahkan download file tentang operasi file disini.

semoga bermanfaat, have a nice holiday :)

Sunday, May 20, 2012

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');

}



Sunday, May 6, 2012

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

Wednesday, April 25, 2012

Program C menghitung perkalian matrix

Program matrix ini berfungsi untuk menghitung hasil perkalian matrix. User dapat menentukan lebar dan panjang kedua matrix yang akan dikalikan. Sedikit berbeda dengan program perkalian matrix yang biasanya lebar dan panjangnya sama.

Silahkan download applikasinya(file.exe) disini

Source Code :


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

int main () {
    int r1,c1,r2,c2;
    printf("\t\t\tPROGRAM PERKALIAN MATRIX\n\n");   
    do{//jika kolom matrix1 tidak sama dengan baris matrix2, loop akan dieksekusi
    system("cls");
    printf("masukkan jumlah baris matrix pertama: "); scanf("%d",&r1);
    printf("masukkan jumlah kolom matrix pertama: "); scanf("%d",&c1);
    printf("masukkan jumlah baris matrix kedua  : "); scanf("%d",&r2);
    printf("masukkan jumlah kolom matrix kedua  : "); scanf("%d",&c2);
    if(c1!=r2){printf("data salah!\nperkalian matrix yang diperbolehkan: n kolom matrix1 = n baris matrix2\n");getch();}
    }
    while(c1!=r2);
    int matrix1[r1][c1], matrix2[r2][c2],matrix3[r1][c2],temp1,temp2;
    int a,b,c,d,counter;
    //input matrix pertama
    printf("\nmasukkan elemen2 matrix pertama: \n");
    for(a=0;a<r1;a++){
                      for(b=0;b<c1;b++){printf("elemen ke[%d][%d]= ",a,b); scanf("%d",&matrix1[a][b]);}
                      };
    //input matrix kedua
    printf("\nmasukkan elemen2 matrix kedua: \n");
    for(a=0;a<r2;a++){
                      for(b=0;b<c2;b++){printf("elemen ke[%d][%d]= ",a,b); scanf("%d",&matrix2[a][b]);}
                      };
                     
                     
    //mengeset nilai awal matrix hasil dengan nilai 0                 
    for(b=0;b<r1;b++){
                      for(a=0;a<c2;a++){matrix3[b][a]=0;}                                               
                      }
                     
    //perkalian matrix
    for(a=0,b=0,counter=1;counter<=(r1*c2);b++,counter++){
                              for(c=0;c<c1;c++){matrix3[a][b]=matrix3[a][b]+(matrix1[a][c]*matrix2[c][b]);
                                                    }
                              if(b==(c2-1)){b=-1;a=a+1;}
                                                }
    //menampilkan hasil perkalian                                          
    printf("\n\nHASIL PERKALIAN\n\n");  
    for(b=0;b<r1;b++){
                      for(a=0;a<c2;a++){
                                              printf("%d  ",matrix3[b][a]);}
                                              printf("\n");
                                                               
                      }
   
    system("pause");
    return 0;
}

semoga bermanfaat.

Monday, April 23, 2012

Program C mengurutkan frekuensi karakter dari string

Tugas lagi, tugas lagi.. sampai kurang tidur.
Jadi tugasnya begini :
Buatlah program untuk menampilkan jumlah karakter-karakter yang digunakan pada suatu teks. Urutkan karakter tersebut dari yang
muncul paling sering ke karakter yang paling sedikit muncul.

char *teks[]={   
"In this age of viruses and hackers, of electronic eavesdropping and electronic fraud, security is paramount.",
"As the disciplines of cryptography and network security have matured, more practical, readily available",
"applications to enforce network security have developed. This text provides a practical survey of both the",
"principles and practice of cryptography and network security. First, the basic issues to be addressed by a",
"network security capability are explored through a tutorial and survey of cryptography and network security technology."
}

Ini source code saya :
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>

struct list{
       char huruf;
       int frekuensi; };

int main() {
struct list listke[26],temp;
int totalkarakter=0, counter,a,b,c;

char *teks[]={   
"In this age of viruses and hackers, of electronic eavesdropping and electronic fraud, security is paramount.",
"As the disciplines of cryptography and network security have matured, more practical, readily available",
"applications to enforce network security have developed. This text provides a practical survey of both the",
"principles and practice of cryptography and network security. First, the basic issues to be addressed by a",
"network security capability are explored through a tutorial and survey of cryptography and network security technology."
};
//mengeset nilai frekuensi awal=0
for(c=0;c<26;c++){
                  listke[c].frekuensi=0;};
                 


for(b=0;b<5;b++){//pengulangan untuk jumlah teks
counter=strlen(teks[0]);
totalkarakter=totalkarakter+counter;
for(c=0;c<26;c++){//pengulangan untuk karakter
for(a=0;a<counter;a++){//pengulangan untuk mengetahui frekuensi karakter
                       if(teks[b][a]=='a'+c){listke[c].huruf='a'+c;listke[c].frekuensi++;};
};
};
};

//pengurutan
for(a=0;a<(26-1);a++){
                         for(b=a;b<26;b++){
                         if(listke[b].frekuensi>listke[a].frekuensi){
                                               temp=listke[a];
                                               listke[a]=listke[b];
                                               listke[b]=temp; };                   
                                               };
                                               }

printf("total karakter adalah = %d karakter",totalkarakter);
for(c=0;c<26;c++){if(listke[c].frekuensi!=0){
                  printf("\nkarakter %c frekuensi=%d",listke[c].huruf,listke[c].frekuensi);}};;
                 
    printf("\n");
    system("pause");
}


   



kalau ada yang salah komen ya..

my life's suck lately n it's getting worse!