Pemrograman Dasar C Minggu 6
Latihan Soal Buatlah program yang meminta seseorang untuk memasukkan angka bilangan riil sebanyak 3 kali, dan program akan menampilkan jumlah total dan rata-ratanya. Bilangan riil yang diminta tidak boleh negatif atau nol.
Topik Bahasan Menyimpan daftar data yang berhubungan Array dimensi tunggal dan ganda Loop lagi FOR loop cara yang bagus dan padat untuk menspesifikasi tingkah laku loop Input/Output Teks Bagaimana karakter disimpan dalam komputer kode ASCII Input/Output karakter tunggal Karakter String String I/O Layout Program
Array Daftar dari data (seperti daftar nilai mahasiswa atau set dari pengukuran yang diambil secara periodik) tidak masuk akal apabila menggunakan variabel individu yang banyak. Sebuah array adalah grup dari elemen yang berukuran sama dan bertipe sama. Catatan: tipe adalah spesifikasi. Semua tipe dalam C dapat mempunyai variabel array. (kecuali void tipe dengan tanpa nilai).
Array Sintaks: <tipe> <nama> [<ukuran dari array>] ukuran dari array harus integer positif konstan seperti [100] atau integer ekspresi konstan seperti [34*2]
Array Contoh: int my_array [4]; Dalam hal ini kita mendeklarasikan sebuah set dari 4 integer, kita dapat mengakses masing-masing dengan nomor indeksnya: x = my_array[0] atau x = my_array[1] atau x = my_array[2] atau x = my_array[3] Dipakai masing-masing seperti variabel integer lainnya. Catatan: elemen dari array di-indeks dari 0,1,2, Indeks adalah sebuah integer positif, dapat menggunakan variabel integer untuk mengakses array tapi tidak untuk membuat variabel.
Array (lagi ) Inisialisasi array dapat dilakukan saat didefinisikan: Sintaks: <tipe> <nama> [<ukuran>] = {nilai0, nilai1, nilain}; Contoh: #define JML_PENGUKURAN 6 int n = 0; float lebar[jml_pengukuran] = {24.20, 2.34, 1.34e2, 1.27, 99.23, 1.2e-1}; /* kode program lainnya disini */ do{ printf( \n lebar %d adalah %6.2f meter, n, lebar[n]); ++n; } while (n < JML_PENGUKURAN);
Array (lagi ) Outputnya: lebar 0 adalah 24.20 meter lebar 1 adalah 2.34 meter.. lebar 5 adalah 0.12 meter PERINGATAN: tidak ada pengecekan batas di C!!! Disini digunakan #define untuk membantu mengontrol
Lebih tentang Array Jika diinisialisasi, sebuah array tidak perlu menspesifikasi ukurannya: float a, current [] = {0.1, 2.1e3, 2.9, 1.97e-8}; a = current[2]; /* jadi a = 2.9 */ Mendeklarasikan 4 elemen array yang sudah diinisialisasi. Jika hanya menspesifikasi sebagian, sisanya dianggap nol PERINGATAN: variabel tanpa inisialisasi dapat berisi apapun! (tidak selalu nol). Dapat me-nol-kan seluruh array pada awal dengan mudah: int hasil [15] = {0}; Me-nol-kan seluruh 15 elemen dari array.
Array Dimensi Banyak Dapat dibuat dengan mudah, hanya tambah kotak ukuran ketika mendeklarasikan: int my_array [4][3]; Mendeklarasikan sebuah array 12 elemen (dapat disebut 4 baris dan 3 kolom) dan kita dapat mengaksesnya: an_int_var = my_array [2][0]; Mengakses elemen baris ketiga dan kolom pertama.
#define MHSW 5 #define NILAI 3 /* define memungkinkan perubahan ukuran global dengan mudah */ int hasil [MHSW][NILAI]; /* array 2-dimensi */ int mhsw_i = 0, nilai_i = 0; / * indeks array */ Contoh Array do { /* do loop ini untuk semua mahasiswa */ printf( \nuntuk Mahasiswa %d, mhsw_i + 1); while (nilai_i < (NILAI 1)) { /* loop ini untuk nilai ujian */ printf( \n\tmassukkan Ujian %d, nilai_i + 1); /* disini kita memasukkan nilai ujian */ scanf( %d, &hasil[mhsw_i][nilai_i]); ++nilai_i; } /* akhir dari while loop / nilai_i = 0; ++mhsw_i ; } while (mhsw_i < MHSW);
For Loop For loop berfungsi seperti while loop tapi memungkinkan inisialisasi, testing dll dapat dilaksanakan dengan singkat. Sintaks: for (<ekspresi_1>; <ekspresi_2>; <ekspresi_3>) { /* hanya membutuhkan {} untuk statemen banyak */ statemen-statemen }
For Loop for (<ekspresi_1>; <ekspresi_2>; <ekspresi_3>) { /* hanya membutuhkan {} untuk statemen banyak */ statemen-statemen } Dimana: <ekspresi_1> dikomputasi sebelum pertama kali loopnya dimasuki: biasanya sebuah ekspresi inisialisasi seperti x = 2 <ekspresi_2> dikomputasi sebelum setiap pengulangan (iterasi) dari loop sebagai sebuah tes true atau false untuk menentukan apakah statemen dalam loop harus dieksekusi: sama dengan ekspresi tes di while loop. Contoh x < 9 berarti lakukanlah loop bila x lebih kecil dari 9. <ekspresi_3> dikomputasi pada akhir dari setiap iterasi dari loop, sering digunakan untuk menambah atau mengurangi, contoh ++i
Contoh For Loop Sebuah contoh sederhana: int x, y = 10; statemen lain; for (x=0; x<y; ++x) printf( \n%d, x); statemen lain; Mencetak angka dari 0 ke 9 Catatan: karena hanya satu statemen dalam loop, kita bisa tanpa { dan }
Perbandingan For Loop: int x, y = 10; statemen lain; for (x=0; x<y; ++x) printf( \n%d, x); statemen lain; While Loop int x, y = 10; statemen lain; x = 0; while (x<y) { printf( \n%d, x); ++x; } statemen lain;
#include <stdio.h> #define MAX_X 2 #define MAX_Y 3 #define MAX_Z 2 Contoh Inisialisasi Array Multi Dimensi void main (void) { int mul_array [MAX_X][MAX_Y][MAX_Z] = {{{0,1}, {2,3}, {9,8}}, {7,6}, {5,4}, {10,11}}}; int x, y, z; } printf( \nset dari X\n ); for(x=0; x < MAX_X; x++) { printf( \tset dari Y\n ); for(y=0; y < MAX_Y; y++) { printf( \t\tset dari Z ); for(z=0; z < MAX_Z; z++) { printf( %3d, mul_array[x][y][z]); } /* akhir dari z-loop */ printf( \n ); } /* akhir dari y-loop */ printf( \n ); } /* akhir dari x-loop */
Tambahan utk For Loop Menyingkirkan bagian dari for loop Semua dari ketiga ekpresi dapat dihilangkan. Jika dilakukan masih harus menuliskan tanda ; Menyingkirkan ekpresi pertama dan ketiga berarti menghilangka efek samping. Menghilangkan ekpresi kedua menciptakan loop yang infinit (jika tidak ada escape)! (Sebuah loop infinit tidak selalu tidak diinginkan, sebuah program untuk mikrokontroler mungkin menggunakan loop seperti ini pada bagian terluar dengan tanpa escape.)
Tambahan utk For Loop Rute Escape (juga ditemukan di while loop) break; Terdapat pada statemen switch, menghentikan eksekusi untuk loop dan memindahkan kontrol pada statemen berikutnya setelah loop. continue; Ketika tercapai ini dalam loop, mentransfer kontrol pada akhir dari loop (tapi masih dalam loop) melompati semua statemen yang terdapat setelahnya didalam loop, jadi kontrol masih didalam loop, hanya statemen sisanya dilompati hanya untuk iterasi tersebut saja.
Operator Koma:, Operator Koma, Sering, ketika C membutuhkan sebuah statemen (contoh dalam ekpresi pertama dan terakhir dari kontrol statemen for ) dengan menggunakan koma, sebagai pembagi kita bisa menambahkan statemen lain: int x, y, z, w; atau for (i=2, z=14; i=10;i++, z++) {}
Contoh for(x=1,y=3; x<=20; ++x) { z = x * y; printf( %3d, z); if ( x!= 5 && x!= 10 && x!= 15 ) continue; printf( \n ); } Output 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 Operator Koma:,
Tampilan Keyboard / Karakter Representasi karakter dalam C adalah ASCII American Standard Code for Information Interchange menggunakan angka untuk mereprentasikan berbagai karakter keyboard/display: A = 65, B = 66... Z = 90 a = 97, b = 98... z = 122 0 = 48, 1 = 49... 9 = 57 Carriage Return = 13, Line Feed = 10 Lihat sendiri kode lengkapnya
Tampilan Keyboard / Karakter Representasi karakter dalam C adalah ASCII (cont d) Diperlakukan seperti Integer, disimpan dalam tipe char atau int h dikenal sebagai karakter konstan Input: scanf( %c, &in_c); Output: printf( %c, in_c);
Tampilan Keyboard / Karakter Dapat melakukan aritmatika Karakter, contoh: char my_c; scanf( %c, &my_c); if((my_c >= A ) && (my_c <= Z )) my_c = my_c A + a ; printf( %c, my_c); Mengubah huruf besar menjadi huruf kecil
Input/Output Tingkat Karakter Meskipun scanf dan printf dapat menangani karakter tunggal (menggunakan %c ), karakter tunggal sering ditangani dengan lebih baik dengan: Fungsi getchar dan putchar Makro (seperti fungsi) yang sudah tersedia dalam library stdio untuk menangani karakter tunggal
Input/Output Tingkat Karakter getchar didefinisikan: int getchar(void); Mengambil satu karakter dari input standard (keyboard) dan mengembalikannya sebagai sebuah integer in_c = getchar(); dimana in_c adalah int putchar didefinisikan: int putchar(int out_char); Menempatkan satu karakter yang dituliskan sebagai parameter out_char ke standard output (layar): putchar(in_c);
String String adalah array dari karakter, contoh: char str_1[] = { h, i, \0 }; char str_2[10] = Peter! ;... printf( %s %s, str_1, str_2); Fitur khusus dari string: menggunakan terminator NULL ( \0 ). Semua string harus mempunyai pada elemen terakhir sebuah char NULL (biasanya bernilai 0). Berarti sebuah string membutuhkan sebuah ukuran array = jumlah karakter + 1 untuk NULL
String char str_1[] = { h, i, \0 }; char str_2[10] = Peter! ;... printf( %s %s, str_1, str_2); str_1[] akan mempunyai panjang 3 karakter dengan karakter NULL ditambahkan secara eksplisit. str_2[10] Arraynya mempunyai panjang tetap tapi string yang berguna hanya 6 karakter jadi NULL akan ditambahkan secara implisit pada elemen ke-7 (dalam str_2[6]) Output: hi Peter! Pertimbangkan berikut: for (i=0; str_2[i]!= \0 ; i++) putchar(str_2[i]);
Tambahan untuk String Input string: Kita telah mendefinisikan string konstan (semuanya diantara tanda ) dan bagaimana mengoutput string (printf dengan %s). Untuk input dapat menggunakan scanf dengan %s): char in_str[10];... printf( \nmasukkan sebuah string: ); scanf( %s, &in_str); atau for(i=0;i<9;i++) { in_str[i] = getchar(); } in_str[i] = \0 ;
Tambahan untuk String PERINGATAN: tidak ada cek panjang string apakah akan masuk atau tidak! CATATAN: Tidak dapat melakukan hal berikut: if(str_1 = = str_2) tes kesamaan tidak bekerja str_1 = str_2; - assignment juga tidak bekerja Perlu melakukan hal diatas per-elemen (Perlu melihat library fungsi string)
Layout Sebuah Program Program terdiri dari 5 bagian secara berurut: Direktif pre-prosesor (#include, #define) Fungsi int main (void) dengan { pembuka Segmen deklarasi (mencipta variabel dll) Segmen statemen ( pekerjaannya ) Akhir dari fungsi main return(0) } CATATAN: gunakan indentasi untuk menekankan nesting (sarang)
Layout Sebuah Program /* direktif pre-prosesor */ #include <stdio.h> #define MAX 10 /* header main */ int main (void) { /* segmen deklarasi */ int x, z; const int y = 10; /* segmen statemen aktif */ for (x = 1; x <= MAX; x++) printf( \n %2d x 10 = %3d, x, x*y); /* akhir dari main */ return (0); }
Ringkasan Array dimensi tunggal dan ganda Ukuran harus terdefinisi awal Hati-hati dengan overflow Dapat diinisialisasi For loop Cara padat untuk spesifikasi cara kerja loop Ekuivalen dengan while loop
Ringkasan Karakter Tunggal Karakter disimpan dengan kode ASCII yang memungkinkan operasi matematika ada karakter Input/Output karakter tunggal dengan getchar(), putchar() String array dari karakter kode ASCII NULL \0 menghentikan array (ukuran + 1) Gunakan printf dan scanf dengan %s Layout dari program