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