Algorithm Progamming
Algorithm Progamming
repetition
salah satu bahasa C++ yang biasa di gunakan untuk perulangan, terdiri dari for, while, do-while,repetition operation dan break&continue berikut di bawah adalah contoh syntaxnya:
syntax :
for (exp1;exp2;exp3) statement
or :
for(exp1;exp2;exp3) {
statement1;
statement2;
................
}
exp1 : inisialisasi
exp2 : conditional
exp3 : increment or decrement
contohnya :
for(x=1; x<=10; x++)
printf("%d\n", x);
Repetition : FOR
#include<stdio.h>
int main(){
int x;
for(x=1; x<= 10; x++)
printf("%d\n", x);
return (0);
}
lalu kalo infinite loop di hentikan oleh "break" , lalu nested loop repetition operation akan mulai dari loop dari dalam.
lalu loop nya yang saya pelajari pada hari itu adalah for, while dan do while . repetition kondisi dimana satu atau intruksi lainnya di ulang berkali kali atau dalam waktu tertentu
Pointer Arrays
pointer adalah variabel yang memanggil variabel lain menggunakan tanda * untuk menunjuk data yang ingin di tunjuk, sedangkan array adalah simpanan data
contohnya adalah :
#include <stdio.h>
void main()
{
int i;
int list_int[10];
for (i=0; i<10; i++){
list_int[i] = i + 1;
printf( "list_int[%d] init with %d.\n", i, list_int[i]);
array itu ada 1 dimensi,2 dimensi dan 3 dimensi, 1 dimensi itu misalkan kayak cuman misalkan urutan 1 2 3 4 5 urutannya mulai dari 0 1 2 3 4 kalau array 2 dimensi itu menurut saya kalau saya melihat yang di ajarkan di kelas besar, seperti kordinat, matriks biasa array ini di gunakan untuk program program aplikasi matriks
contoh :
/* Printing out array 2-D */
#include <stdio.h>
void main() {
int two_dim[3][5] = {1, 2, 3, 4, 5,
10, 20, 30, 40, 50,
100, 200, 300, 400, 500};
int i, j;
for (i=0; i<3; i++){
for (j=0; j<5; j++) printf("%6d", two_dim[i][j]);
printf("\n");
}
}
Function & Recursion
Function
function adalah statement grouping yang di lakukan untuk melakukan tujuan tujuan tersendiri dan tertentu,
modul di butuhkan untuk menjalankan suatu function tertentu maka di namakan sub-program
ringkasnya, main program terdiri dari sub-program sub-program yang akan nantinya di satukan untuk menjalani main program
Library vs user-defined function
library function yang biasa di tulis di header memiliki fungsi fungsi tertentu misalkan #include<math.h> yang mengijinkan kita untuk memakai fungsi artimatika seperti pow(x,y) dan sqrt, contoh lainnya string.h kita bisa memakai strlen, strcpy, strcmp dan banyak lain contohnya windows.h untuk memakai system("pause") , system("cls") dan sebagainya.
identifier scoping
local identifier di deklarasikan dalam function termasuk parameternya, sedangkan global identifier di deklarasikan di luar function manapun dan di atas semua function di program C, global identifier bisa di deklarasikan ulang juga di subprogram, biasanya saya memakai global identifier untuk index contoh int x = 0 lalu function bawahnya p[x].namadata , guna untuk menampung indeksnya.
Recursive
function yang memanggil function tertentu yang memanggil dirinya sendiri, contoh programnya misalkan program factorial menggunakan recursive
#include<stdio.h>
int faktorial(int x){
if(x<0)
return 0;
else if(x==0)
return 1;
else if(x==1)
return 1;
else
return x*faktorial(x-1);
}
int main(){
int angka;
scanf("%d", &angka);
printf("%d\n", faktorial(angka));
Structure and unions & memory allocation
structure adalah data yang menyimpan sekelompok data dari tipe data, komponen struktur bisa di sebut
member/field/element
syntax :
struct name_structure {
dataType1 name_field1;
dataType2 name_field2;
…
};
jadi dalam struct itu, dia menyimpan berbagai jenis data misalkan nama, nim, tanggal, dll tergantung
data apa yang mau di input/di simpan
local structture :
# include <stdio.h>
# include <math.h>
void main() {
struct {
int x, y;
} tA, tB;
float dist;
printf(“A position: \n ");
printf(“x and y position? ");
scanf("%d %d", &tA.x, &tA.y);
printf("\nB position : \n ");
printf(“x and y position? ");
scanf("%d %d", &tB.x, &tB.y);
dist = sqrt(pow((tA.x - tB.x), 2) +
pow((tA.y - tB.y), 2));
printf("\nDistance between A and B = %.2f unit", dist);
}
# include <stdio.h>
# include <string.h>
struct tmhs {
char nim[9];
char name[26];
float gpa;
};
biasanya di tambahkan index seperti tambahan p[100] dan int x=0; yang biasa di gunakan untuk
meneruskan data tersebut jadi penulisannya adalah p[x].nim dan p[x].name, x sebagai index dan p[100] di gunakan untuk menampung banyak data tersebut yang di input
typedef, di gunakan untuk nama singkat yang identifiernya yang panjang
contoh :
typedef struct BinusStudent{
char name[20];
int nim;
float gpa;
}Mhs;
bitfield, struct dengan elemen yang di tugaskan dengan angka bit tertentu
syntax :
struct name{
type field1: numberof_bit;
…...
};
union, di gunakan untuk sambungan memori, dengan menggunakan union lokasi memori bisa di tanamkan untuk 2 variabel atau lebih dengan tipe data yang berbeda
syntax :
union name_union{
typedata1 name_var1 ;
typedata2 name_var2;
……
} name_var_union;
enumeration, tipe data yang terdiri dari sejumlah data, jumlah data yang terbatas ini di namakan untuk program yang bisa di baca
File Processing
file & stream
untuk menyimpan data dari keyboard yang di perlukan untuk di simpan dalam storage device sebagai back-up data file
stream adalah sequence dari karakter , input dan output data adalah stream, C melihat file sebagai stream
membuka file dan memerintah pointer untuk kembali ke inisiator , pointer menunjuk ke data struktur dengan FILE type yang terletak di stdio.h
text file di simpan dalam format text atau dalam file ascii , sedangkan binary file menyimpan data data numerik dalam format line dengan micro-processoor format
Buffer Area
bagian dari memori yang di gunakan sebagai tempat sementara sebelum data di pindahkan ke file sebenarnya , syntax : FILE *fp
fp yang menunjuk ke area buffer dan juga di kenal sebagai pointer stream
Open File
sedangkan untuk open file kita menggunakan FILE *open, begitu juga dengan read, bedanya kalau read di ganti kutipnya jadi "r"
contoh :
FILE *write = fopen("book2.txt","r");
maka akan aku tampilkan tabel untuk melengkapinya :
Mode Description
“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.
Close File
internal sorting, semua data di urutkan dan di simpan dalam RAM sedangkan eksternal sorting, process yang sorting menggunakan storage penyimpanan kedua
sorting di bagi bagi menjadi berbagai macam, kalau sorting simple , bubble sort, selection, insertion, kalau intermediate yakni quick sort sama merge sort
bubble sort : membandingkan data yang bersebelahan dan di swap(jika memenuhi syarat)
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]);
}
quick sort : ambil data yang berfungsi sebagai patokan, pisahin jadi 2 bagian, sebelah kiri lebih kecil dari patokan dan sebelah kanan lebih besar dari patokan lalu di bandingkan kemudian di urutkan kedua bagian tersebut sehingga berurutan
void QuickSort(int left, int right)
repetition
salah satu bahasa C++ yang biasa di gunakan untuk perulangan, terdiri dari for, while, do-while,repetition operation dan break&continue berikut di bawah adalah contoh syntaxnya:
syntax :
for (exp1;exp2;exp3) statement
or :
for(exp1;exp2;exp3) {
statement1;
statement2;
................
}
exp1 : inisialisasi
exp2 : conditional
exp3 : increment or decrement
contohnya :
for(x=1; x<=10; x++)
printf("%d\n", x);
Repetition : FOR
#include<stdio.h>
int main(){
int x;
for(x=1; x<= 10; x++)
printf("%d\n", x);
return (0);
}
lalu kalo infinite loop di hentikan oleh "break" , lalu nested loop repetition operation akan mulai dari loop dari dalam.
lalu loop nya yang saya pelajari pada hari itu adalah for, while dan do while . repetition kondisi dimana satu atau intruksi lainnya di ulang berkali kali atau dalam waktu tertentu
Pointer Arrays
pointer adalah variabel yang memanggil variabel lain menggunakan tanda * untuk menunjuk data yang ingin di tunjuk, sedangkan array adalah simpanan data
contohnya adalah :
#include <stdio.h>
void main()
{
int i;
int list_int[10];
for (i=0; i<10; i++){
list_int[i] = i + 1;
printf( "list_int[%d] init with %d.\n", i, list_int[i]);
}
array itu ada 1 dimensi,2 dimensi dan 3 dimensi, 1 dimensi itu misalkan kayak cuman misalkan urutan 1 2 3 4 5 urutannya mulai dari 0 1 2 3 4 kalau array 2 dimensi itu menurut saya kalau saya melihat yang di ajarkan di kelas besar, seperti kordinat, matriks biasa array ini di gunakan untuk program program aplikasi matriks
contoh :
/* Printing out array 2-D */
#include <stdio.h>
void main() {
int two_dim[3][5] = {1, 2, 3, 4, 5,
10, 20, 30, 40, 50,
100, 200, 300, 400, 500};
int i, j;
for (i=0; i<3; i++){
for (j=0; j<5; j++) printf("%6d", two_dim[i][j]);
printf("\n");
}
}
kalau array 3 dimensi :
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]);
}
string, array character yang berakhiran dengan null character, string constant atau string literal adalah character yang di tulis di antara double quote contohnya
"hai aku mahasiswa binus", string constant bisa di jadikan menjadi array of character, dalam kasus string librarynya adalah string.h jadi kita bisa menggunakan strlen,strcpy,strncpy, strcat, strncat , dan strcmp sesuai tujuan program kita apa.
strlen untuk menghitung panjang string
strcpy(s1,s2) untuk meng-copy
strncpy(s1,s2) untuk meng-copy karakter n pertama dari s2 ke s1
strcat(s1,s2) menambah string s2 di akhir dari string s1
strncat(s1,s2) menambah karakter n dari string s2 ke akhir string s1
strcmp(s1,s2) untuk membandingkan s1 dan s2 jika sama maka akan kembali ke 0
Function & Recursion
Function
function adalah statement grouping yang di lakukan untuk melakukan tujuan tujuan tersendiri dan tertentu,
modul di butuhkan untuk menjalankan suatu function tertentu maka di namakan sub-program
ringkasnya, main program terdiri dari sub-program sub-program yang akan nantinya di satukan untuk menjalani main program
Library vs user-defined function
library function yang biasa di tulis di header memiliki fungsi fungsi tertentu misalkan #include<math.h> yang mengijinkan kita untuk memakai fungsi artimatika seperti pow(x,y) dan sqrt, contoh lainnya string.h kita bisa memakai strlen, strcpy, strcmp dan banyak lain contohnya windows.h untuk memakai system("pause") , system("cls") dan sebagainya.
identifier scoping
local identifier di deklarasikan dalam function termasuk parameternya, sedangkan global identifier di deklarasikan di luar function manapun dan di atas semua function di program C, global identifier bisa di deklarasikan ulang juga di subprogram, biasanya saya memakai global identifier untuk index contoh int x = 0 lalu function bawahnya p[x].namadata , guna untuk menampung indeksnya.
Recursive
function yang memanggil function tertentu yang memanggil dirinya sendiri, contoh programnya misalkan program factorial menggunakan recursive
#include<stdio.h>
int faktorial(int x){
if(x<0)
return 0;
else if(x==0)
return 1;
else if(x==1)
return 1;
else
return x*faktorial(x-1);
}
int main(){
int angka;
scanf("%d", &angka);
printf("%d\n", faktorial(angka));
Structure and unions & memory allocation
structure adalah data yang menyimpan sekelompok data dari tipe data, komponen struktur bisa di sebut
member/field/element
syntax :
struct name_structure {
dataType1 name_field1;
dataType2 name_field2;
…
};
data apa yang mau di input/di simpan
local structture :
# include <stdio.h>
# include <math.h>
void main() {
struct {
int x, y;
} tA, tB;
float dist;
printf(“A position: \n ");
printf(“x and y position? ");
scanf("%d %d", &tA.x, &tA.y);
printf("\nB position : \n ");
printf(“x and y position? ");
scanf("%d %d", &tB.x, &tB.y);
dist = sqrt(pow((tA.x - tB.x), 2) +
pow((tA.y - tB.y), 2));
printf("\nDistance between A and B = %.2f unit", dist);
}
outputnya adalah :
A position:
x and y position? 5 10
B position :
x and y position? 15 15
Distance between A and B = 11.18 unit
Nested structure
struktur yang salah satu dari elemennya adalah structure lain, contohnya nim,nama,alamat,DOB
alamat kan punya nama jalan, nomor,kota dan provinsi, sedangkan dob terdiri dari tanggal, bulan
dan tahun
contoh array of structure
# include <string.h>
struct tmhs {
char nim[9];
char name[26];
float gpa;
};
biasanya di tambahkan index seperti tambahan p[100] dan int x=0; yang biasa di gunakan untuk
meneruskan data tersebut jadi penulisannya adalah p[x].nim dan p[x].name, x sebagai index dan p[100] di gunakan untuk menampung banyak data tersebut yang di input
typedef, di gunakan untuk nama singkat yang identifiernya yang panjang
contoh :
typedef struct BinusStudent{
char name[20];
int nim;
float gpa;
}Mhs;
btw mhs sebagai alias nama dari struct binusstudent dan functionnya sebagai data type baru
bitfield, struct dengan elemen yang di tugaskan dengan angka bit tertentu
syntax :
struct name{
type field1: numberof_bit;
…...
};
union, di gunakan untuk sambungan memori, dengan menggunakan union lokasi memori bisa di tanamkan untuk 2 variabel atau lebih dengan tipe data yang berbeda
syntax :
union name_union{
typedata1 name_var1 ;
typedata2 name_var2;
……
} name_var_union;
enumeration, tipe data yang terdiri dari sejumlah data, jumlah data yang terbatas ini di namakan untuk program yang bisa di baca
data type enumeration declaration :
enum name_type {
const1, const2,… const_n
}name_var;
static keyword, keyword statis yang bisa di gunakan sebagai variabel atau return value function
syntax :
#include <stdio.h>
void print()
{
static int count=0;
printf("count=%d\n",count++);
}
int main(void)
{
int i;
for(i=0; i<5; i++) print();
for(i=0; i<3; i++) print();
return 0;
}
note : countnya itu bisa 0,1,2,3,4,5,6,7
Void Data Type
syntax :
void main(parameter) //ini functionnya dan parameternya
{
(statementnya apa)
}
Const Char*
membandingkan char* dengan const char* menggunakan strcpy contohnya :
char*strcpy(char*strdestination,const char*strsource);
note : char* > menjadi pointer
const char* > bisa menjadi string atau pointer
Memory Allocation
mendapat RAM yang di atur oleh OS yang akan di gunakan pada program, sedangkan memori de-allocation melepaskan RAM kembali ke OS
memory allocation sebagai data store :
statis : di simpan di local stack memory, alokasi di compile time, bisa ada variabel, dealokasi saat program berakhir
dynamic : bisa di beri nama, di alokasi saat run-time, di simpan di heap memory, di dealokasikan kapan saja
Array Memory Allocation :
# include <stdio.h>
# include <stdlib.h>
int main() {
int *arr, n, i;
do {
fflush(stdin);
printf(“total element ? ");
scanf("%d", &n);
if (n == 0) break;
arr = (int *) malloc (n * sizeof(int));
printf(“Input %d numbers: ", n);
for (i = 0; i < n; i++) scanf(“%d", &arr[i]);
printf(“reversed: ");
for (i = n - 1; i >= 0; i--) printf("%d ", arr[i]);
printf("\n\n");
free(arr);
}while (1);
return 1;
}
Array Dynamic Memory Allocation :
int *arr;
printf(“total element ? ");
scanf("%d", &n);
arr = (int *) malloc (n * sizeof(int));
printf(“Input %d numbers: ", n);
for (i = 0; i < n; i++) scanf("%d", &arr[i]);
printf(“reversed: ");
for (i = n - 1; i >= 0; i--) printf("%d ", arr[i]);
Array of Pointer of Dynamic Structure :
# include <stdio.h>
# include <stdlib.h>
struct takad {
char nim[9];
float gpa;
} ;
int main() {
struct takad *akad[100];
int n, i;
float total = 0, rerata;
...
}
Pointer of Array of Dynamic Structure:
# include <stdio.h>
# include <stdlib.h>
struct takad {
char nim[9];
float gpa;
} ;
int main() {
struct takad *akad;
int n, i;
float total = 0, rerata;
Pointer to functions
pointer to function adalah alamat dari function dalam memori, syntax :
return_type(*pointer_name)(parameter);
contoh :
int(*compare)(int a,int b);
note : compare adalah pointer untuk nama function yang menunjukn function yang mengembalikan nilai integer yang dimana punya 2 parameter integer
File Processing
file & stream
untuk menyimpan data dari keyboard yang di perlukan untuk di simpan dalam storage device sebagai back-up data file
stream adalah sequence dari karakter , input dan output data adalah stream, C melihat file sebagai stream
membuka file dan memerintah pointer untuk kembali ke inisiator , pointer menunjuk ke data struktur dengan FILE type yang terletak di stdio.h
text file di simpan dalam format text atau dalam file ascii , sedangkan binary file menyimpan data data numerik dalam format line dengan micro-processoor format
Buffer Area
bagian dari memori yang di gunakan sebagai tempat sementara sebelum data di pindahkan ke file sebenarnya , syntax : FILE *fp
fp yang menunjuk ke area buffer dan juga di kenal sebagai pointer stream
Open File
sedangkan untuk open file kita menggunakan FILE *open, begitu juga dengan read, bedanya kalau read di ganti kutipnya jadi "r"
contoh :
FILE *write = fopen("book2.txt","r");
maka akan aku tampilkan tabel untuk melengkapinya :
Mode Description
“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.
Close File
biasanya sesudah memakai statement di atas di akhiri dengan close file yaitu syntaxnya :
int fclose (FILE*stream) tapi untuk case seperti FILE *write = fopen("book2.txt","r"); seperti yang ku lampirkan di atas ku menuliskan fclose(write), tapi untuk tugas menu GSLC kemarin, sebelum ku nulis itu, ku menambahkan while(!feof(write)){(statementnya apa)} , btw eof itu end of file ya
Sorting & Searching
dalam data, ada yang namanya kegiatan sorting yaitu mengurutkan, entah dari urutan alphabet, nomor maupun warna, kalau contoh dalam kelas besar adalah mengurutkan warna seperti yang di tunjukan pada video yang di tampilkan pada kelas besar,
sorting juga terbagi menjadi 2 yaitu sorting ascending(naik) dan descending(menurun)
sorting juga terbagi menjadi 2 yaitu sorting ascending(naik) dan descending(menurun)
sorting di bagi bagi menjadi berbagai macam, kalau sorting simple , bubble sort, selection, insertion, kalau intermediate yakni quick sort sama merge sort
bubble sort : membandingkan data yang bersebelahan dan di swap(jika memenuhi syarat)
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 : membandingkan 2 data pertama, lalu dengan data lainnya jadi ada 1 data yang di pakai sebagai patokan untuk membandingkan data lainnya
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 ]
}
insertion sort : jadi kalau insertion, 2 data di bandingkan kalau misalkan dia lebih kecil , di taruh di temp lalu data yang lebih besar maju, dan data yang lebih kecil di taruh di belakangnya dan seterusnya begitu
for(i=1; i<n; i++) {
x = A[i], insert x to its suitable place between A[0] and A[i-1].
}
quick sort : ambil data yang berfungsi sebagai patokan, pisahin jadi 2 bagian, sebelah kiri lebih kecil dari patokan dan sebelah kanan lebih besar dari patokan lalu di bandingkan kemudian di urutkan kedua bagian tersebut sehingga berurutan
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);
}
Merge Sort : sorting yang berprinsip divide & conquer, jadi misalkan ada 8 data, di bagi menjadi 2 kelompok masing masing 4 data lalu 4 datanya di bagi lagi menjadi 2 data lalu 1 data dan di urutkan sehingga terbentuklah data yang berurut
Searching
mencari informasi yang telah di simpan, biasanya ada data yang menjadi patokan dalam kegiatan ini, contohnya data mahasiswa terdiri dari nama,nim, tempat tanggal lahir, maka nim di gunakan sebagai kunci untuk searching karena nim itu unik (menghindari data ambigu) karena nim tidak ada yang sama searching terdiri menjadi linear search, binary search dan interpolation search,
linear search : membandingan elemen elemen array dengan search key
binary search : biasa di gunakan untuk array yang besar karena binary search lebih efisien dari linear search
interpolation search : teknik yang di gunakan untuk data yang berurut, prosesnya mirip dengan binary search
rumus interpolation search :
mid = (kunci-data[min]/data[max]-data[min])x(max-min) + min
Merge Sort : sorting yang berprinsip divide & conquer, jadi misalkan ada 8 data, di bagi menjadi 2 kelompok masing masing 4 data lalu 4 datanya di bagi lagi menjadi 2 data lalu 1 data dan di urutkan sehingga terbentuklah data yang berurut
Searching
mencari informasi yang telah di simpan, biasanya ada data yang menjadi patokan dalam kegiatan ini, contohnya data mahasiswa terdiri dari nama,nim, tempat tanggal lahir, maka nim di gunakan sebagai kunci untuk searching karena nim itu unik (menghindari data ambigu) karena nim tidak ada yang sama searching terdiri menjadi linear search, binary search dan interpolation search,
linear search : membandingan elemen elemen array dengan search key
binary search : biasa di gunakan untuk array yang besar karena binary search lebih efisien dari linear search
interpolation search : teknik yang di gunakan untuk data yang berurut, prosesnya mirip dengan binary search
rumus interpolation search :
mid = (kunci-data[min]/data[max]-data[min])x(max-min) + min
Comments
Post a Comment