Wednesday, December 19, 2018

SEARCHING

SEARCHING

Searching
Merupakan proses untuk menemukan element array yang ingin dicari atau sebuah tindakan untuk mendapatkan informmasi berdasarkan kata kunci partikular dari informasi yang telah tersimpan.

Searching dibagi menjadi 3 jenis:
  • Linear search
  • Binary search
  • Interpolation search  

1. Linear search
Membandingkan tiap element dengan kata kunci yang diberikan, dalam algoritma sebagai berikut:

Algorithm:
   1. n : total record of array x.
2. For each x[i], 0 £  i £ n-1, check whether x[i] = key.
3. If x[i] = key, then the searched data is found in index=i. Finished.
4. If x[i] ¹ key, then continue searching until the last data which is i = n-1.

5. If i= n-1 and x[i] ¹ key, it means the data is not exist in the list, and set index = -1. Finished.

2. Binary search
Sangat baik digunakan pada list yang kecil dan tidak terurut, Mengambil titik tengah dari data yang ada lalu membandingkan data tersebut lebih kecil / lebih besar dari data lainnya. Dapat dicontohkan dalam algoritma sebagai berikut:

Algorithm:
1. n : total record of array x.
2. left=0,  right= n-1.
3. mid =(int) (left + right)/2.
4. If x[mid]=key then index = mid. Finished.
5. If x[mid]<key then left = mid+1.
6. If x[mid]>key then right = mid-1.
7. If left £ right and x[mid] ¹ key, then repeat point 3.

8. If x[mid] ¹ key then index = -1. Finished.

3.Interpolation search
Berlaku pada data yang sudah terurut , hampir sama seperti Binary search. Dalam algoritma dirumuskan seperti berikut:

Algorithm:
1.In the interpolation search, we'll split the data according to the following formula:
●Mid = (key - data[min]) / (data[max] - data[min]) * (max-min) + min.
2.If data[mid] = sought data, data has been found, searching is stopped and return mid.
3.If data[mid]!= sought data, repeat point **
4.**Searching is continued while sought data > data[min] and sought data < data[max].
5.Looking for a mid value by entering into the interpolation formula
6.If data[mid] > sought data, high = mid – 1
7.If data[mid] < sought data, low = mid + 1
8.It will be looped until the requirements point ** are not met then return (-1), data not found





SORTING

SORTING

Sorting 
            merupakan tindakan mengurutkan yang dibutuhkan untuk mempercepat operasi pencarian di sebuah list yang memiliki dua tipe sorting ascending(atas ke bawah atau awal ke akhir) dan descending(bawah ke atas atau akhir ke awal).

Sorting dibagi menjadi dua macam:

A. Simple sorting
  • Bubble sort
  • Selection sort
  • Insertion sort
B. Intermediate sorting
  • Quick sort
  • Merge sort
SIMPLE SORTING

1. Bubble sort
Membandingkan antara dua nilai, membandingkan dan menukar (bila perlu) dikenal juga sebagai exchange sort.

Contoh:

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]);
}

2. Selection sort
Membandingkan angka pertama dengan setelahnya, jika angka pertama lebih kecil maka akan ditukar angka tersebut dan menjadi pembanding, apabila data telah habis dan pembanding merupakan angka terkecil maka diletakan paling depan atau paling besar maka diletakan  paling belakang

Contoh:

for(i=0; i<N-1; i++){      /* N=number of data */

  Set idx_smallest equal to i
  for(j=i+1; j<N; j++){
  If array[ j ] < array [ idx_smallest ] then idx_smallest = j
    }
  Swap array[ i ] with array[ idx_smallest ]
}

3. Insertion sort
Membandingkan dengan memilih satu angka dan jika angka tersebut lebih kecil maka diselipkan di angka setelahnya dan apabila angka yang dipilih telah memiliki tempat maka akan memilih angka baru yang lain untuk dibandingkan sampai terurut

Contoh:

for(i=1; i<n; i++) {
     x = A[i], insert x to its suitable place between A[0] and A[i-1].
}

INTERMEDIATE SORTING
1. Quick sort
Mengambil sebuah nilai sebut sebagai pivot lalu membagi yang lebih kecil kekiri(bagian angka kecil) dan lebih besar kekanan(bagian angka besar) lalu mengecek bagian yang lebih besar dari pivot di ambil satu nilai sebagi pivot kedua lalu bandingkan lagi dibagian angka besar.
Contoh:
void QuickSort(int left, int right)
{
      if(left < right){
            //arrange elements  R[left],...,R[right] that
            //producing new sequence:
            R[left],...,R[J-1] < R[J] and R[J+1],...,R[right] > R[J].
            QuickSort(left, J-1);
            QuickSort(J+1, right);
       }
}

