Pemrograman Dasar C
Minggu 4
Topik Bahasan
Membuat program mudah ditulis dan dibaca – Konstan – Nama yang mudah diingat untuk data
Struktur pilihan berganda – Ketika if bersarang terlalu kompleks
Struktur loop berulang – Menentukan berapa kali untuk ‘loop’ – ‘Tes sebelum loop’ atau ‘Tes sesudah loop’
Konstan dan #define
Konstan (elemen penyimpanan nilai tetap) const float PI = 3.1416; const float perm_0 = 4 * PI * 1e-7; B = perm_0 * H; /* kalkulasi fluks */ – Menambahkan kualifier ‘const’ membuat variable yang
dideklarasikan menjadi kuantitas tetap – Konstan mempunyai tipe yang definitif (menentukan jumlah memori yang digunakan) – Catatan: anda bisa menggunakan ekspresi untuk memberikan nilai pada konstan pada saat inisialisasi
Konstan dan #define
Define – memungkinkan perubahan global … #define PI 3.141593 #define MAX_STUDENTS 100 #define adalah direktif pre-prosesor (seperti #include) Hanya sebuah substitusi teks, jadi ketika MAX_STUDENTS muncul, kompiler akan menganggap seperti anda menulis ‘100’ disana. Secara umum, #define mempunyai identifier HURUF BESAR, variable dan konstan dengan huruf kecil
Konstan dan #define
Define lebih fleksibel tapi const lebih disukai untuk konstan numerik karena mempunyai ‘tipe’
Keduanya memungkinkan perubahan global dengan mudah untuk keseluruhan program – membantu membuat program lebih fleksibel
Menggunakan #define untuk Memudahkan Pembacaan #define APEL 1 #define PIR 2 #define PISANG 3 int berat, buah = APEL; /* kode berikut mengambil harga dari buah */ printf(“harga = Rp. “); if (buah = = PISANG) printf(“%5.2f”, berat * 0.5); else if (buah = = APEL) printf(“%5.2f”, berat * 0.6); else if (buah = = PIR) printf(“%5.2f”, berat * 0.7); /* sisa program disini */
Tipe Enumerasi
Metode dimana anda mempunya satu set dari ‘sesuatu’ yang dinyatakan dalam nama, menghindari terlalu banyak #define Sintaks: enum
{, , …}; mendefinisikan tipe enumerasi dan … enum ; mendefinisikan variabel untuk tipe tsb. Tipenya pada dasarnya sama dengan tipe “int”, setiap elemen (sebuah ‘konstan enumerasi’) mendapatkan nilai integer yang secara default dimulai dari 0, 1, 2, dll (dapat memilih sendiri dengan ‘ = nilai’ dll)
Contoh Enumerasi enum buah_saya {Apel, Pir, Pisang}; enum buah_saya buah;
Contoh diatas bisa menggantikan contoh program sebelumnya menggantikan #define Dapat mengeset awal nilai enumerasi enum buah_saya {Apel = 20, Pir = 3, Pisang = 6};
Struktur Pilihan Berganda bulan Nov, Des, Jan,Feb? No Menentukan pilihan dengan opsi yang banyak membuat susunan if bersarang yang kompleks
bulan Mar, Apr, Mei? No bulan Jun, Jul, Agt? No bulan Sep, Okt? No
yes
yes
Musim Dingin
Musim Semi
yes Musim Panas yes Musim Gugur
Statemen ‘switch’ atau ‘case
Sintaks dari statemen switch: switch (ekspresi) { case nilai 1 : statemen 1; case nilai 2 : statemen 2; … default : statemen default; \*opsional *\ }
Statemen ‘switch’ atau ‘case
Ekspresi switch dievaluasi pertama dan harus terevaluasi sebagai sebuah integer. Setiap nilai case (harus ‘konstan’ – nilai tetap – tidak ada keraguan) harus juga sebuah integer. Dapat dengan urutan yang bebas (konstan enumerasi juga bisa digunakan). Nilai case yang banyak untuk satu statemen OK. Setelah ekspresi dievaluasi, case yang sesuai dengan hasil evaluasi akan dilaksanakan dan semua dibawahnya. Jika tidak atau sebuah statemen ‘break;’ muncul. Jika tidak ada case yang cocok, ‘default’ akan dieksekusi (opsional – sebaiknya mempunyai ini untuk menangkap error). Dapat mempunyai statemen yang banyak (tidak membutuhkan {})
Contoh Case Sederhana
#include <stdio.h> int main (void) { /* bagian deklarasi */ int mode = 0; / * bagian program */ printf(“Pilih mode (1, 2, atau 3): “); scanf(“%d”, &mode); switch(mode) { case 1: printf(“\nMode 1 dipilih”); break; case 3: printf(“\nMode 3 dipilih”); break; case 2: printf(“\nMode 2 dipilih”); break; default: printf(“\nPilihan yang buruk: %d\n”, mode); } /* akhir dari case */ /*bagian program yang lain ada disini */ return (0); }
Contoh Case Menggunakan Enum enum bulan {Jan = 1, Feb = 2, Mar = 3, Apr = 4, Mei = 5, Jun = 6, Jul = 7, Agt = 8, Sep = 9, Okt = 10, Nov = 11, Des = 12} enum bulan my_bulan; / * bagian lain disini */ switch (my_bulan) { case Jan: case Feb: case Nov: case Dec: printf(“\nMusim Dingin!”); break; case Mar: case Apr: case Mei: printf(“\nMusim Semi!”); break; case Sep: case Okt: printf(“\nMusim Gugur!”); break; case Jul: case Agt: printf(“\nMusim Panas!”); break; default: printf(“\nAnda memasukkan angka bulan yang salah!”); }
Repetisi: Loop
Do …While loop bbrp operasi ke-1
ke-2
loop
statemen Do loop ingin mengulang loop? no bbrp operasi
yes
Do While Loop ‘Do Sesuatu’ selalu dilakukan paling tidak sekali. Tes dilaksanakan pada akhir untuk melihat apakah mengulang loop. Menggunakan tes ‘true’ dan ‘false’ biasa. Jika tes selalu ‘true’ (misalnya 1 = = 1) menjadi loop tak terhingga!
Do While Loop
Sintaks: do { … statemen(satu atau lebih) … } while (ekspresi tes); statemen berikut;
Do While Loop
Tidak perlu statemen compound jika hanya satu. Contoh program untuk mengecek ingin mengulang atau tidak: char in_c; do { /* statemen untuk program saya disini */ printf(“\nTekan Y untuk terus: “); scanf(“ %c”, &in_c); } while ((in_c = = ‘y’) || (in_c = = ‘Y’)); printf(“\nProgram berhenti…”);
Studi Kasus: Cek Kisaran #2
Persyaratan: – Hanya membolehkan input dalam kisaran 0 –
100 volt.
Analisa: – Menggunakan statemen if dan do … while loop
Desain: – Perhatikan flow chart berikut
do while loop minta voltase ambil input
Studi Kasus
<0 OR >100? No
flow chart Yes
<0 OR >100? No
tes if Yes Ouput Pesan Error
Studi Kasus: Implementasi /* start dari program dimulai disini */ do { printf(“\nMasukkan voltase “); scanf(“%d”, &volts); if (volts <0 || volts>100) { printf(“\nInput diluar”); printf(“ kisaran 0 – 100v”); } } while (volts<0 || volts>100); /* bagian lain dari program muncul disini */
Loop Repetisi yang Lain ke-1
bbrp operasi
no
loop
ingin mengeksekusi loop? yes statemen Do Loop
bag. lain program ke-2
While loop
While Loop Tes dilaksanakan pada awal untuk melihat apakah akan melaksanakan isi dari loop (‘Do Sesuatu’ tidak harus dilakukan) Jika tes gagal pertama kali, loop tidak pernah dieksekusi! Ini mungkin yang dikehendaki, jika tidak gunakan do .. while loop. Selalu pilih loop yang sesuai!
While Loop
Sintaks: while (ekspresi tes) { … statemen (satu atau lebih) … } statemen berikutnya;
Sekali lagi, tidak perlu compound jika hanya satu
Contoh Sederhana int i = 10; while ( i > 0) printf(“\nT minus %2d dan menghitung”, i--); printf(“\n\nTake off!”); CATATAN: contoh diatas tidak menggunakan statemen compound
#include <stdio.h>
Contoh lain While Loop
int main (void) { const float target = 1.0e4 float inisial, bunga; int tahun = 0; printf(“\nMasukkan modal dalam $ “); scanf(“%f”, &inisial); printf(“\nMasukkan suku bunga “); printf(“[0.05 untuk 5%%] – “); scanf(“%f”, &bunga); while (inisial < target) { inisial *= (bunga + 1.0); tahun++; } printf(“\nTotal %7.2f setelah %d tahun”, inisial, tahun); return (0); }
Ringkasan
Membuat program lebih mudah ditulis dan dibaca – konstan tidak dapat diubah, untuk data tetap yang
bertipe. – #define substitusi teks, membantu pengubahan proses konstan enumerasi dengan nama
Sruktur pilihan berganda – konstruksi switch (atau case) – ekspresi switch harus sebuah integer – nilai case harus konstan – gunakan break untuk menghentikan “fall through”
Ringkasan
Struktur Loop Repetisi – while loop do … while loop selalu berjalan sekali, tes ‘berlanjut?’ pada akhir dari setiap iterasi while … tes dilaksanakan sebelum loop berjalan sehingga loop mungkin tidak pernah digunakan jika tes pertamanya terevaluasi ‘false’