Jumat, 25 Juni 2010

pembahasan stack

stack merupakan sebuah konsep dimana kita hanya bisa mengakses data yang terakhir masuk seperti halnya dalam sebuah tumpukan. sebuah stack di inisialisasikan dengan top sebagai ujung masuknya item dan juga keluarnya item.
Dalam stack terdapat operasi push unuk memasukkan data dan juga pop untuk mengeluarkan data. berikut operasi push dan juga pop

void push(char x)
{
stack[top+1]=x;
top++;
}

void pop()
{
temp=stack[top];
stack[top]=NULL;
top--;
}

pembahasan linked list

konsep dasar linked list hampir sama dengan array. jika kita menggunakan indeks dalam array, maka dalam linked list kita akan menggunakan pointer. Pointer akan digunakan untuk menunjuk alamat lain sebuah data dalam linked list hingga terbentuk sebuah rantai data. sebuah linked list disusun dari struct, contoh

typedef struct simpul {
char nama[20];
float nilai;
struct simpul *next_simpul;
} simpulku;

di atas terdapat sebuah struct yang berisi nama,nilai, dan simpul *next yang merupakan sebuah pointer yang akan menunjuk ke simpul berikutnya, berikut gambaran sebuah linked list




dalam linked list juga terdapat head yang menunjuk ke simpul paling awal dan tail yang menunjuk simpul terakhir

pembahasan searching

searching merupakan algoritma untuk mencari data dari kumpulan beberapa data. Ada macam2 algoritma searching, misalnya sequential searching dan binery searching.

1. Sequential searching
sequntial serching merupakan algoritma pencarian yang mencari secara sequential atau berurutan. Tiap2 index akan dicek dan jika data telah sama dengan data yang dicari maka pencarian akan dihentikan.
berikut algoritmanya

for (i = 0; i < n; i++)
if (key == data[i])
return (i); //return the index
return (-1); //key not found

n merupakan jumlah keseluruhan data. Data akan dicari secara berurutan sampai batas ke n. Di dalam looping terdapat fungsi if untuk mengecek apakah data tersebut sama. Jika sama maka fungsi akan mengenbalikan nilai i yang berarti data telah ditemukan

2. Binery searching
binery searching merupakan algoritma pencarian data dimana program akan mempersempit rung lingkup pencarian sampai hanya tersisa data yang dicari ataupun data tidak ditemukan. berikut algoritmanya

