Tuesday, December 4, 2018

Structure and Union & Memory Allocation

Structure

Structure adalah tipe data untuk menyetor sekumpulan data dengan variasi tipe data yang berbeda. Komponen struktur dinamakan member/field/element. Struktur bersifat Heterogeneous, yang artinya mempunyai variasi tipe data. Struktur bisa juga disebut Record.

Nested Structure

Nested Structure adalah sebuah struktur yang mempunyai struktur lainnya sebagai salah satu elementnya. Struktur sebagai element harus dideklarasikan secara lebih lanjut.


Syntax:
struct struct_name variable = {value_1, …, value_m};


Array of Structure

Struktur data hanya bisa memuat satu record/struktur. Masalah terkadang membutuhkan sekelompok records. Bila dipraktekkan, struktur biasanya digunakan di dalam array.


struct Dob{
   int date, month, year;
};
  struct Account {
  int accountNo;
     char accountType;
  char name[31];
  long credit;
  struct Dob lastTrans;
};
//Array of structure
struct Account customer[100];


Typedef

typedef adalah sebuah alias digunakan untuk singkatan, khususnya untuk identifier yang panjang. typedef umumnya digunakan dalam struktur.


•Contoh:
typedef struct BinusStudent{
      char name[20];
      int  nim;
      float gpa;

}Mhs;

Mhs merupakan alias dari struktur nama BinusStudent dan berfungsi sebagai tipe data baru.

Union

Union digunakan untuk memory gabungan. Dengan menggunakan union, sebuah lokasi memory dapat ditugaskan untuk dua atau lebih variabel dengan tipe data yang berbeda. Kapasitas memory yang digunakan Union merupakan yang terbesar digunakan dari semua element dari Union.



Function and Recursion

Halo semua, balik lagi dengan saya nih ^^. Hari ini saya akan membicarakan tentang yang namanya Function dan Recursion

Dalam Modular Programming, program dibagi menjadi beberapa modul. Modul di bahasa C diterapkan menggunakan fungsi. Fungsi dibentuk dari mengelompokan beberapa pernyataan menggunakan fungsi. Modul dibutuhkan ketika beberapa pernyataan sering digunakan oleh codingan yang lain di program, yang dinamakan Sub-Program.

Fungsi dalam C dibedakan menjadi 2, yaitu:
a. Library Function.

Merupakan fungsi standar yang disediakan oleh bahasa C. Fungsi tersebut ditulis di bagian atas file (.h)
Contoh : strlen() di string,h, printf di stdio.h, sqrt() di math.h

b. User-defined Function

Merupakan self-defined function.


* Membuat Fungsi
 
 return-value-type  function-name( parameter-list )
 {
   statements;
 }
return-value-type:  nilai tipe data dikembalikan
•Jika tidak diisi, maka tipe data default akan digunakan (default integer)
•Jika return-value-type adalah void, maka nilai tidak akan dikembalikan oleh fungsi
Parameter-list: daftar nilai yang dikirim oleh funtion inisiator (user)

Fungsi di C biasanya ditulis diatas coding utama. Kalau tidak, kita harus menggunakan Function Prototype. Tujuan Function Prototype adalah untuk memastikan sebuah fungsi diketahui oleh si initiator.


Passing Parameter

Jika sebuah modul tidak mencukupi data/nilai, maka akan dijalankan menggunakan parameter. Ada 2 parameter, yaitu:
a. By-Value, mengirimkan kepada modul lain dari nilainya.
b. By-Location, mengirimkan kepada modul lain dari alamatnya.

Recursive

Recursive adalah sebuah fungsi didalam sebuah fungsi yang memanggil dirinya sendiri. Fungsi recursive cocok untuk masalah recursive.
Contoh:
 n! = 1, for n = 0;
 n! = n * (n-1)!, for n > 0
 4! = 4 * 3!
 3! = 3 * 2!
 2! = 2 * 1!
 1! =  1* 0!
 0! =  1
 Trace back : 4! = 1*2*3*4 = 24

Fungsi recursive mempunyai 2 komponen:
a. Base case
return value(konstan) tanpa memanggil rekursif selanjutnya.

b. Reduction step
sekuensi dari nilai input mengubah dari base case.

Wednesday, October 17, 2018

Pointers and Arrays


1. Pointer

  Apa itu Pointers? Pointers adalah sebuah variabel yang menyimpan alamat dari variabel yang lain.

Syntax Pointer:

<type> *ptr_name;


Minimal digunakan dua operator dalam Pointer : *(Pointer) dan &(Alamat)
Contoh:


Inisialisasi sebuah integer dalam bentuk data variabel:
int i, *ptr;
ptr = &i;
Untuk menentukan nilai baru untuk variabel yang ditunjuk Pointer:
*ptr = 5;  /* means i=5 */


