Pemrograman Dasar C Minggu 3
Peringatan Pertama
Mario Hanson (0224002) Sanny Wibisana (0224035) Yunus Sajuti (0224047) Yudi Worman Saragih (0224071) Cayadi (0224096) Fransiska Widjaya (0224109) Audi Caesar (0224123) Fendy (0224134) Keke Boycke (0224157) Frans Lesmana (0224167) Novianto Agam (0324065)
Topik Bahasan
Membuat Keputusan – Tes ‘True’ / ‘False’ – Memilih satu pilihan atau yang lain – Flow chart
Bilangan Riil – bilangan dengan komponen pecahan – – – –
Tipe untuk Bilangan Riil Input/Output untuk Bilangan Riil Ekspresi campuran Konversi tipe
Struktur Pilihan Pertama
Membuat keputusan: – Apakah saya belok kiri atau terus? – “Ketika Nilai > atau = 40 berikan kredit 20 » jika tidak, tidak ada kredit”
Struktur ‘IF’ ‘ELSE’ if (
) dievaluasi benar (true) maka lakukan ini atau else if test dievaluasi salah (false) lakukan yang ini
Struktur Pilihan Pertama
Butuh sebuah ‘TRUE’ atau ‘FALSE’ ekspresi tes: Operasi Relasi (x = 6, y = 7) == sama x==y FALSE != TDK sama x!=y TRUE > lbh besar x>y FALSE < lbh kecil x= lbh besar atau sama x >= y FALSE
•
C menganggap FALSE sebagai ‘nol’ dan TRUE sebagai bilangan integer “tidak nol”, maka () dapat berupa ekspresi matematika
Flow Chart: Perencanaan yg Baik START Kotak Aksi
buat secangkir kopi ukur suhu
Berlian Keputusan
Kotak Input/Output Kotak Terminasi
Apakah > 80 C? No “sajikan kopi” STOP
Yes “Awas! masih panas!”
Statemen IF dalam C
Sintaks: if ( tes true / false ) statemen tunggal; else /* opsional */ statemen tunggal;
Contoh
if ( a == 10) printf (“Telah menemukan sepuluh.”); statement berikut; if ( suhu > 80 ) printf (“Terlalu panas untuk diminum”); else printf (“Sajikan teh”); if ( nilai < 40 ) { /* statemen compound */ printf (“tidak ada kredit”); kredit = 0; } else kredit = 20;
Tambahan untuk If
If yang bersarang int in_num; printf(“Masukkan jumlah mahasiswa: “); scanf(“%d”, &in_num); printf(“\nKita mempunyai “); if (in_num > 100) printf(“lebih dari 100 “); else if (in_num > 10) printf(“lebih dari 10 “); else if (in_num > 0) printf(“beberapa “); else printf(“tidak ada “); printf(“mahasiswa tahun ini”);
Tambahan untuk If
Apabila kita masukkan “150” maka keluarannya menjadi Kita mempunyai lebih dari 100 mahasiswa tahun ini
Tapi kalau kita masukkan “7” maka keluarannya menjadi Kita mempunyai beberapa mahasiswa tahun ini
Berhati-hatilah: if bersarang cukup memusingkan!
Operator Logika
&& -AND-
(x && y) true jika keduanya true
if ((width > 0) && (width < 100)) printf(“dalam kisaran 1 ke 99”); statemen berikutnya;
| | - OR keduanya true
(x | | y) true jika salah satu atau
if((width > 22) | | (height > 40)) printf(“tidak masuk!”); else printf(“akan masuk!”);
Operator Logika
! - NOT - ( !(x > y)) pembalikan membalik x > y menjadi x <= y if ( !(Tahanan > 100)) printf(“Tahanannya = 100 atau kurang”);
Studi Kasus: Mengecek Kisaran Input
Persyaratan – Cek input hanya dalam kisaran 0 – 100 volt
Analisa – Gunakan statemen if
Desain – Lihat flow chartnya!
Studi Kasus: Desain – Flow Chart Dapatkan Input Yes
Input < 0 OR > 100? No
Program Bag. Lain Pesan Error End
Studi Kasus: Implementasi /* mulai program disini */ printf(“\nMasukkan voltase “); scanf(“%d”, &volts); if ((volts < 0) | | (volts > 100)) { printf(“\nInput diluar”); printf(“ kisaran 0 – 100 volt”); printf(“\nEnd”); } else { /* bagian lain dari program */ }
Bilangan Riil
Bilangan Riil (real atau floating point) – dapat memiliki bagian pecahan, contoh PI: 3,1415 – dapat lebih kecil dari 1, contohnya 0,000345 Ampere
Dapat ditulis dalam bentuk “scientifik” atau “eksponensial” – bentuk scientifik z x 10y » contoh 3.45 x 10-4
– bentuk eksponensial menggunakan ‘e’ menggantikan ‘x10’ » contoh 3.45e-4 atau 3.45E-4
Bilangan Riil
Istilah yang berguna – Presisi: jumlah desimal yang tersedia untuk mendefinisikan bilangan » contoh 3.1415 menggunakan lima digit, berarti membutuhkan sebuah floating point dengan presisi paling tidak lima
– Kisaran: nilai maksimum dan minimum yang dapat disimpan didalamnya » contoh 1.0 x 10-5 ke 1.0 x 10+5
Tipe Bilangan Riil dalam C
‘float’ dikenal sebagai presisi ‘tunggal’ (presisi minimum untuk 6 digit desimal). Untuk C pada umumnya: – – – –
disimpan dalam 32 bits presisi dalam 7 digit desimal kisaran: 3.4 x 10-38 ke 3.4 x 10+38 cepat tapi presisi terkecil. Untuk perhitungan sains umum
Tipe Bilangan Riil dalam C
‘double’ dikenal sebagai presisi ‘dobel’ (presisi minimum 10 digit desimal). Untuk C pada umumnya: – – – –
disimpan dalam 64 bits presisi dalam 15 digit desimal kisaran: 1.7 x 10-308 ke 1.7 x 10+308 lebih lambat tapi lebih baik untuk perhitungan sains berakurasi tinggi
Tipe Bilangan Riil dalam C
‘long double’ dikenal sebagai presisi ‘tambahan’ (minimal 20 digit desimal). Untuk C pada umumnya: – – – –
disimpan dalam 80 bits presisi dalam 19 digit desimal kisaran: 3.4 x 10-4932 sampai 3.4 x 10+4932 sangat lambat? keperluan finansial?
Kenapa Presisi Penting?
Misalnya kita mau menghitung biaya memproduksi sejuta mobil buatan Ford – Misalnya biaya produksi sebuah mobil $ 4,342.52 – Misalnya variabel ‘cost’ dengan tipe float dipakai dengan presisi hanya 5 digit desimal » Akan menyimpan cost = 4.3425e+3 » Catatan: hanya 2 sen dollar setiap mobil yang dianggap hilang – Misal kita diminta menghitung biaya total total_cost = cost * 1e+6; total cost = 4.3425e+9 TAPI nilai sebenarnya adalah $ 4,342,520,000 kita telah kehilangan sebesar $ 20,000!!!!
Pilihlah presisi yang memang dibutuhkan! Contohnya penggaris 30cm, dapat dibaca sampai 1mm, jadi presisi yang dibutuhkan hanya 3 digit (jadi tidak perlu memakai ‘long double’)
Input dan Output Bilangan Riil
scanf(“string kontrol”, argumen lain); Karakter konversi Konversi ke %f float bentuk 21.3 %e float bentuk 2.13e+1 tambah l (%le %lf) untuk double tambah L (%Le %Lf) untuk long double
Input dan Output Bilangan Riil
printf(“string kontrol”, argumen lain); Karakter konversi Konversi ke %f (float atau double) floating point ‘1.27’ %e (float atau double) eksponensial ‘1.27e-5’ tambah L (%Le %Lf) untuk long double
Input dan Output Bilangan Riil
Lebar dan presisi (untuk printf) – Antara ‘%’ dan ‘f’ (atau ‘e’) dapat ditambahkan lebar field dan spesifikasi presisi: %.<presisi>e
– adalah jumlah MINIMUM dari space karakter digunakan untuk semua bilangan (termasuk ‘.’ dan ‘e’) – <presisi> adalah jumlah MAKSIMUM digit setelah titik desimal – Tanda ‘-’ didepan berarti ‘justifikasi kekiri’
#include <stdio.h> int main (void) { /* Deklarasi terlebih dahulu */ float radius, luas; const float PI = 3.14159;
Contoh Bilangan Riil
printf(“\nMasukkan radius dalam cm “); scanf(“%f”, &radius); luas = PI * radius * radius; printf(“\nLuas lingkaran = %f”, luas); return (0); } CATATAN: divide by zero (0.0) juga tidak boleh dalam arithmatika Bilangan Riil!
Ekspresi Tipe Campuran, Integer
Promosi Integer: char x = 5; int z, y = 1345; z = x * y; printf(“z = %d”, z); masing-masing bagian dari ekspresi dievaluasi dengan semuanya diubah ke tipe integer terbesar, jadi hasilnya 6725 dan sesuai dengan variabel penerima yaitu tipe int.
Hati-hati: apabila hasilnya terlalu besar untuk variabel penerima, hasilnya tidak berguna! char x = 127; int z, y = 32000; z = x * y; printf (“z=%d”, z); hasilnya seharusnya 4064000 tapi kita mendapatkan hasil z = 768 (karena overflow)
Ekspresi Tipe Campuran, Integer
Hati-hati dengan hasil antara yang tidak sesuai dengan ekspresi keseluruhan: char x = 127; int z, y = 3200; z = x * y/x; printf(“z=%d”, z); yang seharusnya menghasilkan 32000 tenyata hanya 6!!! solusi: membuat y bertipe long int
Ekspresi Tipe Campuran, Integer
Hati-hati dalam menggabungkan tipe signed dan unsigned dalam sebuah ekspresi, memberikan nilai negatif pada bilangan unsigned tak mempunyai arti! Untuk tipe floating point, promosi yang serupa terjadi, tipe operan yang terbesar di dalam ekspresi menyebabkan operan tipe yang lain diubah ke tipe yang lebih besar: – float dipromosikan ke – double dipromosikan ke
double long double
Ekspresi Tipe Campuran, Integer
Bahkan pencampuran tipe integer dan floating point mengikuti aturan yang sama, kedua operan dinaikkan ke tipe terbesar
p r o m o s i
long double double float unsigned long int long int unsigned int int
catatan: hati-hati dalam mencampur signed dan unsigned
Cast: Memaksa Konversi Tipe
C menawarkan operator konversi untuk ‘memaksa konversi’ dari satu tipe ke tipe lain: – –
sintaks: (tipe) ekspresi; Cast mempunyai urutan teratas dibandingkan sifat perkalian dan asosiasi kanan ke kiri
Cast: Memaksa Konversi Tipe
Perhatikan: int x = 5, y = 3; float w, z = 3.2; w = z + x/y; printf (“w = %f”, w); Hasil seharusnya 4.866667 tapi hasil program 4.2!
Dengan aturan urutan, x/y dievaluasi pertama tapi evaluasi tipe int dari 5/3 adalah 1 dan bukan 1.666666! Maka 3.2 + 1 menghasilkan 4.2
Cast: Memaksa Konversi Tipe
Untuk memastikan pembagian dilakukan menggunakan arithmatika Bilangan Riil (real), x di ‘cast’ menjadi tipe float w = z + (float) x / y;
Disini, karena (float) x dievaluasi terlebih dahulu, maka x menjadi float sehingga x/y dievaluasi sebagai float menghasilkan 1.666667 dan hasil akhirnya akan benar!
Ringkasan
Membuat keputusan Tes ‘True’ / ‘False’ (tidak nol / nol) – Operator relasi
= = != > < <= >= – Operator logika
&& || ! – Memilih satu opsi atau else lainnya
if (test) … ; else …; – Flow chart
Ringkasan
Bilangan Riil (Real) – bilangan dengan komponen pecahan – Tipe untuk Bilangan Riil: float, double, long double – Presisi dan kisaran » terlalu kecil, ada informasi yang hilang » terlalu besar, menghabiskan memori dan waktu
– Input / Output untuk Bilangan Riil » scanf dan printf
– Ekspresi campuran – promosi – Konversi tipe - cast