low = 0;
high = n – 1;
while (low <= high)
{ middle = (low + high)/2;
if (key == data[middle]
return(middle);
if (key < data[middle]
high = middle – 1;
else
low = middle + 1;
}
return(-1);

low merupakan variabel untuk indeks awal dan high untuk indeks terakhir. sedangkan middle merupakan indeks tengah yang di dapat dari penjumlahan low dan high dibagi 2.
berikutnya akan dicek apakah data yang dicari lebih besar dari data pada indeks middle atau lebih kecil atau juga sama. jika lebih besar maka low atau batas bawah akan dimulai dari middle + 1 dan jika lebih kecil maka high atau batas atas akan berakhir di middle -1. Proses ini akan terus berulang samapi data ditemukan ataupun data tidak ditemukan. ada 1 hal yang sangat penting dalam binery seearching yaitu data yang dicari sudah harus urut

source code sorting bubble

#include "stdio.h"

void bubble(char a[],char n)
{
char ss;
for(int i=0;i < n;i++)
{
for(int j=0;j < n-1-i;j++)
if(a[j] > a[j+1])
{
ss=a[j];
a[j]=a[j+1];
a[j+1]=ss;
}
}
for(int y=0;y < n;y++)
{
printf("%c",a[y]);
}
printf("\n\n");
}

void main()
{
char a[100];
int n=0;

printf("Masukkan angka=");
scanf("%s",&a);
for(int i=0;i <= 100;i++)
{
if(a[i]>1)n++;
}

bubble(a,n);
}

source code searching bnary

#include"stdio.h"

int npm[20];
int xx;
int key;

void SO(int a)
{
for(int i=0;i < a-1;i++)
for(int j=0;j < a-i-1;j++)
if(npm[j] > npm[j+1])
{
xx=npm[j];
npm[j]=npm[j+1];
npm[j+1]=xx;
}


}
int cari(int r)
{
int a=0;
int z=r;
int m;
int nilai=0;

while(a<=z && nilai==0)
{
m=(a+z)/2;
if(key == npm[m])
nilai=1;
else
if(key < npm[m])
z=m-1;
else
a=m+1;
}
if(nilai==1) return 1;
else
return 0;
}



void main()
{
int n;
int hasil;

printf("Brapa data yang ingin di masukkan=");
scanf("%d",&n);

for(int i=0;i < n;i++)
{
printf("\n\nAngka ke-%d=",i+1);
scanf("%d",&npm[i]);
}
for(int y=0;y < n;y++)
{
printf("%d,",npm[y]);
}

SO(n);
printf("\nMasukkan angka yang di cari=");
scanf("%d",&key);

hasil=cari(n);
if(hasil==1)
{printf("Data di temukan\n\n");}
else if(hasil==0)
{ printf("Data TIDAK di temukan\n\n");}
}

source code searching bnary

#include"stdio.h"

int npm[20];
int xx;
int key;

void SO(int a)
{
for(int i=0;i < a-1;i++)
for(int j=0;j < a-i-1;j++)
if(npm[j] > npm[j+1])
{
xx=npm[j];
npm[j]=npm[j+1];
npm[j+1]=xx;
}


}
int cari(int r)
{
int a=0;
int z=r;
int m;
int nilai=0;

while(a<=z && nilai==0)
{
m=(a+z)/2;
if(key==npm[m])
nilai=1;
else
if(key z=m-1;
else
a=m+1;
}
if(nilai==1) return 1;
else
return 0;
}



void main()
{
int n;
int hasil;

printf("Brapa data yang ingin di masukkan=");
scanf("%d",&n);

for(int i=0;i {
printf("\n\nAngka ke-%d=",i+1);
scanf("%d",&npm[i]);
}
for(int y=0;y {
printf("%d,",npm[y]);
}

SO(n);
printf("\nMasukkan angka yang di cari=");
scanf("%d",&key);

hasil=cari(n);
if(hasil==1)
{printf("Data di temukan\n\n");}
else if(hasil==0)
{ printf("Data TIDAK di temukan\n\n");}
}

source code data karyawan dengan linked list

#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "string.h"

struct node//struct
{
int nip;
char nama[20];//array
int gaji;
int umur;
struct node *next;//linked list
struct node *prev;
};
typedef struct node *simpul;
struct node simpulx[100];
struct node smpn;
simpul data, head=NULL, tail=NULL, temp;
int pilih;
int plh;
int tmpl;
int doble=0;
int n;
int jmlh=0;
int hpus;

void urut()
{
int i=0;
temp=head;
while(temp!=NULL)
{
simpulx[i].nip=temp->nip;
strcpy(simpulx[i].nama,temp->nama);
simpulx[i].gaji=temp->gaji;
simpulx[i].umur=temp->umur;
i++;
temp=temp->next;
}
for(int r=0;r < jmlh-1;r++)
for(int t=0;t < jmlh-1-r;t++)
{
if(simpulx[t].nip > simpulx[t+1].nip)//sorting untuk menampilkan secara urut
{
smpn=simpulx[t];
simpulx[t]=simpulx[t+1];
simpulx[t+1]=smpn;
}
}
printf("||NIP\t\t||Nama\t\t||Gaji\t\t||umur\t||");
for(int j=0;j<=100;j++)
{
printf("\n||%d\t||%s\t||%d\t||%d\t||",simpulx[j].nip,simpulx[j].nama,simpulx[j].gaji,simpulx[j].umur);
if(simpulx[j+1].nip<1)break;//cek apakah simpul berikutnya kosong, jika kosong looping di hentikan dg keyword 'break'
}
printf("\n\ntekan ENTER");
getch();

}

void nip()
{
printf("Masukkan nip yang di tampilkan=");
scanf("%d",&tmpl);

temp=head;
while(temp!=NULL && temp->nip!=tmpl)//searcing untuk mencari data yang akan di tampilkan
{
temp=temp->next;
}
if(temp!=NULL && temp->nip==tmpl)
{
printf("||NIP\t\t||Nama\t\t||Gaji\t\t||umur\t||");
printf("\n||%d\t||%s\t||%d\t||%d\t||",temp->nip,temp->nama,temp->gaji,temp->umur);
}else
{
printf("data tdk ditemukan");
}printf("\n\ntekan ENTER");getch();
}

void hapus()
{
simpul prev=NULL;
printf("Masukkan nip yang di hapus=");
scanf("%d",&hpus);

temp=head;
while(temp!=NULL && temp->nip!=hpus)//searching untuk mencari data yang di hapus
{
prev=temp;
temp=temp->next;
}
if(temp!=NULL && temp->nip==hpus)
{
if(temp->next != NULL && temp->prev != NULL)
{
prev->next = temp->next;
(temp->next)->prev=prev;
}
else if (temp->next == NULL)
{
prev->next = NULL;
}
else if (temp == head && head->next == NULL)
{
head = NULL;
}
else if (temp == head && head->next != NULL)
{
(head->next)->prev=NULL;
head = head->next;
}
free(temp); jmlh--;
printf("\ndata di hapus");

}else
{
printf("data tdk ditemukan");
}printf("\n\ntekan ENTER");getch();system("cls");
}
void insert()
{
data = (simpul) malloc(sizeof (struct node));
printf("NIP=");
scanf("%d",&n);
temp=head;
while(temp!=NULL)
{
if(temp->nip==n)doble=1;
temp=temp->next;
}
if(doble==0)
{
data->nip=n;
printf("\nNama=");
scanf("%s",&data->nama);
printf("\nGaji=");
scanf("%d",&data->gaji);
printf("\nUmur=");
scanf("%d",&data->umur);

data->next=NULL;
data->prev=NULL;
jmlh++;

if(head==NULL && tail==NULL)
{
head=data;
tail=data;
}else
{
data->prev=tail;
tail->next=data;
tail=data;
}
}else
{
printf("NIP sudah terdaftar");
}printf("\n\ntekan ENTER");
getch();
system("cls");
}
void view()
{
printf("1.tampil seluruh secara urut");
printf("\n2.tampil berdasarkan NIP");
printf("\nMasukkan pilihan=");
scanf("%d",&plh);
switch(plh)
{
case 1: urut();
break;
case 2: nip();
break;
default: printf("\nSALAH!!!");
}system("cls");
}

void main()
{
while(pilih!=4)
{
printf("1.insert data");
printf("\n2.hapus data");
printf("\n3.tampilkan");
printf("\n4.EXIT");
printf("\nMasukkan pilihan=");
scanf("%d",&pilih);
system("cls");

switch(pilih)
{
case 1: insert();
break;
case 2: hapus();
break;
case 3: view();
break;
case 4: printf("\nterima kasih\n\n");
break;
default: printf("\n\n SALAH!!\n");
}
}
}

source code data karyawan dengan linked list

#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "string.h"

struct node//struct
{
int nip;
char nama[20];//array
int gaji;
int umur;
struct node *next;//linked list
struct node *prev;
};
typedef struct node *simpul;
struct node simpulx[100];
struct node smpn;
simpul data, head=NULL, tail=NULL, temp;
int pilih;
int plh;
int tmpl;
int doble=0;
int n;
int jmlh=0;
int hpus;

void urut()
{
int i=0;
temp=head;
while(temp!=NULL)
{
simpulx[i].nip=temp->nip;
strcpy(simpulx[i].nama,temp->nama);
simpulx[i].gaji=temp->gaji;
simpulx[i].umur=temp->umur;
i++;
temp=temp->next;
}
for(int r=0;r for(int t=0;t {
if(simpulx[t].nip>simpulx[t+1].nip)//sorting untuk menampilkan secara urut
{
smpn=simpulx[t];
simpulx[t]=simpulx[t+1];
simpulx[t+1]=smpn;
}
}
printf("||NIP\t\t||Nama\t\t||Gaji\t\t||umur\t||");
for(int j=0;j<=100;j++)
{
printf("\n||%d\t||%s\t||%d\t||%d\t||",simpulx[j].nip,simpulx[j].nama,simpulx[j].gaji,simpulx[j].umur);
if(simpulx[j+1].nip<1)break;//cek apakah simpul berikutnya kosong, jika kosong looping di hentikan dg keyword 'break'
}
printf("\n\ntekan ENTER");
getch();

}

void nip()
{
printf("Masukkan nip yang di tampilkan=");
scanf("%d",&tmpl);

temp=head;
while(temp!=NULL && temp->nip!=tmpl)//searcing untuk mencari data yang akan di tampilkan
{
temp=temp->next;
}
if(temp!=NULL && temp->nip==tmpl)
{
printf("||NIP\t\t||Nama\t\t||Gaji\t\t||umur\t||");
printf("\n||%d\t||%s\t||%d\t||%d\t||",temp->nip,temp->nama,temp->gaji,temp->umur);
}else
{
printf("data tdk ditemukan");
}printf("\n\ntekan ENTER");getch();
}

void hapus()
{
simpul prev=NULL;
printf("Masukkan nip yang di hapus=");
scanf("%d",&hpus);

temp=head;
while(temp!=NULL && temp->nip!=hpus)//searching untuk mencari data yang di hapus
{
prev=temp;
temp=temp->next;
}
if(temp!=NULL && temp->nip==hpus)
{
if(temp->next != NULL && temp->prev != NULL)
{
prev->next = temp->next;
(temp->next)->prev=prev;
}
else if (temp->next == NULL)
{
prev->next = NULL;
}
else if (temp == head && head->next == NULL)
{
head = NULL;
}
else if (temp == head && head->next != NULL)
{
(head->next)->prev=NULL;
head = head->next;
}
free(temp); jmlh--;
printf("\ndata di hapus");

}else
{
printf("data tdk ditemukan");
}printf("\n\ntekan ENTER");getch();system("cls");
}
void insert()
{
data = (simpul) malloc(sizeof (struct node));
printf("NIP=");
scanf("%d",&n);
temp=head;
while(temp!=NULL)
{
if(temp->nip==n)doble=1;
temp=temp->next;
}
if(doble==0)
{
data->nip=n;
printf("\nNama=");
scanf("%s",&data->nama);
printf("\nGaji=");
scanf("%d",&data->gaji);
printf("\nUmur=");
scanf("%d",&data->umur);

data->next=NULL;
data->prev=NULL;
jmlh++;

if(head==NULL && tail==NULL)
{
head=data;
tail=data;
}else
{
data->prev=tail;
tail->next=data;
tail=data;
}
}else
{
printf("NIP sudah terdaftar");
}printf("\n\ntekan ENTER");
getch();
system("cls");
}
void view()
{
printf("1.tampil seluruh secara urut");
printf("\n2.tampil berdasarkan NIP");
printf("\nMasukkan pilihan=");
scanf("%d",&plh);
switch(plh)
{
case 1: urut();
break;
case 2: nip();
break;
default: printf("\nSALAH!!!");
}system("cls");
}

void main()
{
while(pilih!=4)
{
printf("1.insert data");
printf("\n2.hapus data");
printf("\n3.tampilkan");
printf("\n4.EXIT");
printf("\nMasukkan pilihan=");
scanf("%d",&pilih);
system("cls");

switch(pilih)
{
case 1: insert();
break;
case 2: hapus();
break;
case 3: view();
break;
case 4: printf("\nterima kasih\n\n");
break;
default: printf("\n\n SALAH!!\n");
}
}
}

source code queue

#include "stdio.h"
#define maxsize 100

int dpn=0;
int jmlh=0;
int blkng=0;
char data[maxsize];
char temp;

void insert()
{
printf("Masukkan data=");
scanf("%s",&temp);
if(jmlh==maxsize)
printf("data penuh");
else
{
data[blkng]=temp;
blkng++;
jmlh++;
}
}

void out()
{
if(jmlh==0)
printf("data kosong\n\n");
else
{
dpn++;
jmlh--;
}
}

void view()
{
printf("\n");
for( int i=dpn;i<=blkng;i++)
{
printf("%c ",data[i]);
}
printf("\n");
}



void main()
{
int pilih;

while(pilih!=4)
{

printf("1.insert");
printf("\n2.out");
printf("\n3.view");
printf("\n4.EXIT");
printf("\nMasukan pilihan=");
scanf("%d",&pilih);
switch(pilih)
{
case 1: insert();
break;
case 2: out();
break;
case 3: view();
break;
case 4: printf("terima kasih");
break;
default :
printf("salah");
break;
}
}




}

source code jumlh 2 bilangan factorial dg rekursif

#include "stdio.h"
#include "stdlib.h"

int satu(int x)
{
int m,n;

if(x<=1) return (1);
m=x-1;
n=satu(m);
return (x+n);

}
int dua(int z)
{
int m,n;

if(z<=1) return (1);
m=z-1;
n=dua(m);
return (z+n);

}

void main()

{
int a,b,jmlh;
int p,w,g;

char pilihan;

printf("masukkan nilai A=");
scanf("%d",&a);
printf("\nmasukkan nilai B=");
scanf("%d",&b);

printf("\nLoading.");for(p=0;p<10000;p++){for(w=0;w<10000;w++){}};
for(g=0;g<=8;g++)
{
printf(".");for(p=0;p<10000;p++){for(w=0;w<10000;w++){}};

}
satu(a);
dua(b);
printf("\n\nhasil A=%i",satu(a));
printf("\nhasil B=%i",dua(b));
//getch();
printf("\n\nLoading.");for(p=0;p<10000;p++){for(w=0;w<10000;w++){}};
for(g=0;g<=8;g++)
{
printf(".");for(p=0;p<10000;p++){for(w=0;w<10000;w++){}};

}

jmlh=satu(a)*dua(b);
printf("\n\nJumlah=%i\n\n",jmlh);

printf("\n\nIngin kembali ke awal(y/n)??");
scanf("%s",&pilihan);
if(pilihan=='y')
{system("cls");
main();}
else if(pilihan=='n')
printf("\n\nTerima kasih telah menggunakan program ini\n");


}

source code data mahasiswa dg struct

#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "string.h"

void TD();
int z,h;
int pilihan;
int a,j;
int x;
struct data
{
int nip;
char nama[20];
char ttl[10];
char alamat[30];
char jk[5];
}data;
struct data dt[1000];
struct data rt[1000];
struct data sm[1000];

void NIP()
{
TD();
}
void name()
{
int u=0;
int i=0;
int q=0;
for(a=0;a<=1000;a++)
{
if(rt[a].nip >= 1)u=u+1;
}
int pos;
for(x=0;x < u-1;x++)
{
pos=x;
for(j=x+1;j < u;j++)
{
do
{
if(rt[pos].nama[i]==rt[j].nama[i])i=i+1;
else
q=1;
}while(q==0);

if(rt[pos].nama[i] > rt[j].nama[i])pos=j;

}
sm[1]=rt[x];
rt[x]=rt[pos];
rt[pos]=sm[1];
}

TD();
}

void ID()
{
char tmbh;
h=1;
printf("NIP max(1000)\t\t=");
scanf("%d",&a);
for(j=0;j<=1000;j++)
{
if(a==dt[j].nip)
{printf("\n\nNomer sudah digunakan\nTekan ENTER untuk kembali ke awal");
getch();
system("cls");
h=5;}
}
if(h==1){
fflush(stdin);
dt[a].nip=a;
printf("\nNama\t\t\t=");
gets(dt[a].nama);
printf("\nTTL(ddmmyy)\t\t=");
gets(dt[a].ttl);
printf("\nAlamat\t\t\t=");
gets(dt[a].alamat);
printf("\nJenis Kelamin(L/P)\t=");
gets(dt[a].jk);
printf("ingin tmbh data(y/n)");
scanf("%s",&tmbh);
system("cls");
if(tmbh=='y') ID();
else h=5;}

}
void UD()
{
h=1;
printf("Masukkan NIP yang akan di rubah=");
scanf("%d",&a);
for(j=0;j<=1000;j++)
{
if(a==dt[j].nip)
{
fflush(stdin);
printf("\nNama\t\t\t=");
gets(dt[a].nama);
printf("\nTTL(ddmmyy)\t\t=");
gets(dt[a].ttl);
printf("\nAlamat\t\t\t=");
gets(dt[a].alamat);
printf("\nJenis Kelamin(L/P)\t=");
gets(dt[a].jk);
printf("tekan ENTER");
getch();
system("cls");
h=5;
}
}
if(h==1)
{
printf("NIP tidak tersedia\nTekan ENTER untuk kembali ke awal");
getch();
system("cls");
}
}

void HD()
{
h=1;
printf("Masukkan NIP yg akan di hapus=");
scanf("%d",&a);
for(j=0;j<=1000;j++)
{
if(dt[j].nip==a)
{
dt[a].nip=0;
printf("Data telah terhapus\n\nTekan ENTER untuk kembali ke awal");
getch();
h=0;
system("cls");
}
}
if(h==1)
{
printf("data tdk ada\ntekan ENTER untuk kembali ke awal");
getch();
system("cls");
}
}

void TD()
{
printf("==========================================================");
printf("\n||NIP\t|Nama\t\t|TTL\t|Alamat\t\t|JK\t||");
printf("\n==========================================================");
for(j=0;j<=1000;j++)
{
if(rt[j].nip>=1)
{ printf("\n||%d\t|%s\t\t|%s\t|%s\t\t|%s\t||",rt[j].nip,rt[j].nama,rt[j].ttl,rt[j].alamat,rt[j].jk);}
}
printf("\n==========================================================");
printf("\n\nTekan ENTER");
getch();
system("cls");
}

void SO()
{
a=0;
x=0;
for(j=a;j<1000;j++)
{
if(dt[j].nip>=1)
{
rt[x].nip=dt[j].nip;
strcpy(rt[x].nama,dt[j].nama);
strcpy(rt[x].ttl,dt[j].ttl);
strcpy(rt[x].alamat,dt[j].alamat);
strcpy(rt[x].jk,dt[j].jk);a=j+1;x=x+1;
}
}

printf("1.by NIP");
printf("\n2.by Name");
printf("\nMasukkan pilihan=");
scanf("%d",&pilihan);
switch(pilihan)
{
case 1:
NIP();
break;
case 2:
name();
break;
default:
printf("pilihan tidak tersedia\ntekan ENTER untuk kembali ke awal");
getch();
system("cls");
}
}

void main()
{
z=1;
do
{
printf("PT. SEJAHTERA");
printf("\n\n1.Input data");
printf("\n2.Update data");
printf("\n3.Hapus data");
printf("\n4.Tampilkan data");
printf("\n5.Exit");
printf("\n\nMasukkan pilihan=");
scanf("%d",&pilihan);
system ("cls");
switch(pilihan)
{
case 1: ID();
break;
case 2: UD();
break;
case 3: HD();
break;
case 4: SO();
break;
case 5: printf("Terima kasih\n\n");
z=0;
break;
default: main();
}
}while(z==1);
}

source code data mahasiswa dg struct

#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "string.h"

void TD();
int z,h;
int pilihan;
int a,j;
int x;
struct data
{
int nip;
char nama[20];
char ttl[10];
char alamat[30];
char jk[5];
}data;
struct data dt[1000];
struct data rt[1000];
struct data sm[1000];

void NIP()
{
TD();
}
void name()
{
int u=0;
int i=0;
int q=0;
for(a=0;a<=1000;a++)
{
if(rt[a].nip>=1)u=u+1;
}
int pos;
for(x=0;x {
pos=x;
for(j=x+1;j {
do
{
if(rt[pos].nama[i]==rt[j].nama[i])i=i+1;
else
q=1;
}while(q==0);

if(rt[pos].nama[i]>rt[j].nama[i])pos=j;

}
sm[1]=rt[x];
rt[x]=rt[pos];
rt[pos]=sm[1];
}

TD();
}

void ID()
{
char tmbh;
h=1;
printf("NIP max(1000)\t\t=");
scanf("%d",&a);
for(j=0;j<=1000;j++)
{
if(a==dt[j].nip)
{printf("\n\nNomer sudah digunakan\nTekan ENTER untuk kembali ke awal");
getch();
system("cls");
h=5;}
}
if(h==1){
fflush(stdin);
dt[a].nip=a;
printf("\nNama\t\t\t=");
gets(dt[a].nama);
printf("\nTTL(ddmmyy)\t\t=");
gets(dt[a].ttl);
printf("\nAlamat\t\t\t=");
gets(dt[a].alamat);
printf("\nJenis Kelamin(L/P)\t=");
gets(dt[a].jk);
printf("ingin tmbh data(y/n)");
scanf("%s",&tmbh);
system("cls");
if(tmbh=='y') ID();
else h=5;}

}
void UD()
{
h=1;
printf("Masukkan NIP yang akan di rubah=");
scanf("%d",&a);
for(j=0;j<=1000;j++)
{
if(a==dt[j].nip)
{
fflush(stdin);
printf("\nNama\t\t\t=");
gets(dt[a].nama);
printf("\nTTL(ddmmyy)\t\t=");
gets(dt[a].ttl);
printf("\nAlamat\t\t\t=");
gets(dt[a].alamat);
printf("\nJenis Kelamin(L/P)\t=");
gets(dt[a].jk);
printf("tekan ENTER");
getch();
system("cls");
h=5;
}
}
if(h==1)
{
printf("NIP tidak tersedia\nTekan ENTER untuk kembali ke awal");
getch();
system("cls");
}
}

void HD()
{
h=1;
printf("Masukkan NIP yg akan di hapus=");
scanf("%d",&a);
for(j=0;j<=1000;j++)
{
if(dt[j].nip==a)
{
dt[a].nip=0;
printf("Data telah terhapus\n\nTekan ENTER untuk kembali ke awal");
getch();
h=0;
system("cls");
}
}
if(h==1)
{
printf("data tdk ada\ntekan ENTER untuk kembali ke awal");
getch();
system("cls");
}
}

void TD()
{
printf("==========================================================");
printf("\n||NIP\t|Nama\t\t|TTL\t|Alamat\t\t|JK\t||");
printf("\n==========================================================");
for(j=0;j<=1000;j++)
{
if(rt[j].nip>=1)
{ printf("\n||%d\t|%s\t\t|%s\t|%s\t\t|%s\t||",rt[j].nip,rt[j].nama,rt[j].ttl,rt[j].alamat,rt[j].jk);}
}
printf("\n==========================================================");
printf("\n\nTekan ENTER");
getch();
system("cls");
}

void SO()
{
a=0;
x=0;
for(j=a;j<1000;j++)
{
if(dt[j].nip>=1)
{
rt[x].nip=dt[j].nip;
strcpy(rt[x].nama,dt[j].nama);
strcpy(rt[x].ttl,dt[j].ttl);
strcpy(rt[x].alamat,dt[j].alamat);
strcpy(rt[x].jk,dt[j].jk);a=j+1;x=x+1;
}
}

printf("1.by NIP");
printf("\n2.by Name");
printf("\nMasukkan pilihan=");
scanf("%d",&pilihan);
switch(pilihan)
{
case 1:
NIP();
break;
case 2:
name();
break;
default:
printf("pilihan tidak tersedia\ntekan ENTER untuk kembali ke awal");
getch();
system("cls");
}
}

void main()
{
z=1;
do
{
printf("PT. SEJAHTERA");
printf("\n\n1.Input data");
printf("\n2.Update data");
printf("\n3.Hapus data");
printf("\n4.Tampilkan data");
printf("\n5.Exit");
printf("\n\nMasukkan pilihan=");
scanf("%d",&pilihan);
system ("cls");
switch(pilihan)
{
case 1: ID();
break;
case 2: UD();
break;
case 3: HD();
break;
case 4: SO();
break;
case 5: printf("Terima kasih\n\n");
z=0;
break;
default: main();
}
}while(z==1);
}

source code data mahasiswa dg struct

#include
#include
#include
#include

void TD();
int z,h;
int pilihan;
int a,j;
int x;
struct data
{
int nip;
char nama[20];
char ttl[10];
char alamat[30];
char jk[5];
}data;
struct data dt[1000];
struct data rt[1000];
struct data sm[1000];

void NIP()
{
TD();
}
void name()
{
int u=0;
int i=0;
int q=0;
for(a=0;a<=1000;a++)
{
if(rt[a].nip>=1)u=u+1;
}
int pos;
for(x=0;x {
pos=x;
for(j=x+1;j {
do
{
if(rt[pos].nama[i]==rt[j].nama[i])i=i+1;
else
q=1;
}while(q==0);

if(rt[pos].nama[i]>rt[j].nama[i])pos=j;

}
sm[1]=rt[x];
rt[x]=rt[pos];
rt[pos]=sm[1];
}

TD();
}

void ID()
{
char tmbh;
h=1;
printf("NIP max(1000)\t\t=");
scanf("%d",&a);
for(j=0;j<=1000;j++)
{
if(a==dt[j].nip)
{printf("\n\nNomer sudah digunakan\nTekan ENTER untuk kembali ke awal");
getch();
system("cls");
h=5;}
}
if(h==1){
fflush(stdin);
dt[a].nip=a;
printf("\nNama\t\t\t=");
gets(dt[a].nama);
printf("\nTTL(ddmmyy)\t\t=");
gets(dt[a].ttl);
printf("\nAlamat\t\t\t=");
gets(dt[a].alamat);
printf("\nJenis Kelamin(L/P)\t=");
gets(dt[a].jk);
printf("ingin tmbh data(y/n)");
scanf("%s",&tmbh);
system("cls");
if(tmbh=='y') ID();
else h=5;}

}
void UD()
{
h=1;
printf("Masukkan NIP yang akan di rubah=");
scanf("%d",&a);
for(j=0;j<=1000;j++)
{
if(a==dt[j].nip)
{
fflush(stdin);
printf("\nNama\t\t\t=");
gets(dt[a].nama);
printf("\nTTL(ddmmyy)\t\t=");
gets(dt[a].ttl);
printf("\nAlamat\t\t\t=");
gets(dt[a].alamat);
printf("\nJenis Kelamin(L/P)\t=");
gets(dt[a].jk);
printf("tekan ENTER");
getch();
system("cls");
h=5;
}
}
if(h==1)
{
printf("NIP tidak tersedia\nTekan ENTER untuk kembali ke awal");
getch();
system("cls");
}
}

void HD()
{
h=1;
printf("Masukkan NIP yg akan di hapus=");
scanf("%d",&a);
for(j=0;j<=1000;j++)
{
if(dt[j].nip==a)
{
dt[a].nip=0;
printf("Data telah terhapus\n\nTekan ENTER untuk kembali ke awal");
getch();
h=0;
system("cls");
}
}
if(h==1)
{
printf("data tdk ada\ntekan ENTER untuk kembali ke awal");
getch();
system("cls");
}
}

void TD()
{
printf("==========================================================");
printf("\n||NIP\t|Nama\t\t|TTL\t|Alamat\t\t|JK\t||");
printf("\n==========================================================");
for(j=0;j<=1000;j++)
{
if(rt[j].nip>=1)
{ printf("\n||%d\t|%s\t\t|%s\t|%s\t\t|%s\t||",rt[j].nip,rt[j].nama,rt[j].ttl,rt[j].alamat,rt[j].jk);}
}
printf("\n==========================================================");
printf("\n\nTekan ENTER");
getch();
system("cls");
}

void SO()
{
a=0;
x=0;
for(j=a;j<1000;j++)
{
if(dt[j].nip>=1)
{
rt[x].nip=dt[j].nip;
strcpy(rt[x].nama,dt[j].nama);
strcpy(rt[x].ttl,dt[j].ttl);
strcpy(rt[x].alamat,dt[j].alamat);
strcpy(rt[x].jk,dt[j].jk);a=j+1;x=x+1;
}
}

printf("1.by NIP");
printf("\n2.by Name");
printf("\nMasukkan pilihan=");
scanf("%d",&pilihan);
switch(pilihan)
{
case 1:
NIP();
break;
case 2:
name();
break;
default:
printf("pilihan tidak tersedia\ntekan ENTER untuk kembali ke awal");
getch();
system("cls");
}
}

void main()
{
z=1;
do
{
printf("PT. SEJAHTERA");
printf("\n\n1.Input data");
printf("\n2.Update data");
printf("\n3.Hapus data");
printf("\n4.Tampilkan data");
printf("\n5.Exit");
printf("\n\nMasukkan pilihan=");
scanf("%d",&pilihan);
system ("cls");
switch(pilihan)
{
case 1: ID();
break;
case 2: UD();
break;
case 3: HD();
break;
case 4: SO();
break;
case 5: printf("Terima kasih\n\n");
z=0;
break;
default: main();
}
}while(z==1);
}

source code bilangan romawi

#include "stdio.h"


void main()

{
char A[4]={'I','V','L','D'};
char B[4]={0,'X','C','M'};
int y;
printf("masukkan angka =");
scanf("%d",&y);
printf("Romawinya =");
if(y<3000)
{
while(y>=1000)
{
printf("%c",B[3]);
y=y-1000;
}
if (y>= 500)
{
if (y>= 900)
{
printf("%c%c",B[2],B[3]);
y=y- 900;
}
else
{
printf("%c",A[3]);
y= y - 500;
}
}

while (y>= 100)
{
if (y>= 400)
{
printf("%c%c",B[2],A[3]);
y= y- 400;
}
else
{
printf("%c",B[2]);
y = y- 100;
}
}

if (y>= 50)
{
if (y>= 90)
{
printf("%c%c",B[1],B[2]);
y=y- 90;
}
else
{
printf("%c",A[2]);
y = y - 50;
}
}

while (y >= 10)
{
if (y >= 40)
{
printf("%c%c",B[1],A[2]);
y= y - 40;
}
else
{
printf("%c",B[1]);
y = y - 10;
}
}


if (y >= 5)
{
if (y == 9)
{
printf("%c%c",A[0],B[1]);
y= y - 9;
}
else
{
printf("%c",A[1]);
y = y - 5;
}
}

while (y >= 1)
{
if (y == 4)
{
printf("%c%c",A[0],A[1]);
y = y - 4;
}
else
{
printf("%c",A[0]);
y = y - 1;
}
}
}

printf("\n"); // Pindah baris


}

source code pengecekan tanda kurung

#include "stdio.h"
#include "stdlib.h"

char kar[100];
char stack[100];
int top=-1;
char temp;
char xx;
int valid=1;

void main()
{

printf("Masukkan karakter=");
scanf("%s",&kar);

for(int i=0;i<=100;i++)
{
if(kar[i]=='{' || kar[i]=='(' || kar[i]=='[')
{
stack[top+1]=kar[i];
top++;
}
else if(kar[i]=='}' || kar[i]==')' || kar[i]==']')
{
temp=stack[top];stack[top]=NULL;top--;
if(temp=='{')
{ xx='}';}
else if(temp=='(')
{ xx=')';}
else if(temp=='[')
{ xx=']';}
if(xx!=kar[i])
{ valid=0;}
}
}
if(valid==1)
{
printf("\n\nVALID");
}else
{
printf("\n\nTDK VALID");
}
}

Sabtu, 19 Juni 2010

pembahasan sorting

sorting merupakan metode untuk mengurutkan data. Fungsinya adalah untuk memudahkan kita mencari data jika data telah terurut. Ada beberapa algoritma sorting, misal bubble dan juga selection.
1.Cara kerja Bubble yaitu mengecek dan membandingkan data 1 persatu dan langsung menukarnya. berikut algoritma bubble

void bubble(char a[],char n)
{
char ss;
for(int i=0;i < n;i++)
{
for(int j=0;j < n-1-i;j++)
if(a[j] > a[j+1])
{
ss=a[j];
a[j]=a[j+1];
a[j+1]=ss;
}
}
for(int y=0;y < n;y++)
{
printf("%c",a[y]);
}
printf("\n\n");
}

2. cara kerja selection berbeda dg bubble. Disini program akan mencari data dan meletakkan di tempat yang sebenarnya. berikut algoritmanya

void selection()
{
int u=0;
int i=0;
int q=0;
for(a=0;a<=1000;a++)
{
if(rt[a].nip>=1)u=u+1;
}
int pos;
for(x=0;x {
pos=x;
for(j=x+1;j {
do
{
if(rt[pos].nama[i]==rt[j].nama[i])i=i+1;
else
q=1;
}while(q==0);

if(rt[pos].nama[i]>rt[j].nama[i])pos=j;

}
sm[1]=rt[x];
rt[x]=rt[pos];
rt[pos]=sm[1];
}


pembahasan rekursif

Dalam sebuah algoritma pemrogaman terdapat pemanggilan fungsi untuk memisahkannya dengan fungsi utama agar terlihat lebih rapi. Namun fungsi rekursif merupakan fungsi yang memanggil dirinya sendiri. Fungsi rekursif biasanya di manfaatkan untuk pembuatan program bilangan faktorial dan juga bilangan fibonachi. Untuk lebih jelasnya klik pada source code yang menggunakan fungsi rekursif

source code infix to postfix

#include "stdio.h"

char stack[20];
char kar[20];
int top=-1;
char temp,xx;
int valid=1;

void push(char put)
{
stack[top+1]=put;
top++;
}
void pop()
{
temp=stack[top];
top--;
}

void main()
{
printf("Masukkan karakter infix:");
scanf("%s",&kar);

for(int i=0;i<20;i++)
{
if(kar[i]=='(')
{
push(kar[i]);
}else if(kar[i]==')')
{
pop();
xx='(';
if(xx!=temp)
{
valid=0;
break;
}
}
}
if(valid==1)
{
printf("\nkarakter postfix=");
for(int j=0;j<20;j++)
{
if(kar[j]=='(' || kar[j]=='+' || kar[j]=='-' || kar[j]=='*' || kar[j]=='/' || kar[j]=='^')
{
push(kar[j]);
}
else if(kar[j]==')')
{
while(stack[top]!='(')
{
pop();
printf("%c",temp);
}
pop();
}
else if(kar[j]<1)
{
while(top!=-1)
{
pop();
printf("%c",temp);
}
break;
}else
{
printf("%c",kar[j]);
}
}
}
else
{
printf("tdk valid");
}
printf("\n\n\n\n");
}

source code stack

#include "stdio.h"
#include "stdlib.h"
#include "conio.h"

int data[20];
int top=-1;

void push()
{
printf("masukkan data=");
scanf("%d",&data[top+1]);
top++;
system("cls");
}

void pop()
{
data[top]=NULL;
top--;
printf("data teratas terhapus");
getch();
system("cls");
}
void view()
{
for(int i=0;i<=top;i++)
{
printf("%d ",data[i]);
}

getch();
system("cls");
}


void main()
{

int pilih;

while(pilih!=4)
{
printf("1. input data");
printf("\n2. buang data teratas");
printf("\n3. tampilkan data");
printf("\n4. EXIT");
printf("\nMasukkan pilihan=");
scanf("%d",&pilih);
system("cls");
switch(pilih)
{
case 1: push();
break;
case 2: pop();
break;
case 3: view();
break;
default:
printf("terima kasih\n\n");

}
}
}

source code searching sequential

#include "stdio.h"
#include "conio.h"
#include "stdlib.h"

int z;
int h;
char back;

void cari(char npm[],char key)
{
h=1;

for(int i=0;i<=10;i++)
{
if(npm[i]==key)
{
printf("Data ditemukan\n\n");
printf("Ingin kembali ke awal(y/n)???");
scanf("%s",&back);
if(back=='y'){z=1;i=11;h=5;}
else
z=5;
i=11;
h=5;
system("cls");
}
}

if(h==1)
{
printf("Data tidak ditemukan\n\n");
printf("Ingin kembali ke awal(y/n)???");
scanf("%s",&back);
if(back=='y')z=1;
else z=5;
system("cls");
}
}

void main()
{
z=1;
do
{
char npm[10];
char key;

fflush(stdin);
printf("Masukkan NPM:");
gets(npm);
printf("\nMasukkan angka yang ingin di cari:");
scanf("%c",&key);
cari(npm,key);
}while(z==1);
}

Jumat, 18 Juni 2010

niat dan bersungguh-sungguh

pemrogaman C++ sebenarnya mudah jika kita benar2 niat mempelajarinya. Ini lebih mudah dari pelajaran fisika, kimia, maupun biologi. Kita tidak perlu banyak2 menghafal, yang penting paham dan bersungguh2 mempelajarinya.Di sini saya akan memberikan beberapa pengalaman saya ketika kuliah. Ada beberapa algoritma pemrogaman beserta penjelasannya. Selain itu juga ada beberapa source code program dan game yg sederhana tapi menarik