Monday, December 17, 2018

Sorting and Searching

Dalam pemograman, ada kalanya kita diminta untuk sorting data berdasarkan kategori tertentu. Ada berbagai macam cara sorting, namun berbeda lama waktu pengerjaannya. Berikut beberapa tipe sorting

Bubble Sort
Mengambil konsep bahwa yang tertinggi / terendah harus diletakkan di paling depan/ belakang, dengan cara swap angka. Begitu seterusnya sampai data terakhir

void Bubble(int *DataArr, int n)
{
    int i, j;
    for(i=1; i<n; i++)
    for(j=n-1; j>=i; j--)
    if(DataArr[j-1] > DataArr[j])
               Swap(&DataArr[j-1],&DataArr[j]);
}

Selection Sort
Mengambil konsep bahwa data yang sedang dibandingkan akan dibandingkan dengan sisa data. Counter array akan disimpan dalam satu variable temporary jika syarat terpenuhi, lalu isi dari array variable temporary itu akan ditukar dengan data yang dibandingkan.

void SelectionSort(int data[], int n)
{
      int i, j, idx_low;
      for (i = 0;  i < n – 1;  i++) {
           idx_low = i;
           for (j = i + 1; j < n; j++)
  if (data[idx_low] > data[j]) idx_low = j;
   if (idx_low > i) swap(&data[i], &data[idx_low]);
      }


Insertion Sort
Mengambil konsep menggeser array sampai syarat tertentu tidak terpenuhi lagi, kemudian memasukkan ke array yang sekarang

void Insertion(int *Arr, int n){
  int i, k, y;
  for(k=1; k < n; k++) {
  y = Arr[k];
  for(i=k-1; i >= 0 && y < Arr[i]; i--)
   Arr[i+1] = Arr[i];
  Arr[i+1] = y;
    }
}

Quick Sort
void QuickSort(int L,int R) {

  int j,k;

  if(L < R){

  j = L;  k = R + 1;

  do{

  do{ j=j+1;} while(Arr[j] < Arr[L]);

  do{ k=k-1;} while(Arr[k] > Arr[L]);

  if(j < k) Swap(&Arr[j],&Arr[k]);

  }while(j <= k);

      Swap(&Arr[L],&Arr[k]);

      QuickSort(L,k-1);

      QuickSort(k+1,R);

  }

}


Merge Sort
Mengambil konsep membagi array menjadi 2 bagian secara terus menerus sampai hanya tersisa satu, lalu array tersebut dibandingkan dengan array lawannya. Jika misalkan syarat a lebih kecil b terpenuhi, a dimasukkan ke array baru bernama c. Namun jika tidak, b dimasukkan terlebih dahulu, kemudian a. Perbandingan ini dilakukan terus menerus sampai array tersusun



void merge( int arr[], int L, int m1, int m2, int R )
{
   int Lidx = L;
   int Ridx = m2;
   int Cidx = L;
   int temparr[ SIZE ];
   int i;
   while ( Lidx <= m1 && Ridx <= R ) {
      if ( arr[ Lidx ] <= arr[ Ridx ] )
         temparr[ Cidx++ ] = arr[ Lidx++ ];
      else
         temparr[ Cidx++ ] = arr[ Ridx++ ];
   }


   if ( Lidx == m2 ) {
      while ( Ridx <= R )
         temparr[ Cidx++ ] = arr[ Ridx++ ];
   }
   else {
      while ( Lidx <= m1 )
         temparr[ Cidx++ ] = arr[ Lidx++ ];
   }
   for ( i=L; i<=R; i++ )
      arr[ i ] = temparr[ i ];
}


void mergeSort( int arr[], int low, int high )
{
   int m1, m2;
   if ( ( high-low ) >= 1 ) {
      m1 = ( low+high ) / 2;
      m2 = m1+1;
      mergeSort( arr, low, m1 );
      mergeSort( arr, m2, high );
      merge( arr, low, m1, m2, high );
   }
}

Untuk memahami lebih jelas mengenai cara sorting dari tiap teknik di atas, dapat di search di youtube beberapa ilustrasi pengerjaan sorting agar mengerti.

Searching
Dalam suatu data perusahaan besar, pasti ada banyak nama karyawan yang sama, sehingga ketika melakukan searching data, banyak data yang muncul. Oleh karena itu, biasanya diberi penanda yang unik, yaitu key, sehingga hasil yang diinginkan adalah unik.

Ada 2 macam cara searching:
1. Linear Search
Dengan mengecek keseluruhan data dalam satu perusahaan, tanpa perlu di sorting.
Contoh, mencari ID karyawan:

#include<stdio.h>
int main()
{
     int IDKaryawan[] = {4,5,6,7,2,3,10,8);
     int SearchID;
     printf("Input ID Karyawan yang ingin dicari : ");
     scanf("%d",&SearchID);
     int flag = 0; // penanda data ditemukan atau tidak
     for(int i = 0 ; i < 8 ; i++)
     {
           if(SearchID == IDKaryawan[i]) // jika data ditemukan
           {
                 printf("Found!\n");
                 flag = 1;
                 break;
           }
     }
     if(flag == 0)
     {
             printf("Not Found!\n");
     }
     return 0;


Linear Search dapat berjalan dengan cepat pada jumlah data yang sedikit. Namun, jika datanya mencapai 10000, akan memakan waktu yang cukup lama.
Oleh karena itu, ada teknik Binary Search

2. Binary Search
Prinsip Binary Search adalah membagi data menjadi 2 secara terus menerus. Jika data berada di kiri, maka program akan membagi array bagian kiri menjadi 2 lagi. Jika data berada di sebelah kanan, maka program akan membagi array bagian kanan menjadi 2 lagi.

Oleh karena itu, harus dilakukan sorting terlebih dahulu sebelum melakukan Binary Search.

3. Interpolation Search
Prinsip Interpolation Search mirip dengan Binary Search, harus disorting terlebih dahulu. Namun, ia membagi dengan rumus berikut.

Mid = ((kunci - data[min]) / (data[max] - data[min])) x (max- min) + min

Kunci = data yang ingin dicari
min = index array terkecil
max = index array terbesar
Mid = nilai yang mendekati data yang ingin disearch

Sebagai contoh, dalam pencarian nama dengan huruf awal "T", pasti secara langsung akan mencari pada 3/4 atau 2/3 bagian buku, bukan pada tengah2.


Struct

Struct adalah sebuah tipe data yang menyimpan banyak tipe data yang berbeda.
Deklarasi struct:
struct nama_tipe_data
{
     data_type variable_name;
     data_type2 variable_name2;
     .....
} nama_struct;

struct data
{
     int age;
     char name[20];
}mhs;
Struct dapat juga berupa array(Array of Structure), sebagai contoh:
struct data
{
     int age;
     char name[20];
}mhs[20]; // dapat muat 20 data yang berisi age dan name

Inisialisasi struct dapat dilakukan secara global dan secara local
Secara global:
struct data
{
     int age;
     char name[20];
}mhs[20];

int main()
{
  .....


Secara local
struct data
{
     int age;
     char name[20];
};

int main()
{
      struct data mhs[20];
      .....
}

ATAU

int main()
{
      struct data
     {
           int age;
           char name[20];
      }mhs[20];
      .....
}


Nested Structure
Adalah struct di dalam struct. Sebagai contoh:
struct dataLahir
{
       int date;
       int month;
       int year;
       char tempatLahir[20];
}

struct biodata
{
       char nama[20];
       int age;
       struct dataLahir data; // struct dataLahir dalam struct biodata
}

int main()
{
    struct biodata mahasiswa[20]; 
    ......
}

Accessing array
Untuk mengakses array, digunakan "." untuk mengakses isi dari array
Untuk menyatakan nilai pada string, digunakan library string.h, function strcpy;
Contoh:
#include<stdio.h>
#include<string.h>
struct data
{
     int age;
     char name[20];
}mhs;

int main()
{
    strcpy(mhs.name,"Adit");
    mhs.age = 19;
    printf("%s %d\n",mhs.name, mhs.age);

Output :
Adit 19

Akses array of structure
Contoh:

struct data
{
     int age;
     char name[20];
}mhs[20];

int main()
{
    strcpy(mhs[0].name,"Adit");
    mhs[0].age = 19;
    strcpy(mhs[1].name,"Lili");
    mhs[1].age = 17;
    strcpy(mhs[2].name,"Jojo");
    mhs[2].age = 18;


    for(int i = 0 ; i < 3 ; i++)
    {
          printf("%s %d\n",mhs[i].name, mhs[i].age); // mengakses array mahasiswa ke i, bagian name
                                                                                 // mengakses array mahasiswa ke i, bagian age
     }
     return 0;

Output:
Adit 19
Lili 17
Jojo 18

Sunday, December 16, 2018

File Processing

Sebelum membaca bagian ini, ada baiknya pembaca memahami dan membaca terlebih dahulu Struct yang telah di posting di blog ini.

Dalam pemograman, kadangkala kita diharuskan untuk membaca dari file, atau mungkin menulis sebuah file.
Dalam melakukan hal tersebut, harus ada Buffer Area
Buffer area adalah tempat penyimpanan sementara sebelum semua datanya ditambahkan dalam file.
Syntax :
FILE *nama_variable

Cara membuka sebuah file
Syntax :
FILE *nama_variable = fopen("namaFile.fileFormat","mode");

Keterangan: 
- nama_variable = nama Buffer Area
- namafile.fileformat =  Nama File yang ingin diproses, misalnya : "data.txt", fileFormat = .txt
- mode:
"w", digunakan untuk write file, yaitu untuk menulis data ke dalam file
"r" digunakan untuk read file, yaitu membaca file yang sudah ada
"a" digunakan untuk append file, yaitu untuk menambahkan ke dalam file yang sudah ada. Jika belum ada file, program akan melakukan "w", yaitu write file

Untuk menandakan file telah selesai diproses:
Syntax:
fclose(nama_variable);

fclose berguna untuk melepas bufferArea dan mengirimkan data sisa ke file.
Jika file tidak di close, maka program akan tetap membuka file dan menganggap file masih ingin diproses.

fscanf
Digunakan untuk read file. Cara kerjanya sama seperti scanf, namun pada bagian depannya ditambahkan lagi 1 parameter, yaitu bufferArea/ nama_variable

fprintf
Digunakan untuk write file. Cara kerjanya sama seperti printf, namun pada bagian depannya ditambahkan lagi 1 parameter, yaitu bufferArea/ nama_variable

feof
File end of File
Syntax: feof(nama_variable)
Menandakan apakah sudah akhir file atau tidak
Jika tidak EOF, return value 0

Contoh read file:
#include<stdio.h>

int main()
{
     int num[10], count = 0;
     FILE *fp = fopen("data.txt","r"); //readFile
     if(!fp) {   //if program couldn't find file, can be written as fp == NULL
           printf("File Not Found!\n");
     }
     while(!feof(fp))
     {
           fscanf(fp,"%d\n",num[count]); // simpan dalam variable num
           count++;
     }
     fclose(fp);
     //print array
     for(int i = 0 ; i < count ; i++)
     {
          printf("%d\n",num[i]);
     }
     return 0;
}

File data.txt: (file must be on the same directory as your program)
1
2
3
4
5
6

Output program:
1
2
3
4
5
6


Contoh write file:
#include<stdio.h>

int main()
{
     int num[] = {1,2,3,4,5,6};
     int count = 0;
     FILE *fp = fopen("data.txt","w"); //writeFile
     for(int i = 0 ; i < 6 ; i++)
     {
           fprintf("%d\n",num[i]);
           printf("%d\n",num[i]);
     }
     fclose(fp);
     return 0;
}
File data.txt: (created)
1
2
3
4
5
6

Output program:
1
2
3
4
5
6

Contoh append file:
#include<stdio.h>

int main()
{
     int num[] = {7,8,9,10,11,12};
     int count = 0;
     FILE *fp = fopen("data.txt","a"); //appendFile
     for(int i = 0 ; i < 6 ; i++)
     {
           fprintf("%d\n",num[i]);
           printf("%d\n",num[i]);
     }
     fclose(fp);
     return 0;
}


File data.txt: (before append)
1
2
3
4
5
6

File data.txt: (after append)
1
2
3
4
5
6
7
8
9
10
11
12

Output program:
7
8
9
10
11
12

Scanning a lot of data in file
To scan a lot of data and save it in a program, use struct
 Example:

File mahasiswa.txt:
Andi#18#Jakarta
Budi Tomo#19#Medan
Lili#18#Bogor
Tania#17#Yogyakarta
Jojo#20#Jakarta

Program:
struct data
{
     char name[20];
     int age;
     char tempatlahir[20];
} mhs[20];

int main()
{
       int count = 0;
       FILE *fp = fopen("mahasiswa.txt","r");
       while(!feof(fp))
      {
             fscanf(fp,"%[^#]#%d#%[^\n]\n",mhs[count].name,mhs[count].age,mhs[count].tempatlahir);
             count++;
      }
      fclose(fp);
      //print data
      for(int i = 0 ; i < count ; i++)
      {
          printf("%s %d %s\n",mhs[i].name,mhs[i].age,mhs[i],tempatlahir);
      }
       return 0;
}


Cloud Computing

//This material is not part of Algorithm & Programming
Cloud Computing adalah tempat dimana user dapat menyimpan data dan aplikasi mereka melalui internet.

Ada 3 model pengiriman dalam komputasi awan:
(1) SAAS(Software as a Service), adalah layanan penggunaan aplikasi yang telah disediakan
(2) PAAS(Platform as a Service), adalah layanan penggunaan platform yang telah disediakan
(3) IAAS(Infrastructure as a Service), adalah layanan penggunaan infrastruktur yang telah disediakan

Kegunaan Cloud Computing:
- Social Networking
- Data-sharing / collaboration
- Education
- Business/ Office Application

Beberapa keunggulan menggunakan cloud computing:
- Kenaikan performansi yang fleksible
- Mengurangi biaya software/ hardware
- Pembaharuan infrastructur yang dapat dikendalikan
- Storage yang hampir tidak terbatas
- Memperkuat keaslian data
- Data dapat diakses secara universal(pada orang-orang yang memiliki akses)
- Memudahkan kerja kelompok

Beberapa kelemahan menggunakan cloud computing:
- Memerlukan internet yang konstan
- Performansi yang cukup lambat
- Sekuriti data yang mudah diakses banyak orang
- Tidak dapat jalan pada akses internet yang lambat

Namun dari kelemahan itu, user tidak perlu kuatir, karena:
- Internet kencang sudah ada dimana-mana
- Performansi dapat di atur sesuai keinginan user
- Memiliki banyak opsi sekuriti

Function & Recursive

Function
Sebelum mengenal mengenai function, ada baiknya kita mengenal mengenai modular programming.
Modular programming adalah suatu teknik dalam pemograman yang membagi program ke dalam beberapa module. Module ini biasanya disebut sebagai function atau disebut juga sebagai sub-program.

Module berfungsi untuk mengerjakan suatu pekerjaan yang spesifik, biasanya digunakan ketika pengerjaan terhadap suatu pekerjaan yang spesifik dilakukan berulang kali dalam satu proses.

Mengapa harus menggunakan module?
Beberapa keunggulan menggunakan module:
1. Suatu goal diraih dengan mengerjakan beberapa sub-goal terlebih dahulum, sehingga program yang besar terbagi menjadi module yang kecil
2. Mempermudah programmer/developer memahami code
3. Memudahkan pengecekan akan kesalahan
4. Modifikasi code dapat dilakukan tanpa harus mengubah keseluruhan code
5. Dokumentasi lebih mudah

Ada dua macam function dalam C:
1. Library function, sebagai contoh:
#include<stdio.h>    //library yang sudah disediakan oleh C dengan berbagai macam function

int main()
{
       int a = 7;
       printf("%d\n,a);   // salah satu contoh function yang telah disediakan C adalah printf();
       return 0;
}

2. User Defined Function, yaitu function yang didefinisikan oleh programmer sendiri
Function construction :
return-value-type function-name (parameter-list)
{

}

- return-value-type mengembalikan value berupa data-type yang diinginkan, seperti int, float, dll.
Jika return-value-type berupa void, maka tidak perlu return apapun.
- function-name adalah nama dari function, biasanya sesuai dengan tujuan yang ingin dicapai, misalnya function untuk menghitung pertambahan 2 angka, maka nama functionnya dapat berupa: sum_two_numbers, sumValue, dll
- parameter-list adalah parameter yang dikirimkan kepada function

Contoh User-Defined Function:
#include<stdio.h>

int sum(int num1, int num2)    //parameter yang diterima berupa dua buah int
                                                 //num1 dan num2  disebut formal parameter
{
     return num1+num2;    //return value jumlah num1 dan num2;
}

int main()
{
      int a = 8. b = 2;
      int c = sum(a,b);  //mengirimkan dua buah parameter, yaitu int dan int. hasil return dari function
                                  //sum(int,int) disimpan dalam variable c
                                 // a dan b disebut actual parameter
      printf("c = %d\n",c);  // c = 10;
      return 0;
}

Function Prototype
Function Prototype memastikan bahwa function sudah didefinisikan ketika dipanggil oleh function lain.
Contoh:

int main()
{
       printf("%d",angka());
       return 0;
}

int angka()
{
      return 4;
}

Dalam kasus ini, karena program membaca dari atas sampai bawah, maka saat program membaca di main(), program tidak mengenali function angka() sehingga menyebabkan error.

Dalam kasus ini, dapat melakukan pemindahan function angka() di atas main(), atau melakukan function prototype sebagai berikut.

int angka();

int main()
{
       printf("%d",angka());
       return 0;
}

int angka()
{
      return 4;
}
Passing Parameter
Ada dua macam passing parameter:
- Passing by Value, mengirimkan ke module lain berupa angka(jika int), character(jika char) dsb.
Contoh:
int multiply(int a, int b) // menerima parameter berupa angka
{
      return a*b;
}

int main()
{
      printf("%d",multiply(6,8)); // mengirimkan parameter berupa angka
                                                  // hasil : 48
      return 0;
}


- Passing by Reference/Location, mengirimkan ke module lain berupa address
Contoh:

int multiply(int *a, int *b) // menerima parameter berupa address
{
      return a*b;
}

int main()
{
      int x = 7, y = 3;
      printf("%d",multiply(&x,&y)); // mengirimkan parameter berupa address dari variable x dan y
      return 0;
}

Jika parameter yang dikirimkan berupa array 1D, maka parameter yang diterima harus berupa address
Contoh:

int sum_array(int *a, int jumlahArray) // dapat juga int a[]
{
      int sum = 0;
      for(int i = 0 ; i < jumlahArray ; i++)
     {
            sum += a[i];
      }
      return sum;
}

int main()
{
      int array[] = {1,2,3,4,5};
      int n = 5;
      printf("%d",sum_array(array,n));
      return 0;
}

Jika array berupa 2D, maka dapat dilakukan seperti berikut:
int print(int a[10][10]) atau int print(int a[][10])
namun tidak boleh:
int print(int a[10][]) atau int print(int a[][])

RECURSION
Recursion atau juga seringkali disebut recursive adalah fungsi yang memanggil dirinya sendiri.
Biasanya dalam recursion ada base case, yaitu suatu kondisi yang memberhentikan suatu function memanggil dirinya sendiri (agar tidak terjadi looping forever)
Dalam recursion juga ada reduction step, yaitu function call pada diri sndiri, namun mengirimkan parameter yang berbeda angka dari sebelumnya, yang mengarah pada base case.
Contoh yang paling umum untuk recursion adalah factorial

int factorial(int number)
{
      //base case, berhenti saat number == 0
      if(number == 0) return 1;
      return number * factorial(number-1); //reduction step, mengarah pada base case
}

int main()
{
     printf("%d",factorial(5)); // 120
     return 0;
}

Skema terjadinya recursive:
 //factorial(5) = 5!, factorial(4) = 4!, dst

5!
(5 * 4!)
(5 * (4 *3!))
(5 * (4 * (3 * 2!)))
(5 * (4 * (3 * (2 * 1!))))
(5 * (4 * (3 * (2 * (1 * 0!))))) // base case number == 0, return 1;
(5 * (4 * (3 * (2 * (1 * 1)))))
(5 * (4 * (3 * (2 *  1))))
(5 * (4 * (3 * 2)))
(5 * (4 * 6 ))
(5 * 24)
120

Iterative(Repetition/Looping) vs Recursive
Tidak ada hal yang pasti mengatakan bahwa iterative lebih baik atau lebih buruk dari recursive, namun dapat dipastikan bahwa dalam kasus tertentu lebih muda untuk menggunakan recursive dibanding iterative, begitu juga sebaliknya

Sebagai contoh, factorial dengan iterative

int main()
{
      int x = 5;
      int hasil = x;
      for(int i = x-1 ; i >0 ; i--)
      {
           hasil *= i; // 5*4*3*2*1
      }
      return 0;
}





Wednesday, October 17, 2018

Pointer and Array

Pointer
Pointer adalah sebuah variabel yang berfungsi untuk menyimpan address dari variabel lain, menggunakan simbol "*" dan "&"
Syntax:
<data_type> *ptr_name

* berarti menunjuk pada content dari suatu address
& berarti menunjuk pada address dari suatu content

Pointer to pointer
Adalah pointer yang menyimpan address dari pointer lain.
Syntax:
<data_type> **ptr_name

** berarti menunjuk pada content dari suatu address yang ditunjuk oleh pointer lain.

Contoh:
int i = 12, *p, *pp;
p = &i;
pp = &pp;
printf("%d",**pp);

Output: 12

Array
Array adalah suatu variabel yang menyimpan sekumpulan data yang tidak terpisahkan.

Ibarat jika menonton dalam bioskop bersama keluarga atau teman terdekat, tentunya tiket akan dipesan sederet untuk sekeluarga atau sekelompok teman. Demikian pula berlaku untuk array, data yang tersimpan dalam array berurut, sehingga dapat diakses secara random.( dalam scanf tidak memerlukan &)

Dalam array, semua tipe data adalah sama atau disebut juga homogenous

Array dapat dibagi menjadi banyak macam berdasarkan dimensinya, namun yang akan dibahas hanyalah 1D array dan 2D array

1. 1D Array (One Dimensional Array)

Syntax:
<data_type> array_name[value];

 1D array memiliki index dari 0 sampai (value-1).


Inisialisasi array dapat dilakukan dengan 2 cara:
a.  Inisialisasi variabel awal
Contoh: int a[4]: {1,2,3,4}

Sebuah array dapat tidak perlu diberikan nilai value, dengan syarat sudah terdapat inisialisasi content array.
Contoh:
int b[] :{1,2,3,4}

Sistem dapat mengenali bahwa value dari a adalah 4(terdapat 4 content dalam a)

b. Looping
Biasanya, looping pada array digunakan untuk memberi content dalam sebuah array, dengan cara sebagai berikut.

int i;
int c[3];
for(i=0;i<3;i++)
{
      scanf("%d",&c[i]);
}
dapat juga ditulis:

int i;
int c[3];
for(i=0;i<3;i++)
{
      scanf("%d",*(c+i));
}

Pointer Constant vs Pointer Variable
Pointer constant adalah array, tidak bisa diubah valuenya.
Sementara pointer variable adalah pointer seperti contoh di atas mengenai pointer, dapat diubah valuenya.

Cara mengakses sebuah array dengan pointer

int arr[10]={1,2,3,4,5,6,7,8,9,10};
int *pointr;
pointr =arr; // or pointr = &arr[0]
printf("%d",*pointr);

Output: 1

2. 2D array( Two Dimensional Array)
Syntax:
<data_type>array_name[row][column];

Contoh tabel sebagai berikut:
1 2 3
4 5 6

Dalam kasus tersebut, row =3 dan column =2;
Oleh karena index array dari 0 sampai (n-1), maka:
array_name[0][0] = 1
array_name[0][1] = 2
array_name[0][2] = 3
array_name[1][0] = 4
array_name[1][1] = 5
array_name[1][2] = 6

Dapat diinisialisasikan sebagai berikut.
int a[3][2] = {1,2,3,4,5,6}
atau
int a[3][2] = {{1,2,3},
                       {4,5,6}} //untuk mempermudah melihat tabel yang diinginkan.


Array of pointer
Adalah suatu array yang berisi banyak pointer.
Contoh:
int a;
int *pointr[3];
int x = 1;y =3; z=5;
pointr[0] = &x;pointr[1] = &y; pointr[2] = &z;
for(int i=0;i<3;i++)
{
      printf("%d ",*pointr[i]);
}

Output : 1 3 5

Array of character
Disebut juga string, yaitu kumpulan character dalam suatu array.

Dalam library <string.h>, dapat ditemukan berbagai fungsi string, antara lain sebagai berikut.

- strlen, menghitung panjang string
- strcpy(s2,s1), meng-copy s2 ke s1
- strncpy(s2,s1,n), meng-copy s2 ke s1 sebanyak n karakter pertama
- strcat(s2,s1), menambahkan string s1 pada akhir s2
- strncat(s2,s1,n), menambahkan string s1 pada akhir s2 sebanyak n karakter
- strcmp(s1,s2), membandingkan nilai s1 dan s2, jika sama nilainya 0
- dll.

Thursday, October 11, 2018

Program Control: Repetition

Dalam pemograman, bahasa apapun itu, seringkali terdengar kata repetition. Repetition adalah pengulangan yang terjadi dalam suatu program ketika suatu kondisi terpenuhi atau bernilai true, sampai kondisi tidak terpenuhi kembali atau bernilai false.  Pada hakikatnya, repetition terjadi sampai kondisi tidak terpenuhi kembali. Jika tidak, program akan "looping forever"Berbagai bentuk repetition dalam program adalah sebagai berikut.
- for
- while
- dowhile

FOR
Syntax:
for(inisialisasi;kondisi;increment/decrement)
{
          statement1;
          statement2;
}

WHILE
Syntax:
Inisialisasi
While (kondisi)
{
         statement1;
         statement2;
         increment/decrement;
}

DOWHILE
Syntax:
Inisialisasi
Do{
         statement1;
         statement2;
         increment/decrement;
}while
(
       kondisi
)

Apa bedanya WHILE dan DOWHILE?
WHILE : Cek kondisi terlebih dahulu, lalu mengeksekusi statement di dalamnya.
DOWHILE: Melakukan terlebih dahulu statement sekali, lalu melihat kondisi. Jadi, DOWHILE pasti melakukan statement di dalamnya minimal 1x

Dalam looping, dapat digunakan operasi BREAK dan CONTINUE
BREAK berfungsi untuk menghentikan looping/repetition
CONTINUE berfungsi untuk melakukan skip terhadap suatu kondisi dan kembali menjalankan loop seperti biasa.
Contoh:
int i;
for(i=1;i<10;i++)
{
       printf("%d ,i);
}
Output: 1 2 3 4 5 6 7 8 9

Jika menggunakan BREAK:

int i;
for(i=1;i<10;i++)
{
       printf("%d ,i);
       if(i==4) break;
}
Output: 1 2 3 4

Jika menggunakan CONTINUE:

int i;
for(i=1;i<10;i++)
{
       if(i==4) continue;
       printf("%d ,i);
}
 Output: 1 2 3 5 6 7 8 9





Sorting and Searching

Dalam pemograman, ada kalanya kita diminta untuk sorting data berdasarkan kategori tertentu. Ada berbagai macam cara sorting, namun berbeda ...