Studi Kasus Bahasa c

9

Click here to load reader

description

Informatika

Transcript of Studi Kasus Bahasa c

Page 1: Studi Kasus Bahasa c

Series C/C++ kali ini masih untuk latihan dasar pemrograman. Sekarang giliran kita membuat fungsi bilangan di Matematika yaitu Fibonaci, Faktorial dan Prima. Biasanya ketiga fungsi bilangan tersebut selalu muncul saat test masuk kerja bagi Programmer :D . 

1. Bilangan Prima 

Seperti dijelaskan sebelumnya , bilangan prima atau sering disebut Primary number adalah bilangan lebih dari 1 dan hanya mempunyai 2 faktor pembagi yaitu 1 dan dirinya sendiri. perhatikan ilustrasi berikut

  2           3          5 /   \        /  \        /  \           ...................dst ( ingat syratnya : 1 dan dirinya sendiri)1   2      1  3      1   5

Dalam logika program, setiap bilangan harus dievaluasi semua kemungkinan faktor pembaginya. 

   2           3            4                5 /   \        / | \         / / \ \         /  /  | \  \    .................dst1   2      1 2 3      1 2 3 4     1 2 3 4 5  

ini bisa di kode sbb :

int prima(int n){   int i,j;   for(i=1;i<=n;++i){              printf("Angka %d \n",i);       printf("=========\n");       int counter = 0;       for(j=1;j<=i;++j){                     if(i % j==0){              ++counter;           }       }            /*bil prima tepat punya 2 buah faktor        yaitu 1 dan dirinya sendiri*/      if(counter==2)        printf("Bil %d Prima",i);              printf("\n");   }}

Namun kode diatas tidak maksimal, bayangkan jika angka yg akan di test besar....seperti ilustasi diatas, kita harus satu-satu check dengan pembagi nya. Banyak cara untuk mempercepat menentukan bil Prima misal dengan men-Cek apakah bilangan tersebut genap atau tidak . Karena jika ia genap (kecuali angka 2 , karena 2  = satu-satu nya angka genap yg masuk bilangan prima)

Page 2: Studi Kasus Bahasa c

sudah pasti ia bukan prima. Silahkan coba-coba. Sekarang kita akan pakai cara lain yaitu dengan cara Test dengan Faktor pembagi antara 1 sampai Akar dari angka tersebut dibulatkan : 

2 <= m <= ceil(akar n)  , dimana m adalah faktor pembagi dan n adalah bil yg mau di test. 

