Algoritma dalam membuat nomor ID atau kode tidak sama dengan membuat urutan-urutan bilangan biasa. Jika kita hanya ingin menampilkan bilangan  dari 1-100, kita hanya perlu mencetak angka-angka yg berubah pada for (biasanya i++). Namun pada nomor id atau kode, terdapat angka 0 dibelakang bilangannya sesuai dengan maksimal digit yang ditentukan user. berikut contoh dari input dan output program nya :

id/kode dengan maksimal 7 digit angka

Source Code :

#include <stdio.h>

int main(){
int i,j,k=1,max_digit,jumlah_id,nol[50],status=0,cek;
char digit[10];
printf("masukan maksimal digit : ");
scanf("%ld",&max_digit);
printf("masukan jumlah id/kode : ");
scanf("%d",&jumlah_id);
cek=jumlah_id;
for (i=1;i<=max_digit;i++){
cek/=10; 
}
if(cek>0) printf("Error! jumlah digit pada id/kode melewati batas max digit");
else {
for(i=1;i<=max_digit;i++){
nol[i]=0;
}
for(i=1;i<=jumlah_id;i++){
for(j=1;j<=max_digit;j++){
if(i==k){ 
max_digit--; 
k*=10;
}
if(max_digit!=0) printf("%d",nol[j]);
}
printf("%d ",i);
}
}
return 0;
}

Beberapa hal penting yang perlu diperhatikan adalah :

1. Digit pada jumlah angka yang diinputkan tidak boleh melebihi maksimal digit. Jadi kita harus memberikan validasi if/jika digit pada jumlah angkanya melebihi maksimal digit.
Untuk mengecek apakah digit pada jumlah angkanya tidak melewati maksimal digitnya, saya menggunakan variabel "cek". Jika digit pada jumlah angka melewati maksimal digit, maka akan menampilkan tulisan "Error".
2. Angka 0 dibelakang bilangan-bilangan tersebut akan berkurang saat bilangan bertambah jumlah digitnya. jika tidak, maka jumlah digit pada bilangan akan melewati batas maksimal digitnya.
Contoh :
Misal max digit adalah 3. Jika angka 0 dibelakang bilangan tidak dikurangi, maka nomor id setelah 009 akan menjadi 0010(melewati max digit[3]). Seharusnya, nomor id setelah 009 adalah 010, hal itu dapat dilakukan dengan mengurangi angka 0 dibelakang bilangan 10.
Untuk mengurangi angka 0 di belakang bilangan, maksimal digit(max_digit) dikurangi sebanyak 1 (max_digit--) yang dilakukan setiap jumlah bilangannya adalah kelipatan 10 yaitu 10,100,1000,dst (k*=10) karena sebuah bilangan pertama kali bertambah digitnya saat mencapai angka dengan kelipatan 10.

Sekian artikel kali ini, semoga bermanfaat.


Untuk membuat pola segitiga biasanya memerlukan 2 fungsi "for" pada algoritmanya. Namun pada postingan kali ini, saya akan membagikan source code untuk membuat pola segitiga dengan hanya menggunakan 1 fungsi "for". Jika dihitung efisiensinya, Algoritma pada program ini sebenarnya tidak lebih efisien dibandingkan dengan 2 for, namun membuat pola segitiga dengan 1 for ini dapat memperluas pengetahuan kita tentang konsep matematika, terutama perhitungan deret aritmatika. Ya, pada dasarnya membuat pola segitiga dengan 1 for memerlukan perhitungan deret aritmatika di dalam algoritma nya. berikut source code nya :

#include <stdio.h>

int main(){
    int i,j,n;
    printf("masukan tinggi segitiga : ");
scanf("%d",&n);
for(i=1;i<=(n*n+n)/2;i++){
printf("*"); 
if(i==(j*j+j)/2){
printf("\n");
j++;
}
}
}


Eksekusi Program :

Sekian postingan yang singkat ini, semoga bermanfaat.

Sorting adalah sebuah proses merangkai data dalam urutan tertentu dan/atau dalam himpunan yang berbeda, dan oleh karena itu dia memiliki dua arti umum yang berbeda:
      Pengurutan  :  merangkai benda yang sejenis, sekelas, dll, dalam urutan yang teratur,
      Kategorisasi :  pengelompokan dan pemberian label kepada benda dengan sifat yang serupa
