Tugas Algo Christopher Alexander // 2201789025

Pertemuan 1.
Definisi Algoritma:
Menurut gw, algoritma itu adalah prosedur untuk mencari kesimpulan dan hal apa saja yang perlu kita lakukan dan order apa yang harus kita lakukan dari sebuah masalah.
Algoritma terdiri dari kata algorism dan ritmis yg di perkenalkan oleh Al-Khowarizmi.
Di programming, algoritma biasanya disebut sebagai cara yang mempunyai struktur step by step untuk menyelesaikan masalah menggunakan computer.
Step yang perlu kita lakukan : Problema à Proses à Solusi
Algoritma à kode awal à kode yg bisa dijalankan.
Definisi problema à membuat model à desain algoritma à tulis code à jalankanà kalau ketemu error bakal balik lagi ke coding yang kita tulis à hasil à dokumentasi

Ada 2 cara untuk membuat algoritma, salah satunya itu kita bisa nulis struktur inggris, atau yang biasanya disebut Pseudocode. Yang satu lagi, kita bisa gambar flow chart.
·         Pseudocode:
-          Bahasa informal yang dapat membantu membuat algoritma.
-          Mirip dengan bahasa inggris sehari-hari
-          Ada keywords yg bisa dipakai untuk kontrol struktur (if, else, print, set, add, while, etc)
Jadi, dari pseudocode ini, kita menyimpulkan operasi komputer jauh lebih sederhana. Input --> Output --> Masukkan Kode --> Menyimpan hasil ke variabel --> Perbandingan --> Pengulangan. 
Contoh dari pseudocode: 

Mulai 
          Nyalakan kalkulator
          Kosongkan hasil apapun
          Lakukan 
                         Masukkan angka
                         Tekan tombol (+)
          Jika semua angka sudah di masukkan
          Print total dari angka tersebut
          Matikkan Kalkulator
Selesai
Cara yang baik buat kita belajar algoritma:
1. Kita harus mempunyai logical flow yg benar untuk nyelesain masalah 
2. Mengeluarkan output yang bener dan efisien
3. Code yang bisa dimengerti dan tidak ambigu
4. Gampang untuk pindah ke bahasa programming
5. Semua jalan ato semua operator di artikan secara benar dan di selesaikan secara benar juga

Structure Theorem
1. Sequence
2. Seleksi
3. Pengulangan 

Sequence: Pengurutan
Seleksi: memilih statement/ command
Pengulangan: statements akan mengulang kalo kondisinya tercukupi

Ada beberapa C standard library functions 
contoh: 
<math.h>  ---- fungsi untuk matematika 
<stdio.h>   --- Input dan output
<stdlib.h> ---- fungsi untuk yg berguna 
<string.h>  --- fungsi untuk string
<time.h>   --- fungsi untuk waktu dan tanggal

Tipe-tipe data:
CHARacter
INTeger
FLOATing point
DOUBLE floating point
VOID
modifiers: 
SIGNED
UNSIGNED
LONG
SHORT


Pertemuan 2
Di pertemuan yg kedua ini gw belajar tentang fungsi. Ada standard library function dan programmer-defined function. 
Ada beberapa output operasi yg bisa kita lakuin. 
contoh nya ada printf(), putchar(), putch(), puts(), etc.
Kalo mau nampilin suatu data di outputnya syntax nya akan jadi printf(const char *format [,argument, ...]);
Output format buat long double adalah ("%lf")
kalo buat unsigned long int ("%lu")
kalo long int ("%ld")
jadi syntax buat ouput : printf, putchar, putch, puts
syntax buat input: scanf, getchar, getch, getche, gets

Pertemuan 3
Operator adalah simbol untuk memproses hasil untuk mencari hasil baru.
Operand adalah bagian yang membuat data jelas, mau dikalikan, ditambahkan, dikurangkan, ato dibagikan.
Operator bisa di sebut ato di masukkan ke dalam klompok:
Assignment Operator
Logical Operator
Arithmetic Operator
Relational Operator
Bitwise Operator
Pointer Operator

Modulo:
- symbolnya: %
- operator binari
- untuk mencari sisa dari pembagian
- N % 2, bisa di pake untuk cari angka ganjil ato genap.