Konsep Pointer :





  • Pointer to Pointer. "Pointer to Pointer" merupakan sebuah variabel yang menyimpan alamat sebuah pointer yang lain.
  • Syntax:

<type> **ptr_ptr ;

Contoh :
  int i, *ptr, **ptr_ptr;
  ptr = &i;
  ptr_ptr = &ptr;
  Untuk menentukan nilai baru untuk i:
  *ptr = 5;  // means i=5 ;
  **ptr_ptr = 9;   // means i=9; or *ptr=9;

Pointer to Pointer





2. Array
  • Array adalah sekumpulan data yang disimpan di dalam struktur tertentu untuk diakses sebagai sebuah grup atau individual. Sebagian variabel disimpan dengan nama yang sama dengan cara membedakan index mereka.
  • Karakteristik array ialah
         - Homogenus
            Semua element mempunyai tipe data yang sama.
         - Random Access
            Setiap element dapat digunakan secara individual, tidak harus dalam urutan.




  • Syntax:

type array_value [value_dim];

Example:

int A[10];

Definisi tersebut mengandung 4 komponent:
- Tipe spesific
- Identifier (Nama Array)
- Operator Index([])
- Nilai Dimensi di dalam operator [ ]

Contoh Array 1 Dimensi:

- Element sebuah Array dimulai dari 0.


  • Array dapat diinisialisasikan dengan jelas tanpa nilai dimensi.
Contoh : 

int B[ ]={1, 2, -4, 8};
     Array B has 4 elements






  int B[8]={1, 2, -4, 8};



Accesing Array

Ada 2 cara untuk mengakses sebuah element i=2;
*(A+2) or A[2]

A sebanding dengan &A[0] atau pointer kepada element pertama dari sebuah array

Untuk menunjukkan A[2] di layar:
printf(“%d”,A[2]) or
  printf(“%d\n”,*(A+2));

Assigning Values
Menentukan nilai sebuah element
Contoh :A[6] = 15;  A[3] = 27;

• Pernyataan A[2] = A[3] - A[6], hasilnya:

Pointer Constant dan Pointer Variabel
  • Pointer Constant adalah pointer yang dapat ditugaskan dengan nilai yang baru pada saat dijalankan.
  • Pointer Variabel adalah pointer yang tidak dapat ditugaskan dengan nilai yang baru pada saat dijalankan.

Accesing Array

Mengakses array dengan pointer :
int arr[10];
  int *ptr_arr;

  ptr_arr = arr; //or ptr_arr = &arr[0];

Untuk mengakses element tertentu dapat menggunakan :
ptr_arr[i];
  arr[i];
  *(ptr_arr + i);
  *(arr + i);
  ptr_arr = ptr_arr + i; *ptr_arr; 



One Dimensional Array

C compiler tidak membataskan jumlah dimensi yang dapat dibuat. Memori PC kita yang membatasi.


Two Dimensional Array
Syntax 2D Array:
  type name_array[row][col];
Contoh:
 int a[3][4];