2.Merge sort
Membagi list yang tidak teratur menjadi n bagian kecil list lalu ulangi buat bagian kecil list hingga tersisa satu nilai.
Contoh:

1 2 2 3 4 5 6 6
2 4 5 6                  1 2 3 6
2 5            4 6              1 3           2 6
5         2           4          6         1        3           2        6


FILE PROCESSING

FILE PROCESSING

File Processing 
merupakan tindakan untuk memproses suatu file.

PENGERTIAN FILE:
merupakan koleksi data yang terdiri dari record dimana record tersebut kumpulan dari field yang memuat dalam bentuk byte yang didalam byte tersebut kumpulan dari bit. secara garis besar kumpulan dari data".

file terhubung dengan stream dimana stream adalah gabungan dari karakter, semua input dan output data merupakan stream dan dalam bahasa pemrograman C melihat file sebagai stream. Ketika program C dijalankan terdapat 3 macam streams:

1. STANDARD INPUT STREAM
    mengontrol stream input dari keyboard.

2. STANDARD OUTPUT STREAM
    mengontrol stream output dari monitor.

3. STANDARD ERROR STREAM
    mengontrol kegiatan error yang ada.


menggunakan file processing dengan syntax

FILE *fp;
fp = fopen (cosnt char *filename, const char*mode);
fclose(fp);

nilai value yang dapat digunakan:
r = membaca file yang akan dibukar+ /w+ =  baca dan tulis secara bersamaan
a+ =  baca dan mengedit secara bersamaan
w= tulis file / mengedit file.
a= menambah/mengubah isi file

untuk input digunakan:                                                untuk output digunakan:
1.fgetc()                                                                        1. fputc()
2.fgets()                                                                        2. fputs()
3.fscanf()                                                                      3. fprintf()
4.fread()                                                                        4. fwrite()

ada juga feof() adalah untuk mengetahui apa file sudah mencapai bagian akhir dari file.

struck merupakan kumpulan dari bermacam jenis data tipe, adanya struck dapat memudahkan menampilkan data di file.



RECURSIVE

RECURSIVE


Recursive merupakan sebuah fungsi yang memanggil dirinya sendiri ketika digunakan, seperti looping hanya dalam bentuk function dan memakan memory lebih banyak.

berikut contoh menggunakan RECURSIVE dan perbedaanya dengan ITERATIF dalam faktorial:
Factorial - Recursive:
long factor (int n)

{
      if(n==0) return (1);
      else return(n * factor(n-1));
}

Factorial - Iterative


long factor(int n) {
      long i, fac = 1;
      for(i=1; i<=n; i++)  fac *= i;
      return (fac);
}


LIBRARY STRING

LIBRARY <string.h>

Dalam bahasa pemrograman C terdapat library <string.h> yang memiliki beberapa fungsi yang memudahkan dalam mengolah string(kumpulan karakter yang diakhiri \0) seperti berikut ini:

1. strlen();
untuk menghitung panjang dari sebuah string

2. strcmp(s1,s2);
untuk membandingkan nilai dari s1 dan s2 dan jika sama, maka dikembalikan nilai 0.

3. strcat(s1,s2);
untuk menambahkan string s2 ke bagian akhir string s1.

4.strncat(s1,s2,n);
untuk menambahkan n karakter string s2 ke bagian akhir string s1.

5. strcpy(s1,s2);
untuk mengduplikat string s2 ke string s1.

6. strncpy(s1,s2,n);
untuk menduplikat n karakter pertama dari string s2 ke string s1

dan lain lain.

FUNCTION

FUNCTION

FUNCTION
merupakan kumpulan code atau statement yang dapat digunakan berulang sesuai fungsi nya masing masing

Jenis fungsi di bahasa pemrogramam C dibagi menjadi 2:

1. Fungsi yang tidak mengembalikan nilai(void)
2. Fungsi yang mengembalikan nilai(non-void) seperti [int,float,char]

sedangkan parameter merupakan nilai yang diberikan dari int main untuk dijalankan ke function (int, char, float) bersifat opsional, terdapat 2 jenis parameter yaitu by value dan by reference.

1.By value
hanya mengirim nilai dari variable, jika nilai diubah di function maka hanya berubah di function, tetapi nilai di int main tetap sama tidak berubah.