int prima(int n){

   int i,j;   for(i=2;i<=n;++i){      int flag = 0;            if(i % 2 !=0 ){                                 //cek dari 3 saja, krena 1 sdh pasti faktor pembaginya        for(j=3;j<=(int)ceil(sqrt(i));++j){                          /*check apakah i habis dibagi j,                 jika ya maka flag++ artinya bkn prima*/             if(i % j ==0){                                                flag++;                            }                                     }                                 }else{                  if(i!=2)            flag++;       }                 if(flag==0){                     printf("Bil %d  = prima \n",i);       }        }}

Agak sedikit rumit tpi cukup membantu untuk angka yang besar, mungkin kamu bisa improve kode nya masing-masing.

2. Faktorial 

Faktorial memenuhi rumus atau aturan seperti berikut : 

Jika n = 6 , maka n faktorial (n!)  =  n x (n-1)! , atau lengkapnya = 6 x 5 x 4 x 3 x 2 x 1

int faktorial(int n){

    int i;    int hasil=1; //penampung sementara    for(i=n;i>=1;--i){               hasil =hasil * i;                }        printf("Faktorial %d! = %d \n",n,hasil);}

Page 3: Studi Kasus Bahasa c

2. Fibonaci 

Fibonaci adalah bilangan dimana bilangan yang di sedang amati adalah hasil penjumlahan dari dua buah bilangan sebelumnya

misal : 1 1 2   dua adalah bilangan yg sedang kita amati adalah hasil penjumlahan dua buah bilangan sebelumnya. Fibonaci akan membentuk sebuah deret bilangan ( deret fibonaci). 

ada beberapa cara untuk mencari fibonaci , diantaranya adalah : 

a. Fungsi rekursif , yang memenuhi formula berikut

Dimana n adalah bilangan fibonaci digit ke-nDengan formula rekursif diatas akan membentuk pola perhitungan sbb : Jika bilangan itu > 1F(2) = F(2-1) + F(2-2)     = F(1)   + F(0)      = 1 + 0 = 1   //substitusi kedalam fungsi rumus

Begitu seterusnya secara rekursif. Namun secara rekursif kurang disenangi karena memakan banyak memory di Komputer. 

b. Cara Logika biasa dan Matematika

   b.1 Logika Biasa 

 int fibonaci(int n){

    int i,next,a=0,b=1;    for(i=0;i<n;++i){            if(i<=1){            next = i;        }else{                        next = a + b;            a = b;            b= next;        }                printf("%d ",next);    }

Page 4: Studi Kasus Bahasa c

}

  b.2 Cara matematika

    Yang memenuhi formula Fn = (x1n – x2n) / akar(5)  dengan pembulatan kebawah    dimana X1 dan X2 adalah akar-akar dari persamaan Kuadrat    x2  - x - 1=0             Untuk mencari X1 dan X2 dapat dicari dengan 

   

   Maka didapat X1,X2  =>       DI program kita buat seperti ini

int fibonaci(int n){        int i;float tmp;        //x^2 - x - 1 =0    float x1 = ( 1 + sqrt(5) ) / 2;    float x2 = (1 - sqrt(5) ) / 2;          for(i=0;i<n;i++){                       tmp = (pow(x1,i) - pow(x2,i)) / sqrt(5);        printf("%d ",(int)floor(tmp)); //pembulatan kebawah             }        printf("\n");}

Begitulah kira-kira :D 

Untuk memanggil fungsi-fungsi diatas : 

#include <stdio.h>#include <math.h>//fungsi-fungsinya.......int main(){   //fibonaci(5); //panggil disini.......

Page 5: Studi Kasus Bahasa c

   return 0;}

Jalankan dicompiler, jika anda di linux dan tidak ada compiler tapi sudah install GCC, jalankan di terminal : 

ubuntu@AcerXtimeline:~/Contoh_C$ gcc -o bilangan bilangan.c -lmubuntu@AcerXtimeline:~/Contoh_C$ ./bilangan 

NOTES :  Selain cara-cara diatas tentunya masih banyak cara lain, silahkan coba sendiri :D

Palindrom adalah kumpulan kata yang jika dibalik akan menghasilkan ejaan dan bunyi sama seperti "radar" , "malam", "tamat", "kodok" dsb.

di bahasa C sdh ada library khsus untuk mebalikan kata yaitu : strrev() . namun di linux strrev() tidak ada karena sebenarnya ini bukan library strandar dalam bahasa C. 

contoh strrev() bawaan:

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

int main() {

char kata[200]= "kodok"; //ganti dgn kata" lain char check[200];

strcpy(check, kata); //kita copy inputan lalu pakai strrev strrev(check);

    /*bandingkan apakah kata == check (yg sdh dibalik kan tentunya)*/

if(strcmp(kata, check) == 0)printf("Kata %s adalah palindrom.\n", kata);

elseprintf("Kata %s bukan palindrom.\n", kata);

printf("Kebalikan dari input diatas %s.\n", check);

Page 6: Studi Kasus Bahasa c

return 0;}

Berikut jika kita buat sendiri fungsinya

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

/*Buat fungsi*/void reverse(char s[]) {

int c, i , j; //strlen(s) = hitung panjang kata for (i = 0, j = strlen(s)-1; i < j; i++, j--) {

c = s[i];s[i] = s[j];s[j] = c;

}

return;}

int main() {

char a[] = "malam"; //ganti dgn kata" lain char b[200];

strcpy(b,a); reverse(a); //panggil fungsi

if(strcmp(a, b) == 0) {

printf("Kata %s Palindrom\n",a);

} else{

printf("Kata %s Bukan palindrom\n",a); }

return 0;}

Saat mulai belajar Algoritma pemrograman,  biasanya selalu belajar membuat Segitiga. ternyata ini tidak sembarangan, menurut pengajar saya dulu, membuat segita dalam berbagai bentuk sangat baik untuk mengasah Logika

Page 7: Studi Kasus Bahasa c

Oke, mari kita contohkan. dibawah ini adalah kode snippet saja. Logika nya bisa dipelajari disini : 

#include <stdio.h>int main() { int rows, star, spaces; int number_of_stars = 6; //set brp jumlah bintang int number_of_rows = number_of_stars; for (rows=1; rows <= number_of_rows; rows++) {

for (spaces=1; spaces <= number_of_stars; spaces++) { printf(" "); } for (star=1; star <= rows; star++) { printf("*"); printf(" "); } printf("\n"); number_of_stars = number_of_stars - 1; }

return 0;}

Output dari kode diatas

* * * * * * * * * * * * * * * * * * * * *

Coba jalankan yang ini , dan lihat apa hasilnya

#include<stdio.h>int a,b;int main(){

for(a=1; a<=10; a++){    for(b=1; b<=a; b++){                          printf("*");    }

    printf("\n");  }}