Tampilkan postingan dengan label Program C. Tampilkan semua postingan
Fungsi adalah program yang digunakan untuk mengolah suatu nilai(parameter) menjadi nilai baru(yang sudah diolah oleh fungsi tersebut) yang nantinya nilai baru tersebut dikembalikan melalui perintah “return”. Prosedur adalah suatu program terpisah yang tidak bergantung kepada fungsi/prosedur lain dan hanya memiliki 1 tujuan saja.

Contoh fungsi dan prosedur luas persegi pada program C:

#include <stdio.h>

int luas(int sisi){         
            return sisi*sisi;
}

void main(){
            printf(“Luas Persegi = %d”,luas(4));

}

Sekian, terima kasih.
Kali ini, saya akan membagikan source code untuk membuat fungsi rekursif untuk menghitung hasil operasi dari 2 pangkat n. berikut source code nya :

#include <stdio.h>

//fungsi menentukan hasil dari 2 pangkat n
int pangkat(int n){
if (n==1) return 1;
else return pangkat(n-1)*2; //rekursif
}
void main(){
int n;
printf("Masukan Angka : ");
scanf("%d",&n);
n++;
printf("%d",pangkat(n)); //pemanggilan sekaligus print fungsi rekursif
}

sekian, semoga bermanfaat.
Algoritma Closest Pair digunakan ketika kita ingin mencari dua titik yang berdekatan pada n titik. Contoh permasalahan closest pair pada kehidupan sehari-hari adalah mencari jarak terdekat antar 2 pesawat atau lebih yang memiliki kemungkinan bertabrakan. Berikut adalah algoritma closest pair :

//Input: A list P of n(n≥ 2) points P_1 (x_1,y_1 )^,..., P_n (x_n,y_n )^
//Output: The distance between the closest pair of points
  d ←∞
  for i ← 1 to n − 1 do
  for j ← i + 1 to n do
  d ← min(d, sqrt((x_ix_j )^2+(y_iy_j )^2) //sqrt is square root
  return d
//end

dan untuk Source Code nya (Bahasa C) adalah sebagai berikut :
#include <stdio.h>
#include <math.h>

int main(){
int i,j,n;
float dmin,x[40],y[40],x1,x2,y1,y2;
printf("masukan banyaknya titik : ");
scanf("%d",&n);
for(i=1;i<=n;i++){
printf("\n");
printf("masukan kordinat x titik ke-%d : ",i);
scanf("%f",&x[i]);
printf("masukan kordinat y titik ke-%d : ",i);
scanf("%f",&y[i]);
}
dmin=999999999; //karena tdk ada fungsi infinite jadi pakai nilai terbesar
for (i=1;i<=n-1;i++){
for (j=i+1;j<=n;j++){
if(sqrt((x[i]-x[i+1])*(x[i]-x[i+1])+(y[i]-y[i+1])*(y[i]-y[i+1]))<=dmin){
  dmin=sqrt((x[i]-x[i+1])*(x[i]-x[i+1])+(y[i]-y[i+1])*(y[i]-y[i+1]));
  x1=x[i];
  x2=x[i+1];
  y1=y[i];
  y2=y[i+1];
  }   
}
}
printf("\n\njarak terdekat adalah antara titik (%.0f,%.0f) dengan (%.0f,%.0f) \nyaitu sejauh %.2f",x1,y1,x2,y2,dmin);
}

Eksekusi Program :

Sekian postingan kali ini, semoga bermanfaat.
Kali ini saya akan memberikan source code untuk membuat input password terhidden dengan bintang(*). 
Tombol Enter  : Konfirmasi password
Backspace  : Hapus karakter



Source Code :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int i,j,n,input=0;
char pass[33];
for(i=0;i<=30;i++)pass[i]=0;
printf("masukan password : ");
for(i=0;i<=30;i++){
if (input==3){
system("cls");
printf("anda salah menginputkan berulang kali, akses ditolak\n\n");
system("pause");
exit(1);
}
pass[i]=getch();
if(pass[i]=='\r'){
pass[i]=0;
if(strcmp(pass,"admin123")==0){ //ingat pass "admin123" nya diganti sesuai dgn password yg diinginkan
printf("\n\nakses diterima");
i=31;
}
else {
printf("\n\nUsername atau Password salah\n");
system("pause");
system("cls");
    printf("masukan password : ");
i=-1;
input++;
}
}
else if (pass[i]=='\b'){
system("cls");
printf("masukan password : ");
if(i!=0){
pass[i]=0;
pass[i-1]=0;
i-=2;
for(j=0;j<=i;j++) printf("*");
}
else i=-1;
}
else if(i!=30){
printf("*");
}
else i=29;
}
return 0;
}