2.By reference
mengirimkan alamat variabel, sehingga bila nilai diubah di function maka nilai di int main juga ikut berubah. perbedaannya dengan memasukan tanda & pada parameternya.

Function yang sudah dibuat akan bekerja apabila dipanggil atau dideklarasikan pada code yang dikerjakan.

A. Contoh function non void:
int maximum (int x, int y){

        int max = x;
        if ( y > max) max = y;
        return max
}

B. Contoh fuction void:
void main () {
      int a,b;
      printf("Input 2 even values : ");
      scanf("%d %d", &a, &b);
      printf("Largest value is : %d\n",maximum(a,b));
}



Sunday, October 21, 2018

POINTER AND ARRAY

POINTER

Merupakan suatu variabel yang menyimpan alamat variabel lain, memiliki penulisan dengan tanda bintang(*) didepan variabel nya.

contoh:

int i, *ptr;
ptr = &i;
Untuk menetapkan nilai baru ke variabel yang ditunjuk oleh pointer:
*ptr = 5;   means i=5.

int i=10, *ptr;
ptr = &i;
atau pointer menyimpan alamat dari variabel i.

POINTER TO POINTER

Merupakan variabel yang menyimpan alamat pointer lain, memiliki penulisan dengan tanda bintang(*) lebih dari pointer yang dituju.

contoh:

int i, *ptr, **ptr_ptr;
ptr = &i;
ptr_ptr = &ptr;

Untuk menetapkan nilai baru i:

*ptr = 5;  maka i=5 ;
**ptr_ptr = 9; maka i=9; or *ptr=9;

int i=15, *ptr, **ptr_ptr;
ptr = &i;
ptr_ptr = &ptr;

atau pntr_pntr menyimpan alamat dari pntr dan pntr menyimpan alamat dari i.

ARRAY

Merupakan Data yang disimpan dalam struktur tertentu untuk diakses sebagai grup atau individual. Beberapa variabel yang disimpan menggunakan nama yang sama dibedakan oleh indeks mereka.dengan penulisan []

Ada dua jenis array:
1.Homogenus
semua variabel memiliki tipe data yang sama

2.Random access
Setiap elemen dapat dijangkau secara individual, tidak harus berurutan

A.Array 1 dimensi

    type array_value [value_dim];

    contoh: int A[10];

* array juga dapat diinisialisasi secara eksplisit tanpa deklarasi nilai dimensi
    contoh: int A[5]={1,2,3,4,5};


B.Array 2 dimensi

   type name_array[row][col];


   contoh: int A[3][4];

                 int A[2][2] = {1, 2, 3, 4 };

*contoh penggunaan array untuk menampilkan kalimat


char name[40];

char ss[20]={‘B’,’I’,’N’,’U’,’S’};  mengandung 20 elements
char ss[ ]= {‘B’,’I’,’N’,’U’,’S’};    mengandung 5 elements






M
M



Friday, October 19, 2018

PERULANGAN / REPETISI (LOOP)

PERULANGAN / REPETISI

Merupakan sebuah intruksi untuk menjalankan suatu fungsi secara berulang Jumlah pengulangan dapat ditentukan sebelumnya atau ditentukan kemudian pada waktu proses. Proses ini sangat membantu untuk melakukan pengulangan agar tidak perlu mengetik kode program yang sama. 

Proses ini umumnya terbagi menjadi 3 jenis : 

1. REPETISI WHILE

repetisi ini diketik dengan susunan :

while (exp) 
{  statement(s); }
*exp :condition
Contoh program dengan repetisi While :
#include<stdio.h>

int main()
{
int number=0;
while(number<10)
{
printf("%d",number);
number++;
}
return 0;
}
Output: 
0123456789

2. REPETISI DO-WHILE

repetisi ini diketik dengan susunan :

do {  statement(s);  } 
while (exp);
*exp :condition.
Contoh program dengan repetisi Do-While :
#include<stdio.h>

int main()
{
int number=0;

do
{
printf("%d",number);
number++;
} while(number<10);
return 0;
}
Output:
0123456789

3. REPETISI FOR

repetisi ini diketik dengan susunan :

for ( exp1; exp2; exp3 ) 
{  statement(s);  }
*exp1 :initialization.
*exp2 :condition.
*exp3 :increment/decrement.

Contoh program dengan repetisi For :
#include<stdio.h>

int main()
{
int number;
for(number=0;number<10;number++)
{
printf("%d",number);
}

return 0;

}
Output:
0123456789