Inisialisasi
dengan rmo (row major order)
Contoh :
:int b[2][2] = {1, 2, 3, 4 };
•int b[2][2] = { { 1, 2 }, { 3, 4 } };
•int b[2][2] = { { 1 }, { 3, 4 } };
•int x[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
•int x[3][4] = { {1, 2, 3, 4},
     {5, 6, 7, 8},
     {9, 10, 11, 12}
   };


Three Dimensional Array
•Syntax 3D Array :
  type name_array[row][col][depth];
• Contoh :
  int x[3][2][4] = {{{1,2,3,4}, {5,6,7,8}},
                          {{11,12,13,14}, {15,16,17,18}},
                          {{21,22,23,24}, {25,26,27,28}}
       };  
   void main() {
     int x[4][3][5] = {{{1, 2, 3}, {0, 4, 3, 4}, {1, 2}},
     {{9, 7, 5}, {5, 7, 2}, {9}},       
     {{3, 3, 5}, {2, 8, 9, 9}, {1, 2, 1}},
     {{0}, {1}, {0, 1, 9}}
    };
     printf(“%5d”, x[2][1][3]);
  } 


Array of Pointer
•Sebuah array dengan satu atau lebih pointer
Syntax :
    type *array_name [value_dim];
• Contoh :
  int i;
  int *ptr[4];
  int x=1, y=2,  z=3, w=5;
  ptr[0]=&x, ptr[1]=&y; ptr[2]=&z;  ptr[3]=&w;
  for(i=0;i<4;i++) printf("%d ",*ptr[i]);



String

String adalah sebuah kumpulan karakter yang diakhiri dengan null karakter('\0' atau di ASCII=0)
String konstant atau String Literal adalah sejumlah karakter diantara double quote.
- Contoh : "Welcome to Binus"

String konstant dapat dihubungkan pada compile-time:
"Hello" "World"
sama dengan
"Hello, World"

String sebagai tipe data tidak dikenal di C


Manipulasi String
•Di Standard Library Function (header file string.h) menyediakan fungsi untuk memanipulasi string
strlen()
  Menginput panjang string kecuali null char
strcpy(s1,s2)
  Mengcopy string2 ke string1
strncpy(s1,s2,n)
  Mengcopy n kata dari string 2 ke string 1
strcat(s1,s2)
  Menambah string2 diakhir string1
strncat(s1,s2,n)
 Menambah n kata dari string2 diakhir string1
strcmp(s1,s2)
  Membandingkan nilai string1 dan string2, jika sama balik ke 0

–etc.


Program Control : Repitition

           Repitition... Pernakah kalian dengar kata itu? Mungkin kata looping lebih familiar? Repitition dan looping adalah hal yang sama. Tapi sebenarnya apa itu repitition? Repitition atau Looping adalah satu atau lebih perintah yang diulang sebanyak jumlah yang telah ditentukan. Jumlah looping dapat ditentukan sebelum ataupun sesudah membuat perintah.

Apa saja operasi dalam looping? Ada for, while dan do-while.

1. For

Operasi syntax "for" adalah:

for(exp1; exp2; exp3) pernyataan;
atau:
for(exp1; exp2; exp3){
  pernyataan1;
  pernyataan2;
  …….
 }
exp1 :  inisialisasi
exp2 :  kondisi/syarat
exp3 :  kenaikan atau penurunan
exp1, exp2 dan exp3 dapat diubah

- exp1 dan exp2 dapat mengandung sejumlah pernyataan yang dapat dipisahkan menggunakan koma.

Contohnya:
void reverse(char ss[])
{
int c,i,j
for(i=0, j=strlen(ss)-1; i<j; i++, j--){
c=ss[i];
ss[i]=ss[j];
ss[j]=c;
    }
}

Flow chart untuk pernyataan For:




  • Dalam "For" ada yang dinamakan Infinite Loop. Infinite Loop adalah Loop dengan kondisi yang tak terhenti menggunakan "for-loop" dengan menghilangkan semua pernyataan (exp1, exp2, exp3). Untuk menghentikan Loop ini dapat menggunakan break.
  • Ada juga yang namanya "Nested Loop". Nested Loop adalah sebuah Loop didalam Loop. Pengulangan akan dilakukan dari loop yang didalam.
Contoh Nested Loop:


   for (int x=1;x<=5;x++)
        for (int y=5; y>=1; y--)
             printf(”%d %d ”,x,y);
   
2. While

Operasi Syntax "While" adalah:
while (exp) pernyataan;
or:
while(exp){
  pernyataan1;
  pernyataan2;
   …..
}

Contoh While:
int counter = 1;
while ( counter <= 10 ) {
     printf( "%d\n", counter );
     ++counter;
}

Flow Chart dari "While":

  • exp-nya merupakan sebuah expresi Boolean. Expresi itu akan menghasilkan True (Tidak Nol) atau False (Nol).
  • Pernyataan akan dijalankan ketika exp tidak sama dengan Nol (True).
  • Evaluasi exp selesai sebelum pernyataan dijalankan.
Contohnya :

while(product <= 1000) product = 2*product;









3. DO-While

Operasi Syntax dari "Do-While"
do{
    < pernyataan >;
} while(exp);


Pernyataan akan terus dijalankan ketika exp "True"
Evaluasi exp selesai ketika menjalankan element.


Flow Chart "Do-While"

Contoh :

do{
     printf(”%d\n”,counter);
} while(++counter <=10);

Dalam Looping, juga dikenal Break dan Continue.

a. Break

- Fungsi Break yaitu untuk mengakhiri suatu loop

b. Continue

- Fungsi Continue yaitu untuk melewatkan semua sisa pernyataan sebuah operasi di dalam looping, dan melanjutkan secara normal untuk loop selanjutnya.

Contoh Break dan Continue :

a. Continue
-#include <stdio.h>
int main() {
        int x;
        for(x=1; x<=10; x++) {
      if (x == 5) continue;
       printf("%d ", x);
        }
        return 0;
}
Output : 1 2 3 4 6 7 8 9 10

     b. Break
#include <stdio.h>
int main() {
        int x;
        for(x=1; x<=10; x++) {
      if (x == 5) break;
       printf("%d ", x);
        }
        return 0;
}
Output : 1 2 3 4