Gitu aja wkwk makasih..
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 :



Pada postingan kali ini, saya akan membahas program yang saya buat untuk Tugas Akhir Semesteran :D yaitu menghitung dan menyimpan riwayat BMI(Body Mass Index) dengan menggunakan Notepad(file .txt) sebagai database..Data-data yang diinputkan yaitu berupa tinggi badan dan berat badan. Nantinya, output yang dihasilkan yaitu :
    -Waktu anda menginputkan data
    -BMI/Body Mass Index anda
    -Keterangan apakah tubuh anda kurus, normal. ideal, kegemukan atau obesitas
Selanjutnya Input dan Output tersebut akan disimpan di notepad(format .txt) yang nantinya dapat diakses melalui menu "2. Riwayat BMI".
Perintah yang digunakan untuk menambahkan data adalah "a"  pada saat kita membuka pointer file ke database. Lalu untuk menampilkan data digunakan perintah "r" .txt nya. Sementara, untuk menghapus semua data digunakan perintah "w".

Tampilan program :
Source Code :

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

int main ()
{int menu;
float bmi, tb, bb;
FILE *pf;
char kar, again='y';
char ket[10];
time_t mytime;
mytime = time(NULL);


do {system("cls");
printf("\t\t\t\tProgram Hitung BMI\n");
printf("\t\t\t\t------------------\n\n");
printf("MENU\n");
printf("\t1. Hitung BMI Minggu Ini\n\t2. Riwayat BMI\n\t3. Hapus Riwayat\n\t4. Exit\n");
printf("\nMasukan Pilihan Anda : ");
scanf("%d",&menu);
switch (menu)

    {case 1 :

    {system("cls");
    if((pf=fopen("BMI.txt","a"))== NULL)
        {printf("file gagal diciptakan!\n");
        exit(1);}
     
        printf("Berat Badan (kg)    : ");
        scanf("%f",&bb);
        printf("Tinggi Badan (cm)   : ");
        scanf("%f",&tb);

        bmi = bb/(tb*tb*0.0001);
        printf("\nBMI Anda Saat Ini   : ");
        printf("%-5.2f", bmi);
     
        fprintf(pf,"%-14.1f%-14.1f%-14.2f", bb, tb, bmi);
        printf("\nTubuh Anda Saat Ini : ");
        if(bmi>=40) {printf("Obesitas\n"); fprintf(pf, "Obesitas     ");}
        else
if(bmi>=25) {printf("Kegemukan\n"); fprintf(pf,"Kegemukan    ");}
        else
if (bmi>=23) {printf("Normal\n"); fprintf(pf,"Normal       ");}
        else
if (bmi>=21.75){printf("Ideal\n"); fprintf(pf, "Ideal        ");}
        else
if (bmi>=20.5) {printf("Ideal\n"); fprintf(pf, "Ideal        ");}
else
if (bmi>=18.5) {printf("Normal\n"); fprintf(pf,"Normal       ");}
        else  
  {printf("Kurus\n"); fprintf(pf,"Kurus        ");}
        fprintf(pf,"%s",ctime(&mytime));
printf("\n\n============================\n");
        printf("  Tersimpan Di Riwayat\n");
        printf("============================\n\n\n\n");
    fclose(pf);}
    printf("Kembali ke menu [y/t] ? ");
    again=getch();
    break;
 
case 2 : {system("cls");
        if ((pf=fopen("BMI.txt","r"))== NULL)
        {printf("file tak dapat dibuka !\r\n");
         exit(1);}
            while((kar=fgetc(pf)) !=EOF)
            putchar(kar);
            printf("\n");
            fclose(pf);}
printf("\nKembali ke menu [y/t] ? ");
    again=getch();
    break;
 
    case 3 :{
system("cls");
     if((pf=fopen("BMI.txt","w"))== NULL)
                        {
                                printf("file gagal diciptakan!\n");
                                exit(1);
                        }
                        fputs("",pf);
                        printf("============================\n");
                        printf("Riwayat Terhapus\n");
                        printf("============================\n");
                        fclose(pf);
                        printf("Kembali ke menu [y/t] ? ");}
        again=getch();
        break;
case 4 :
goto exit;}
}
while(again=='y');
exit : system("cls");printf("THANK YOU");
return 0;
}

Sekian, semoga bermanfaat.

Copyright © 2013 Yanamon