Program dibawah ini hanya melakukan proses pengurutan data. dibawah ini hasil sorting nya.


yoiii :v


Program ini mengurutkan data sesuai dengan huruf paling awal dari suatu baris. Jadi perlu diperhatikan apakah seluruh datanya sudah memiliki huruf awal yang konsisten atau tidak. Misal jika huruf awalnya kapital dari data pertama, maka semua data dari atas sampai bawah juga harus huruf kapital. Karena jika huruf awalnya gabungan dari huruf kapital dan huruf kecil, maka huruf kapital akan di dahulukan(hasil sorting berada diatas huruf kecil).  
Selain itu, hal yang perlu diperhatikan juga adalah jika dibawah data terakhir terdapat baris kosong. Jika anda menginputkan/terdapat enter("\n") setelah data terakhir maka baris yang kosong tersebut juga akan ikut tertukar. jadi pastikan data terakhir pada notepad adalah baris yang akan disorting, bukan baris kosong seperti yang ditandai lingkaran merah berikut ini :


langsung saja source code nya :

#include <stdio.h>

int main(){
FILE *f,*f2;
char temp,huruf[100],baris[100],baris2[100];
int  c,jum=1,jum1=1,jum2,jum3;
int  h,i,j,k,l,m,n;
f=fopen("Test.txt","r");
c=getc(f);
while(c!=EOF){
if(c=='\n') jum1=0;
if(jum1==1){
huruf[jum]=c;
jum++;
jum3++;
}
jum1++; 
c=getc(f);
for (jum2=2;jum2<=jum3;jum2++){ 
for ( jum=1 ;jum<=jum3-1 ;jum++){
h=1; i=1; j=1; l=1; m=1; n=1; k=jum+1;
if (huruf[jum]>huruf[jum+1]){
temp=huruf[jum];
huruf[jum]=huruf[jum+1];
huruf[jum+1]=temp; 
f=fopen("Test.txt","r"); //sesuaikan dengan nama database yang ingin anda sorting
f2=fopen("Test2.txt","w"); //temporary, tdk perlu di ubah, boleh diubah kalo mau :v
c=getc(f);
while(c!=EOF){    
if(l==k-1){
baris[n]=c;
n++;
}
else if(l==k){
baris2[j]=c;
fprintf(f2,"%c",baris2[j]);
j++; 
if (c=='\n'){
for (h=1;h<=n-1;h++) fprintf(f2,"%c",baris[h]);
}
}
else fprintf(f2,"%c",c);
if(c=='\n') l++;
c=getc(f);
}
if(jum==jum3-1) {
fprintf(f2,"\n");
for (h=1;h<=n-2;h++) fprintf(f2,"%c",baris[h]); 
}
fclose(f2);
fclose(f);
f=fopen("Test.txt","w"); //sesuaikan dengan nama database yang ingin anda sorting
f2=fopen("Test2.txt","r"); //temporary, tdk perlu di ubah, boleh diubah kalo mau :v
c=getc(f2);
while(c!=EOF){
fprintf(f,"%c",c);
m++;
c=getc(f2);
}
fclose(f2);
fclose(f);
}
}  
}
fclose(f);
printf("\n\n\t\t\t***********Sorting Done************\n\n\n\n\n\n\n\n\n\n\n\n");
return 0;


}

Sekian, semoga bermanfaat
Untuk menghapus data pada database(.txt), dapat dilakukan perintah "w" atau write pada saat kita menentukan pointer file(.txt ). Namun data yang dihapus tidak bisa ditentukan oleh user. Agar penghapusan tidak dilakukan untuk "semua" data, kita harus menggabungkan algoritma searching dan deleting untuk dapat menghapus data sesuai dengan keinginan user.


Berikut adalah source code untuk menghapus data sesuai keinginan user :


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

int main(){
FILE *f,*f2;
char c,baris[100],search1[30],search[30],baris2[100],yakin;
int status=0,status2=0;
int i,j,k,n;


//dibawah merupakan algoritma searching utk mencari data mana yg akan dihapus user
for (n=0;n<=30;n++){
search1[n]='`';
}
printf("Masukan nama data pd baris yg akan dihapus : ");
gets(search1);


for (n=0;n<=30;n++){
if(status2==0&&search1[n]=='`'){
search1[n-1]='`';
status2=1;
}
}
n=0;
while(search1[n]!='`'){
search[n]=search1[n];
n++;
}

f=fopen("Text.txt","r"); //INGAT NAMA FILE "Text.txt" DIGANTI DENGAN FILE DATABASE YANG INGIN ANDA HAPUS
i=0;j=1;k=1;
c=getc(f);
while(c!=EOF){
if(c=='\n') j++;
if(c==search[i]){
i<=n-1;
status++;
i++;
}
else{
i=0;
status=0;
}
if(status==n){
baris[k]=j;
k++;
}
c=getc(f);
}
fclose(f);

i=1;n=1;
while (i<=k-1){
if(baris[i]!=baris[i+1]) {baris2[n]=baris[i];n++;}
i++;
}

j=1;n=1;status=0;
f=fopen("Text.txt","r"); //INGAT NAMA FILE "Text.txt" DIGANTI DENGAN FILE DATABASE YANG INGIN ANDA HAPUS
c=getc(f);
while(c!=EOF){
if (baris2[n]==j) printf("%c",c);
if (baris2[n]==j&&c=='\n') n++;
if (c=='\n') j++;
c=getc(f);
}
fclose(f);

printf("\n\nYakin hapus? ketik huruf 'y' untuk menghapus data diatas : ");
scanf("%c",&yakin);
if(yakin!='y' ) {
printf("Data tidak dihapus");
exit(0);
}

//dibawah merupakan algoritma untuk menghapus data yang dipilih tadi
j=1;n=1;status=0;
f=fopen("Text.txt","r"); //INGAT NAMA FILE "Text.txt" DIGANTI DENGAN FILE DATABASE YANG INGIN ANDA HAPUS
f2=fopen("Temp.txt","w"); //FILE CADANGAN, TDK WAJIB DIGANTI
c=getc(f);
while(c!=EOF){
if (baris2[n]!=j) fprintf(f2,"%c",c);
if (baris2[n]==j&&c=='\n') n++;
if (c=='\n') j++;
c=getc(f);
}
fclose(f2);
fclose(f);

f2=fopen("Temp.txt","r"); //FILE CADANGAN, TDK WAJIB DIGANTI
f=fopen("Text.txt","w"); //INGAT NAMA FILE "Text.txt" DIGANTI DENGAN FILE DATABASE YANG INGIN ANDA HAPUS
c=getc(f2);
while(c!=EOF){
fprintf(f,"%c",c);
c=getc(f2);
}
fclose(f);
fclose(f2);
printf("\n\nData berhasil dihapus");

}
*karena panjang jadi dihidden :v

Pada program ini, di deklarasikan 2 pointer file yaitu file yang akan dihapus datanya dan file untuk menyimpan sementara(cadangan/temporary). Berbeda dengan penghapusan "semua" data yang tidak memerlukan file cadangan temp karena data tidak perlu disimpan sementara.

Bagian atas merupakan algoritma searching yang telah saya share di postingan sebelumnya(untuk penjelasan bisa cek postingan sebelumnya :v). Setelah user mencari data yang ingin dihapus, maka akan muncul peringatan "apakah user yakin ingin menghapus data tersebut?". jika iya, maka program akan lanjut ke algoritma bagian bawah yaitu penghapusan data. Algoritma tersebut menghapus "baris" yang berisi data yg sebelumnya telah diinput/search oleh user.

Hasil :


Sekian postingan kali ini, semoga bermanfaat.
Pencarian atau Searching merupakan proses yang sangat penting dalam pengolahan data. Proses pencarian adalah menemukan nilai(data) tertentu didalam sekumpulan data yang bertipe sama. Algoritma "Searching" yang digunakan pada postingan kali ini adalah "Linier Search" . Linear search merupakan algoritma search yang paling sederhana dan mudah dipahami dibandingkan dengan algoritma search lainnya. Linear search memiliki kelebihan yaitu apabila data yang di cari letaknya di awal maka proses searching akan berjalan cepat. namun linier search mempunyai kelemahan yaitu apabila data yang di cari letaknya pada data terakhir maka penggunaan waktu dalam proses pencarian akan berjalan lama. Jadi, "worst case" pada linier search ini sangat tidak efisien (worst) dibanding algoritma search lainnya seperti "binary search" atau interpolation search. Namun jika searching dilakukan pada database sederhana atau jumlah data yang di cari tidak terlalu banyak, maka Linier Search merupakan algoritma yang paling cocok untuk digunakan. Dibawah ini hasilnya :


background nya vvibu :v

Pada program diatas, saya menggunakan Search[30] yang artinya jumlah karakter yang diinputkan untuk mencari data maksimal 30 karakter. Baris[100] membatasi hasil outputnya yaitu maksimal 100 baris. Kedua nilai tersebut dapat diubah sesuai keperluan. 
Perlu diperhatikan juga bahwa pada program c, huruf kapital dan huruf kecil dibedakan. Pada gambar diatas, jika saya menginputkan string "Song" maka hasil/outputnya akan muncul. Namun Jika diinputkan string "song", maka nantinya hasil pencarian tidak akan keluar karena huruf  "k" yang diinput bukan merupakan huruf kapital. Oleh karena itu, huruf kapital dan huruf kecil harus diperhatikan oleh user. zlangsung saja Source Code nya :

#include <stdio.h>

int main(){

FILE *f,*f2;
char c,baris[100],search1[30],search[30],baris2[100];
int  status=0,status2=0;
int  i,j,k,n;

for (n=0;n<=30;n++){
search1[n]='`';
}
printf("Search : ");
gets(search1);
printf("\nHasil Pencarian : \n");
for (n=0;n<=30;n++){
if(status2==0&&search1[n]=='`'){
search1[n-1]='`';
status2=1;
}
}
n=0;
while(search1[n]!='`'){
search[n]=search1[n];
n++; 
}

f=fopen("Test.txt","r");

//INGAT FILE "Text.txt" DIGANTI DENGAN FILE DATABASE YANG INGIN ANDA SEARCH
i=0;j=1;k=1;
c=getc(f);
while(c!=EOF){
if(c=='\n') j++;
if(c==search[i]){
i<=n-1;
status++;
i++;
}
else{
i=0;
status=0;
}
if(status==n){
baris[k]=j;
k++;
}
c=getc(f);
}
fclose(f);

i=1;n=1;
while (i<=k-1){
if(baris[i]!=baris[i+1]) {baris2[n]=baris[i];n++;}
i++;
}

j=1;n=1;status=0;

f2=fopen("Test.txt","r");
//INGAT FILE "Text.txt" DIGANTI DENGAN FILE DATABASE YANG INGIN ANDA SEARCH
c=getc(f);
while(c!=EOF){
if (baris2[n]==j) printf("%c",c);
if (baris2[n]==j&&c=='\n') n++;
if (c=='\n') j++;
c=getc(f);

fclose(f2);
}


Sekian, Semoga Bermanfaat

Sumber : kompas.com

      Pada dasarnya, cara membuat pola jam pasir adalah dengan menggabungkan 2 segitiga sama sisi. Untuk membuat pola tersebut di program c dapat menggunakan 2 for dan 1 if.
script untuk membuat pola jam pasir seperti gambar diatas adalah sebagai berikut :

#include <stdio.h>

int main(){

int i, j, n;

printf("masukan n : ");
scanf("%d", &n);

for (i=1; i<2*n; i++){
for (j=1; j<2*n; j++){
if (  (i<=j && i+j<=2*n)  ||  (i>n && i>=j && i+j>=2*n)  ) printf("*");
else printf(" ");
}
printf("\n");
}
}

i=baris
j=kolom
n=tinggi segitiga

Hasil :



Definisi Heap Sort
Heap Sort adalah sebuah algoritma pengurutan yang paling lambat dari algoritma yang memiliki kompleksitas O(n log n). Tetapi tidak seperti algoritma Merge Sort dan Quick Sort, algoritma Heap Sort tidak memerlukan rekursif yang besar atau menggunakan banyak tabel (array). Oleh karena itu, Heap Sort adalah pilihan yang baik untuk sebuah kumpulan data yang besar. Algoritma ini dimulai dengan membangun sebuah array heap dengan membangun tumpukan dari kumpulan data, lalu memindahkan data terbesar ke bagian belakang dari sebuah tabel hasil. Setelah itu, array heap dibangun kembali, kemudian mengambil elemen terbesar untuk diletakkan di sebelah item yang telah dipindahkan tadi. Hal ini diulang sampai array heap habis. Jadi secara umum, algoritma ini memerlukan dua buah tabel; satu tabel untuk menyimpan heap, dan satu tabel lainnya untuk menyimpan hasil. Walaupun lebih lambat dari Merge Sort atau Quick Sort, algoritma ini cocok untuk digunakan pada data yang berukuran besar. Atau  dilakukan dengan cara membangun struktur data heap dan kemudian menerapkan langkah menghapus node heap. Pada awalnya, kondisi heap kosong. Kemudian, node heap di-insert satu per satu. Cara alternatif adalah, menampung data yang akan diurutkan dalam array, kemudian node pada bagian root di hapus. Jika heap adalah minimal heap, maka data pada root adalah data terkecil, terdapat 2 contoh heap yaitu MAXHEAP (nilai orangtua ≥ nilai anaknya) MIN HEAP (nilai orangtua ≤ nilai anaknya).

Algoritma Heap Sort

Pseudocode:

Judul: program_heap_sort

Deklarasi:
   if (largest != i) {
Integer= A[100], i, length, le, ri, heapsize, largest
      exchange A[i] <-> A[largest]
Deskripsi:
      Heapify(A, largest)
Heapsort(A) {
    }
   BuildHeap(A)
}
   for i <- length(A) downto 2 {

      exchange A[1] <-> A[i]

      heapsize <- heapsize -1

      Heapify(A, 1)

}

BuildHeap(A) {

   heapsize <- length(A)

   for i <- floor( length/2 ) downto 1

      Heapify(A, i)

}

Heapify(A, i) {

   le <- left(i)

   ri <- right(i)

   if (le<=heapsize) and (A[le]>A[i])

      largest <- le

   else

      largest <- i

   if (ri<=heapsize) and (A[ri]>A[largest])

      largest <- ri



Contoh Kasus Heap Sort
A[5]=1,4,5,3,2 = integer
Buatlah array A[5] dalam MAX HEAP Tree!
Solusi :



Pada gambar 1, angka 1 merupakan orangtua dan angka 4 merupakan anaknya. Pada heap tree max heap, nilai orangtua nilai anaknya. Karena pada gambar 1 nilai orangtua < nilai anaknya maka nilai orangtua dengan nilai anaknya di tukar. Sehingga heap tree pada gambar 1 berubah menjadi heap tree pada gambar 2.
Pada gambar 2, angka 4 merupakan orangtua dan angka 5 merupakan anaknya. Pada heap tree max heap, nilai orangtua nilai anaknya. Karena pada gambar 2 nilai orangtua < nilai anaknya maka nilai orangtua dengan nilai anaknya di tukar. Sehingga heap tree pada gambar 2 berubah menjadi heap tree pada gambar 3.
Pada gambar 3, angka 1 merupakan orangtua dan angka 3 merupakan anaknya. Pada heap tree max heap, nilai orangtua nilai anaknya. Karena pada gambar 3 nilai orangtua < nilai anaknya maka nilai orangtua dengan nilai anaknya di tukar. Sehingga heap tree pada gambar 3 berubah menjadi heap tree pada gambar 4.
Pada gambar 4, angka 3 merupakan orangtua dan angka 2 merupakan anaknya. Pada heap tree max heap, nilai orangtua nilai anaknya. Karena pada gambar 4 nilai orangtua ≥ nilai anaknya maka nilai orangtua dengan nilai anaknya tidak di tukar. Sehingga heap tree pada gambar 4 tidak berubah (gambar 5).

Copyright © 2013 Yanamon