Sebelumnya kita sudah belajar array.
array hanya menyimpan kumpulan data yang memiliki satu tipe yang sama
akan tetapi bagaimana jika kita ingin menyimpan yang tipenya berbeda beda?
caranya menggunakan struct
contoh pemakaian:
struct data{
int id;
char nama[100];
}
jadi diatas kita menyiapkan suatu struktur data yang isinya adalah integer id dan string nama
tapi diatas masih blueprintnya, kita butuh membuat variabelnya.
caranya : data data1;
bisa juga : data data1[100];
tergantung pemakaiannya buat apa
nah sekarang contohnya kita ingin menyimpan data 30 siswa
struct data{
int id;
char nama[100];
}datasiswa[30];
//diatas kita buat global variabel berupa array 30 element karena kita ingin menyimpan data 30 anak
int main(){
int n;
for(n=0;n<30;n++){
scanf ("%d %s",&datasiswa[n].id,datasiswa[n].nama);
}
//diatas kita melakukan penyimpanan sebanyak 30x karena kita mau simpan 30data anak
for(n=0;n<30;n++){
printf("%d %s\n",datasiswa[n].id,datasiswa[n].nama);
}
//diatas kita melakukan print 30 data anak diambil dari struct
MEMORY ALLOCATION
Jika kita coding biasa, semua variabel kita disimpan di stack.
stack akan langsung menghapus data kita seketika prosesnya sudah selesai di eksekusi.
akan tetapi heap beda.
ketika proses slesai, variabel yang ditampung disana tidak langsung dihapus kecuali kita memerintahkan untuk menghapus.
untuk meletakkan variabel kita di heap, kita butuh yang namanya memory allocation
kita mengalokasi address variabel kita ke address yang ada di heap
ada yang namanya : malloc, realloc, free
pada C contoh penggunaannya :
int *hp = (int*)malloc(sizeof(int));
//pada case ini, kita mengambil slot untuk menampung integer pada heap dan hp menampung memori tempat kita akan menyimpan di heap
kemudian kita assign value kita dengan cara biasa seperti poitner biasa
setelah selesai digunakan, kita harus menghapus apa yang sudah kita pakai di heap karena heap tidak otomatis menghapus seperti stack
maka cara penghapusannya :
free (hp);
DUNIA PROGRAMMING
Selasa, 18 Desember 2018
FUNCTION & RECURSION
Kita sebelumnya hanya menulis langsung semua kodingan kita di int main. Tapi bagaimana jika yang kita tulis banyak sekali bahkan bisa sampai ribuan baris?
Pasti akan susah di maintainance karena campur aduk semua.
Nah sekarang kita tidak perlu pusing lagi karena dengan function maka semua akan termodular dengan rapi dengan membagi prosesnya
Pemakaiannya mudah, misal kita ingin membagi proses penjumlahan
int penjumlahan(int a,int b){
int hasil;
hasil = a + b;
return hasil;
}
int main(){
int a=1,b=2;
int hasil = penjumlahan(a,b);
printf("%d", hasil);
}
Jadi pada di int main, fungsi penjumlahan akan mendapatkan parameter value a dan b dan akan dipassing ke fungsi penjumlahan di luar int main.
Fungsi diluar int main akan menerima parameter dan menaruhnya pada variabel
kemudian akan diproses hasil penjumlahannya dan hasilnya akan direturn dan kembali ke int main lagi.
kemudian int hasil di int main akan mendapatkan hasil penjumlahan
dan tinggal di print deh
data type fungsi tergantung dari jenis return.
misal ingin return nilai float maka fungsinya menjadi : float penjumlahan(int a,int b){}
jika tidak ingin return nilai apa-apa cukup ganti data type menjadi void
RECURSION
setelah kita tahu apa itu fungsi maka sekarang tinggal melihat penerapan lainnya
rekursi salah satunya.
pada rekursi, fungsi tersebut memanggil dirinya sendiri.
misalnya kita ingin mengeluarkan nilai factorial
int fact (int x){
if (x==1) return 1;
return x*fact(x-1);
}
misalnya kita ingin factorial 5
fact(5) = 5 * fact(4)
4 * fact(3)
3 * fact(2)
2 * fact(1)
1
jadinya nanti dihitungnya :
5 * 4 * 3 * 2 * 1
hasilnya = 120
FILE PROCESSING
Dalam bahasa C, kita dapat mengakses file
Bagaimana caranya? berikut adalah cara-caranya
Pertama kita perlu memanggil file yang kita ingin akses.
Caranya adalah:
FILE *fp = fopen("sample.txt","r")
Pada contoh diatas, saya membuka file bernama sample.txt dengan metodenya read("r")
metode read diatas dipakai kalau kita ingin hanya membaca file saja.
Jika ingin menulis ulang file atau yang lainnya bisa ganti metodenya
“r” opening
a file to be read.
“w” creating
a file to be written.
“a” opening
a File for data append.
“r+” opening
a File for read/write.
“w+” creating
file for read/write.
“a+” opening
a File for read/append
“rb” opening a File (binary) to be read.
“wb” creating
a file (binary) for write operation.
Nah, kalau sudah dibuka, misal kita ingin membaca input angka yang ada di file, kita tinggal melakukan looping sampai end of file dengan format inputnya membaca angka kemudian menampilkannya kelayar
caranya dapat dilakukan seperti ini:
int input;
while (!feof(fp)){
fscanf(fp,"%d",&input);
printf("%d ",input);
}
Misal isi filenya :
1 2 3 4 5 6
nanti yang keluar di output adalah :
1 2 3 4 5 6
Senin, 17 Desember 2018
SORTING & SEARCHING
SORTING
Dalam pemrograman, sorting ada banyak cara. Akan tetapi, kali ini saya akan menunjukkan 5 jenis sorting saja yang cukup banyak dikenal.
Dari sorting-sorting ini, ada yang caranya basic dan advance.
Basic :
- Bubble sort
- Insertion sort
- Selection sort
Advance :
- Quick sort
- Merge sort
BUBBLE SORT
Caranya sangat mudah, kita hanya perlu membandingkan tiap 2 angka secara berurutan mana yang paling besar kemudian kita meletakkan diujung.
Cara tersebut diulangin sampai semuanya diletakkan dan tidak ada yg diswap lagi
Untuk jumlah pengulangan jika ada 5 angka yang akan diurutkan maka jumlah yang diulang adalah sebanyak 5 - 1 = 4 kali pengulangan.
INSERTION SORT
Caranya seperti bubble, hanya saja ini versi augmentednya.
Ketika membandingkan dua angka, jika angka tersebut ternyata harus di tukar maka dia akan mengecek angka disebelahnya. Terus sampai tidak ada yang perlu diswap atau sudah sampai ujung
}
SELECTION
Caranya mirip juga dengan bubble, hanya saja hal pertama yang dilakukan adalah menyeleksi angka yang paling kecil. Angka yang paling kecil itu kemudian ditukar dengan yang paling kiri dan dikunci.
Kemudian lanjut lagi mencari bilangan terkecil kedua, disusun di sebelah kiri di sebelah bilangan yang dikunci.
Proses tersebut seterusnya dilakukan sampai semua angka telah dikunci
Dalam pemrograman, sorting ada banyak cara. Akan tetapi, kali ini saya akan menunjukkan 5 jenis sorting saja yang cukup banyak dikenal.
Dari sorting-sorting ini, ada yang caranya basic dan advance.
Basic :
- Bubble sort
- Insertion sort
- Selection sort
Advance :
- Quick sort
- Merge sort
BUBBLE SORT
Caranya sangat mudah, kita hanya perlu membandingkan tiap 2 angka secara berurutan mana yang paling besar kemudian kita meletakkan diujung.
Cara tersebut diulangin sampai semuanya diletakkan dan tidak ada yg diswap lagi
Untuk jumlah pengulangan jika ada 5 angka yang akan diurutkan maka jumlah yang diulang adalah sebanyak 5 - 1 = 4 kali pengulangan.
void bubbleSort(int *arr, int n){
int i,j;
for(i = 1; i < n; i++)
for(j = n-1; j >= i; j--)
if(arr[j-1] > arr[j])
swap(&arr[j-1],&arr[j]);
}
INSERTION SORT
Caranya seperti bubble, hanya saja ini versi augmentednya.
Ketika membandingkan dua angka, jika angka tersebut ternyata harus di tukar maka dia akan mengecek angka disebelahnya. Terus sampai tidak ada yang perlu diswap atau sudah sampai ujung
void insertionSort(int *arr, int n){ int i,j,temp; for (i = 1; i < n; i++){ temp = arr[i]; j = i-1; while (j >= 0 && arr[j] > key){ arr[j+1] = arr[j]; j = j-1; } arr[j+1] = temp; } SELECTION
Caranya mirip juga dengan bubble, hanya saja hal pertama yang dilakukan adalah menyeleksi angka yang paling kecil. Angka yang paling kecil itu kemudian ditukar dengan yang paling kiri dan dikunci.
Kemudian lanjut lagi mencari bilangan terkecil kedua, disusun di sebelah kiri di sebelah bilangan yang dikunci.
Proses tersebut seterusnya dilakukan sampai semua angka telah dikunci
void selectionSort(int *arr, int n){ int i,j,idxMin; for (i=0; i<n-1; i++){ idxMin = i; for (j=i+1; j<n; j++){ if (arr[j]<arr[idxMin]) idxMin = j; } swap(&arr[idxMin], &arr[i]); } }
QUICK SORT
Sorting ini merupakan salah satu jenis sorting advance
Untuk menerapkannya membutuhkan rekursi.
Pada sorting ini, dipilih salah satu nomor yang akan
berperan sebagai pivot. (biasanya data yang di tengah)
Semua nilai yang lebih besar dari pivot di geser kanan
Semua nilai yang lebih kecil dari pivot di geser kekiri
Kemudian lakukan hal yang sama pada kumpulan nilai
yang ada di kiri dan yang ada di kanan.
Lakukan terus sampai semuanya terurut.
MERGE SORT
Untuk menerapkannya membutuhkan rekursi.
Pada sorting ini, dipilih salah satu nomor yang akan
berperan sebagai pivot. (biasanya data yang di tengah)
Semua nilai yang lebih besar dari pivot di geser kanan
Semua nilai yang lebih kecil dari pivot di geser kekiri
Kemudian lakukan hal yang sama pada kumpulan nilai
yang ada di kiri dan yang ada di kanan.
Lakukan terus sampai semuanya terurut.
void quickSort(int *arr, int left, int right) {
int i = left, j = right;
int temp;
int pivot = arr[(left + right) / 2]; //diambil data tengahnya
while (i <= j){
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if (left < j)
quickSort(arr, left, j);
if (i < right)
quickSort(arr, i, right);
}
MERGE SORT
Sorting ini sama saja seperti quick sort, sama-sama
memecahkan masalah kecil dulu dengan rekursif.
Jadi kumpulan data dipecah dulu menjadi satu-satu
kemudian tiap 2 data lakukan sorting.
Ketika 2-2 data terurut kemudian gabungkan
menjadi 4 data.
Lakukan sorting pada 4 data tersebut kemudian
setelah selesai, gabungkan lagi menjadi 8 data
Seterusnya dilakukan sampai semua data terurut
Searching ada banyak cara, tapi yang saya akan jelaskan disini hanya 3 cara yaitu:
- Linear search
- Binary search
- Interpolar
LINEAR SEARCH
Pada search jenis ini, sangat simple dipahami hanya saja caranya sangat berguna jika yang dicari datanya berdekatan dengan yang paling pojok.
Misalnya, kumpulan data : 1 2 3 4 5 6 7 8 9 ... 143730292103418
Kemudian yang dicari adalah angka 3
Maka pilihan yang paling efektif adalah linear search
Pada dasarnya linear search mencari satu satu berurutan mulai dari paling kiri/kanan secara searah
BINARY SEARCH
Pada search jenis ini, kita wajib mensorting data kita kemudian kita mencari 3 poin penting dari kumpulan data itu yaitu nilai paling kecil, paling besar, dan nilai tengah.
Kemudian kita menentukan apakah data yang ingin kita cari ada di range nilai data yang kecil - tengah atau tengah-besar.
Ketika kita sudah tahu ada dimana kemudian di range itu kita melakukan hal yang sama yaitu menentukan nilai paling kecil, besar, dan tengah dan menentukan kembali ada di range mana.
Seterusnya dilakukan sampai datanya ketemu.
INTERPOLATION SEARCH
Search jenis ini merupakan pengembangan dari binary search. Nilai tengahnya ditentukan dengan menggunakan rumus.

Jika pada binary search kita menentukan nilai tengah dengan (awal+akhir)/2,
pada interpolation setidaknya nilai tengahnya tidak asal pilih, tapi ada rumusnya.
Walaupun tidak 100% akurat memilih nilai yang diinginkan akan tetapi sangat membantu dalam
pencarian.
Jadi intinya, pada jenis searching ini, metode pencariannya tidak beda jauh dengan binary search, hanya penentuan nilai tengahnya saja yang beda.
---referensi gambar---
geeksforgeeks.com
algolist.net
interviewbit.com
java67.com
miro.medium.com
ppt binus
--------------------------
memecahkan masalah kecil dulu dengan rekursif.
Jadi kumpulan data dipecah dulu menjadi satu-satu
kemudian tiap 2 data lakukan sorting.
Ketika 2-2 data terurut kemudian gabungkan
menjadi 4 data.
Lakukan sorting pada 4 data tersebut kemudian
setelah selesai, gabungkan lagi menjadi 8 data
Seterusnya dilakukan sampai semua data terurut
void merge(int *arr, int start, int mid, int end) {
int temp[end - start + 1];
int i = start, j = mid+1, k = 0;
while(i <= mid && j <= end) {
if(arr[i] <= arr[j]) {
temp[k] = arr[i];
k += 1; i += 1;
}
else {
temp[k] = arr[j];
k += 1; j += 1;
}
}
while(i <= mid) {
temp[k] = arr[i];
k += 1; i += 1;
}
while(j <= end) {
temp[k] = arr[j];
k += 1; j += 1;
}
for(i = start; i <= end; i += 1) {
arr[i] = temp[i - start]
}
}
void mergeSort(int *arr, int start, int end) {
if(start < end) {
int mid = (start + end) / 2;
mergeSort(arr, start, mid);
mergeSort(arr, mid+1, end);
merge(arr, start, mid, end);
}
}
SEARCHINGSearching ada banyak cara, tapi yang saya akan jelaskan disini hanya 3 cara yaitu:
- Linear search
- Binary search
- Interpolar
LINEAR SEARCH
Pada search jenis ini, sangat simple dipahami hanya saja caranya sangat berguna jika yang dicari datanya berdekatan dengan yang paling pojok.
Misalnya, kumpulan data : 1 2 3 4 5 6 7 8 9 ... 143730292103418
Kemudian yang dicari adalah angka 3
Maka pilihan yang paling efektif adalah linear search
Pada dasarnya linear search mencari satu satu berurutan mulai dari paling kiri/kanan secara searah
BINARY SEARCH
Pada search jenis ini, kita wajib mensorting data kita kemudian kita mencari 3 poin penting dari kumpulan data itu yaitu nilai paling kecil, paling besar, dan nilai tengah.
Kemudian kita menentukan apakah data yang ingin kita cari ada di range nilai data yang kecil - tengah atau tengah-besar.
Ketika kita sudah tahu ada dimana kemudian di range itu kita melakukan hal yang sama yaitu menentukan nilai paling kecil, besar, dan tengah dan menentukan kembali ada di range mana.
Seterusnya dilakukan sampai datanya ketemu.
INTERPOLATION SEARCH
Search jenis ini merupakan pengembangan dari binary search. Nilai tengahnya ditentukan dengan menggunakan rumus.
Jika pada binary search kita menentukan nilai tengah dengan (awal+akhir)/2,
pada interpolation setidaknya nilai tengahnya tidak asal pilih, tapi ada rumusnya.
Walaupun tidak 100% akurat memilih nilai yang diinginkan akan tetapi sangat membantu dalam
pencarian.
Jadi intinya, pada jenis searching ini, metode pencariannya tidak beda jauh dengan binary search, hanya penentuan nilai tengahnya saja yang beda.
---referensi gambar---
geeksforgeeks.com
algolist.net
interviewbit.com
java67.com
miro.medium.com
ppt binus
--------------------------
Langganan:
Komentar (Atom)






