ALGORITHM
8
Algoritma dengan C++ Dahlia Widhyaestoeti, S.Kom
[email protected] dahlia74march.wordpress.com
"Jika kau tidak bisa menjelaskan secara sederhana, kau berarti belum cukup dalam memahaminya." Albert Einstein Albert Einstein (lahir di Ulm, Kerajaan Württemberg, Kerajaan Jerman, 14 Maret 1879 – meninggal di Princeton, New Jersey, Amerika Serikat, 18 April 1955 pada umur 76 tahun) adalah seorang ilmuwan fisika teoretis yang dipandang luas sebagai ilmuwan terbesar dalam abad ke-20. Dia mengemukakan teori relativitas dan juga banyak menyumbang bagi pengembangan mekanika kuantum, mekanika statistika, dan kosmologi. Dia dianugerahi Penghargaan Nobel dalam Fisika pada tahun 1921 untuk penjelasannya tentang efek fotolistrik dan "pengabdiannya bagi Fisika Teoretis". Setelah teori relativitas umum dirumuskan, Einstein menjadi terkenal ke seluruh dunia, pencapaian yang tidak biasa bagi seorang ilmuwan. Di masa tuanya, keterkenalannya melampaui ketenaran semua ilmuwan dalam sejarah, dan dalam budaya populer, kata Einstein dianggap bersinonim dengan kecerdasan atau bahkan genius. Wajahnya merupakan salah satu yang paling dikenal di seluruh dunia.
2
Menghitung luas segitiga bila diketahui alas dan tinggi segitiga tersebut
3
Susun algoritma yang ditulis dalam Bahasa C/C++, untuk menginput dan mencetak Luas sebuah segitiga bila alas dan tinggi sudah diketahui yaitu : Alas = 7 dan Tinggi = 5.
7
5
?
A
T
L
A untuk Alas T untuk Tinggi, dan L untuk Luas
printf cout
?
4
7
5
A
T
17.5
cout
17.5
L
A untuk Alas T untuk Tinggi, dan L untuk Luas
5
harus
Rumus menghitung Luas sebuah Segitiga Kadang-kadang : Lebih sulit :
Mencari , memahami dan menggunakan
Rumus, dibandingkan menulis algoritma
6
dapat ditulis setelah
dan konsep atau draf secara manual sudah dibuat
7
Yang harus dipahami dan Dikuasai sebelumnya
BUKAN PERSOALAN MATEMATIKA
RUMUS menghitung Luas sebuah segitiga :
LUAS = ALAS * TINGGI / 2 atau
LUAS = (ALAS * TINGGI) / 2
atau
LUAS = ALAS * ( TINGGI / 2)
atau
LUAS = ALAS * TINGGI * 0.5
atau
LUAS = 0.5 * ALAS * TINGGI
atau
dan sebagainya yang valid
DALAM BEBERAPA HAL (KASUS), RUMUS TIDAK DIBERITAHUKAN PEMBUAT ALGORITMA HARUS MENGETAHUINYA SENDIRI TIDAK MENGETAHUI RUMUS TIDAK DAPAT MEMBUAT ALGORITMA
8
Draf KONSEP penyelesaian Alas
Tinggi
7
5
Luas = Alas * Tinggi / 2
17.5 Luas 9
C++ #include
void main() { int A, T, L; A = 7; T = 5; L = A * T / 2; cout << L ;
Program Flowchart START A=7 T=5 L=A*T/2 cout
}
L
END
Tercetak :
17
int
int
int
7
5
17
A
T
L
10
C++ #include void main() { int A, T; float L; A = 7; T = 5; L = A * T / 2.0; cout << L ; }
Program Flowchart START A=7 T=5 L=A*T/2 cout
L
END
Tercetak : int
int
7
5
A
T
17.5 int
17.5 L
Tipe data pembagi variabel diisi dengan tipe data integer dan tipe data variabel dengan float? 11
Program Flowchart
#include void main() { float A, T; float L; A = 7; T = 5; L = A * T / 2; cout << L ; }
START A=7 T=5 L=A*T / 2 cout
L
END
Tercetak :
17.5
float
float
float
7.0
5.0
17.5
A
T
L
2? Perbedaan antara C dan C++
12
C #include <stdio.h> void main() { float A, T, L; A = 7; T = 5;
C++ #include void main() { float A, T, L; A = 7; T = 5;
L = A * T / 2.0;
L = A * T / 2.0;
printf(“%f”, L );
cout << L ;
}
Tercetak : 17.500000
}
Tercetak :
17.5 13
Jika program yang diinginkan adalah mengisikan data dari keyboard, dan data yang diisi harus berupa float, maka flowchartnya?
Jika program yang diinginkan adalah mengisikan data dari keyboard, dan data yang diisi harus berupa float, maka programnya?
14
C++ #include void main() { float A, T, L; cin >> A; cin >> T; L = A * T / 2; cout << L;
Program Flowchart START cin
A
cin
T
L=A*T/2 cout
L
} END
Dua instruksi ini dapat digabung menjadi satu instruksi :
cin >> A >> T; cin
A,T 15
#include void main() { float A,T, L; cout << " Alas : " ; cin >> A; cout << " Tinggi : " ; cin >> T; L = A * T / 2; cout << " Luas : " << L; } Atau :
#include void main() { float A,T, L; cout << " Alas : " ; cin >> A; cout << " Tinggi : " ; cin >> T; L = A * T / 2; cout << " Luas : " << L; }
Alas : 7 Tinggi : 5 Luas : 17.5
16
Meng-konversi derajat Celcius ke derajat Fahrenheit
17
Susun algoritma yang ditulis dalam Bahasa C++, untuk menginput sebuah nilai integer yang menyatakan temperatur dalam derajat Celcius, kemudian cetak temperatur tersebut dalam derajat Fahrenheit. 40 cin
40 C
xx.x
cout
xx.x
F
C untuk nilai derajat Celcius F untuk nilai derajat Fahrenheit 18
harus
Rumus konversi derajat Celcius ke derajat Fahrenheit 19
Draf KONSEP penyelesaian
Celcius 40
Fahrenheit F = 9/5 * C + 32
C
104 F
9 / 5 = 1.8 1.8 * 40 = 72 72 + 32 = 104
#include void main() { float C,F; cin >> C; F = 9.0 / 5 * C + 32; cout << F; }
20
C++ #include void main() { float C,F; cin >> C; F = 9 / 5 * C + 32; cout << F; }
40 72 SALAH Ceharusnya, untuk C = 40, maka Nilai F = 104
Bila menggunakan suatu Bahasa Pemrograman, harus diketahui sifat / karakteristik Bahasa Pemrograman tersebut.
21
C++ #include void main() { float C,F; cin >> C; F = 9 / 5 * C + 32; cout << F; } Bila diinput : 40 untuk nilai C Maka tercetak : 72 sebagai isi F
9/5=1 1 * 40 = 40 40 + 32 = 72
40 72 SALAH Seharusnya, untuk C = 40, maka Nilai F = 104
Karena 9 dan 5 kedua-duanya dianggap integer
Salah satu saja tipenya float, maka hasilnya float
22
C++ #include void main() { float C,F; cin >> C; F = 9.0 / 5 * C + 32; cout << F; }
40 104
Bila diinput : 40 untuk nilai C Maka trcetak : 104 sebagai isi F
9.0 / 5 = 1.8 1.8 * 40 = 72 72 + 32 = 104
Salah satu saja tipenya float, maka hasilnya float
atau 9 / 5.0 23
Meng-konversi waktu dalam Detik menjadi : Jam, Menit dan Detik.
24
Susun program yang ditulis dalam Bahasa C++, untuk menginput sebuah nilai integer yang menyatakan waktu (durasi) dalam satuan detik, kemudian cetaklah waktu tersebut dalam satuan Jam, Menit, dan Detik. xxxx cin
xxxx
J
jj
M
mm
D
dd
cout
jj mm dd
Detik
J untuk Jam M untuk Menit, dan D untuk Detik 25
Bila diinput
Tercetak :
15
0
0
15
72
0
1
12
150
0
2
30
1000
0
16
40
3600
1
0
0
3605
1
0
5
7425
?
?
? 26
7425 cin
7425
J
?
M
?
D
?
cout
? ? ?
Detik
J untuk Jam M untuk Menit, dan D untuk Detik
27
harus
1 Jam = 60 Menit 1 Menit = 60 Detik 1 Jam = 3600 Detik
Tidak tahu ini, Tidak bisa membuat draf perhitungannya dan Tidak bisa membuat algoritma
28
Draf KONSEP penyelesaian
Didapat : 7425 Detik adalah : 2 Jam 3 Menit 45 Detik
3600 / 7425
\ 2
Belum Rinci
7200 60 / 225 \ 3 180
Harus dijelaskan dari mana mendapatkan nilai 7200
45
3600 / 7425
\ 2
2 * 3600 = 7200 60 / 225 \ 3 3 * 60 = 180 45
29
Draf KONSEP penyelesaian
7425 / 3600 = 2 sisa 225 225 / 60
7425 / 3600 2 * 3600 7425 – 7200 225 / 60 3 * 60 225 – 180
2 Jam 3 Menit 45 Detik
= 3 sisa 45
LENGKAP dan RINCI
INI KONSEP BERPIKIR YANG ORSINIL MILIK SEMUA ORANG
Didapat :
Tidak rinci, darimana mendapatkan nilai sisa
= = = = = =
2 7200 225 3 180 45
INI YANG DITUANGKAN MENJADI ALGORITMA Didapat : 2 Jam 3 Menit 45 Detik
30
7425 / 3600 2 * 3600 7425 – 7200 225 / 60 3 * 60 225 – 180
= 2 = 7200 = 225 = 3 = 180 = 45
7425
7425 / 3600
2 2 * 3600
7425 - 7200
225
7200
225 / 60
3 3 * 60
Kerangka berpikir, bila setiap nilai disimpan dalam sebuah variabel
225 - 180
180
45
Ada 7 variabel, yang diilustrasikan dengan gambar kotak 31
Detik
J J = Detik / 3600
7425
2
1 2 Y = Detik - X
X = J * 3600
7200
X
3
M
3 M = Y / 60
Y
225
4 5 D=Y-Z
180
1. 2. 3. 4. 5. 6.
J = Detik / 3600 X = J * 3600 Y = Detik – X M = Y / 60 Z = M * 60 D=Y-Z
Z = M * 60
Z
6 45
Ada 6 langkah
D
Ada 7 variabel, yang diilustrasikan dengan gambar kotak
Sesuai dengan tata cara penulisan algoritma
32
Detik J = Detik / 3600
7425
1
J
Detik
2
7425
2 X = J * 3600 Y = Detik - X
7200
X
J = Detik / 3600
Dapatkah 1 dibuat lebih sederhana?
2
Y
225
3
M
4
2
Y = Detik – J * 3600
3 M = Y / 60
J
Y
225
M M = Y / 60
3
3
5 Z = M * 60 D=Y-Z
180
Asli : 6 langkah 7 variabel
D = Y – M * 60
4
6 45
Z
D
45
D
Dibuat menjadi : 4 langkah 5 variabel
33
Sederhanakan kembali langkah dan variabelnya!
34
Detik J = Detik / 3600
7425
1
J
Detik
2
7425
J = Detik / 3600
1
J 2
Y = Detik – J * 3600
2 Y
225
M M = Y / 60
2
3
3
3
D = Y – M * 60
M = ( Detik – J * 3600 ) / 60
3
M
D = ( Detik – J * 3600 ) – M * 60
4 45
D
Setelah menjadi : 4 langkah 5 variabel
45
D
Dibuat menjadi : 3 langkah 4 variabel
35
36
Detik
J
J = Detik / 3600
7425
2
1 2 Y = Detik - X
X = J * 3600
7200
X
3 Y
225
M = Y / 60
M
3
4 5 D=Y -Z
Z = M * 60
180
Z
6 45
6 langkah 7 variabel
D
Di monitor terlihat :
1 2 3 4 5 6
#include void main() { int Detik, J,M,D, X,Y,Z; cout << "Detik : " ; cin >> Detik; J = Detik / 3600; X = J * 3600; Y = Detik - X; M = Y / 60; Z = M * 60; D = Y - Z; cout << J << " Jam "; cout << M << " Menit "; cout << D << " Detik " ; } 7425 2 Jam 3 Menit 45 Detik
37
Detik J = Detik / 3600
7425
1
J 2
Y = Detik – J * 3600
2 Y
225
M M = Y / 60
3
3
D = Y – M * 60
4 45
4 langkah 5 variabel
1 2 3 4
#include void main() { int Detik, J, M, D, Y; cout << "Detik : " ; cin >> Detik; J = Detik / 3600; Y = Detik – J*3600; M = Y / 60; D = Y – M*60; cout << J << " Jam "; cout << M << " Menit "; cout << D << " Detik " ; }
D
Di monitor terlihat :
7425 2 Jam 3 Menit 45 Detik
38
Buat flowchart untuk 3 langkah dan 4 variabel!
Buat Program untuk 3 langkah dan 4 variabel!
39
#include void main() { int Detik, J,M,D, X,Y,Z; cout << "Detik : " ; cin >> Detik; J = Detik / 3600; X = J * 3600; Y = Detik - X; M = Y / 60; Z = M * 60; D = Y - Z; cout << J << " Jam "; cout << M << " Menit "; cout << D << " Detik " ; }
#include void main() { int Detik, J, M, D, Y; cout << "Detik : " ; cin >> Detik; J = Detik / 3600; Y = Detik – J*3600; M = Y / 60; D = Y – M*60; cout << J << " Jam "; cout << M << " Menit "; cout << D << " Detik " ; }
#include void main() { int Detik, J, M, D; cout << "Detik : " ; cin >> Detik; J = Detik / 3600; M = (Detik - J*3600 )/ 60; D = ( Detik - J* 3600 ) - M*60; cout << J << " Jam "; cout << M << " Menit "; cout << D << " Detik " ; }
Dapat dipaksakan menjadi: cin >> Detik; cout << Detik / 3600
<< " Jam " ;
cout << ( Detik - (Detik / 3600) *3600 )/ 60
<< " Menit " ;
cout << ( Detik - (Detik / 3600) * 3600 ) -((Detik - (Detik /3600) * 3600) / 60 ) * 60 << " Detik 40 ";
41
J
Detik J = Detik / 3600
7425
2
1 2 X = Detik % 3600 X
M = X / 60
225
3
4 D = X % 60 45
D
4 langkah
3
M
#include void main() { int Detik, J, M, D, X; cout << "Detik : " ; cin >> Detik; J = Detik / 3600; X = Detik % 3600; M = X / 60; D = X % 60; cout << J << " Jam "; cout << M << " Menit "; cout << D << " Detik " ; } 42
J
Detik J = Detik / 3600
7425
2
1 2 M = (Detik % 3600 ) / 60
3
3 D = Detik % 3600 ) % 60
45
D
M
#include void main() { int Detik, J, M, D; cout << "Detik : " ; cin >> Detik; J = Detik / 3600; M = ( Detik % 300 ) / 60; D = ( Detik % 3600 ) % 60; cout << J << " Jam "; cout << M << " Menit "; cout << D << " Detik " ; }
3 langkah 43
#include void main() { int Detik, J, M, D, X; cout << "Detik : " ; cin >> Detik; J = Detik / 3600; X = Detik % 3600; M = X / 60; D = X % 60; cout << J << " Jam "; cout << M << " Menit "; cout << D << " Detik " ; }
#include void main() { int Detik, J, M, D; cout << "Detik : " ; cin >> Detik; J = Detik / 3600; M = ( Detik % 300 ) / 60; D = ( Detik % 3600 ) % 60; cout << J << " Jam "; cout << M << " Menit "; cout << D << " Detik " ; }
Dapat dipaksakan menjadi : cin >> Detik; cout << Detik / 3600 << " Jam "; cout << ( Detik % 3600 ) / 60 << " Menit "; cout << ( Detik % 3600 ) % 60 << " Detik " ;
44
Sumber : Sjukani, Algotitma & Struktur Data 1 dengan C++, Mitra Wacana Media, 2007
45