Increment dan Decrement
- symbol: ++ (increment), --(decrement)
- menambahkan dan mengurangkan nilai dari variabel dengan 1
- penempatannya bisa di depan (pre) ataupun di belakang  (post)
N++ // post increment
++N // pre increment
N-- // post increment
--N // pre decrement 
Logical Operator 
Symbol:
&& -- DAN
|| -- ATAU
! -- BUKAN

Pertemuan 4
Selection : IF-ELSE
Syntax: if(boolean expression) statement;
atau if(boolean expression) {
statement 1;
statement 2;
......
}
kalo boolean expressionnya benar, statement yg berada di situ akan di eksekusi
Nested selection terjadi pada saat kata IF muncul lebih dari satu.
syntax:
if(boolean expression) statement1;
if(boolean expression) statement2;
if(boolean expression) statement3;
atau if(boolean expression) statement 1;
else
if(boolean expression) statement 2;
else
if(boolean expression) statement 3;
Selection menggunakan switch-case.
syntax:
switch (expression {
case constant1: statements1; break;
.
.
case constant2: statements 2; break; 
default: statements;
}
?: operator
syntax:
condition ? then-expression : else-expression
contoh :
if(a>b)
        max_value = a;
else  
        max_value = b;
dijadikan:

max_value = (a>b) ? a : b;

ada beberapa macam error
yang pertama ada compile-time error yaitu terjadi karena error di syntax
yg kedua ada link-time error yang artinya sukses di compile, tp terjadi error di link
terjadi karena ga ada objek code di link time
yg ketiga ada run-time error yang artinya sukses compile tapi error pas di jalankan 
logical-error adalah kesalahan dari logical flow atau algoritma nya. 

Pertemuan 5
Repitition : FOR
syntax: for(exp1; exp2; exp3) statement;
atau for(exp; exp2; exp3){
statement1;
statement2;
.....
}
exp1: inisialisasi
exp2 : kondisi
exp 3: increment ato decrement
Ada 2 tipe looping, pertama ada Infinite Loop yg artinya looping terus nonstop dan tanpa henti, biasanya buat berhentiin looping ini, pake break. 
Yang kedua ada Nested loop yg artinya didalam looping ada looping lagi. 
Repitition : WHILE
syntax:
while(exp) statements;
atau
while(exp) {
statement 1; 
statement 2;
....
}
exp adalah ekspresi boolean. hasil yg diperoleh itu adalah TRUE bukan 0 atau FALSE.
statement akan di eksekusi ketika exp tidak sesuai dengan 0
evaluasi exp terjadi sebelum statement di eksekusi

Repitition : DO-WHILE
syntax: 
do{
      <statements>;
} while (exp);
akan terus dieksekusi ketika exp adalah benar
evaluasi exp selesai sehabis mengeksekusi statement tersebut.

BREAK VS CONTINUE
Biasanya kita pakai break untuk mensudahi looping.
kalo continue, kita skip smua sisa statement yg masih ada didalem repetition, dan lanjut secara normal ke looping berikutnya. 


Pertemuan 6
Pointers dan Arrays
Pointer adalah variabel yang menaruh alamat dari variabel lain
syntax:
<type> *ptr_name;
Ada 2 operator yg biasanya kita pake di pointer : *(content of) dan &(address of)
Contoh:
inisial pointer integer ke variabel data:
int i, *ptr;
ptr = &i;

Pointer to Pointer adalah variabel yang menyimpan alamat dari variabel lain
contoh syntax: 
<type> **ptr_ptr;

Array Satu dimensi
syntax:
type array_value[value_dim];
contoh: int A[10];
definisi dari array terdiri dari 4 komponen, pertama ada tipe data yg spesifik, lalu ada identifier yg artinya nama dari array, abis itu ada index operator ([]) lalu ada dimensional value inside operator, yang artinya nilai yg ada didalem operator '[ ]'.

Cara inisialisasi array: 
contoh: int b[ ] = {1, 2, -4, 8};
array b mempunyai 4 elemen
b[0] = 1
b[1] = 2
b[2] = -4
b[3] = 8
array hanya bisa di inisialisasi di awal.
mengakses array dengan pointer 
int arr[10];
int *ptr_arr;
ptr_arr = arr;
untuk mengakses elemen tertentu bisa dicoba pake:
ptr_arr[i];
arr[i];
*(ptr_arr+i);
*(arr+i);
ptr_arr = ptr_arr + il *ptr_arr;

String
String adalah array of characters yg berakhir dengan null character ('\0')
atau kalo di ascii hasilnya adalah 0
String constant atau String literal adalah beberapa karakter yg di tulis ditengah-tengah double quote.

Manipulasi String
string bisa di manipulasi dengan berbagai fungsi :
- strlen()
mengembalikan nilai dari string length;
- strcpy(s1,s2)
menyalin s2 ke s1
- strncpy(s1,s2,n)
nyalin pertama dan karakter dari s2 ke s1
- strcat(s1,s2)
menambahkan string s2 ke akhir string s1
- strncat(s1, s2,n) 
menambahkan n karakter dari string s2 ke akhir dari string s1
- strcmp(s1,s2)
membandingkan nilai dari string 1 dan s2, kalo mirip return 0.

Pertemuan 7

Di pertemuan ini, gw cuma mengulang materi materi yang udah pernah belajar sebelumnya. jadi kita skip saja ke materi selanjutnya. 

Pertemuan 8
Fungsi dan Rekursi

Penggunaan dan manfaat menggunakan modules:
1. Program yg besar bisa dibagi menjadi modul yg lebih kecil
2. Bisa dilakukan lebih dari 1 programmer
3. Lebih gampang untuk mencari error, dan logical flow nya cukup mudah. 
4. Modifikasi bisa di lakukan tanpa harus mempengaruhi seluruh coding.
5. Lebih gampang untuk di dokumentasikan. 

Bahasa C menaruh modular programming sbagai fungsi
Main program bisa dibagi ke subprogram, nah subprogram itu pun bisa di bagi lagi menjadi subprogram dari subprogram awal.

Cara terbaik biar kita bisa belajar module di programming ya kita harus banyak coba pake, atau istilahnya High Fan-In, Low Fan-out, untuk lebih spesifik terhadap fungsional dan kerjaan yg kecil. Atau bisa jg dengan Self-Contained yg artinya self resource sufficient.


Fungsi di bahasa C terbagi jadi 2:
Yang pertama itu ada Library Function
yg kedua ada User-defined function. 
Library function adalah fungsi standar yang di sediakan oleh C compiler. function ini biasa dipakai untuk header. Berbeda dengan User-Defined Function, kita membuat sebuah fungsi sendiri. 

Ada 2 tipe identifier.
pertama Local Identifier
ini biasanya untuk declare di fungsi termasuk parameternya.
kalo Global Identifier di declare diluar dari fungsi mana pun dan ditaruh dipaling atas fungsi di C programming. Bisa di ambil dari mana pun, global identifier bisa di di declare ulang di subprogram.
Recursive adalah fungsi yg memanggil dirinya sendiri.
recursi mempunyai 2 komponen, yg pertama ada Base Case: return nilai (constant) tanpa manggil rekursi berikutnya.
yang kedua ada Reduction Step: urutan dari input menemui meeting point di base case.

Pertemuan 9 
Structures and Unions & Memory Allocation

Structure adalah tipe data untuk menyetor sekumpulan data dengan tipe data yg bervariasi.
Kalo di bahasa lain, structure biasanya di sebut sebagai record.

contoh syntax:
struct name_structure {
dataType1 name_field1;
dataType2 name_field2;
..
};
Nested Structure adalah struktur dengan salah satu dari element yg dari struktur lainnya.
struktur sebagai member harus di declare terlebih dahulu.
Tipe Data struktur cuma bisa menampung satu record. 
Union dipakai untuk memory join. kalo pake union, lokasi dari memori bisa di tugaskan untuk 2 ato lebih dengan tipe data yg berbeda. Kapasitas memori yang dipakai oleh union itu adalah yang paling besar.

Enumeration adalah tipe data dengan sejumlah data yang sudah ada dari sananya. 
Cara mendeklarasikannya bisa :
enum name_type{
const1, const2, ... const_n
}name_var;

Keyword static bisa di gunakan sebagai tipe variabel, atau return nilai dari fungsi dari tipe.
contoh syntax:
static type variable_name;

Pertemuan 10
File Processing

Files and Streams
Stream itu untuk menyimpan data dari keyboard yang butuh di save di storage kedua kita sebagai file data. Stream adalah urutan dari sebuah karakter. Semua input dan ouput data itu adalah stream. 

Ketika program C dijalankan, ada 3 stream standar yg diaktifasi, yang pertama ada standard input stream, yg mengkontrol input stream dari keyboard, kedua ada standard output stream, yang mengkontrol output stream ke monitor. terakhir ada standard error stream, mengkontrol error di messaging.
Standard input stream -- stdin
Standard output stream -- stdout
Standard error stream -- stderr

TEXT FILE di simpan sebagai text format ato ASCII file.
ukuran dari storage nya tergantung dari data.
Buffer Area adalah bagian dari memori dipake untuk temporari space sebelum di datanya dipindahkan ke file. contoh syntax nya : FILE *fp;
kalo mau buka File nya pake : FILE *fopen(const char *filename, const char *mode);
fopen() sudah tercatat di <stdio.h>
fopen() mengembalikan pointer ke start nya buffer area. kalo misalnya tidak terbuka, akan terbaca NULL.
Cara buka file 
Mode:                        Deskripsi
"r"                              membuka file untuk dibaca
"w"                            membuat file untuk ditulis
 "a"                           membuka file untuk data append
"r+"                           membuka file untuk baca dan tulis
"w+"                          membuat file untuk baca dan tulis
"a+"                          membuka file untuk baca/ append
"rb"                           membuka file binari untuk di baca
"wb"                          membuat file binari untuk tulis operasi

kalo mau tutup File gunakan fclose();
int fclose (FILE *stream);
fclose() sudah tercatat di <stdio.h>
fclose() akan return 0 kalo sukses, dan EOF(end of file) kalo error.
fclose() akan release buffer area dan langsung kirim ke sisa data ke file

Pertemuan 11
Sorting & Searching 
Sorting algoritma.
1. Internal Sorting
semua data harus di sort dan di load ke RAM
2. External Sorting 
process sorting pake storage kedua

Bubble Sort 
Membandingkan 2 nilai yg bersebelahan.
sehabis di banding, di tuker kalo memenuhi kondisi.
kata lain dari Bubble sort adalah exchange sort.

Selection Sort
algoritma: for(i=0;i<N;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]
}

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

