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:
[] 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: [] = {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
Perbandingan • For Loop: int x, y = 10; statemen lain; for (x=0; x
• While Loop int x, y = 10; statemen lain; x = 0; while (x
#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++) {}
Operator Koma: , •
•
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
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