├── images ├── github01.jpg ├── github02.jpg ├── ch-04-01.jpeg ├── ch-04-02.jpeg ├── ch-04-03.jpeg ├── pcode-01-01.svg ├── pcode-01-02.svg ├── code-01-01.svg ├── code-01-02.svg ├── ch-02-01.svg ├── ch-02-03.svg ├── ch-07-01.svg ├── ch-07-01a.svg ├── ch-02-03b.svg ├── ch-02-02.svg ├── ch-07-04.svg ├── ch-01-04.svg ├── ch-07-05.svg ├── ch-07-02.svg ├── ch-07-06.svg ├── ch-07-03.svg ├── ch-01-03.svg └── ch-01-00.svg ├── docfiles └── pertemuan-01.doc ├── solusi-soal-5-uts.c ├── waktu.c ├── Tugas-03.md ├── show_tanggal.c ├── akarpkwadrat.c ├── solusi-soal-4-uts.c ├── kumpulan_fungsi.md ├── Pertemuan-01.md ├── README.md ├── Latihan-soal.md ├── resistor.c ├── Pertemuan-10.md ├── Pertemuan-06.md ├── Pertemuan-04.md ├── Pertemuan-03.md ├── Pertemuan-02.md ├── Pertemuan-09.md ├── Pertemuan-08.md └── Pertemuan-07.md /images/github01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/handaga/Algoritma-dan-Pemrograman/HEAD/images/github01.jpg -------------------------------------------------------------------------------- /images/github02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/handaga/Algoritma-dan-Pemrograman/HEAD/images/github02.jpg -------------------------------------------------------------------------------- /images/ch-04-01.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/handaga/Algoritma-dan-Pemrograman/HEAD/images/ch-04-01.jpeg -------------------------------------------------------------------------------- /images/ch-04-02.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/handaga/Algoritma-dan-Pemrograman/HEAD/images/ch-04-02.jpeg -------------------------------------------------------------------------------- /images/ch-04-03.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/handaga/Algoritma-dan-Pemrograman/HEAD/images/ch-04-03.jpeg -------------------------------------------------------------------------------- /docfiles/pertemuan-01.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/handaga/Algoritma-dan-Pemrograman/HEAD/docfiles/pertemuan-01.doc -------------------------------------------------------------------------------- /solusi-soal-5-uts.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | float fungsiku( int x, int m) 5 | { 6 | float y; 7 | //proses 8 | y = sqrt( (5*pow(x,3)) - pow(x,m-1) + 12 ); 9 | return y; 10 | } 11 | 12 | int main() { 13 | int a=2; 14 | int b=3; 15 | float y = 0; 16 | y = fungsiku(a,b); 17 | printf("x=%d, m=%d, hasilnya y=%f \n",a,b,y); 18 | return 0; 19 | } -------------------------------------------------------------------------------- /waktu.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main() { 5 | 6 | time_t NOW, START, END; 7 | time_t rawtime; 8 | 9 | struct tm *info;// stuktur data waktu detik,menit 10 | char buffer[80];//jumlah karakter yg akan ditampilkan 11 | 12 | 13 | START = time(NULL); 14 | while (1) { //forever loop 15 | END = time(NULL); 16 | if (END - START > 0 ) { 17 | //sudah berbeda SATU DETIK 18 | //tampilkan TGL & JAM 19 | // printf("Detik ke %ld \n", END ); 20 | START = time(NULL); 21 | 22 | time( &rawtime ); 23 | info = localtime( &rawtime ); 24 | strftime(buffer,80,"%A, %d %B %Y, %H:%M:%S", info); 25 | printf("TANGGAL & JAM:| %s |\n", buffer ); 26 | //printf("Tanggal sekarang: %s", asctime(info)); 27 | 28 | } 29 | } 30 | /* 31 | for ( ; ; ) { //forever loop 32 | 33 | } 34 | */ 35 | return 0; 36 | } 37 | -------------------------------------------------------------------------------- /images/pcode-01-01.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 1. inisialisasi variable jari_jari, luas 7 | 2. jari_jari = 20 8 | 3. luas = 3.14 * jari_jari * jari_jari 9 | 4. print(luas) 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /images/pcode-01-02.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 1. inisialisasi variable jarak, waktu, kecepatan; 7 | 2. jarak = 5000; 8 | 3. if (waktu==0) 9 | 4. kecepatan = 0 10 | 5. else 11 | 6. kecepatan = jarak / waktu 12 | 7. print(kecepatan) 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Tugas-03.md: -------------------------------------------------------------------------------- 1 | ## Kode Warna Resistor 2 | 3 | Buatlah ` DIAGRAM ALIR ` dan ` KODE PROGRAM ` (dalam bahasa C), sebuah aplikasi untuk menghitung nilai resistor berdasarkan kode warna, 4 | dapat digunakan untuk kode warna yang terdiri atas 3, 4, 5 dan 6 band (gelang) warna. 5 | 6 | ## Hint: 7 | 8 | **input-1 :** 9 | 10 | ` pilihan jumlah gelang ` 11 | 12 | **input-2 :** 13 | 14 | ` warna-warna gelang, sebutan warna boleh dalam bahasa indonesia/inggris/jawa ` 15 | 16 | **proses :** 17 | 18 | if (BAND==3) { 19 | // input 3 warna gelang 20 | } else if (BAND==4) { 21 | //input 4 warna gelang 22 | } else if (BAND==5) { 23 | // input 5 warna gelang 24 | } else if (BAND==6) { 25 | //input 6 warna gelang 26 | } 27 | 28 | **output:** 29 | 30 | ` 31 | Nilai resistor + nilai toleransi 32 | untuk sistem 6 BAND, warna gelang ke 6 di abaikan. 33 | ` 34 | 35 | 36 | ## Catatan: 37 | 38 | Salah satu teori menghitung nilai resistor berdasarkan kode warna dapat dilihat pada gambar sebagai berikut: 39 | 40 | ![Test](http://www.resistorguide.com/pictures/resistor_color_codes_chart.png) 41 | -------------------------------------------------------------------------------- /show_tanggal.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | /* 4 | 5 | time() : untuk mendapatkan informasi jumlah detik sejak tahun 1/11970 6 | 7 | localtime() : untuk meubah informasi jumlah detik menjadi informasi kalender (hari tanggal, bulan, tahun JAM:MENIT:DETIK) saat ini. 8 | 9 | strftime(): mencetak data kalender sesuai format 10 | 11 | */ 12 | 13 | 14 | void tampilkan_kalender() { 15 | 16 | time_t DETIK; 17 | struct tm *info; 18 | char buffer[80]; 19 | char HARI[10]; 20 | 21 | time( &DETIK ); //mengambil informasi jumlah detik 22 | 23 | //merubah format data ( localtime( )) 24 | //dari JUMLAH DETIK menjadi KALENDER 25 | info = localtime( &DETIK ); 26 | //merubah info menjadi TEKS 27 | strftime(buffer,80,"%A, %d %B %Y - %H:%M:%S", info); 28 | 29 | printf("Sekarang adalah hari & tanggal: | %s |\n", buffer ); 30 | // printf("Hari ke %ld \n", info.tm_wday); 31 | 32 | strftime(HARI,10,"%A", info); 33 | if ( strcmp(HARI,"Tuesday") == 0 ) { 34 | printf("\n Sekarang hari SELASA \n"); 35 | } 36 | 37 | } 38 | 39 | 40 | 41 | int main () 42 | { 43 | time_t AWAL=0, AKHIR=0; 44 | 45 | time( &AWAL ); 46 | while (1) { 47 | time( &AKHIR ); 48 | if ( AKHIR - AWAL > 0 ) { 49 | //tampilkan tanggal 50 | tampilkan_kalender(); 51 | AWAL = AKHIR; 52 | } 53 | 54 | 55 | } 56 | 57 | return(0); 58 | } 59 | -------------------------------------------------------------------------------- /images/code-01-01.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #include <stdio.h> 7 | 8 | int main() { 9 | double jari_jari; 10 | double luas; 11 | 12 | jari_jari = 20; 13 | 14 | luas = 3.14 * jari_jari * jari_jari; 15 | 16 | printf("Luas lingkaran = %1f", luas); 17 | 18 | return 0; 19 | } 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /akarpkwadrat.c: -------------------------------------------------------------------------------- 1 | /* 2 | program untuk menyelesaikan akar persamaan kwadrat 3 | dibuat oleh : fulan 4 | tanggal : 29-09-2015 5 | */ 6 | #include 7 | #include 8 | 9 | int main () { 10 | 11 | int a,b,c; //variabel input 12 | float D; //variabel proses - diterminan 13 | // double D; yg ini juga boleh 14 | float X1, X2; //variable output 15 | 16 | //input :masukan nilai a, b, & c 17 | a = 1; 18 | b = 4; 19 | c = 3; 20 | 21 | //periksa apkah nilai a = 0? 22 | if (a==0) { 23 | //a bernilai NOL, tampilkan peringatan 24 | printf("Nilai variabel a tidak boleh NOL ..! \n"); 25 | return 0; 26 | } else { 27 | //menghitung nilai diterminan 28 | D = (b*b) - (4*a*c); 29 | D = pow(b,2) - (4*a*c); 30 | if (D < 0 ) { 31 | //diterminan bernilai 0, D=0 32 | //tampilkan peringatan 33 | printf("Nilai diterminan tidak boleh negatif \n"); 34 | return 0; 35 | } else { 36 | // D >= 0 37 | // menghitung akar persamaan kwadrat 38 | X1 = ( -b + sqrt(D) ) / (2*a); 39 | X2 = ( -b - sqrt(D) ) / (2*a); 40 | 41 | // Menampilkan akar hasil perhitungan 42 | printf("variabel input a=%d, b=%d, c=%d \n", a, b, c); 43 | printf("Akar 1, X1 = %5.2f \n", X1); 44 | // %5.2f : untuk mengatur output angka pecahan jumlah digit ada 5, dan dibelakang koma ada 2 digit 45 | printf("Akar 2, X2 = %5.2f \n", X2); 46 | return 0; 47 | } 48 | } 49 | return 0; 50 | } 51 | -------------------------------------------------------------------------------- /solusi-soal-4-uts.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main() { 5 | 6 | 7 | //input 8 | int JAM=0; 9 | int MENIT=1; 10 | int DETIK=12; 11 | 12 | //INPUT DARI KEYBOARD 13 | 14 | 15 | //menghitung waktu 16 | time_t AWAL=0, AKHIR=0; 17 | 18 | 19 | AWAL = time( NULL ); 20 | // time( &AWAL ); 21 | 22 | while ( (JAM != 0) || (MENIT != 0) || (DETIK !=0) ) { 23 | 24 | AKHIR = time( NULL ); 25 | if (AKHIR > AWAL) { 26 | //proses 27 | if (DETIK==0) { 28 | if (MENIT==0) { 29 | if (JAM==0) { 30 | //SELESAI 31 | } else { 32 | //di sini JAM > 0 33 | JAM--; 34 | MENIT = 59; 35 | DETIK = 59; 36 | } 37 | } else { 38 | //di sini MENIT > 0 39 | MENIT--; 40 | DETIK = 59; 41 | } 42 | } else { 43 | //di sini DETIK > 0 44 | DETIK--; 45 | } 46 | //tampilkan WAKTU 47 | printf("Waktu %02d:%02d:%02d \n", JAM, MENIT, DETIK); 48 | /* 49 | printf("Waktu "); 50 | //menampilkan JAM 51 | if (JAM<10) { 52 | printf("0%d:", JAM); 53 | } else { 54 | printf("%d:", JAM); 55 | } 56 | //menampilkan MENIT 57 | if (MENIT<10) { 58 | printf("0%d:", MENIT); 59 | } else { 60 | printf("%d:", MENIT); 61 | } 62 | //menampilkan DETIK 63 | if (DETIK<10) { 64 | printf("0%d", DETIK); 65 | } else { 66 | printf("%d", DETIK); 67 | } 68 | 69 | printf("\n"); 70 | */ 71 | AWAL = time( NULL ); 72 | // AWAL = AKHIR; 73 | 74 | } 75 | } 76 | 77 | 78 | return 0; 79 | } -------------------------------------------------------------------------------- /images/code-01-02.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #include <stdio.h> 7 | 8 | int main() { 9 | doubel jarak; 10 | double waktu; 11 | double kecepatan; 12 | 13 | jarak = 5000; 14 | 15 | if (waktu==0) { 16 | kecepatan = 0; 17 | } else { 18 | kecepatan = jarak / waktu; 19 | } 20 | 21 | printf("Kecepatan = %1f", kecepatan); 22 | 23 | return 0; 24 | } 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /images/ch-02-01.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | langkah-1 9 | 10 | 11 | 12 | 13 | 14 | 15 | langkah-2 16 | 17 | 18 | 19 | 20 | 21 | 22 | langkah-3 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /kumpulan_fungsi.md: -------------------------------------------------------------------------------- 1 | # Kumpulan fungsi yang terdapat dalam Bahasa C 2 | 3 | ## Input Output 4 | 5 | nama fungsi | keterangan 6 | --- | --- 7 | ` char getchar(void) ` | menunggu user memasukan satu karakter dari keyboard, contoh ` char c = getchar(); ` 8 | ` char *gets(char * s) ` | menunggu user memasukan satu karakter atau lebih dan menekan button ENTER. Contoh ` char str[100]; printf("masukan string: "); gets(str); ` 9 | ` int scanf(const char *format, ...) ` | menunggu user memasukan data sesuai dengna format yang ditentukan dalam perintah `scanf()`. Contoh `char str[100]; int i; printf( "masukan teks dan angka integer :"); scanf("%s %d", str, &i); ` 10 | ` int putchar(int c) ` | mencetak SATU KARAKTER di layar. Contoh ` char c='a'; putchar(c); ` 11 | ` int puts(const char *s) ` | mencetak string di layar. Contoh ` char s[10] = "Ini Teks"; puts(s); ` 12 | ` int printf(const char *format, ...) ` | mencetak data di layar sesuai format. Contoh ` int x=100; printf("Jarak %d meter", x); ` 13 | 14 | 15 | ## String (string.h) 16 | 17 | nama fungsi / variabel | Keterangan 18 | --- | --- 19 | ` size_t ` | data dengan tipe ` unsigned int ` hasil dari memanggil keyword ` sizeof( ) ` 20 | ` int strcmp(const char *str1, const char *str2) ` | membandingkan dua buah string ` str1 ` dan ` str1 `, jika sama akan dikembalikan nilai 0 21 | ` char *strcpy(char *dest, const char *src) ` | menyalin string dari ` src ` ke ` dest ` 22 | ` size_t strlen(const char *str) ` | menghitung jumlah karakter dalam string ` str `, ` size_t ` adalah tipe data yang sama dengan ` unsigned int ` 23 | ` void *memchr(const void *str, int c, size_t n) ` | mencari lokasi karakter ` c ` dalam ` str `, dengan ukuran ` n ` 24 | 25 | 26 | ## Matematika 27 | 28 | nama fungsi / variabel | Keterangan 29 | --- | --- 30 | ` double pow(double x, double y) ` | untuk menghitung x pangkat y 31 | ` double sqrt(double x) ` | untuk menghitung akar kwadrat 32 | ` double exp(double x) ` | untuk menghitung bilang e pangkat x, e = 2,718282 33 | ` double cbrt (double x) ` | untuk menghitung akar pangkat tiga dari x, ***note: hanya berlaku pada versi kompiler c/c++ terbaru*** 34 | 35 | 36 | ## Time (time.h) 37 | 38 | nama fungsi / variabel | Keterangan 39 | --- | --- 40 | ` size_t ` | tipe data ` unsigned int ` kembali dari fungsi ` sizeof() ` 41 | ` clock_t ` | tipe data untuk menyimpan waktu processor 42 | ` time_t ` | biasa digunakan untuk menyimpan data kalender 43 | ` struct tm ` | biasa digunakan untuk menyimpan waktu (time) dan tanggal (date) 44 | ` CLOCKS_PER_SEC ` | jumlah clock processesor per detik 45 | ` time_t time(time_t *timer) ` | menghitung waktu kalender saat ini, dan menyimpan datanya dalam bentuk time_t, dengan satuan DETIK, angka yang dihasilkan adalah detik ke N dihitung sejak tanggal ` 1 Januari 1970 `. 46 | 47 | #include 48 | #include 49 | int main () 50 | { 51 | time_t seconds; 52 | 53 | seconds = time(NULL); 54 | printf("Hours since January 1, 1970 = %ld\n", seconds/3600); 55 | 56 | return(0); 57 | } 58 | -------------------------------------------------------------------------------- /Pertemuan-01.md: -------------------------------------------------------------------------------- 1 | ## Selamat datang di Wiki Algoritma-dan-Pemrograman 2 | 3 | ### Tujuan: 4 | Kuliah ini bertujuan untuk memberikan pengenalan tentang cara memyusun program komputer dengan algoritma yang benar kepada mahasiswa semester-1 program studi teknik elektro. Pembahasan dimulai dari pengertian dasar mengenai algoritma dan pemrograman. Dasar-dasar pemgrograman bahasa C, operasi bersyarat (**if**), operasi pengulangan (**loop**), Deret (larik), subrutin (fungsi), rekursi, pencarian data dan pengurutan data. 5 | 6 | ### Sasaran 7 | Mahasiswa mampu merancang program dengan menggunakan flowchart atau pseudocode 8 | Mahasiwa mampu membuat aplikasi komputer desktop sederhana dengan menggunakan bahasa pemrograman C 9 | Mahasiwa mengenal cara membuat program aplikasi Arduino dengan bahasa C 10 | 11 | ### Pustaka 12 | 1. Tutorialspoint, [Learning C](http://www.tutorialspoint.com/cprogramming/index.htm) 13 | 2. Abdul Kadir, Algoritma dan Pemrograman Menggunakan C & C++, Andi Offset, Yogyakarta, 2012, [Beli Onine](http://andipublisher.com/produk-1012004492-algoritma-amp-pemrograman-menggunakan-c-.html) 14 | 3. Arduino, [References](https://www.arduino.cc/en/Reference/HomePage) 15 | 16 | 17 | ### TOOLS (Alat Bantu Software/Perangkat Lunak) 18 | 1. Laboratorium VIRTUAL di [learn-C.org](http://www.learn-c.org/) atau di [tutorialspoint](http://www.tutorialspoint.com/cprogramming/index.htm), compiler menggunakan GCC 19 | 2. [Bloodshed](http://www.bloodshed.net/download.html), compiler menggunakan MingGW32 20 | 3. [Codeblock](http://www.codeblocks.org/), compiler menggunakan MingGW32 21 | 4. [Eclipse](http://www.eclipse.org), perlu tambahan compiler (MingGW32) atau VisualStudio, dan JDK (Java Development Kit), fasilitas lebih lengkap 22 | 5. [Visual Studio Express](https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx) 23 | 24 | ### Tata Tertib 25 | 1. Kehadiran minimal agar dapat mengikuti UJIAN AKHIR adalah 75%, tidak ada ujian susulan KECUALI ada kepentingan istimewa (atau SAKIT). 26 | 2. Boleh mengikuti kuliah di kelas yang lain jika berhalangan hadir di kelas yang seharusnya 27 | 3. Semua tugas harus diupload di [GITHUB](http://github.com) dengan menggunakan **NIM** sebagai user github, contoh: http://github.com/D400150001/tugas-c 28 | 4. HP harus di set pada mode silent 29 | 5. Semua materi kuliah akan diupload di github dengan alamat https://github.com/handaga/Algoritma-dan-Pemrograman 30 | 31 | ### Tugas Pertama 32 | Membuat USER ACCOUNT di [GITHUB](http://github.com) dengan menggunakan **NIM** sebagai **username** dengan langkah sebagai berikut: 33 | 34 | (1) Buka halaman web [GITHUB](http://github.com) 35 | ![SignUp GITHUB](https://github.com/handaga/Algoritma-dan-Pemrograman/blob/master/images/github01.jpg) 36 | (2) Klik button "Sign Up" (di pojok kanan atas), selanjut isikan USERNAME dengan NIM, isi bagian EMAIL dengan menggunakan alamat EMAIL anda yang berlaku sekarang ini, kemudian buat PASSWORD sembarang (Bukan password untuk buka email). 37 | ![Create an Account](https://github.com/handaga/Algoritma-dan-Pemrograman/blob/master/images/github02.jpg) 38 | (3) Klik button "Create an account" 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > # Catatan Kuliah Semester Ganjil 2016/2017 ada di sini [catatan kuliah 2016] (https://github.com/handaga/algoritma-pemrograman-2016) 2 | 3 | 4 | ## Selamat datang di Wiki Algoritma-dan-Pemrograman 5 | 6 | ### Tujuan: 7 | Kuliah ini bertujuan untuk memberikan pengenalan tentang cara memyusun program komputer dengan algoritma yang benar kepada mahasiswa semester-1 program studi teknik elektro. Pembahasan dimulai dari pengertian dasar mengenai algoritma dan pemrograman. Dasar-dasar pemgrograman bahasa C, operasi bersyarat (**if**), operasi pengulangan (**loop**), Deret (larik), subrutin (fungsi), rekursi, pencarian data dan pengurutan data. 8 | 9 | ### Sasaran 10 | Mahasiswa mampu merancang program dengan menggunakan flowchart atau pseudocode 11 | Mahasiwa mampu membuat aplikasi komputer desktop sederhana dengan menggunakan bahasa pemrograman C 12 | Mahasiwa mengenal cara membuat program aplikasi Arduino dengan bahasa C 13 | 14 | ### Pustaka 15 | 1. Tutorialspoint, [Learning C](http://www.tutorialspoint.com/cprogramming/index.htm) 16 | 2. Abdul Kadir, Algoritma dan Pemrograman Menggunakan C & C++, Andi Offset, Yogyakarta, 2012, [Beli Onine](http://andipublisher.com/produk-1012004492-algoritma-amp-pemrograman-menggunakan-c-.html) 17 | 3. Arduino, [References](https://www.arduino.cc/en/Reference/HomePage) 18 | 19 | 20 | ### TOOLS (Alat Bantu Software/Perangkat Lunak) 21 | 1. Laboratorium VIRTUAL di [learn-C.org](http://www.learn-c.org/) atau di [tutorialspoint](http://www.tutorialspoint.com/cprogramming/index.htm), compiler menggunakan GCC 22 | 2. [Bloodshed](http://www.bloodshed.net/download.html), compiler menggunakan MingGW32 23 | 3. [Codeblock](http://www.codeblocks.org/), compiler menggunakan MingGW32 24 | 4. [Eclipse](http://www.eclipse.org), perlu tambahan compiler (MingGW32) atau VisualStudio, dan JDK (Java Development Kit), fasilitas lebih lengkap 25 | 5. [Visual Studio Express](https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx) 26 | 27 | ### Tata Tertib 28 | 1. Kehadiran minimal agar dapat mengikuti UJIAN AKHIR adalah 75%, tidak ada ujian susulan KECUALI ada kepentingan istimewa (atau SAKIT). 29 | 2. Boleh mengikuti kuliah di kelas yang lain jika berhalangan hadir di kelas yang seharusnya 30 | 3. Semua tugas harus diupload di [GITHUB](http://github.com) dengan menggunakan **NIM** sebagai user github, contoh: http://github.com/D400150001/tugas-c 31 | 4. HP harus di set pada mode silent 32 | 5. Semua materi kuliah akan diupload di github dengan alamat https://github.com/handaga/Algoritma-dan-Pemrograman 33 | 34 | ### Tugas Pertama 35 | Membuat USER ACCOUNT di [GITHUB](http://github.com) dengan menggunakan **NIM** sebagai **username** dengan langkah sebagai berikut: 36 | 37 | (1) Buka halaman web [GITHUB](http://github.com) 38 | ![SignUp GITHUB](https://github.com/handaga/Algoritma-dan-Pemrograman/blob/master/images/github01.jpg) 39 | (2) Klik button "Sign Up" (di pojok kanan atas), selanjut isikan USERNAME dengan NIM, isi bagian EMAIL dengan menggunakan alamat EMAIL anda yang berlaku sekarang ini, kemudian buat PASSWORD sembarang (Bukan password untuk buka email). 40 | ![Create an Account](https://github.com/handaga/Algoritma-dan-Pemrograman/blob/master/images/github02.jpg) 41 | (3) Klik button "Create an account" 42 | -------------------------------------------------------------------------------- /Latihan-soal.md: -------------------------------------------------------------------------------- 1 | > Apa yang dimaksud pointer pada sebuah pointer? 2 | 3 | Sebuah pointer yang berisi alamat dari variabel pointer yang lain. 4 | 5 | > Apa perbedaan malloc() & calloc()? 6 | 7 | Keduanya digunakan untuk mememsan memori tetapi, dalam calloc() memory yang diberikan akan diisi dengan NOL (0), sehingga menguntungkan untuk menyimpan data berupa numerik. 8 | 9 | > Apa yang dimaksud keyword auto? 10 | 11 | Keyword (kata-kata dalam bahasa inggris yang digunakan dalam program c yang tidak boleh digunakan untuk memberi nama sebuah variabel atau fungsi). Keyword auto adalah kata yang digunakan untuk deklarasi sebuah variabel. 12 | Contoh: 13 | ` auto int X; // secara teknis sama dengan int X; ` 14 | 15 | > Pada bagian mana keyword "break" muncul dalam program? 16 | 17 | Perintah `break ` biasa digunakan dalam perintah `switch-case`, `while-loop`, & `for-loop`. 18 | 19 | > Jelaskan carakerja syntax perintah for-loop! 20 | 21 | syntax : 22 | for (ekspresi-1; ekspresi-2; ekspresi-3) { 23 | //perintah dalam loop 24 | } 25 | 26 | Pertama kali ekspresi-1 dieksekusi SEKALI SAJA, kemudian ekspresi-2 dieksekusi, biasanya ekspresi-2 berupa sebuah kondisi. Jika ekspresi-2 menghasilkan nilai FALSE, proses pengulangan berakhir, ekspresi-3 tidak dieksekusi. Jika espresi-2 menghasilkan nilai TRUE, ekspresi-3 dieksekusi dilanjutkan dengan eksekusi semua perintah di dalam loop. Selanjutnya proses kembali ke eksekusi espresi-2 dan berulang terus sampai ekspresi-2 menghasilkan nilai FALSE. 27 | 28 | > Apa perbedaan antara include dan include "myfile.h"? 29 | 30 | `include ` : compiler akan mencari file header dalam daftar PATH LIBRARY (sudah di seting dalam komputer, dan dapat dimodifikasi). 31 | ` include "myfile.h" `: compiler akan mencari file header pada lokasi folder dimana source code (*.c) berada. Jika tidak ditemukan baru mencari dalam PATH LIB. 32 | 33 | > Bagaimana komputer menyimpan angka NEGATIF? 34 | 35 | Angka negatif disimpan sebagai angak 2's complement. 36 | (a) dicari angka positifnya, (b) digit 0 diganti 1, dan digit 1 diganti 0, dan hasilnya ditambah dengan angka 1 (biner). 37 | Contoh: angka -4 (MINUS EMPAT) 38 | 39 | 0000 0100 40 | 1111 1011 41 | 1 42 | ---------- + 43 | 1111 1100 44 | 45 | > Apa yang dimaksud dengan variabel STATIC? 46 | 47 | contoh: 48 | function myapp() { 49 | static int X = 0; 50 | X++; 51 | printf("Nilai X: %d \n", X); 52 | } 53 | 54 | main () { 55 | myapp(); 56 | myapp(); 57 | } 58 | 59 | Output: 60 | 61 | Nilai X: 1; 62 | Nilai X: 2; //jika digunakan STATIC nilainya 2 jika tanpa static nilainya 1. 63 | 64 | fungsi variabel static adalah agar variabel tidak dihapus dari memori setelah program utama memanggil fungsi dimana variabel static berada. 65 | 66 | > Apa yang dimaksud dengan pointer NULL? 67 | 68 | Variabel pointer yang belum terisi atau variabel pointer yang belum menunjuk kemanapun. 69 | 70 | > Apa tujuan menggunakan perintah "extern"? 71 | 72 | ` "extern" ` digunakan dalam file sumber yang memanggil fungsi/variabel dari file sumber yang lain. Contoh: ada dua file sumber "file-1.c" dan "file-2.c" 73 | 74 | " file-1.c" 75 | ` 76 | // tidak boleh ada function main di sini 77 | function perkalian(int X, int Y) { 78 | return X * Y; 79 | } 80 | ` 81 | 82 | "file-2.c" 83 | ` 84 | //deklarasi 85 | extern perkalian(int X, int Y); 86 | 87 | main() { 88 | int A, B, C; 89 | C = perkalian (A,B); 90 | } 91 | ` 92 | 93 | > S++ sama dengan S = S+1, kode yang mana yang lebih menguntungkan dan mengapa? 94 | 95 | S++ lebih disarankan sebab, dalam komputer perintah INCREMENT dapat dieksekusi hanya dengan 1 CLOCK SAJA, sehingga S++ akan lebih cepat dieksekusi. (S=S+1 memerlukan >5 CLOCK) 96 | 97 | 98 | Selanjutnya dapat dibaca latihan soal di [www.tutorialspoint.com](http://www.tutorialspoint.com/cprogramming/cprogramming_interview_questions.htm) 99 | -------------------------------------------------------------------------------- /images/ch-02-03.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Apakah 9 | kondisi ini benar? 10 | 11 | 12 | 13 | 14 | 15 | 16 | Langkah -1 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | YA 31 | 32 | 33 | TIDAK 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | Langkah selanjutnya 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /images/ch-07-01.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | kondisi? 16 | 17 | 18 | 19 | 20 | 21 | 22 | Perintah dijalankan 23 | jika kondisi TRUE 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | YA 48 | 49 | 50 | TIDAK 51 | 52 | 53 | -------------------------------------------------------------------------------- /images/ch-07-01a.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | kondisi? 16 | 17 | 18 | 19 | 20 | 21 | 22 | Perintah dijalankan 23 | jika kondisi TRUE 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | YA 48 | 49 | 50 | TIDAK 51 | 52 | 53 | -------------------------------------------------------------------------------- /images/ch-02-03b.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Apakah 9 | kondisi ini benar? 10 | 11 | 12 | 13 | 14 | 15 | 16 | Langkah -1 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | YA 31 | 32 | 33 | TIDAK 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | Langkah selanjutnya 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /resistor.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | 6 | void hitung_3gelang() { 7 | 8 | int G1=0, G2=0, G3=0; 9 | int N=0; 10 | char WARNA[20]; 11 | 12 | for (N=1; N<=3; N++) { 13 | //N menunjukan gelang ke N 14 | printf("Masukan warna GELANG ke %d: ", N); 15 | scanf("%s", WARNA); 16 | 17 | // if (WARNA == "hitam") { // INI SALAH 18 | if ( strcmp(WARNA, "hitam") == 0 ) { //=0 berarti sama 19 | switch (N) { 20 | case 1: G1 = 0; break; 21 | case 2: G2 = 0; break; 22 | case 3: G3 = 0; break; 23 | } 24 | } else if ( strcmp(WARNA, "coklat") == 0 ) { 25 | switch (N) { 26 | case 1: G1 = 1; break; 27 | case 2: G2 = 1; break; 28 | case 3: G3 = 1; break; 29 | } 30 | } else if ( strcmp(WARNA, "merah") == 0 ) { 31 | switch (N) { 32 | case 1: G1 = 2; break; 33 | case 2: G2 = 2; break; 34 | case 3: G3 = 2; break; 35 | } 36 | } else if ( strcmp(WARNA, "orange") == 0 ) { 37 | switch (N) { 38 | case 1: G1 = 3; break; 39 | case 2: G2 = 3; break; 40 | case 3: G3 = 3; break; 41 | } 42 | } 43 | // dibuat untuk 12 warna 44 | } // akhir loop N 45 | 46 | //G1 G2 G3 ? 47 | //(G1*10 + G2) * pow(10,G3); // 48 | //(G1*10 + G2) * exp(G3); 49 | 50 | N = (G1*10 + G2) * pow(10,G3); 51 | 52 | // printf("\nG1=%d , G2=%d, G3=%d \n", G1,G2,G3 ); 53 | printf("\nNilai resistor R = %d ohm", N ); 54 | 55 | } 56 | 57 | 58 | void hitung_4gelang() { 59 | 60 | int G1=0, G2=0, G3=0, G4=0; 61 | int N=0; 62 | char WARNA[20]; 63 | char PERSEN = '%'; 64 | 65 | 66 | for (N=1; N<=4; N++) { 67 | //N menunjukan gelang ke N 68 | //TAMPILKAN DAFTAR WARNA DI SINI 69 | printf("Masukan warna GELANG ke %d: ", N); 70 | scanf("%s", WARNA); 71 | 72 | // if (WARNA == "hitam") { // INI SALAH 73 | if ( strcmp(WARNA, "hitam") == 0 ) { //=0 berarti sama 74 | switch (N) { 75 | case 1: G1 = 0; break; 76 | case 2: G2 = 0; break; 77 | case 3: G3 = 0; break; 78 | case 4: G4 = 0; break; 79 | } 80 | } else if ( strcmp(WARNA, "coklat") == 0 ) { 81 | switch (N) { 82 | case 1: G1 = 1; break; 83 | case 2: G2 = 1; break; 84 | case 3: G3 = 1; break; 85 | case 4: G4 = 0; break; //toleransi coklat tidak ada 86 | } 87 | } else if ( strcmp(WARNA, "merah") == 0 ) { 88 | switch (N) { 89 | case 1: G1 = 2; break; 90 | case 2: G2 = 2; break; 91 | case 3: G3 = 2; break; 92 | case 4: G4 = 0; break; //toleransi coklat tidak ada 93 | } 94 | } else if ( strcmp(WARNA, "orange") == 0 ) { 95 | switch (N) { 96 | case 1: G1 = 3; break; 97 | case 2: G2 = 3; break; 98 | case 3: G3 = 3; break; 99 | case 4: G4 = 0; break; //toleransi coklat tidak ada 100 | } 101 | } else if ( strcmp(WARNA, "emas") == 0 ) { 102 | switch (N) { 103 | case 4: G4 = 5; break; //toleransi coklat tidak ada 104 | } 105 | } 106 | // dibuat untuk 12 warna 107 | } // akhir loop N 108 | 109 | //G1 G2 G3 ? 110 | //(G1*10 + G2) * pow(10,G3); // 111 | //(G1*10 + G2) * exp(G3); 112 | 113 | N = (G1*10 + G2) * pow(10,G3); 114 | 115 | // printf("\nG1=%d , G2=%d, G3=%d G4=%d \n", G1,G2,G3, G4 ); 116 | printf("\nNilai resistor R = %d ohm", N ); 117 | printf("\nNilai Toleransi = %d %c", G4, PERSEN ); 118 | 119 | 120 | } 121 | 122 | 123 | int main() { 124 | 125 | //input JUMLAH GELANG 126 | int GELANG = 0; 127 | 128 | while ( (GELANG<3) || (GELANG>6) ) { //pengulangan dampai data GELANG BETUL 129 | printf("Masukan jumlah gelang : "); 130 | scanf("%d", &GELANG ); //harus antara 3 s/d 6 131 | 132 | if ( (GELANG<3) || (GELANG>6) ) { 133 | printf("\n---------------------------"); 134 | printf("\nNilai GELANG antara 3 s/d 6"); 135 | printf("\n---------------------------\n"); 136 | } 137 | 138 | //Input WARNA GELANG 139 | 140 | if (GELANG == 3) { 141 | //di sini program menghitung 3 gelang 142 | hitung_3gelang(); 143 | } else if (GELANG == 4) { 144 | //di sini program menghitung 4 gelang 145 | hitung_4gelang(); 146 | } else if (GELANG == 5) { 147 | //di sini program menghitung 5 gelang 148 | } else if (GELANG == 6) { 149 | //di sini program menghitung 6 gelang 150 | } 151 | 152 | //cara kedua 153 | /* 154 | switch (GELANG) { 155 | case 3 : ; //di sini program menghitung 3 gelang 156 | break; 157 | case 4 : ; //di sini program menghitung 4 gelang 158 | break; 159 | case 5 : ; //di sini program menghitung 5 gelang 160 | break; 161 | case 6 : ; //di sini program menghitung 6 gelang 162 | break; 163 | } 164 | */ 165 | 166 | 167 | } 168 | 169 | 170 | return 0; 171 | } 172 | -------------------------------------------------------------------------------- /images/ch-02-02.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Apakah 9 | kondisi ini benar? 10 | 11 | 12 | 13 | 14 | 15 | 16 | Langkah -1 17 | 18 | 19 | 20 | 21 | 22 | 23 | Langkah-2 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | YA 65 | 66 | 67 | TIDAK 68 | 69 | 70 | -------------------------------------------------------------------------------- /images/ch-07-04.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | kondisi? 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | YA 25 | 26 | 27 | TIDAK 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | do { 50 | perintah untuk 51 | kondisi TRUE; 52 | } while (kondisi) 53 | 54 | 55 | 56 | 57 | 58 | Blok Perintah 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /images/ch-01-04.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | kode sumber 9 | dalam bahasa c nama file 10 | main.c 11 | 12 | 13 | 14 | 15 | 16 | 17 | Kompilasi 18 | 19 | 20 | 21 | 22 | 23 | 24 | kode obyek 25 | (bahasa mesin) 26 | main.o 27 | 28 | 29 | 30 | 31 | 32 | 33 | Lingking 34 | 35 | 36 | 37 | 38 | 39 | 40 | aplikasi 41 | main.exe 42 | 43 | 44 | 45 | 46 | 47 | 48 | library/pustaka 49 | ( #include <stdio.h> ) 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /Pertemuan-10.md: -------------------------------------------------------------------------------- 1 | # File I/O 2 | 3 | File sebagai perangkat Input dan atau Output, note: SATU File dapat digunakan sebagai input dan output pada saat yang sama. Dengan kata lain sebuah file pada suatau saat dapat berfungsi sebagai INPUT saja atau OUTPUT saja. 4 | 5 | Jenis file dalam komputer : 6 | * **File Teks** : Isinya berupa alphanumeric (huruf dan angka yang dapat ditampilkan di layar, yaitu a-z,A-Z, dan 0-9, ditambah karakter khusus @, #, % dll), kadang dibedakan menjadi dua yaitu TEKS BIASA (ada kontrol pengaturan tampilan, contoh CETAK TEBAL), dan TEKS MURNI : Hanya teks tanpa kontrol tampilan. 7 | * **File Binary** : Isinya berupa kode-kode yang sebagian besar tidak dapat di tampilkan di layar. 8 | 9 | **Catatan**: 10 | > File TEKS dapat diproses/diolah sebagai file BINARY, tetapi file BINARY TIDAK DAPAT diproses sebagai file TEKS. 11 | 12 | 13 | Dalam bahasa C, ada beberapa fungsi yang sudah di sedaikan untuk operasi File: 14 | 15 | `fopen() ` : membuka /membuat file, awal proses 16 | `fclose()` : menutup operasi dengan file, akhir proses. 17 | 18 | **Output TEKS** 19 | 20 | `fprintf()` : menulis sesuatu ke dalam file 21 | `fputs()` : menulis sesuatu ke dalam file (untuk data berupa string/char saja) 22 | 23 | **INPUT TEKS** 24 | 25 | * `fscanf()` : untuk membaca file teks dengan format 26 | * `fgets()` : membaca data dari file (hanya menghasilkan string sebanyak yang diperlukan) 27 | 28 | Untuk operasi dengan file BINARY ( dapat juga digunakan untuk file teks) 29 | 30 | * `fread()` : membaca data dari file BINARY 31 | * `fwrite()` : menulis ke dalam file binary 32 | 33 | `fopen()`: Adalah fungsi untuk membuka file yang sudah ada atau membuat file baru, tergantung pada opsi yang dipilih. Daftar opsi yang disediakan adalah sebagai berikut: `fopen("myfile.txt","w");` 34 | 35 | * `r` : Membuka sebuah file teks (yang sudah ada) hanya untuk dibaca. (ada potensi terjadi runtime error jika file tidak ditemukan) 36 | * `w ` : Membuka sebuah file teks untuk ditulisi. Jika nama file tidak ada dalam sistim akan dibuat sebuah file baru sesuai dengan nama file yang diberikan. catatan: Penulisan akan dimulai dari awal (jika file sudah ada isinya akan ditimpa). 37 | * `a ` : Membuka sebuah file teks untuk ditulisi dengan mode MENAMBAH (tidak menghapus data yang sudah ada dalam file). Jika file belum ada, akan dibuatkan file baru sesuai nama file yang diberikan. Penulisan dimulai dari bagian akhir file. 38 | * `r+ ` : Membuka sebuah teks file untuk dibaca dan ditulis mulai dari AWAL, jika sudah ada isinya akan ditimpa. 39 | * `w+ ` : Membuka file teks untuk ditulis dan dibaca. Pertama kali isi dalam file akan dikosongkan, .0atau membuat file baru jika file yang diinginkan tidak ditemukan. 40 | * `a+ ` : Membuka file teks untuk dibaca dan ditulis. Membuat file baru jika belum ada. Pembaca file mulai dari AWAL, penulisan mulai dari bagian akhir. 41 | 42 | ## Catatan: 43 | Untuk menggunakan/mengolah file binary ( data yang disimpan tidak seperti yang ditampilkan) digunakan opsi sebagai berikut: (menambah huruf 'b' pada daftar opsi yang di jelaskan di atas), contoh: 44 | 45 | ` "rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b" ` 46 | 47 | **Contoh:** 48 | 49 | #include 50 | main() { 51 | FILE *fp; //pointer untuk variabel FILE bukan nama file 52 | 53 | // membuka file dengan mode 'w+' : ditulis, dibaca, menghapus isi yang sudah ada. 54 | fp = fopen("test.txt", "w+"); 55 | 56 | //menulis teks dalam file 57 | fprintf(fp, "Ini contoh kalimat untuk menulis sebuah file...\n"); 58 | 59 | //float f = 1.2; 60 | //fprintf(fp, f); //salah karena opsi 'w+' bukan 'w+b' 61 | 62 | //menuliskan teks dalam file 63 | fputs("Contoh menggunakan fungsi fputs untuk menulisi file...\n", fp); 64 | 65 | //setelah selesai melakukan operasi baca/tulis sebaiknya file dituup kembali dengan perintah fclose(); 66 | fclose(fp); 67 | } 68 | 69 | Contoh operasi dengan File BINARY: 70 | **Operasi Tulis**: 71 | 72 | /* fwrite example : write buffer */ 73 | #include 74 | 75 | int main () 76 | { 77 | FILE * pFile; 78 | char buffer[] = { 'A' , 'B' , '0', '1' }; 79 | float bfloat[] = { 1.5, 2.7 }; 80 | 81 | pFile = fopen ("myfile.bin", "wb"); 82 | //fwrite (buffer , sizeof(char), sizeof(buffer), pFile); 83 | fwrite (buffer , sizeof(float), sizeof(bfloat), pFile); 84 | 85 | 86 | fclose (pFile); 87 | return 0; 88 | } 89 | 90 | **Operasi Baca:** 91 | 92 | /* fread example: read an entire file */ 93 | #include 94 | #include 95 | 96 | int main () { 97 | FILE * pFile; 98 | long lSize; 99 | char * buffer; 100 | size_t result; 101 | 102 | pFile = fopen ( "myfile.bin" , "rb" ); 103 | //jika file tidak ditemukan keluar aplikasi 104 | if (pFile==NULL) {fputs ("File error",stderr); exit (1);} 105 | 106 | // obtain file size: 107 | //SCAN isi file dari awal sampai akhir 108 | fseek (pFile , 0 , SEEK_END); 109 | 110 | //menghitung ukuran file dari lokasi awal hingga lokasi pointer di akhir file. 111 | lSize = ftell (pFile); 112 | // mengembalikan pointer ke awal file 113 | rewind (pFile); 114 | 115 | // memesan memori untuk menampung isi file: 116 | buffer = (char*) malloc (sizeof(char)*lSize); 117 | if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);} 118 | 119 | // copy the file into the buffer: 120 | // memindah isi file ke dalam memori 121 | result = fread (buffer,1,lSize,pFile); 122 | if (result != lSize) {fputs ("Reading error",stderr); exit (3);} 123 | 124 | /* the whole file is now loaded in the memory buffer. */ 125 | 126 | // terminate 127 | fclose (pFile); 128 | free (buffer); 129 | return 0; 130 | } 131 | 132 | -------------------------------------------------------------------------------- /images/ch-07-05.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | kondisi? 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | YA 25 | 26 | 27 | TIDAK 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | Blok Perintah 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | break 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /images/ch-07-02.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | kondisi? 16 | 17 | 18 | 19 | 20 | 21 | 22 | Blok perintah 23 | dijalan bila kondisi TRUE 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | YA 38 | 39 | 40 | TIDAK 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | while (kondisi) 78 | { 79 | perintah untuk 80 | kondisi TRUE; 81 | } 82 | 83 | 84 | -------------------------------------------------------------------------------- /images/ch-07-06.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | Perintah 1 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | go to 42 | label 3 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Perintah 2 55 | 56 | 57 | 58 | 59 | 60 | 61 | Perintah 3 62 | 63 | 64 | 65 | label-3 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /Pertemuan-06.md: -------------------------------------------------------------------------------- 1 | # Pengambilan Keputusan (if-then) 2 | 3 | Dalam struktur pengambilan-keputusan (if-then), programmer perlu menentukan satu kondisi atau lebih yang akan dievaluasi oleh program, kemudian menuliskan statement yang akan dieksekusi jika kondisi tersebut bernilai benar (true), dan juga statement yang akan dieksekusi jika kondisi tersebut bernilai salah (false). 4 | 5 | Berikut ini adalah bentuk umum dari struktur if-then (pengambilan keputusan / decision making) yang banyak dijumpai dalam berbagai program: 6 | 7 | ![Gambar 5.1. Struktur Pengambilan keputusan](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-02-02.svg) 8 | 9 | > Gambar 5.1. Struktur Pengambilan Keputusan 10 | 11 | Dalam bahasa C, variabel yang memiliki nilai angka NOL atau NULL dianggap bernilai FALSE, selain itu variabel bernilai TRUE. Terdapat beberpa tipe struktur if-then dalam bahasa C, antara lain adalah sebagai berikut: 12 | 13 | Statement | Keterangan 14 | --- | --- 15 | ` if statement ` | Terdiri atas sebuah ekspresi boolean diikuti dengan satu statemen atau lebih. 16 | ` if...else statement ` | Sebuah if-statement dapat diikuti oleh else-statement yang akan dieksekusi jika eskspresi boolen menghasilkan nilai FALSE. 17 | ` nested if statements ` | if-statement dan else-statement dapat digunakan di dalam blok if dan else..statement yang lainya. 18 | ` switch statement ` | Sebuah switch-statement dapat digunakan jika ekspresi tidak berupa boolean ekspresi, menghasilkan nilai true lebih dari satu, contoh angka integer. 19 | ` nested switch statements ` | switch statement dapat digunakan di dalam switch statement yang lain. 20 | 21 | ## if-statement 22 | 23 | Syntax: 24 | 25 | if (boolean_expression) 26 | { 27 | /* statemen dieksekusi jika boolean_expression menghasilkan nilai TRUE */ 28 | } 29 | 30 | Contoh: 31 | 32 | #include 33 | 34 | int main () 35 | { 36 | /* definisi variabel lokal */ 37 | int a = 10; 38 | /* Periksa apakah nilai variabel a lebih kecil dari 20 */ 39 | if( a < 20 ) 40 | { 41 | /* statement di bawah ini dieksekusi jika a lebih kecil 20*/ 42 | printf("a is less than 20\n" ); 43 | } 44 | printf("value of a is : %d\n", a); 45 | 46 | return 0; 47 | } 48 | 49 | ## if..else statement 50 | 51 | Syntax: 52 | 53 | if(boolean_expression) 54 | { 55 | /* statement untuk ekspresi TRUE */ 56 | } 57 | else 58 | { 59 | /* statement untuk ekspresi FALSE*/ 60 | } 61 | 62 | Contoh: 63 | 64 | #include 65 | int main () 66 | { 67 | /* definisi variabel lokal */ 68 | int a = 100; 69 | 70 | /* memeriksa kondisi boolean */ 71 | if( a < 20 ) 72 | { 73 | /* kondisi TRUE */ 74 | printf("a kurang dari 20\n" ); 75 | } 76 | else 77 | { 78 | /* kondisi FALSE */ 79 | printf("a TIDAK KURANG DARI 20\n" ); 80 | } 81 | 82 | printf("value of a is : %d\n", a); 83 | 84 | return 0; 85 | } 86 | 87 | ## if..else if..else 88 | 89 | Syntax : 90 | 91 | if(boolean_expression 1) 92 | { 93 | /* Executes when the boolean expression 1 is true */ 94 | } 95 | else if( boolean_expression 2) 96 | { 97 | /* Executes when the boolean expression 2 is true */ 98 | } 99 | else if( boolean_expression 3) 100 | { 101 | /* Executes when the boolean expression 3 is true */ 102 | } 103 | else 104 | { 105 | /* executes when the none of the above condition is true */ 106 | } 107 | 108 | Contoh: 109 | 110 | #include 111 | int main () 112 | { 113 | /* local variable definition */ 114 | int a = 100; 115 | 116 | /* check the boolean condition */ 117 | if( a == 10 ) 118 | { 119 | /* if condition is true then print the following */ 120 | printf("Value of a is 10\n" ); 121 | } 122 | else if( a == 20 ) 123 | { 124 | /* if else if condition is true */ 125 | printf("Value of a is 20\n" ); 126 | } 127 | else if( a == 30 ) 128 | { 129 | /* if else if condition is true */ 130 | printf("Value of a is 30\n" ); 131 | } 132 | else 133 | { 134 | /* if none of the conditions is true */ 135 | printf("None of the values is matching\n" ); 136 | } 137 | 138 | printf("Exact value of a is: %d\n", a ); 139 | 140 | return 0; 141 | } 142 | 143 | ## Nested if ( if..statement di dalam if..statement) 144 | 145 | syntax: 146 | 147 | if( boolean_expression 1) 148 | { 149 | /* Executes when the boolean expression 1 is true */ 150 | if(boolean_expression 2) 151 | { 152 | /* Executes when the boolean expression 2 is true */ 153 | } 154 | } 155 | 156 | Contoh: 157 | 158 | #include 159 | int main () 160 | { 161 | /* local variable definition */ 162 | int a = 100; 163 | int b = 200; 164 | 165 | /* check the boolean condition */ 166 | if( a == 100 ) 167 | { 168 | /* if condition is true then check the following */ 169 | if( b == 200 ) 170 | { 171 | /* if condition is true then print the following */ 172 | printf("Value of a is 100 and b is 200\n" ); 173 | } 174 | } 175 | 176 | printf("Exact value of a is : %d\n", a ); 177 | printf("Exact value of b is : %d\n", b ); 178 | 179 | return 0; 180 | } 181 | 182 | ## Switch..statement 183 | 184 | Syntax: 185 | 186 | switch (expression){ 187 | case constant-expression : 188 | statement(s); 189 | break; /* optional */ 190 | case constant-expression : 191 | statement(s); 192 | break; /* optional */ 193 | /* you can have any number of case statements */ 194 | default : /* Optional */ 195 | statement(s); 196 | } 197 | 198 | Contoh: 199 | 200 | #include 201 | int main () 202 | { 203 | /* local variable definition */ 204 | char grade = 'B'; 205 | switch(grade) 206 | { 207 | case 'A' : 208 | printf("Excellent!\n" ); 209 | break; 210 | case 'B' : 211 | case 'C' : 212 | printf("Well done\n" ); 213 | break; 214 | case 'D' : 215 | printf("You passed\n" ); 216 | break; 217 | case 'F' : 218 | printf("Better try again\n" ); 219 | break; 220 | default : 221 | printf("Invalid grade\n" ); 222 | } 223 | 224 | printf("Your grade is %c\n", grade ); 225 | 226 | return 0; 227 | } 228 | 229 | ## Nested switch..statement 230 | 231 | Syntax: 232 | 233 | switch(ch1) { 234 | case 'A': 235 | printf("This A is part of outer switch" ); 236 | switch(ch2) { 237 | case 'A': 238 | printf("This A is part of inner switch" ); 239 | break; 240 | case 'B': /* case code */ 241 | } 242 | break; 243 | case 'B': /* case code */ 244 | } 245 | 246 | 247 | Contoh: 248 | 249 | #include 250 | int main () 251 | { 252 | /* local variable definition */ 253 | int a = 100; 254 | int b = 200; 255 | 256 | switch(a) { 257 | case 100: 258 | printf("This is part of outer switch\n", a ); 259 | switch(b) { 260 | case 200: 261 | printf("This is part of inner switch\n", a ); 262 | } 263 | } 264 | 265 | printf("Exact value of a is : %d\n", a ); 266 | printf("Exact value of b is : %d\n", b ); 267 | 268 | return 0; 269 | } 270 | 271 | 272 | ## Operator ` ? : ` 273 | 274 | Operator ?: dapat digunakan untuk menggantikan statement if-else, dengan struktur sebagai berikut: 275 | 276 | exp1 ? exp2 : exp3; 277 | 278 | Dimana exp1, exp2, dan exp3 adalah sebuah espresi. Pertamakali exp1 akan dievaluasi jika menghasikan nilai TRUE maka exp2 akan dieksekusi, sebaliknya jika exp1 menghasilkan nilai FALSE maka exp3 yang akan di eksekusi. 279 | 280 | Contoh: 281 | 282 | x==12 ? printf("variabel x=12") : printf(variabel x TIDAK SAMA dengan 12"); 283 | -------------------------------------------------------------------------------- /Pertemuan-04.md: -------------------------------------------------------------------------------- 1 | ## Struktur Program 2 | 3 | Sebuah program bahasa C biasanya terdiri atas beberapa bagian sebagai berikut: 4 | 5 | * Preprocessor Commands 6 | * Functions 7 | * Variables 8 | * Statement & expression 9 | * Comments 10 | 11 | Kode program bahasa C berikut ini adalah sebuah contoh sederhana untuk menampilkan kalimat "Hello World" 12 | 13 | 1. #include 14 | 2. 15 | 3. int main() 16 | 4. { 17 | 5. /* my first program in C */ 18 | 6. printf("Hello, World! \n"); 19 | 7. 20 | 8. return 0; 21 | 9. } 22 | 23 | ### Keterangan program: 24 | 25 | Baris pertama pada program di atas `#include ` adalah sebuah `preprocessor command`, yang mengatakan kepada kompiler C untuk memasukan file `stdio.h` dalam proses kompilasi. 26 | 27 | Baris 3 terdapat kode `int main()` adalah merupakan fungsi utama yang akan dijalankan pertama kali. Nama fungsi ini tidak boleh di ganti harus ada salah satu fungsi yang memiliki nama `main`. 28 | 29 | Pada baris 5, terdapat kode `/* … */` dimana semua teks yang terdapat di antara tanda tersebut tidak diterjemahkan oleh kompiler atau disebut sebagai `comment` atau keterangan. 30 | 31 | Pada baris 6 terdapat kode `printf(…)` adalah sebuah pernyataan (statement) yang berupa pemanggilan sebuah fungsi yang tersedia dalam bahasa C yang dapat digunakan untuk menampilkan kalimat `"Hello World"` di layar. 32 | 33 | Pada baris terakhir terdapat `return 0`, merupakan perintah untuk menghentikan fungsi main dan mengembalikan nilai NOL (0) sebagai hasilnya. 34 | 35 | ## Kompilasi program bahasa C dengan menggunakan COMMAND-LINE 36 | 37 | * periksa lokasi folder dari program kompiler 38 | * pastikan lokasi tersebut sudah termasuk dalam daftar PATH dalam sistem komputer. check dengan perintah `C:\> path`, dijalankan dari window `COMMAND-PROMPT`. 39 | 40 | ### Contoh: 41 | 42 | setelah proses instalasi bloodshed selesai, maka program kompiler akan disimpan pada folder `'C:\Dev-Cpp\MinGW32\bin'` .. 43 | 44 | ![Lokasi folder kompiler dalam paket Bloodshed Dev-Cpp](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-04-01.jpeg) 45 | 46 | > Gambar 4.1. Lokasi Folder Program KOmpiler 47 | 48 | Selanjutnya untuk memastikan lokasi folder tersebut masuk dalam daftar `PATH`, lakukan dengan cara sebagai berikut: 49 | * Buka window ` COMMAND-PROMPT ` 50 | * Jalankan perintah berikut: ` C:\> path = %PATH%;C:\Dev-Cpp\MinGW32\bin [ENTER] ` 51 | * Periksa dengan memanggil program path lagi, ` C:\>path [ENTER] `, pastikan ada nama lokasi folder kompiler dalam daftar yang ditampilkan 52 | 53 | ![periksa PATH](https://github.com/handaga/Algoritma-dan-Pemrograman/blob/master/images/ch-04-02.jpeg) 54 | 55 | > Gambar 4.2. Memeriksa PATH pada sistem 56 | 57 | ## Kompilasi dengan MingW32 58 | 59 | Kompilasi dengan menggunakan kompiler MingW32 dapat dilakukan dengan cara sebagai berikut: 60 | 61 | ` C:\>mingw32-gcc test.c -o test.exe ` 62 | 63 | ## Kompiler Visual Studio Express 64 | 65 | Setelah proses instalasi visual studio, jika digunakan mesin 32bit, default lokasi program adalah pada 66 | folder ` C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC ` dan biasanya installer akan menambahkan lokasi folder tersebut dalam daftar PATH sistem. 67 | 68 | cara lain untuk menambahkan lokasi folder program kompiler kedalam PATH dapat digunakan cara sebagai berikut: 69 | 70 | ![lokasi folder vs](https://github.com/handaga/Algoritma-dan-Pemrograman/blob/master/images/ch-04-03.jpeg) 71 | 72 | > Gambar 4.3. Lokasi folder program kompiler Visual Studio 32 bit 73 | 74 | Untuk melakukan kompilasi dengan menggunakan visual studio melalu perintah COMMAND-LINE dapat dilakukan dengan cara sebagai berikut: 75 | 76 | * Pengaturan (pemilihan) platform 32 bit dengan perintah ` C:\> vcvarsall x86 ` 77 | * Kompilasi program bahasa C, ` C:\> cl test.c ` jika proses kompilasi berhasil akan dihasilkan dua buah file ` *.obj ` dan ` *.exe ` 78 | * Untuk menjalakan program hasil kompilasi ketik nama file ` C:\> test.exe ` 79 | 80 | ## Note: 81 | 82 | Kompiler bahasa C, Visual Studio Express 2010 dapat di download di sini 83 | [Visual Studio 2010 Express, ISO (694 MB)](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCIQFjABahUKEwioxtu7kJvIAhUQco4KHY_rDQw&url=https%3A%2F%2Fgo.microsoft.com%2F%3Flinkid%3D9709969&usg=AFQjCNFe_9nMjDI9awG4mVO-aRP3FlxwtA&sig2=453kDuPVA0vR8qjp8aGvUQ&cad=rja) 84 | 85 | Editor Text yang di sarankan: 86 | 87 | * [Notepad++](https://notepad-plus-plus.org) 88 | * [Sublime Text 2](http://www.sublimetext.com) 89 | 90 | ## Dasar-dasar Syntax Bahasa C 91 | 92 | ### Token 93 | 94 | Token adalah bagian terkecil dari sebuah program, dalam bahasa C, sebuah token dapat berupa keyword, identifier, konstanta, literal, atau simbol. Sebagai contoh, pernyataan dalam bahasa C berikut ini terdiri atas 5 token. 95 | 96 | printf("Hello, World! \n"); 97 | 98 | daftar token: 99 | 100 | printf // identifier 101 | ( // simbol 102 | "Hello, World! \n" //literal 103 | ) // simbol 104 | ; // simbol akhir sebuah pernyataan 105 | 106 | ### Semicolon (simbol titik-koma, ";" ) 107 | 108 | Dalam bahasa C, simbol titik-koma digunakan sebagai TANDA AKHIR dari sebuah pernyataan. Jadi setiap pernyataan harus diakhiri dengan simbol SEMICOLON. 109 | 110 | Berikut contoh pernyataan dengan bahasa C: 111 | 112 | printf("Hello, World! \n"); 113 | return 0; 114 | 115 | ### Komentar (Comment) atau keterangan program 116 | 117 | Komentar dalam bahasa C serupa dengan penjelasan dari pernyataan/program. Komentar dapat ditambahkan pada program dengan cara menambahkan simbol /* (awal) ….. */ (akhir). atau // (utk satu baris) 118 | Contoh: 119 | 120 | /* 121 | Ini keterangan pada baris pertama 122 | sedangkan baris ini adalah keterangan pada baris kedua 123 | */ 124 | 125 | atau 126 | 127 | // simbol DOUBLE-SLASH // digunakan untuk menambahkan SATU BARIS keterangan 128 | 129 | 130 | ### Identifier 131 | 132 | Identifier adalah NAMA yang digunakan untuk mengidentifikasi nama VARIABEL, FUNGSI, atau item lain yang dibuat/didefinisikan oleh USER. 133 | 134 | Identifier dapat berupa HURUF BESAR ( A .. Z) atau huruf KECIL (a..z), atau GARIS BAWAH ( underscore, '_ '), dan ANGKA (0 … 9) 135 | 136 | a..z,A..Z,0..9,_ 137 | 138 | Dalam bahasa C huruf BESAR berbeda dengan huruf kecil, disebut CASE-SENSITIVE, variabel 'a' berbeda dengan variabel 'A'. (upcase & lowercase) 139 | 140 | int a; 141 | float A; 142 | 143 | int A&; //salah 144 | int A#; // tidak boleh 145 | int A_2; //ini boleh 146 | int A-2; //TIDAK boleh 147 | 148 | ### Keyword 149 | 150 | Keyword adalah nama/kata-kata yang TIDAK BOLEH digunakan oleh USER, untuk memberi nama VARIABLE atau FUNGSI. 151 | 152 | Daftar Keyword: 153 | 154 | auto, else, long, switch 155 | break, enum, register, typedef 156 | case, extern, return, union 157 | char, float, short, unsigned 158 | const, for, signed, viod 159 | continue, goto, sizeof, volatile 160 | default, if, static, while 161 | do, int, struct, _Packed 162 | double 163 | 164 | ### Whitespace 165 | 166 | Whitespace adalah simbol atau karakter yang tidak diterjemahkan oleh kompiler, terdiri atas, SPASI, TAB, CARRIAGE-RETURN (tombol ENTER) ganti baris (line Feed). Kadang disebut sebagai karakter atau simbol yang TIDAK TAMPAK di LAYAR. 167 | 168 | contoh baris kode berikut menghasilkan output yang sama: 169 | 170 | int A=0; 171 | int A = 0; 172 | int A (TAB)(TAB) = (TAB) 0; 173 | 174 | int A 175 | = 176 | 0; 177 | 178 | jadi dalam kode bahasa C, WHITESPACE berapapun jumlahnya akan di abaikan oleh kompiler, atau tidak mempengaruhi hasil. 179 | 180 | 181 | 182 | 183 | -------------------------------------------------------------------------------- /images/ch-07-03.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | kondisi? 16 | 17 | 18 | 19 | 20 | 21 | 22 | Blok perintah 23 | dijalan bila kondisi TRUE 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | YA 38 | 39 | 40 | TIDAK 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | for (init; condition; increment) 78 | { 79 | perintah untuk 80 | kondisi TRUE; 81 | } 82 | 83 | 84 | 85 | 86 | 87 | Init 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | increment 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /images/ch-01-03.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | mulai 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | input: 22 | Jarak (S meter) 23 | waktu (t detik) 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | Menghitung kecepatan: 35 | v = S/t 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | Output: 47 | "kecepatan" 48 | 49 | 50 | 51 | 52 | 53 | 54 | selesai 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | t=0? 66 | 67 | 68 | 69 | No 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | Menghitung kecepatan: 83 | v = 0 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | yes 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /Pertemuan-03.md: -------------------------------------------------------------------------------- 1 | ## Struktur Dasar Algoritma 2 | 3 | Bagian ini membahas tentang struktur dasar yang membentuk sebuah Algoritma. Terdapat tiga struktur utama dalam Algoritma: 4 | 5 | 1. Struktur sekuensial 6 | 2. Struktur seleksi (if-then) 7 | 3. Struktur pengulangan (loop) 8 | 9 | ### SEKUENSIAL 10 | 11 | Pada struktur sekuensial, langkah-langkah yang dilakukan dalam algoritma diproses secara berurutan: 12 | 13 | ![Gambar 2.1 Algoritma Sekuensial](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-02-01.svg) 14 | 15 | contoh kasus: 16 | 17 | * Buatlah diagram alir untuk mengubah nilai suhu yang semula bersatusan Fahrenheit menjadi Celcius 18 | * Diagram alir untuk menghitung sisi-miring dari sebuah segitiga. 19 | * Diagram alir untuk menukar isi dua buah variabel 20 | 21 | ### Seleksi (if-then) 22 | 23 | Sturktur seleksi (if-then) menyatakan pemilihan langkah berdasarkan suatu kondisi (pengambilan keputusan). 24 | 25 | ![Gambar 2.2 Algoritma Seleksi atau if-then](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-02-02.svg) 26 | 27 | Contoh kasus: 28 | 29 | * Diagram alir untuk menentukan bilangan terbesar dari dua buah bilangan x dan y. 30 | * Sebuah minimarket memberikan diskon 10% bagi pembeli yang belanja minimum 100.000. 31 | 32 | ### Pengulangan (loop) 33 | 34 | Struktur pengulangan menyatakan suatu tindakan yang dijalankan berulang kali, selama kondisi terpenuhi (benar). 35 | 36 | ![Gambar 2.3a Algoritma Pengulangan atau Loop](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-02-03.svg) 37 | 38 | atau 39 | 40 | ![Gambar 2.3b Algoritma Pengulangan atau Loop](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-02-03b.svg) 41 | 42 | Contoh kasus: 43 | 44 | * Buatlah tulisan "selamat Belajar" sebanyak 12 baris dengan menggunakan algoritma berulang. 45 | * Buatlah tabel yang berisi nilai kuadrat dari seuah angka berurutan dari 1 sampai 10, dengan menggunakan struktur berulang. 46 | 47 | ## Pedoman Penyusunan Algoritma 48 | Bagian ini menjelaskan mengenai ketentuan yang digunakan untuk menyusun Algoritma dan Pseudocode. 49 | 50 | * Dasar Penyusunan Algoritma 51 | * Pedoman Penyusunan Pseudocode 52 | 53 | ### Dasar Penyusunan Algoritma 54 | 55 | Sampai saat ini belum ada aturan baku tentang bagaiaman menyusun sebuah algoritma. Pada prinsipnya setiap orang memiliki kebebasan untuk menyusun algoritma sesuai dengan cara pikirnya. Untuk mewujudkan Algoritma, agar dapat dipahami oleh orang lain, maka orang perlu menulis algoritma, dengan menggunakan diagram alir ataupun pseudocode. 56 | 57 | Namun demikian terdapat beberapa hal yang perlu diperhatikan dalam menyusun algoritma. Terdapat LIMA CIRI penting yang harus dimiliki oleh sebuah algoritma, yaitu FINITENESS, DEFINITENESS, INPUT, OUPUT, dan EFFECTIVITY (Knuth, 1973; Horowitz, 1999). 58 | 59 | 1. **Finiteness** (memiliki akhir) : menyatakan bahwa setelah melakukan proses maka apapun kondisinya suatu algoritma harus memiliki akhir. 60 | 2. **Definiteness** (setiap perintah harus pasti) : menyatakan bahwa setiap langkah harus dinyatakan dengan jelas (tidak mengandung lebih dari satu satu maksud) 61 | 3. **Input**: Setiap algoritma boleh memiliki satu input, banyak input atau tidak memiliki input. 62 | 4. **Output**: Setiap algoritma harus memiliki minimum satu output, algoritma boleh memiliki banyak output. 63 | 5. **Effective** (efektif): Algoritma yang baik adalah algoritma yang beklerja secara efektif, yaitu semua operasi yang dilakukan oleh algoritma tersebut bersifat sederhana dan dapat diselesaikan dengan waktu yang terbatas. 64 | 65 | ### Pedoman Penyusunan Pseudocode 66 | 67 | Penyusunan algoritma dengan menggunakan pseudocode juga tidak ada standar yang baku, pedoman berikut ini adalah merupakan pedoman penyusunan algoritma dengan menggunakan pseudocode yang umum digunakan. 68 | 69 | 1. Notasi `<-` digunakan untuk memberi nilai pada sebuah variabel, contoh: `x <- 0` pseudocode tersebut untuk menyatakan bahwa variabel `x` akan diberi nilai `0` (nol). 70 | 2. Setiap pernyataan atau perintah yang dapat berdiri sendiri ditulis dalam baris tersendiri. Contoh: `x <- 1 + 2` merupakan pernyataan untuk menugaskan atau mengisi hasil penjumlahan bilangan `1` dan `2` ke dalam variabel `x`. 71 | 3. Setiap variabel skalar ditulis dengan menggunakan huruf kecil. Variabel skalar adalah sebuah nama atau simbol yang digunakan untuk menyimpan SEBUAH data yang dapat berubah nilainya. contoh variabel x, dapat digunakan untuk menyimpan SEBUAH angka berapapun nilainya. Variabel larik (deret) ditulis dengan huruf BESAR. Variabel larik dapat digunakan untuk meyimpan BEBERAPA data yang sejenis. Contoh variabel `A <- [1,4,5]`, variabel `**A**` berisi TIGA buah angka yaitu 1, 4, dan 5. Angka 1 merupakan elemen pertama dari variabel `A`, angka 4 merupakan elemen ke 2, dan angka 5 meruipakan elemen ke 3 dari variabel `A`. 72 | 4. Notasi seperti `A[i]` menyatakan elemen ke i pada variabel larik `A`. Nilai terkecil dari indek i adalah 0 (NOL), sehingga `A[0]` merupakan elemen pertama dari sebuah variabel larik. Untuk variabel larik dimensi-dua, ditulis dengan notasi `A[i,j]`, dengan i adalah indek untuk baris, dan j adalah indek untuk kolom. Contoh : `A[0,1]` untuk membaca atau menulis variabel larik `A` pada baris ke-0, kolom ke-1. 73 | 5. Notasi `jumlahELemen(**A**)` menyatakan ekspresi untuk memperoleh jumlah elemen larik `**A**`. 74 | 6. Vaiabel majemuk yaitu variabel yang dapat digunakan untuk menyimpan data tipe majemuk, satu variabel dapat menyimpan beberpa jenis data sekaligus. Notasi untuk variabel majemuk adalah sebagai berikut: 75 | 76 | mahasiswa = KUMPULAN 77 | nama 78 | umur 79 | nim 80 | AKHIR-KUMPULAN 81 | 82 | sedangkan untuk membaca atau mengisi varaiabel majemuk dapat digunakan notasi sebagai berikut: `mahasiswa->nama` dst. 83 | 84 | 7. Indentasi atau penjorokan ke kanan digunakan untuk menuliskan pernyataan-pernyataan yang berada dalam suatu struktur blok yang sama. contoh: 85 | 86 | JIKA x>1 MAKA 87 | pernyataan-1 88 | pernyataan-2 89 | pernyataan-3 90 | AKHIR-JIKA 91 | 92 | atau ditulis dengan cara seperti berikut: 93 | 94 | if (x>1) then 95 | pernyataan-1 96 | pernyataan-2 97 | pernyataan-3 98 | end-if 99 | 100 | 8. Simbol `//` digunakan untuk menyatakan komentar atau keterangan mengenai perintah, contoh: 101 | 102 | //A adalah larik dan n adalah jumlah elemen dalam larik 103 | bil <- bil + 1 // isi variabel bil ditambah dengan 1 104 | 105 | untuk menulis komentar lebih dari dari satu baris digunakan simbol 106 | 107 | /* 108 | di sini letak komentar baris 1\ 109 | baris 2 110 | dst 111 | */ 112 | 113 | 9. Notasi `masukan()` dan `tampilkan()` mewakili perintah untuk memperoleh masukan, dan menyaikan keluaran. Contoh 114 | 115 | masukan(panjang, lebar) 116 | tampilkan( luas ) 117 | 118 | 10. Terdapat dua nilai logika yaitu, BENAR dan SALAH, nilai ini dihasilkan oleh perbandingan yang menggunakan tanda seperti `<` (lebih kecil), `<=` (lebih kecil atau sama dengan), `>` (lebih besar), `>=` (lebih besar atau sama dengan), `=` (sama dengan), `!=` (tidak sama dengan). Selain itu, teradapat operator `DAN (&) `, `ATAU (|)`, dan `TIDAK (!)` yang dapat digunakan untuk membuat ekspresi yang menghasilkan nilai BENAR atau SALAH. Logika untuk operator DAN dan ATAU dapat dilihat pada tabel berikut: 119 | 120 | Tabel Operasi dengan DAN dan ATAU 121 | 122 | | a | b | a DAN b | a ATAU b | 123 | | ----- | ----- | -------- | -------- | 124 | | SALAH | SALAH | SALAH | SALAH | 125 | | BENAR | SALAH | SALAH | BENAR | 126 | | SALAH | BENAR | SALAH | BENAR | 127 | | BENAR | BENAR | BENAR | BENAR | 128 | 129 | 11. Berikut adalah bentuk yang menyatakan model penulisan untuk menangani struktur seleksi (if-then), dalam contoh di bawah, _pernyataan-1_ hingga _pernyataan-2_ akan dijalankan hanya kalau kondisi bernilai BENAR. Jika kondisi bernilai SALAH, _pernyataan-a_ sampai _pernyataan-b_ yang akan dijalankan. 130 | 131 | JIKA kondisi MAKA 132 | pernyataan-1 133 | … 134 | pernyataan-2 135 | SEBALIKNYA 136 | pernyataan-a 137 | … 138 | pernyataan-b 139 | AKHIR-JIKA 140 | 141 | 12. Berkut ini adalah psedocode bentuk seleksi (if-then) dengan beberapa kemungkinan. Apabila nilai yang terletak di sebelah kanan label COCOK, sama dengan nilai di samping label DENGAN, maka pernyataan di bawah DENGAN sampai dengan ketemu label DENGAN berikutnya akan dijalankan, setelah itu eksekusi akan dilanjutkan ke label AKHIR-COCOK. 142 | 143 | COCOK nilai 144 | DENGAN nilai-01 MAKA 145 | pernyataan-11 146 | pernyataan-12 147 | DENGAN nilai-02 MAKA 148 | pernyataan-21 149 | pernyataan-22 150 | DENGAN nilai-03 MAKA 151 | pernyataan-31 152 | pernyataan-32 153 | LAINNYA 154 | pernyataan-n1 155 | … 156 | pernyataan-n2 157 | AKHIR-COCOK 158 | 159 | 13. Berikut pseudocode bentuk perulangan (while-loop), dalam contoh di bawah pernyataan-1 hingga pernyataan-N akan dijalankan secara terus-menerus selama kondisi bernilai BENAR. 160 | 161 | ULANG SELAMA kondisi 162 | pernyataan-1 163 | … 164 | pernyataan-N 165 | AKHIR-ULANG 166 | 167 | 14. Berikut pseudocode bentuk perulangan (do-loop), pernyataan-1 sampai dengan pernyataan-N akan dijalankan berulang selama kondisi bernilai BENAR. 168 | 169 | ULANG 170 | pernyataan-1 171 | … 172 | pernyataan-N 173 | SELAMA kondisi; 174 | 175 | 15. Berikut adalah pseudocode untuk bentuk perulangan yang lain (for-loop), dalam contoh di bawah pernyataan-1 hingga pernyataan-2 akan dijalankan berulang mulai dari variabel bernilai 'awal' hingga variabel bernilai tidak lebih dari 'akhir'. Label LANGKAH menentukan penambahan terhadap nilai varibel berikutnya, label ini bersifat opsional (tidak wajib). Jika tidak ada label LANGKAH, maka nilai variabel akan bertambah dengan 1 di setiap pengulangan. 176 | 177 | UNTUK variabel=awal S/D akhir LANGKAH kenaikan 178 | Pernyataan-1 179 | .. 180 | Pernyataan-2 181 | AKHIR-UNTUK 182 | 183 | contoh: 184 | 185 | UNTUK bil=1 S/D 8 186 | tampilkan(bil) 187 | AKHIR-UNTUK 188 | 189 | UNTUK bil=1 S/D 8 STEP 3 190 | tapilkan(bil) 191 | AKHIR-UNTUK 192 | 193 | 16. Jika dalam algoritma terdapat proses (kumpulan pernyataan) yang akan sering di lakukan bebreapa kali, maka proses tersebut dapat dikelompokan menjadi sebuah prosedur atau fungsi tersendiri. Sebuah prosedure atau fungsi dapat menghasilkan nilai tertentu sebagai hasil dari proses dalam prosedure atau fungsi. 194 | 195 | PROSEDURE namaProsedure(daftar-parameter) 196 | pernyataan-1 197 | … 198 | pernyataan-2 199 | AKHIR-PROSEDURE 200 | 201 | atau 202 | 203 | FUNGSI namaFungsi(daftar-parameter) 204 | pernyataan-1 205 | … 206 | pernyataan-2 207 | AKHIR-FUNGSI 208 | 209 | contoh sebuah FUNGSI/PROSEDURE untuk mencari nilai terbesar dalam sebuah variabel larik. 210 | 211 | FUNGSI maksimum(A,n) 212 | //A adalah larik dan n adalah jumlah elemen larik 213 | terbesar <- A[0] 214 | UNTUK i=1 S/D panjang(A)-1 215 | JIKA terbesar < A[i] MAKA 216 | terbesar <- A[i] 217 | AKHIR-JIKA 218 | AKHIR-UNTUK 219 | NILAI BALIK terbesar 220 | AKHIR-FUNGSI 221 | 222 | -------------------------------------------------------------------------------- /Pertemuan-02.md: -------------------------------------------------------------------------------- 1 | ## Pengenalan istilah Algoritma dan Pemrograman 2 | Bab ini menerangkan mengenai pengertian tentang istilah program, bahasa pemrograman dan algoritma untuk meneyelesaikan masalah. 3 | * Pengertian Program dan Bahasa Pemrograman 4 | * Penerjemahan Bahasa 5 | * Penyelesaian masalah dengan program 6 | 7 | *** 8 | > ### Pengertian Program dan Bahasa Pemrograman 9 | 10 | Kumpulan instruksi yang digunakan untuk mengatur komputer agar melakukan suatu tindakan tertentu disebut program. 11 | 12 | > **Programer** (pemrogram) adalah orang yang membuat program, dan aktifiktas membuat program disebut dengan pemrograman (**programming** atau **coding**). Sedangkan instruksi yang digunakan untuk menyusun program disebut **bahasa permrograman**. 13 | 14 | Dalam bidang komputer terdapat berbagai jenis bahasa pemrograman, yang terdiri atas dua kelompok yaitu kelompok bahasa tingkat-tinggi (**high-level language**) dan kelompok bahasa tingkat rendah (**low-level language**). 15 | 16 | Bahasa Tingkat Tinggi adalah bahasa pemroraman yang berorientasi pada bahasa manusia, contoh: C, C++, Java, Pascal, Basic. python, php dan lain-lain. 17 | 18 | Bahasa Tingkat Rendah adalah bahasa yang berorienatasi pada mesin. Contoh: Assembly 19 | 20 | Komputer hanya dapat menjalankan instruksi dalam bentuk kombinasi bilangan biner, 0 dan 1, oleh karena itu agar instruksi manusia kepada sebuah mesin dengan menggunakan bahasa pemrograman dapat dipahami oleh sebuah komputer diperlukan sebuah penterjemah bahasa (**translator**) 21 | 22 | > ### Penterjemah Bahasa 23 | 24 | Terdapat dua jenis penterjemah bahasa pemrograman yaitu: 25 | * Kompiler (Compiler) 26 | * Interpreter 27 | 28 | Kompiler bekerja dengan cara menciptakan sebuah berkas baru dari berkas kode sumber. Berkas baru ini selanjutnya dapat dijalankan dalam komputer target secara langsung tidak memerlukan bantuan kompiler lagi. Contoh kompiler antara lain: C, C++, Pascal, C#, Fortran dan lainnya 29 | 30 | Sedangkan interpreter bekerja dengan cara menterjemahkan setiap baris perintah atau sekelompok baris perintah yang dimasukkan oleh programer. Kode sumber tidak dapat dijalankan tanpa interpreter. Contoh Interpreter antaralain Python, php, Ruby dan lainnya. 31 | 32 | > Proses penterjemahan dari bahasa pemrograman menjadi instruksi mesin disebut **proses kompilasi**. 33 | 34 | Luaran dari proses kompilasi adalah sebuah berkas yang berisi instruksi mesin (kode obyek, biasanya diberi ekstensi *.o singkatan dari Object), selanjutnya dilakukan proses linking yaitu proses penggabungan dengan obyek-obyek yang di-include dari pustaka/library dalam header dan pembuatan berkas baru dengan ekstensi *.exe agar dapat dijalankan secara langsung dalam komputer. 35 | 36 | ![Gambar 1-1. Proses Kompilasi](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-01-04.svg) 37 | 38 | Gambar 1.1. Proses Kompilasi 39 | 40 | > ## Penyelesaian Masalah dengan Program 41 | 42 | Tiga langkah penting dalam penyelesaian masalah: 43 | 44 | * Menganalisa masalah dan membuat algoritma 45 | * Menuangkan algoritma ke dalam bentuk program 46 | * Mengeksekusi dan menguji program 47 | 48 | ### Menganalisa masalah dan membuat algoritma: 49 | 50 | Tindakan yang diperlukan adalah mengidentifikasi data yang menjadi **MASUKAN/INPUT** dan mengidentifikasi informasi yang akan menjadi **KELUARAN/OUTPUT**. Selanjutnya menentukan **PROSEDUR/PROSES** untuk mengolah **INPUT** menjadi **OUTPUT** seperti yang dikehendaki. **PROSES/PROSEDURE** terdiri dari tahapan instruksi untuk menyelesaikan masalah sesuai dengan cara kerja komputer, inilah yang disebut sebagai **ALGORITMA**. 51 | 52 | ![Gambar 1-2. Diagram Analisa Permasalahan](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-01-00.svg) 53 | 54 | Gambar 1.2. Diagram Analisa Permasalahan 55 | 56 | ALGORITMA dapat disusun dengan menggunakan **FLOWCHART** (diagram alir) atau **PSEUDOCODE** (mirip kode program). 57 | 58 | Beberapa simbol DIAGRAM ALIR standar yang sering digunakan adalah sebagai berikut: 59 | 60 | ![Gambar 1-3. Simbol Diagram Alir standar](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-01-01.svg) 61 | 62 | Gambar 1.3. Simbol Diagram Alir Standar 63 | 64 | Keterangan: 65 | 66 | * **Terminator** : menyatakan titik awal atau titik akhir diagram alir, contoh: 67 | * **input/output** : juga disebut data, digunakan untuk operasi pemasukan data atau penampilan data, contoh: 68 | * **Proses** : menyatakan sebuah proses, misalnya proses perhitungan luas sebuah persegi panjang. 69 | * **Proses terdifinisi** menyatakan sub-prosedur/sub-proses lain. 70 | * **Pengambilan Keputusan** digunakan untuk melakukan pengambilan keputusan 71 | * **Penghubung** digunakan untuk menghuungkan ke berbagai bagian dalam diagram alir. 72 | 73 | Contoh algoritma menghitung luas lingkaran: 74 | 75 | ![Gambar 1-4. Contoh Algoritma Menghitung Luas Lingkaran](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-01-02.svg) 76 | 77 | Gambar 1.4. Contoh Algoritma Menghitung Luas Lingkaran 78 | 79 | 80 | ### Menuangkan algoritma ke dalam bentuk program 81 | 82 | Untuk menuangkan sebuah algoritma ke dalam bentuk program diperlukan pengetahuan tentang bahasa pemrograman. Dalam matakuliah ini akan dipelajari bahasa pemrograman C. 83 | 84 | sebagai contoh untuk menuangkan algoritma menghitung luas lingkaran ke dalam bahasa C adalah sebagai berikut: 85 | 86 | ![code-01] (https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/code-01-01.svg) 87 | 88 | ### Pseudocode: algoritma menghitung luas lingkaran 89 | 90 | ![pseudocode-01](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/pcode-01-01.svg) 91 | 92 | 93 | Contoh-2: Sebuah algoritma untuk menghitung kecepatan rata-rata, untuk menempuh sebuah lintasan. 94 | 95 | ![Gambar 1.5. COntoh algoritma menghitung kecepatan rata-rata](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-01-03.svg) 96 | 97 | Gambar 1.5. COntoh algoritma menghitung kecepatan rata-rata 98 | 99 | Kode Sumber (source code) menghitung kecepatan rata-rata 100 | 101 | ![code-2](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/code-01-02.svg) 102 | 103 | Pseudocode menghitung kecepatan rata-rata 104 | 105 | ![psudocode-02](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/pcode-01-02.svg) 106 | 107 | ## Mengeksekusi dan Menguji Program 108 | Setelah pembuatan kode program diperlukan proses kompilasi, selanjutnya aplikasi dapat dijalankan untuk diuji kebenarannya. 109 | 110 | Selama proses kompilasi ada beberapa kemungkinan kesalahan yang terjadi, terdapat dua jenis kesalahan yaitu: 111 | 112 | 1. Kesalahan Sintaksis 113 | 2. Kesalahan Logika 114 | 3. Kesalahan runtime 115 | 116 | Kesalahan SINTAKSIS disebabkan adanya kesalahan dalam menulis program sehingga TIDAK SESUAI dengan KAIDAH bahasa pemrograman yang digunakan. Contoh dalam bahasa C, kurang tanda TITIK-KOMA ( ;) di bagian akhir baris perintah. Kesalahan sintaksis terdeteksi pada saat melakukan proses kompilasi. 117 | 118 | Kesalahan LOGIKA adalah kesalahan yang terjadi karena ada logika yang salah. Misalnya ketika menghitung luas lingkaran, salah memasukan angka 31,4 untuk menyatakan 'pi' yang benar adalah 3,14. Akibatnya hasil perhitungan menjadi SALAH. Kesalahan seperti ini kadang sulit terdeteksi, terutama bila program aplikasi sudah sangat komplek. 119 | 120 | Kesalahan runtime atau kadang disebut kesalahan fatal, adalah jenis kesalahan yang disebabkan oleh suatu operasi/instruksi dalam program yang tidak dapat dijalankan oleh komputer karena keterbatasan sumberdaya. Sebagai contoh, kesalahan runtime yang paling sering terjadi adalah adanya proses aritmatika pembagian angka dengan sebuiah angka NOL (devided by zero). Jika komputer dipaksa melakukan operasi pembagian dengan bilangan NOL maka akan terjadi kesalahan runtime, dan komputer akan menampilkan berita kesalahan dan proses eksekusi program dihentikan. 121 | 122 | Kesalahan dalam program secara umum disebut dengan BUG, dan proses pencaraian kesalahan dalam program komputer oleh seorang programer juga disebut dengan proses DEBUG. Software tool yang bagus biasanya dilengkapi dengan fasilitas untuk melakukan DEBUGING (mencari BUG dan membetulkan kodeprogram). 123 | 124 | Dengan menggunakan fasilitas DEBUGING programer dapat mengeksekusi kode program baris demi baris sambil melakukan evaluasi terhadap data input dan outputnya. 125 | 126 | 127 | ## TUGAS-01 128 | Membuat ALGORITMA dengan DIAGRAM ALIR dan PSEUDOCODE untuk mencari AKAR-AKAR dari persamaan kwadrat: 129 | aX^2 + bx + c = 0 130 | 131 | ### Note: 132 | 133 | 1. Software GRATIS untuk mengedit gambar DIAGRAM ALIR [DIA: http://dia-installer.de](http://dia-installer.de) 134 | 2. Software GRATIS untuk mengupload FILE SEMBARANG ke github.com [GIT: https://git-scm.com/](https://git-scm.com) 135 | 136 | ## CARA MEMBUAT FILE BARU di GITHUB.COM 137 | 138 | ### ONLINE 139 | 140 | 1. Login to http://github.com 141 | 2. Membuat REPOSITORY baru (click menu 'New Repository'), masukan nama contoh: 'TUGAS-C' 142 | 3. Click/Buka reposiroty tersebut ('TUGAS-C') 143 | 4. Dibagian atas (sub-title) disamping nama respository, terdapat tanda + 144 | 5. Buat sebuah file baru dengan cara CLICK pada tanda + tersebut, berikan nama file contoh 'tugas-01.c' 145 | 6. Kemudian tuliskan jawaban tugas di bagian bawahnya 146 | 7. Jika sudah selesai, di bagian bawah kotak editor terdapat sebuah tombol warna hijau 'commit ..', click tombol tersebut untuk menyimpan file. 147 | 148 | 149 | ### OFFLINE 150 | 151 | (note: saat menyalin dan mengupload perlu online/internet) 152 | 153 | 1. Install software [GIT](https://git-scm.com) 154 | 2. Jalankan program 'Git Bash' 155 | 3. Buat folder/direktori kerja baru, contoh: `$ mkdir wd`, `wd` adalah nama folder kerja baru 156 | 4. Masuk ke dalam folder kerja dengan perintah `$ cd wd` 157 | 5. Menyalin repository dari github.com (pastikan anda sedang online), dengan perintah seperti berikut: `$ git clone http://github.com/[NIM]/[nama repository]` contoh: `$ git clone http://github.com/handaga/algoritma-dan-pemrograman` 158 | 6. Jika proses copy berhasil git akan membuat sebuah folder baru dengan nama yang sama dengan nama repository yang disalin, dalam contoh di atas, maka di bawah folder `wd` akan terbuat sub-folder baru dengan nama `algoritma-dan-pemrograman`. Untuk melihat folder baru tersebut dapat digunakan perintah `$ ls`. 159 | 7. Selanjutnya anda dapat bekerja secara OFFLINE, dengan menambahkan FILE atau FOLDER baru di bawah folder `algoritma-dan-pemrograman`. Untuk melakukan hal ini dapat digunakan `Windows Explorer` 160 | 8. Jika sudah selesai menambah file/folder kedalam repository, selanjutnya untuk mengupdate/mengupload semua hasil kerja ke GITHUB.COM anda perlu menjalankan `GIT Bash` dan memiliki koneksi internet. 161 | 9. Jalankan `Git Bash` dan buka folder kerja, contoh `$ cd wd` then `$ cd algoritma-dan-pemrograman` 162 | 10. Tambahkan SEMUA folder atau file baru dalam proyek, dengan perintah `$ git add [nama file/folder]`. Contoh: `$ git add main.c` 163 | 11. Jalankan perintah COMMIT, `$ git commit -m 'menambah file baru'` 164 | 12. upload semua yang sudah ditambahkan ke github.com, `$ git push origin master`, selanjutnya masukan USER Dan PASSWORD anda. 165 | -------------------------------------------------------------------------------- /Pertemuan-09.md: -------------------------------------------------------------------------------- 1 | # Tipe variabel TURUNAN 2 | 3 | Variabel turunan adalah variabel yang disusun dari variabel-variabel tipe dasar (` char, int, float ` dan yang lainnya). Contoh beberapa tipe variabel turunan antara lain ` String `, ` Structures `, dan ` Unions `. Pengguankan jumlah bit dalam variabel turun juga dapat di atur dengan menggunakan ` Bit Field ` berupa sebuah angka untuk menentukan jumlah bit yang akan digunakan dalam varaiabel tersebut. 4 | 5 | 6 | ## String 7 | 8 | String adalah berupa array dari sebuah char, dalam bahasa C, variabel String diakhir dengan karakter NULL termination (` "\0" `, sebuah array char agar dapat diproses sebagai string harus di beri tanda ` "\0" ` di bagian akhir, contoh: ` char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; `. Jika variabel dideklarasikan sebagaio ` String ` maka secara otomatis akan diberikan tambahan karakter ` '\0` ` sebagai karakter terakhir (penutup). 9 | 10 | Contoh: 11 | 12 | #include 13 | 14 | int main () { 15 | 16 | char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; 17 | String SALAM = "Hello"; 18 | 19 | printf("Greeting message: %s\n", greeting ); 20 | printf("Ucapakan salam: %s\n", SALAM ); 21 | return 0; 22 | } 23 | 24 | ### Beberapa operasi dalam String 25 | 26 | * ` strcpy(s1, s2); ` : copy (menyalin) dari String sumber ` S2 ` ke String tujuan ` S1 ` 27 | * ` strcat(s1, s2); ` : Menggabung ` s2 ` dan ` s1 `, dengan ` s1 ` diletakkan di depan ` s2 ` 28 | * ` strlen(s1); `: menghitung jumlah huruf dalam ` s1 ` (tidak termasuk karakter NULL) 29 | * ` strcmp(s1, s2); ` : Membandingkan dua string, hasil sama dengan NOL (0) jika SAMA, NEGATIF jika `s1` lebih pendek dari `s2` dan POSITIF jika `s1` lebih panjang dari ` s2 `. 30 | * ` strchr(s1, ch); ` : Mencarai huruf ` ch ` dalam string ` s1 `, hasil berupa POINTER yang menunjuk ke alamat huruf ` ch ` dalam string ` s1 `, jika ` ch ` ditemukan. 31 | * ` strstr(s1, s2); `: Mencari potongan string ` s2 ` dalam string ` s1 `, hasil berupa POINTER yang menunjuk ke alamat huruf pertama string ` s2 ` dalam ` s1 `, jika ditemukan. 32 | 33 | ## Contoh mencari HURUF dalam STRING: 34 | 35 | #include 36 | #include 37 | 38 | int main(void) 39 | { 40 | const char *str = "Try not. Do, or do not. There is no try."; 41 | char target = 'T'; 42 | const char *result = str; 43 | 44 | while((result = strchr(result, target)) != NULL) { 45 | printf("Found '%c' starting at '%s'\n", target, result); 46 | ++result; // Increment result, otherwise we'll find target at the same location 47 | } 48 | } 49 | 50 | 51 | ## Contoh mencari string (s2) dalam string yang lain (s1) 52 | 53 | /* strstr example */ 54 | #include 55 | #include 56 | 57 | int main () 58 | { 59 | char str[] ="This is a simple string"; 60 | char * pch; 61 | pch = strstr (str,"simple"); 62 | strncpy (pch,"sample",6); 63 | puts (str); 64 | return 0; 65 | } 66 | 67 | > Contoh lain 68 | 69 | #include 70 | #include 71 | 72 | void find_str(char const* str, char const* substr) 73 | { 74 | char* pos = strstr(str, substr); 75 | if(pos) { 76 | printf("found the string '%s' in '%s' at position: %ld\n", substr, str, pos - str); 77 | } else { 78 | printf("the string '%s' was not found in '%s'\n", substr, str); 79 | } 80 | } 81 | 82 | int main(void) 83 | { 84 | char* str = "one two three"; 85 | find_str(str, "two"); 86 | find_str(str, ""); 87 | find_str(str, "nine"); 88 | find_str(str, "n"); 89 | 90 | return 0; 91 | } 92 | 93 | Output: 94 | 95 | found the string 'two' in 'one two three' at position: 4 96 | found the string '' in 'one two three' at position: 0 97 | the string 'nine' was not found in 'one two three' 98 | found the string 'n' in 'one two three' at position: 1 99 | 100 | ## Structure 101 | 102 | Sebuah tipe data yang dapat digunakan untuk menggabung beberapa tipe data yang lain dalam sebuah group, contoh dekalrasi sebuah variebl tipe structure : 103 | 104 | struct Books { 105 | char title[50]; 106 | char author[50]; 107 | char subject[100]; 108 | int book_id; 109 | } book; 110 | 111 | dalam dekalrasikan di atas ` Books ` adalah nama structurenya dan ` book ` adalah nama alias (nama lain) dari structur, bukan NAMA VARIABEL structure. Untuk membaca isi varaiabel di dalam sebuah structure menggunakan NAMA VARAIABEL STRUCTUR kemudian tanda 'TITK' ( ` . `) dan diikuti dengan nama variabel anggota. 112 | 113 | Berikut ini adalah contoh bagaimana menggunakan variabel structure dalam program. 114 | 115 | #include 116 | #include 117 | 118 | struct Books { 119 | char title[50]; 120 | char author[50]; 121 | char subject[100]; 122 | int book_id; 123 | }; 124 | 125 | int main( ) { 126 | 127 | struct Books Book1; /* Declare Book1 of type Book */ 128 | struct Books Book2; /* Declare Book2 of type Book */ 129 | 130 | /* book 1 specification */ 131 | strcpy( Book1.title, "C Programming"); 132 | strcpy( Book1.author, "Nuha Ali"); 133 | strcpy( Book1.subject, "C Programming Tutorial"); 134 | Book1.book_id = 6495407; 135 | 136 | /* book 2 specification */ 137 | strcpy( Book2.title, "Telecom Billing"); 138 | strcpy( Book2.author, "Zara Ali"); 139 | strcpy( Book2.subject, "Telecom Billing Tutorial"); 140 | Book2.book_id = 6495700; 141 | 142 | /* print Book1 info */ 143 | printf( "Book 1 title : %s\n", Book1.title); 144 | printf( "Book 1 author : %s\n", Book1.author); 145 | printf( "Book 1 subject : %s\n", Book1.subject); 146 | printf( "Book 1 book_id : %d\n", Book1.book_id); 147 | 148 | /* print Book2 info */ 149 | printf( "Book 2 title : %s\n", Book2.title); 150 | printf( "Book 2 author : %s\n", Book2.author); 151 | printf( "Book 2 subject : %s\n", Book2.subject); 152 | printf( "Book 2 book_id : %d\n", Book2.book_id); 153 | 154 | return 0; 155 | } 156 | 157 | Ouptut: 158 | 159 | Book 1 title : C Programming 160 | Book 1 author : Nuha Ali 161 | Book 1 subject : C Programming Tutorial 162 | Book 1 book_id : 6495407 163 | Book 2 title : Telecom Billing 164 | Book 2 author : Zara Ali 165 | Book 2 subject : Telecom Billing Tutorial 166 | Book 2 book_id : 6495700 167 | 168 | > variabel STRUCTURE sebagai parameter sebuah FUNGSI 169 | 170 | #include 171 | #include 172 | 173 | struct Books { 174 | char title[50]; 175 | char author[50]; 176 | char subject[100]; 177 | int book_id; 178 | }; 179 | 180 | /* function declaration */ 181 | void printBook( struct Books book ); 182 | 183 | int main( ) { 184 | 185 | struct Books Book1; /* Declare Book1 of type Book */ 186 | struct Books Book2; /* Declare Book2 of type Book */ 187 | 188 | /* book 1 specification */ 189 | strcpy( Book1.title, "C Programming"); 190 | strcpy( Book1.author, "Nuha Ali"); 191 | strcpy( Book1.subject, "C Programming Tutorial"); 192 | Book1.book_id = 6495407; 193 | 194 | /* book 2 specification */ 195 | strcpy( Book2.title, "Telecom Billing"); 196 | strcpy( Book2.author, "Zara Ali"); 197 | strcpy( Book2.subject, "Telecom Billing Tutorial"); 198 | Book2.book_id = 6495700; 199 | 200 | /* print Book1 info */ 201 | printBook( Book1 ); 202 | 203 | /* Print Book2 info */ 204 | printBook( Book2 ); 205 | 206 | return 0; 207 | } 208 | 209 | void printBook( struct Books book ) { 210 | 211 | printf( "Book title : %s\n", book.title); 212 | printf( "Book author : %s\n", book.author); 213 | printf( "Book subject : %s\n", book.subject); 214 | printf( "Book book_id : %d\n", book.book_id); 215 | } 216 | 217 | Output: 218 | 219 | Book title : C Programming 220 | Book author : Nuha Ali 221 | Book subject : C Programming Tutorial 222 | Book book_id : 6495407 223 | Book title : Telecom Billing 224 | Book author : Zara Ali 225 | Book subject : Telecom Billing Tutorial 226 | Book book_id : 6495700 227 | 228 | > Pointer untuk menunjuk alamat variabel structure 229 | 230 | Untuk membaca nilaivariabel anggota digunakan simbol ` -> ` sebagai pengganti TITIK dalam variabel structure, Contoh: 231 | 232 | 233 | #include 234 | #include 235 | 236 | struct Books { 237 | char title[50]; 238 | char author[50]; 239 | char subject[100]; 240 | int book_id; 241 | }; 242 | 243 | /* function declaration */ 244 | void printBook( struct Books *book ); 245 | int main( ) { 246 | 247 | struct Books Book1; /* Declare Book1 of type Book */ 248 | struct Books Book2; /* Declare Book2 of type Book */ 249 | 250 | /* book 1 specification */ 251 | strcpy( Book1.title, "C Programming"); 252 | strcpy( Book1.author, "Nuha Ali"); 253 | strcpy( Book1.subject, "C Programming Tutorial"); 254 | Book1.book_id = 6495407; 255 | 256 | /* book 2 specification */ 257 | strcpy( Book2.title, "Telecom Billing"); 258 | strcpy( Book2.author, "Zara Ali"); 259 | strcpy( Book2.subject, "Telecom Billing Tutorial"); 260 | Book2.book_id = 6495700; 261 | 262 | /* print Book1 info by passing address of Book1 */ 263 | printBook( &Book1 ); 264 | 265 | /* print Book2 info by passing address of Book2 */ 266 | printBook( &Book2 ); 267 | 268 | return 0; 269 | } 270 | 271 | void printBook( struct Books *book ) { 272 | 273 | printf( "Book title : %s\n", book->title); 274 | printf( "Book author : %s\n", book->author); 275 | printf( "Book subject : %s\n", book->subject); 276 | printf( "Book book_id : %d\n", book->book_id); 277 | } 278 | 279 | Output: 280 | 281 | Book title : C Programming 282 | Book author : Nuha Ali 283 | Book subject : C Programming Tutorial 284 | Book book_id : 6495407 285 | Book title : Telecom Billing 286 | Book author : Zara Ali 287 | Book subject : Telecom Billing Tutorial 288 | Book book_id : 6495700 289 | 290 | > Bit Fields 291 | JUmlah bit yang diperlukan untuk menyimpan data dalam anggota variabel structure dapat ditentukan dengan menggunakan bit field, contoh: 292 | 293 | struct packed_struct { 294 | unsigned int f1:1; 295 | unsigned int f2:1; 296 | unsigned int f3:1; 297 | unsigned int f4:1; 298 | unsigned int type:4; 299 | unsigned int my_int:9; 300 | } pack; 301 | 302 | Dalam deklarasi di atas anggota ` f1 .. f4 ` menggunakan SATU bit, ` type ` menggunakan EMPAT bit, dan ` my_int ` menggunakan SEMBILAN bit. 303 | 304 | 305 | ## Union 306 | 307 | Tipe data spesial dalam C yang dapat menyimpan beberapa tipe yang berbeda dalam lokasi memori yang sama. 308 | 309 | Deklarasi: 310 | 311 | union Data { 312 | int i; 313 | float f; 314 | char str[20]; 315 | } data; 316 | 317 | Contoh dalam program: 318 | 319 | #include 320 | #include 321 | 322 | union Data { 323 | int i; 324 | float f; 325 | char str[20]; 326 | }; 327 | 328 | int main( ) { 329 | 330 | union Data data; 331 | 332 | data.i = 10; 333 | data.f = 220.5; 334 | strcpy( data.str, "C Programming"); 335 | 336 | printf( "data.i : %d\n", data.i); 337 | printf( "data.f : %f\n", data.f); 338 | printf( "data.str : %s\n", data.str); 339 | 340 | return 0; 341 | } 342 | 343 | Output: 344 | 345 | data.i : 1917853763 346 | data.f : 4122360580327794860452759994368.000000 347 | data.str : C Programming 348 | 349 | Note: 350 | isi data variabel i & f dalam union sudah tidak betul sebab isinya tertimpa dengan data.str yang merupakan perintah terakhir yang melibatkan variabel union. 351 | 352 | ## Typedef 353 | 354 | Programmer juga dapat mendefinisikan tipe variabel sendiri berdasarkan tipe variabel dasar dengan perintah ' typedef ` 355 | Contoh 356 | 357 | typedef unsigned char BYTE; 358 | BYTE b1, b2; 359 | 360 | Contoh lain: 361 | 362 | #include 363 | #include 364 | 365 | typedef struct Books { 366 | char title[50]; 367 | char author[50]; 368 | char subject[100]; 369 | int book_id; 370 | } Book; 371 | 372 | int main( ) { 373 | 374 | Book book; 375 | 376 | strcpy( book.title, "C Programming"); 377 | strcpy( book.author, "Nuha Ali"); 378 | strcpy( book.subject, "C Programming Tutorial"); 379 | book.book_id = 6495407; 380 | 381 | printf( "Book title : %s\n", book.title); 382 | printf( "Book author : %s\n", book.author); 383 | printf( "Book subject : %s\n", book.subject); 384 | printf( "Book book_id : %d\n", book.book_id); 385 | 386 | return 0; 387 | } 388 | 389 | 390 | 391 | 392 | -------------------------------------------------------------------------------- /Pertemuan-08.md: -------------------------------------------------------------------------------- 1 | # Pointer 2 | 3 | Komputer menyimpan data seperti halnya sebuah rak yang diberi nomor. Nomor rak disebut ALAMAT dan isi rak disebut data, setiap rak dalam komputer dapat digunakan untuk menyimpan data besar **8 bit** atau **1 Byte**. 4 | 5 | Sebuah variabel tipe char, memerlukan memeori sebesar 1 Byte ( 8 bit ) sehingga hanya perlu 1 lokasi (alamat) rak, sedangkan variabel tipe integer memerlukan memori sebesar 4 Byte, sehingga perlu 4 lokasi (alamat), dan ALAMAT yang PERTAMA yang akan digunakan dalam proses pengolahan data variabel, contoh misal terdapat sebuah variable integer ` var ` maka operasi ` &var ` akan menghasilkan ALAMAT dari Byte pertama. 6 | 7 | 8 | POINTER adalah sebuah variabel yang memiliki nilai yang berupa ALAMAT dari lokasi memori variabel yang lain. 9 | 10 | contoh deklarasi variable pointer: 11 | 12 | int *ip; /* pointer to an integer */ 13 | double *dp; /* pointer to a double */ 14 | float *fp; /* pointer to a float */ 15 | char *ch /* pointer to a character */ 16 | 17 | note: 18 | POINTER hanya dapat menunjuk ke **SATU TIPE** variabel. Sebuah variabel pointer yang dideklarasikan sebagai pointer variabel integer **TIDAK BOLEH** digunakan untuk menunjuk ke variabel tipe char, float atau tipe yang lainnya. 19 | 20 | ## NULL POINTER 21 | Pointer yang belum diisi dengan sebauah alamat disebut ` NULL POINTER ` (tidak menunjuk ke alamat manapun) 22 | 23 | ## Cara menggunakana variabel Pointer 24 | 25 | * Deklarasi variabel pointer ( ` int * NP; int VAR; //pointer variabel integer `); 26 | * Assign (mengisi) variabel pointer dengan alamat dari sebuah tipe variabel yang ditunjuk sesuai dengan deklarasinya ( ` NP = &VAR `) 27 | * Membaca NILAI atau ISI alamat yang ditunjuk oleh Pointer ( ` printf("Nilai ALAMAT yang ditunjuk NP adalah %d", *NP `) 28 | 29 | ### Contoh penggunaan variabel pointer 30 | 31 | #include 32 | 33 | int main () { 34 | 35 | int var = 20; /* actual variable declaration */ 36 | int *ip; /* pointer variable declaration */ 37 | 38 | ip = &var; /* store address of var in pointer variable*/ 39 | 40 | printf("Address of var variable: %x\n", &var ); 41 | 42 | /* address stored in pointer variable */ 43 | printf("Address stored in ip variable: %x\n", ip ); 44 | 45 | /* access the value using the pointer */ 46 | printf("Value of *ip variable: %d\n", *ip ); 47 | 48 | return 0; 49 | } 50 | 51 | Output dari kode program di atas adalah sebagai berikut: 52 | 53 | Address of var variable: bffd8b3c 54 | Address stored in ip variable: bffd8b3c 55 | Value of *ip variable: 20 56 | 57 | 58 | ## Operasi dalam pointer 59 | 60 | * Operasi Matematika ( ` NP++ `): Alamat akan bertambah sesuai dengan jumlah memori variabel yang ditunjuk, tipe `int * NP ` akan bertambah EMPAT ALAMT (4 ALAMAT), sedangkan tipe ` char * NP ` akan bertambah SATU (1 ALAMAT) 61 | * Array Pointer, sebuah array dengan elemen berupa pointer (` char *AP[5] `) 62 | * Pointer dari variabel pointer yang lain (` **DP `) 63 | * POinter sebagai argumen dalam sebuah fungsi (` void namafungsi(int *P ) ` ) 64 | * Pointer sebagai return value dari sebuah fungsi (` int * namafungsi(char CH) `) 65 | 66 | 67 | 68 | ### Contoh Operasi matematik dalam pointer 69 | 70 | > Operasi PENAMBAHAN (increment) 71 | 72 | #include 73 | 74 | const int MAX = 3; 75 | 76 | int main () { 77 | 78 | int var[] = {10, 100, 200}; 79 | int i, *ptr; 80 | 81 | /* let us have array address in pointer */ 82 | ptr = var; 83 | 84 | for ( i = 0; i < MAX; i++) { 85 | 86 | printf("Address of var[%d] = %x\n", i, ptr ); 87 | printf("Value of var[%d] = %d\n", i, *ptr ); 88 | 89 | /* move to the next location */ 90 | ptr++; 91 | } 92 | 93 | return 0; 94 | } 95 | 96 | 97 | Output dari kode program di atas adalah: 98 | 99 | Address of var[0] = bf882b30 100 | Value of var[0] = 10 101 | Address of var[1] = bf882b34 102 | Value of var[1] = 100 103 | Address of var[2] = bf882b38 104 | Value of var[2] = 200 105 | 106 | > Operasi PENGUARANGAN ( Decrement ) 107 | 108 | #include 109 | 110 | const int MAX = 3; 111 | 112 | int main () { 113 | 114 | int var[] = {10, 100, 200}; 115 | int i, *ptr; 116 | 117 | /* let us have array address in pointer */ 118 | ptr = &var[MAX-1]; 119 | 120 | for ( i = MAX; i > 0; i--) { 121 | 122 | printf("Address of var[%d] = %x\n", i, ptr ); 123 | printf("Value of var[%d] = %d\n", i, *ptr ); 124 | 125 | /* move to the previous location */ 126 | ptr--; 127 | } 128 | 129 | return 0; 130 | } 131 | 132 | Output dari kode program di atas adalah: 133 | 134 | Address of var[3] = bfedbcd8 135 | Value of var[3] = 200 136 | Address of var[2] = bfedbcd4 137 | Value of var[2] = 100 138 | Address of var[1] = bfedbcd0 139 | Value of var[1] = 10 140 | 141 | > Operasi PERBANDINGAN ( operator yang dapat digunakan ==, <, dan > ) 142 | 143 | #include 144 | 145 | const int MAX = 3; 146 | 147 | int main () { 148 | 149 | int var[] = {10, 100, 200}; 150 | int i, *ptr; 151 | 152 | /* let us have address of the first element in pointer */ 153 | ptr = var; 154 | i = 0; 155 | 156 | while ( ptr <= &var[MAX - 1] ) { 157 | 158 | printf("Address of var[%d] = %x\n", i, ptr ); 159 | printf("Value of var[%d] = %d\n", i, *ptr ); 160 | 161 | /* point to the previous location */ 162 | ptr++; 163 | i++; 164 | } 165 | 166 | return 0; 167 | } 168 | 169 | Output dari kode program di atas adalah: 170 | 171 | Address of var[0] = bfdbcb20 172 | Value of var[0] = 10 173 | Address of var[1] = bfdbcb24 174 | Value of var[1] = 100 175 | Address of var[2] = bfdbcb28 176 | Value of var[2] = 200 177 | 178 | 179 | ### Variabel Array dengan Elemen berupa Pointer 180 | 181 | #include 182 | 183 | const int MAX = 3; 184 | 185 | int main () { 186 | 187 | int var[] = {10, 100, 200}; 188 | int i; 189 | 190 | for (i = 0; i < MAX; i++) { 191 | printf("Value of var[%d] = %d\n", i, var[i] ); 192 | } 193 | 194 | return 0; 195 | } 196 | 197 | atau 198 | 199 | #include 200 | 201 | const int MAX = 3; 202 | 203 | int main () { 204 | 205 | int var[] = {10, 100, 200}; 206 | int i, *ptr[MAX]; 207 | 208 | for ( i = 0; i < MAX; i++) { 209 | ptr[i] = &var[i]; /* assign the address of integer. */ 210 | } 211 | 212 | for ( i = 0; i < MAX; i++) { 213 | printf("Value of var[%d] = %d\n", i, *ptr[i] ); 214 | } 215 | 216 | return 0; 217 | } 218 | 219 | Output dari kode program di atas adalah: 220 | 221 | Value of var[0] = 10 222 | Value of var[1] = 100 223 | Value of var[2] = 200 224 | 225 | Contoh lain: 226 | 227 | #include 228 | 229 | const int MAX = 4; 230 | 231 | int main () { 232 | 233 | char *names[] = { 234 | "Zara Ali", 235 | "Hina Ali", 236 | "Nuha Ali", 237 | "Sara Ali", 238 | }; 239 | 240 | int i = 0; 241 | 242 | for ( i = 0; i < MAX; i++) { 243 | printf("Value of names[%d] = %s\n", i, names[i] ); 244 | } 245 | 246 | return 0; 247 | } 248 | 249 | Output: 250 | 251 | Value of names[0] = Zara Ali 252 | Value of names[1] = Hina Ali 253 | Value of names[2] = Nuha Ali 254 | Value of names[3] = Sara Ali 255 | 256 | ### Contoh variabel pointer untuk menunjuk ke variabel pointer laiinya (Pointer dari pointer) 257 | 258 | #include 259 | 260 | int main () { 261 | 262 | int var; 263 | int *ptr; 264 | int **pptr; 265 | 266 | var = 3000; 267 | 268 | /* take the address of var */ 269 | ptr = &var; 270 | 271 | /* take the address of ptr using address of operator & */ 272 | pptr = &ptr; 273 | 274 | /* take the value using pptr */ 275 | printf("Value of var = %d\n", var ); 276 | printf("Value available at *ptr = %d\n", *ptr ); 277 | printf("Value available at **pptr = %d\n", **pptr); 278 | 279 | return 0; 280 | } 281 | 282 | Output: 283 | 284 | Value of var = 3000 285 | Value available at *ptr = 3000 286 | Value available at **pptr = 3000 287 | 288 | 289 | ### Contoh Pointer sebagai Argumen dalam fungsi 290 | 291 | #include 292 | 293 | /* function declaration */ 294 | double getAverage(int *arr, int size); 295 | 296 | int main () { 297 | 298 | /* an int array with 5 elements */ 299 | int balance[5] = {1000, 2, 3, 17, 50}; 300 | double avg; 301 | 302 | /* pass pointer to the array as an argument */ 303 | avg = getAverage( balance, 5 ) ; 304 | 305 | /* output the returned value */ 306 | printf("Average value is: %f\n", avg ); 307 | return 0; 308 | } 309 | 310 | double getAverage(int *arr, int size) { 311 | 312 | int i, sum = 0; 313 | double avg; 314 | 315 | for (i = 0; i < size; ++i) { 316 | sum += arr[i]; 317 | } 318 | 319 | avg = (double)sum / size; 320 | return avg; 321 | } 322 | 323 | Output: 324 | 325 | Average value is: 214.40000 326 | 327 | 328 | ### Contoh Pointer sebagai RETURN TYPE sebuah fungsi 329 | 330 | #include 331 | #include 332 | 333 | /* function to generate and retrun random numbers. */ 334 | int * getRandom( ) { 335 | 336 | static int r[10]; 337 | int i; 338 | 339 | /* set the seed */ 340 | srand( (unsigned)time( NULL ) ); 341 | 342 | for ( i = 0; i < 10; ++i) { 343 | r[i] = rand(); 344 | printf("%d\n", r[i] ); 345 | } 346 | 347 | return r; 348 | } 349 | 350 | /* main function to call above defined function */ 351 | int main () { 352 | 353 | /* a pointer to an int */ 354 | int *p; 355 | int i; 356 | 357 | p = getRandom(); 358 | 359 | for ( i = 0; i < 10; i++ ) { 360 | printf("*(p + [%d]) : %d\n", i, *(p + i) ); 361 | } 362 | 363 | return 0; 364 | } 365 | 366 | Output: 367 | 368 | 1523198053 369 | 1187214107 370 | 1108300978 371 | 430494959 372 | 1421301276 373 | 930971084 374 | 123250484 375 | 106932140 376 | 1604461820 377 | 149169022 378 | *(p + [0]) : 1523198053 379 | *(p + [1]) : 1187214107 380 | *(p + [2]) : 1108300978 381 | *(p + [3]) : 430494959 382 | *(p + [4]) : 1421301276 383 | *(p + [5]) : 930971084 384 | *(p + [6]) : 123250484 385 | *(p + [7]) : 106932140 386 | *(p + [8]) : 1604461820 387 | *(p + [9]) : 149169022 388 | 389 | 390 | 391 | # Manajemen Memori 392 | 393 | Manajemen memori adalah sebuah cara untuk penggunaan memori secara efisien, yaitu dengan cara hanya menggunakan memori ketika perlu, dan membebaskan memori jika sudah tidak perlu, atau dengan kata lain mengalokasikan memori secara dinamik. Hal ini hanya dapat dilakukan dengan menggunakan bantuan variabel POINTER. 394 | 395 | Terdapat empat fungsi pustaka yang berkaitan dengan manajemen memori yaitu : 396 | * ` void *calloc(int num, int size); ` : digunakan untuk memesan (mengalokasikan ) memori untuk menyimpan variabel ARRAY sebanyak ` num ` dimana setiapelemen array berukuran ` size ` Byte. 397 | * ` void free(void *address); ` : digunakan untuk membebaskan memori agar dapat digunakan untuk keperluan lainnya, atau agar aplikasi yang lain dapat memanfaatkannya 398 | * ` void *malloc(int num); ` : Digunakan untuk mengalokasikan memori sebanyak ` num ` Byte 399 | * ` void *realloc(void *address, int newsize); ` : digunakan untuk menambah ukuran memori yang sudah pernah dipesan, menjadi berukuran ` newsize ` Byte. 400 | 401 | ## Contoh program dengan alokasi memori secara dinamik 402 | 403 | #include 404 | #include 405 | #include 406 | 407 | int main() { 408 | 409 | char name[100]; 410 | char *description; 411 | 412 | strcpy(name, "Zara Ali"); 413 | 414 | /* allocate memory dynamically */ 415 | description = malloc( 200 * sizeof(char) ); 416 | 417 | /* 418 | JIka digunakan fungsi calloc menjadi seperti berikut 419 | calloc(200, sizeof(char)); 420 | */ 421 | 422 | 423 | if( description == NULL ) { 424 | fprintf(stderr, "Error - unable to allocate required memory\n"); 425 | } 426 | else { 427 | strcpy( description, "Zara ali a DPS student in class 10th"); 428 | } 429 | 430 | printf("Name = %s\n", name ); 431 | printf("Description: %s\n", description ); 432 | } 433 | 434 | ## Memperbesar ukuran memori (realloc) dan membebaskan (free) memori 435 | 436 | #include 437 | #include 438 | #include 439 | 440 | int main() { 441 | 442 | char name[100]; 443 | char *description; 444 | 445 | strcpy(name, "Zara Ali"); 446 | 447 | /* allocate memory dynamically */ 448 | description = malloc( 30 * sizeof(char) ); 449 | 450 | if( description == NULL ) { 451 | fprintf(stderr, "Error - unable to allocate required memory\n"); 452 | } 453 | else { 454 | strcpy( description, "Zara ali a DPS student."); 455 | } 456 | 457 | /* suppose you want to store bigger description */ 458 | description = realloc( description, 100 * sizeof(char) ); 459 | 460 | if( description == NULL ) { 461 | fprintf(stderr, "Error - unable to allocate required memory\n"); 462 | } 463 | else { 464 | strcat( description, "She is in class 10th"); 465 | } 466 | 467 | printf("Name = %s\n", name ); 468 | printf("Description: %s\n", description ); 469 | 470 | /* release memory using free() function */ 471 | free(description); 472 | } 473 | -------------------------------------------------------------------------------- /images/ch-01-00.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /Pertemuan-07.md: -------------------------------------------------------------------------------- 1 | # Perintah Pengulangan (Loop statement) 2 | 3 | Dalam sebuah program sering diperlukan untuk menjalankan perintah secara berulang, untuk jumlah pengulangan yang sudah diketahui dapat menggunkan jenis ` for..loop `, untuk pengulangan yang belum jelas jumlah perulangannya dapat digunakan ` while..loop ` atau ` do ..while loop `. 4 | 5 | Gaambar 7.1 adalah sebuah diagram alir untuk menunjukkan proses perulangan, perintah akan dieksekusi secara berulang selama kondisi terpenuhi atau ekspresi menghasilkan nilai ` TRUE `. 6 | 7 | ![Diagram alir perulangan](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-07-01a.svg) 8 | > Gambar-7.1 Diagram alir perulangan 9 | 10 | Terdapat beberapa jenis perintah perulangan dalam bahasa C, antara lain sebagai berikut: 11 | 12 | * ` while loop ` 13 | * ` for loop ` 14 | * ` do while loop ` 15 | * ` nested loop ` 16 | 17 | Selain itu juga terdapat beberapa statemen (perintah) yang dapat digunakan untuk mengontrol proses perulangan yaitu: 18 | 19 | * ` break ` : keluar dari proses perulangan 20 | * ` continue ` : Melanjutkan proses perulangan tanpan mengekselusi perintah di bawah ` continue ` 21 | * ` goto ` : selanjutnya akan dieksekusi perintah yang berlabel sama dengan label di belakang perintah ' goto ` 22 | 23 | Perulangan tanpa akhir (forever) terjadi jika kondisi tidak pernah terpenuhi atau ekspresi tidak pernah menghasilkan nilai ` FALSE `, contoh : 24 | 25 | # Perintah Pengulangan (Loop statement) 26 | 27 | Dalam sebuah program sering diperlukan untuk menjalankan perintah secara berulang, untuk jumlah pengulangan yang sudah diketahui dapat menggunkan jenis ` for..loop `, untuk pengulangan yang belum jelas jumlah perulangannya dapat digunakan ` while..loop ` atau ` do ..while loop `. 28 | 29 | Gaambar 7.1 adalah sebuah diagram alir untuk menunjukkan proses perulangan, perintah akan dieksekusi secara berulang selama kondisi terpenuhi atau ekspresi menghasilkan nilai ` TRUE `. 30 | 31 | ![Diagram alir perulangan](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-07-01a.svg) 32 | > Gambar-7.1 Diagram alir perulangan 33 | 34 | Terdapat beberapa jenis perintah perulangan dalam bahasa C, antara lain sebagai berikut: 35 | 36 | * ` while loop ` 37 | * ` for loop ` 38 | * ` do while loop ` 39 | * ` nested loop ` 40 | 41 | Selain itu juga terdapat beberapa statemen (perintah) yang dapat digunakan untuk mengontrol proses perulangan yaitu: 42 | 43 | * ` break ` : keluar dari proses perulangan 44 | * ` continue ` : Melanjutkan proses perulangan tanpan mengekselusi perintah di bawah ` continue ` 45 | * ` goto ` : selanjutnya akan dieksekusi perintah yang berlabel sama dengan label di belakang perintah ' goto ` 46 | 47 | Perulangan tanpa akhir (forever) terjadi jika kondisi tidak pernah terpenuhi atau ekspresi tidak pernah menghasilkan nilai ` FALSE `, contoh : 48 | 49 | #include 50 | int main () 51 | { 52 | for( ; ; ) 53 | { 54 | printf("Pengulangan ini akan berlangsung selamanya.\n"); 55 | } 56 | return 0; 57 | } 58 | 59 | Jika setelah keyword ` for ` tidak ada kondisi (ekspresi), ` for ( ; ; ) ` maka akan dianggap sebagai ` TRUE ` 60 | 61 | ## while loop 62 | 63 | Pengulangan dengan ` while `, perintah akan dieksekusi selama kondisi terpenuhi (menghasilkan nilai true) 64 | 65 | syntax: 66 | 67 | while(condition) 68 | { 69 | statement(s); 70 | } 71 | 72 | statemen dapat berupa satu perintah atau satu blok ` { ... } ` pernintah 73 | diagram alir: 74 | 75 | ![while loop](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-07-02.svg) 76 | > Gambar-7.2 DIagram alir while loop 77 | 78 | Contoh: 79 | 80 | #include 81 | int main () 82 | { 83 | /* definisi variabel lokal */ 84 | int a = 10; 85 | 86 | /* eksekusi perulangan */ 87 | while( a < 20 ) 88 | { 89 | printf("Nilai variabel a: %d\n", a); 90 | a++; 91 | } 92 | 93 | return 0; 94 | } 95 | 96 | Output: 97 | 98 | Nilai variabel a: 10 99 | Nilai variabel a: 11 100 | Nilai variabel a: 12 101 | Nilai variabel a: 13 102 | Nilai variabel a: 14 103 | Nilai variabel a: 15 104 | Nilai variabel a: 16 105 | Nilai variabel a: 17 106 | Nilai variabel a: 18 107 | Nilai variabel a: 19 108 | 109 | 110 | ## for loop 111 | 112 | syntax: 113 | 114 | for ( init; condition; increment ) 115 | { 116 | statement(s); 117 | } 118 | 119 | ` init `: akan dieksekusi pertama dan hanya sekali. 120 | ` condition `: setelah eksekusi ekpsresi dalam 'init', selanjutnya dilakukan pemeriksaan (evaluasi) kondisi. Jika kondisi ` FALSE ` maka loop berakhir tanpa mengeksekusi statemen dalam loop. Sebaliknya jika kondisi menghasilkan nilai TRUE, maka statemen dalam loop akan dieksekusi, dan dilanjutkan dengan mengeksekusi bagian ` increment `. 121 | 122 | Berikut adalah gambar diagram alir perulangan dengan for loop 123 | 124 | ![for loop](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-07-03.svg) 125 | > Gambar-7.3 Perulangan dengan for loop 126 | 127 | Contoh: 128 | 129 | #include 130 | int main () 131 | { 132 | int a; 133 | /* eksekusi perulangan for loop */ 134 | for( a = 10; a < 20; a = a + 1 ) 135 | { 136 | printf("value of a: %d\n", a); 137 | } 138 | 139 | return 0; 140 | } 141 | 142 | Output: 143 | 144 | value of a: 10 145 | value of a: 11 146 | value of a: 12 147 | value of a: 13 148 | value of a: 14 149 | value of a: 15 150 | value of a: 16 151 | value of a: 17 152 | value of a: 18 153 | value of a: 19 154 | 155 | ## do .. while loop 156 | 157 | syntax: 158 | 159 | do 160 | { 161 | statement(s); 162 | } while( condition ); 163 | 164 | ` do..while ` loop serupa dengan ` while..loop `, perbedaan terletak pada cara mengeksekusi statetmen. Dalam do..while loop, statemen pasti dieksekusi minimal sekali. 165 | 166 | Diagram alir perulangan dengan do..while loop 167 | 168 | ![do while loop](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-07-04.svg) 169 | > Gambar-7.4 Diagram alir perulangan dengan do while loop 170 | 171 | Contoh: 172 | 173 | #include 174 | int main () 175 | { 176 | /* local variable definition */ 177 | int a = 10; 178 | /* do loop execution */ 179 | do 180 | { 181 | printf("value of a: %d\n", a); 182 | a = a + 1; 183 | } while( a < 20 ); 184 | 185 | return 0; 186 | } 187 | 188 | Output: 189 | 190 | value of a: 10 191 | value of a: 11 192 | value of a: 12 193 | value of a: 13 194 | value of a: 14 195 | value of a: 15 196 | value of a: 16 197 | value of a: 17 198 | value of a: 18 199 | value of a: 19 200 | 201 | ## Nested Loop (loop di dalam loop) 202 | 203 | Syntax: 204 | 205 | for ( init; condition; increment ) 206 | { 207 | for ( init; condition; increment ) 208 | { 209 | statement(s); 210 | } 211 | statement(s); 212 | } 213 | 214 | atau 215 | 216 | while(condition) 217 | { 218 | while(condition) 219 | { 220 | statement(s); 221 | } 222 | statement(s); 223 | } 224 | 225 | atau 226 | 227 | do 228 | { 229 | statement(s); 230 | do 231 | { 232 | statement(s); 233 | }while( condition ); 234 | }while( condition ); 235 | 236 | Contoh: 237 | 238 | #include 239 | int main () 240 | { 241 | /* local variable definition */ 242 | int i, j; 243 | 244 | for(i=2; i<100; i++) { 245 | for(j=2; j <= (i/j); j++) 246 | if(!(i%j)) break; // if factor found, not prime 247 | if(j > (i/j)) printf("%d is prime\n", i); 248 | } 249 | 250 | return 0; 251 | } 252 | 253 | Output: 254 | 255 | 2 is prime 256 | 3 is prime 257 | 5 is prime 258 | 7 is prime 259 | 11 is prime 260 | 13 is prime 261 | 17 is prime 262 | 19 is prime 263 | 23 is prime 264 | 29 is prime 265 | 31 is prime 266 | 37 is prime 267 | 41 is prime 268 | 43 is prime 269 | 47 is prime 270 | 53 is prime 271 | 59 is prime 272 | 61 is prime 273 | 67 is prime 274 | 71 is prime 275 | 73 is prime 276 | 79 is prime 277 | 83 is prime 278 | 89 is prime 279 | 97 is prime 280 | 281 | ## ` Break ` perintah untuk keluar dari proses loop 282 | 283 | Syntak: 284 | 285 | break; 286 | 287 | Diagram alir: 288 | 289 | ![break statement](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-07-05.svg) 290 | > Gambar-7.5 Perintah break 291 | 292 | Contoh: 293 | 294 | #include 295 | int main () 296 | { 297 | /* local variable definition */ 298 | int a = 10; 299 | /* while loop execution */ 300 | while( a < 20 ) 301 | { 302 | printf("value of a: %d\n", a); 303 | a++; 304 | if( a > 15) 305 | { 306 | /* terminate the loop using break statement */ 307 | break; 308 | } 309 | } 310 | 311 | return 0; 312 | } 313 | 314 | Output: 315 | 316 | value of a: 10 317 | value of a: 11 318 | value of a: 12 319 | value of a: 13 320 | value of a: 14 321 | value of a: 15 322 | 323 | # ` Continue ` 324 | 325 | Perintah continue mirip seperti break, perbedaannya pada perintah continue tidak keluar dari loop tetapi melompati semua statemen di bawahnya dan memproses kondisi pengeluangan. 326 | 327 | Syntax: 328 | 329 | continue; 330 | 331 | 332 | 333 | Contoh: 334 | 335 | #include 336 | int main () 337 | { 338 | /* local variable definition */ 339 | int a = 10; 340 | /* do loop execution */ 341 | do 342 | { 343 | if( a == 15) 344 | { 345 | /* skip the iteration */ 346 | a = a + 1; 347 | continue; 348 | } 349 | printf("value of a: %d\n", a); 350 | a++; 351 | 352 | }while( a < 20 ); 353 | 354 | return 0; 355 | } 356 | 357 | Output: 358 | 359 | value of a: 10 360 | value of a: 11 361 | value of a: 12 362 | value of a: 13 363 | value of a: 14 364 | value of a: 16 365 | value of a: 17 366 | value of a: 18 367 | value of a: 19 368 | 369 | 370 | ## Goto label 371 | 372 | Diagram alir: 373 | 374 | ![Continue](https://cdn.rawgit.com/handaga/Algoritma-dan-Pemrograman/master/images/ch-07-06.svg) 375 | > Gambar-7.5 Goto Lable 376 | 377 | Syntax: 378 | 379 | goto label; 380 | .. 381 | . 382 | label: statement; 383 | 384 | Contoh: 385 | 386 | #include 387 | int main () 388 | { 389 | /* local variable definition */ 390 | int a = 10; 391 | /* do loop execution */ 392 | LOOP:do 393 | { 394 | if( a == 15) 395 | { 396 | /* skip the iteration */ 397 | a = a + 1; 398 | goto LOOP; 399 | } 400 | printf("value of a: %d\n", a); 401 | a++; 402 | 403 | }while( a < 20 ); 404 | 405 | return 0; 406 | } 407 | 408 | Output: 409 | 410 | value of a: 10 411 | value of a: 11 412 | value of a: 12 413 | value of a: 13 414 | value of a: 14 415 | value of a: 16 416 | value of a: 17 417 | value of a: 18 418 | value of a: 19 419 | 420 | 421 | # Standar Input/Output ( I/O ) 422 | 423 | ## input keyboard berupa CHAR (satu huruf) 424 | 425 | Fungsi: 426 | 427 | getchar(); //input satu karakter dari keyboard 428 | puchar(); 429 | 430 | Contoh: 431 | 432 | #include 433 | int main( ) 434 | { 435 | int c; 436 | printf( "Enter a value :"); 437 | c = getchar( ); 438 | 439 | printf( "\nYou entered: "); 440 | putchar( c ); 441 | return 0; 442 | } 443 | 444 | Output: 445 | 446 | Enter a value : this is test 447 | You entered: t 448 | 449 | 450 | ## Input berupa teks / string /beberapa huruf(alphanumerik) /array of char 451 | 452 | Fungsi: 453 | 454 | gets(); 455 | puts(); 456 | 457 | Contoh: 458 | 459 | Contoh: 460 | 461 | #include 462 | int main( ) 463 | { 464 | char str[100]; 465 | 466 | printf( "Enter a value :"); 467 | gets( str ); 468 | 469 | printf( "\nYou entered: "); 470 | puts( str ); 471 | 472 | return 0; 473 | } 474 | 475 | 476 | Output: 477 | 478 | Enter a value : this is test 479 | You entered: this is test 480 | 481 | ## Input dengan format (angka atau teks) 482 | 483 | Fungsi: 484 | 485 | scanf() dan 486 | printf() 487 | 488 | Contoh: 489 | 490 | #include 491 | int main( ) 492 | { 493 | char str[100]; 494 | int i; 495 | 496 | printf( "Enter a value :"); 497 | scanf("%s %d", str, &i); 498 | 499 | printf( "\nYou entered: %s %d ", str, i); 500 | return 0; 501 | } 502 | 503 | 504 | Output: 505 | 506 | Enter a value : seven 7 507 | You entered: seven 7 508 | 509 | 510 | 511 | # fungsi 512 | 513 | 514 | Sebuah fungsi adalah sebuah grup statemen/perintah yang digunakan bersama untuk melakukan suatu perkerjaan. Setiap program Bahasa C memiliki fungsi minimal satu, yaitu ` main() `, dan hampir semua program memiliki fungsi tambahan. 515 | 516 | Anda dapat memisahkan program dalam bentuk fungsi, apa yang harus dilakukan dalam fungsi terserah pada pemrogram, biasanya fungsi dibuat untuk melakukan suatu pekerjaan khusus dan sering dilakukan. 517 | 518 | Deklarasi fungsi digunakan untuk mengatakan pada kompiler, tentang ` nama fungsi `, ` return type `, dan ` parameter `. Definisi fungsi merupakan kode program yang sebenarnya. 519 | 520 | Dalam bahasa C terdapat beberapa fungsi yang sudah siap digunakan (pustaka fungsi dasar). Sebagai contoh fungsi ` strcat() ` untuk menggabungkan dua buah string, fungsi ` memcpy() ` untuk menyalin isi memori ke lokasi memori yang lain. 521 | 522 | Fungsi dalam istilah pemrograman kadang disebut dengan method, sub-routine atau prosedur, dan sebagainya. 523 | 524 | ## Membuat definisi sebuah fungsi 525 | 526 | syntax: 527 | 528 | return_type function_name ( parameter list ) 529 | { 530 | body of the function 531 | } 532 | 533 | definisi fungsi terdiri atas header dan body, berikut adalah bagian-bagian detail dari sebuah fungsi: 534 | 535 | ` return_type `: sebuah fungsi boleh menghasilkan/mengembalikan sebuah nilai. return_type menerangkan tipe data yang akan dikembalikan oleh fungsi. Terdapat juga fungsi yang tidak mengembalikan nilai, dalam hal ini return_type berupa kata kunci void. 536 | 537 | ` function_Name `: Bagian ini adalah merupakan definisi nama fungsi. Nama fungsi bersama dengan parameternya disebut ` function signature `. 538 | 539 | ` parameters `: Sebuah parameter serupa dengan masukan untuk fungsi. Ketika fungsi dipanggil, setiap parameter perlu diberi nilai, nilai inilah yang disebut parameter atau argumen. Parameter dalam fungsi memiliki tipe data, posisi, dan jumlah. Parameter bersifat opsional (fungsi boleh tanpa parameter). 540 | 541 | function_body: bagian ini berisi kumpulan perintah yang akan dilakukan oleh fungsi. 542 | 543 | ## Contoh: 544 | 545 | Kode berikut ini adalah sebuah fungsi bernama max(). Fungsi ini memerlukan dua parameter yaitu ` num1 ` dan ` num2 ` dan mengembalikan nilai tertinggi diantara kedua parameter tersebut. 546 | 547 | /* function returning the max between two numbers */ 548 | int max(int num1, int num2) 549 | { 550 | /* local variable declaration */ 551 | int result; 552 | 553 | if (num1 > num2) 554 | result = num1; 555 | else 556 | result = num2; 557 | 558 | return result; 559 | } 560 | 561 | ## Membuat deklarasi fungsi: 562 | 563 | Deklarasi sebuah fungi mengatakan kepada kompiler tentang nama fungsi dan bagaimana cara memanggilnya. tubuh fungsi (function_body) dapat didefinisikan secara terpisah (dalam definisi fungsi). 564 | 565 | Deklarasi fungsi terdiri atas dua bagian yaitu: 566 | 567 | return_type function_name( parameter ); 568 | 569 | dengan menggunakan contoh fungsi max() pada kode di atas, deklarasi fungsi tersebut dapat dilakukan dengan cara berikut: 570 | 571 | int max(int num1, int num2); 572 | 573 | Dalam deklarasi fungsi nama-nama parameter tidak penting, yang penting adalah tipe datanya, sehingga dekalrasi dengan carfa seperti berikut juga boleh dilakukan: 574 | 575 | int max(int, int); 576 | 577 | Deklarasi diperlukan jika sebuah fungsi ditulis dalam sebuah file yang berbeda dengan program pemanggilnya. Sehingga dalam kasus yang demikian deklarasi fungsi perlu dibuat pada baris-baris atas sebelum nama fungsi dipanggil. 578 | 579 | ## Memanggil fungsi: 580 | 581 | Ketiak membuat sebuah fungsi, programer akan mendefinisikan apa yang harus dilakukan oleh fungsi. Untuk menggunakan sebuah fungsi, programer harus memanggil fungsi itu untuk melakukan pekerjaan yang telah didefinisikan dalam fungsi. 582 | 583 | Ketika sebuah program memanggil sebuah fungsi, maka program akan melakukan eksekusi terhadap fungsi tersebut. Sebagai tanda bahwa sebuah fungsi telah selesai melakukan pekerjaannya adalah adanya perintah ` return ` atau diakhiri dengan tanda penutup blok fungsi yaitu tutup kurung kurawal ` } `. 584 | 585 | Untuk memanggil sebuah fungsi, cukup dengan cara memanggil namanya dilengkapi dengan nilai argumen yang diperlukan, sebuah argumen dapat berupa ` literal ` atau ` variabel ` dari tipe data yang sama, hasilnya (nilai kembalian dari sebuah fungsi) dapat disimpan atau diproses lebih lanjut. 586 | 587 | Contoh: 588 | 589 | #include 590 | 591 | /* function declaration */ 592 | int max(int num1, int num2); 593 | 594 | int main () 595 | { 596 | /* local variable definition */ 597 | int a = 100; 598 | int b = 200; 599 | int ret; 600 | 601 | /* calling a function to get max value */ 602 | ret = max(a, b); 603 | 604 | printf( "Max value is : %d\n", ret ); 605 | 606 | return 0; 607 | } 608 | 609 | /* function returning the max between two numbers */ 610 | int max(int num1, int num2) 611 | { 612 | /* local variable declaration */ 613 | int result; 614 | 615 | if (num1 > num2) 616 | result = num1; 617 | else 618 | result = num2; 619 | 620 | return result; 621 | } 622 | 623 | Output: 624 | 625 | Max value is : 200 626 | 627 | ## Argumen dalam fungsi 628 | 629 | Jika dalam fungsi terdapat argumen, maka harus diklarasikan variabel-variabel yang akan menerima nilai-nilai masukan, variabel inilah yang disebut parameter. Parameter dideklarasikan setelah nama fungsi, dan diletakan di dalam tanda kurung. 630 | 631 | Paremeter bersifat seperti variabel lokal di dalam sebuah fungsi, yang akan dibuat saat fungsi dipanggil dan dihapus dari memori saat fungsi dah selesai dikerjakan. 632 | 633 | Terdapat dua cara memberikan nilai untuk setiap parameter dalam fungsi, yaitu ` call by value ` dan ` call by reference `. 634 | 635 | Call Type | Keterangan 636 | --- | --- 637 | call by value | Dengan cara ini setiap parameter akan menyalin nilai atau isi variabel yang diberikan sebagai argumen. Dengan cara ini perubahan nilai dalam parameter tidak akan berpengaruh pada argument. 638 | call by reference | Dengan cara ini parameter akan mengambil alamat memori penyimpan data dalam argumen. Di dalam fungsi yang digunakan adalah alamat yang sama dengan alamat memori dimana variabel dalam argumen disimpan. Sehingga perubahan nilai akan mempengaruhi nilai variabel argumen. 639 | 640 | 641 | Bahasa C secara default menggunakan cara ` call by value ` untuk mengisi nilai dalam parameter. Hal ini berarti bahwa kode dalam fungsi tidak dapat mempengaruhi nilai dalam argumen yang diberikan. Dalam contoh fungs ` max() ` di atas nilai ` num1 ` dan ` num2 ` tidak dapat dirubah di dalam fungsi. 642 | 643 | 644 | --------------------------------------------------------------------------------