Quick Sort
algoritma:void Quicksort(int left, int right)
{
if(left<right {
arrange elements r[left, ... , r[right] that produce new sequence:
r[left],..., r[j-1]< r[J+1],.., r[right]> r[J].
Quicksort (left, J-1);
Quicksort ( J+1, right);

Merge Sort 
Divide and conquer adalah kata" untuk mendeskripsikan merge sort. 
Divide input data jadi 2 disjoin subsets
cari solusi sub problems yang berkaitan dengan subsets
conquer: menggabungkan semua solusi untuk setiap subset untuk menjadi solusi 

Searching adalah aksi untuk mengambil informasi berdasarkan dari key yang menyimpan sedikit informasi.
Key dipakai untuk record searching yang diinginkan dari data of set
harus unik, yang dimaksudkan adalah tidak boleh ada key yang sama di dalam data.

Linear Search
Binary Search
Interpolation Search

Linear Search membandingkan setiap element dari array dengan search key.
dikarenakan array tidak berurutan, maka nilai tersebut bisa jadi ditemukan di element pertama seperti yang terakhir.

Binary Search bekerja untuk hal kecil dan hal yang tidak tersortir. tapi untuk array yang besar, ini sangat tidak efisien. 

Interpolation Search hampir mirip dengan binary search, searching teknik ini dilakukan dengan kemungkinan lokasi dari data tersebut. 

Sorting type ada 2 
yaitu Ascending dan Descending.



2201789025 // Christopher Alexander 

Comments