Dokumen tersebut memberikan contoh-contoh soal dan penyelesaian menggunakan operator aritmatika dalam bahasa pemrograman C++. Beberapa contoh soal yang diselesaikan meliputi soal geometri, persamaan matematika, dan rangkaian listrik sederhana.
2. i | H a lS.N.M.P. Simamora -Diktat
Kata Pengantar
Ucapan syukur ke hadirat Allah, SWT dan RasullNya Nabi
Muhammad, SAW. atas ridho dan berkatNya setiap hari dan
berkah serta tuntunanNya; sehingga tulisan ini dapat terlukiskan
dalam menambah pencerahan bagi mahasiswa dan pihak yang
ingin mengenal pemrograman, konsepnya serta terapannya dalam
aplikasi sederhana.
Pemrograman C++ diturunkan dari Bahasa Pemrograman C
yang berorientasi pada lapisan bawah dan atas pada sistem
komputer/komputer. Bahasa Pemrograman C++ tergolong
Middle-Level Programming Language sehingga tanpa end-user
harus menyelami lapisan machine, namun dari pendekatan human-
language dapat menjangkau lapisan bawah sebuah sistem
komputer/komputer. Misalkan mengakses I/O-systems,
pengalamatan jaringan, akses ke hardware-devices, maupun
komunikasi ke lapisan microcontroller. Salah satu translator Bahasa
Pemrograman C++ adalah Dev-Cpp atau Dev-C++. Translator
ini dapat di-download di alamat https://www.4shared.com/file/-
qwXB9tece/devcpp-4992_setup.html. Dev-Cpp lebih user-friendly
dibandingkan TC 3.0 walaupun masing-masing translator ini hasil
produksinya dijalankan di platform sistem operasi DOS. Dev-Cpp
kurang tepat disebut compiler, karena saat proses translasi tidak
menghasilkan object-code (*.obj). Source-code latihan dapat di-
download di https://www.4shared.com/rar/fZjMahMIiq/code_app.html
Semoga bermanfaat bagi pembelajaran awal dan pengenalan
dasar pemrograman. Korespondensi dapat dilakukan via
ruangkelas777@gmail.com
Penulis
♣
3. ii | H a lS.N.M.P. Simamora -Diktat
Daftar Isi
Kata Pengantar ......................................................................................... i
Daftar Isi ......................................................................................................... ii
1. Operator Arithmatika .............................................................. 1
2. Operator Logika .......................................................................... 14
3. Struktur Kendali Proses ................................................... 29
4. Operator Matematika ........................................................... 45
5. Teknik Array 1D ......................................................................... 59
6. Algoritma Matematika Informasi ............................ 74
♣
4. 1 | H a lS.N.M.P. Simamora -Diktat
Operator Arithmatika
Ada empat operator dasar arithmatika serta satu operator sisa-
bagi yang dikenal dalam pemrograman secara umum, yakni: add
(tambah, ADD, +), substraction (kurang, SUB, −), multiply (kali,
MUL, ∗), divide (bagi, DIV, ÷); dan modulo (sisa-bagi, %).
Misalkan, perhatikan konstruksi-algoritma berikut ini:
aT←(-0.25);
aT=(2−aT)÷(aT+2)∗(5−aT);
tampilkan aT;
Prinsip matematika, prioritas operator MUL dan DIV
dibandingkan ADD dan SUB, sehingga secara analitik dapat
diselesaikan menjadi:
aT=(-0.25);
misalkan, x=(2−aT); y=(aT+2); z=(5−aT);
x=(2−(-0.25))=2.25;
y=(aT+2)=1.75;
z=(5−(-0.25))=5.25;
sehingga, aT=x÷y∗z=6.75;
Dengan demikian isi atau nilai terbaru/termutahir var: aT adalah
6.75;
Berdasarkan jenis bilangan/data-numerik yang digunakan
tersebut adalah Bilangan Pecahan, maka digunakan tipe-data
float.
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
1
5. 2 | H a lS.N.M.P. Simamora -Diktat
float aT;
aT=(-0.25);
aT=(2-aT)/(aT+2)*(5-aT);
cout << aT;
return 0;
}
Tampilan jalannya program:
Misalkan, perhatikan konstruksi-algoritma berikut ini:
d76←0+1−2+3−4+5−6+7−8+9;
tampilkan d76;
Pada contoh ini, penggunaan variabel cuku satu saja, yakni var:
d76 yang langsung menampung hasil komputasi expression:
0+1−2+3−4+5−6+7−8+9;
Operator matematika yang dilibatkan adalah ADD dan SUB, dan
secara analitik dapat diselesaikan sebagai berikut:
d76=1+3+5+7+9−2−4−6−8;
menjadi,
d76=1+3+5+7+9−(2+4+6+8)=25−20=5;
sehingga, d76=5;
Dengan demikian isi atau nilai terbaru/termutahir var: d76
adalah 5;
Berdasarkan jenis bilangan/data-numerik yang digunakan
tersebut adalah Bilangan Bulat, maka digunakan tipe-data int.
Walaupun demikian, oleh sebab Bilangan Bulat dalam range atau
domain Bilangan Pecahan maka dimungkinkan juga atau terbuka
menggunakan tipe-data float.
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
6. 3 | H a lS.N.M.P. Simamora -Diktat
int d76;
d76=0+1-2+3-4+5-6+7-8+9;
cout << d76;
return 0;
}
Tampilan jalannya program:
Misalkan, perhatikan konstruksi-algoritma berikut ini:
ip1t←13%3;
tampilkan ip1t;
Pada statement tersebut, expression melibatkan operator sisa-bagi
yakni modulo. Prinsip operasi modulo ditunjukkan pada statement
berikut ini:
A÷B = C sisa D;
maka,
A%B = D;
Jika A=35, B=5, maka C=7; dan D=0; dituliskan 5
0
7 ;
Jika A=30, B=6, maka C=5; dan D=0; dituliskan 6
0
5 ;
Jika A=125, B=4, maka C=31; dan D=1; dituliskan 4
1
31 ;
Jika A=17, B=3, maka C=5; dan D=2; dituliskan 3
2
5 ;
sehingga, untuk contoh kasus tersebut:
A=13;
B=3;
dan D=1; karena C=4;
Dengan demikian, diperoleh isi var: ip1t adalah 1;
Dalam penanganan operasi modulo selalu melibatkan Bilangan
Bulat, oleh sebab nilai dari sisa-bagi tidak mungkin dalam bentuk
Bilangan Pecahan. Dengan demikian, tipe-data yang digunakan
harus integer atau int.
7. 4 | H a lS.N.M.P. Simamora -Diktat
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
int ip1t;
ip1t=13%3;
cout << ip1t;
return 0;
}
Tampilan jalannya program:
Kasus: -Perhatikan model geometri berikut ini:
A
B C
BC = 10 cm; BE+EC=BC;
AE = 17.3 cm;
Tentukan berapa area ∆BAC.
Solusi:
Konstruksi-algoritma:
BC←10;
AE←17.3;
area=0.5∗(BC∗AE);
tampilkan area;
8. 5 | H a lS.N.M.P. Simamora -Diktat
Diselesaikan secara analitik:
area = 0.5∗(10∗17.3);
= 86.5 cm2 ;
Diperoleh bahwa area ∆ABC adalah 86.5 cm2;
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
float BC,AE,area;
BC=10;
AE=17.3;
area=0.5*(BC*AE);
cout << "Area segitiga ABC adalah " << area <<
" cm2";
return 0;
}
Tampilan jalannya program:
Kasus: -Perhatikan model geometri berikut ini:
Jika a=6-ssp; b=6-ssp; maka
tentukan nilai x.
Solusi:
Konstruksi-algoritma:
a←6;
b←6;
9. 6 | H a lS.N.M.P. Simamora -Diktat
x=(a∗b)÷(a+b);
tampilkan x;
Diselesaikan secara analitik:
x = (6∗6)÷(6+6);
= 3-ssp;
Diperoleh bahwa nilai x adalah 3-ssp;
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
float a,b,x;
a=6;
b=6;
x=(a*b)/(a+b);
cout << x;
return 0;
}
Tampilan jalannya program:
Kasus: -Perhatikan konstruksi-algoritma berikut ini:
♥ + ♥ + ♠ = 6;
♣ + ♥ = 5;
♥ + ♦ + ♠ = 5;
♣ + ♠ + ♠ + ♠ = 9;
♣ + ♥ + ♦ + ♠ = ...?...
Selesaikan persoalan tersebut.
Solusi:
Konstruksi-algoritma:
asumsikan: ♥=q; ♣=p; ♦=r; ♠=s;
♥ + ♥ + ♠ = 6; ⇒ 2q + s = 6;
♣ + ♥ = 5; ⇒ p + q = 5;
♥ + ♦ + ♠ = 5; ⇒ q + r + s = 5;
10. 7 | H a lS.N.M.P. Simamora -Diktat
♣ + ♠ + ♠ + ♠ = 9; ⇒ p + 3s = 9;
2q + s = 6
p + q = 5 −
p + q = 5 ⇔ 2p + 2q = 10
Dituliskan kembali:
2q + s = 6
2p + 2q = 10 −
s − 2p = -4
s − 2p = -4
p + 3s = 9 −
p + 3s = 9 ⇔ 2p + 6s = 18
Dituliskan kembali:
s − 2p = -4
2p + 6s = 18 +
0 + 7s = 14 ; s = 2;
2q + s = 6; q = 2;
p + q = 5; p = 3;
q + r + s = 5; r = 1;
maka, ♥=2; ♣=3; ♦=1; ♠=2;
dan diperoleh bahwa, ♣ + ♥ + ♦ + ♠ = 8;
Dituliskan dalam pemrograman C++
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
int q,p,r,s;
q=2;
p=3;
r=1;
s=2;
cout << char(3) << " + " << char(3) << " + " <<
char(6) << " = " << (2*q+s) << ";n";
12. 9 | H a lS.N.M.P. Simamora -Diktat
=
5
6
= 1.2K;
maka, Rpe = RBC = 1.2K;
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
float R1,R2,Rpe;
R1=2;
R2=3;
Rpe=(R1*R2)/(R1+R2);
cout << Rpe << "K";
return 0;
}
Tampilan jalannya program:
b) Hitung tegangan-cabang di BC.
Solusi:
Konstruksi-algoritma:
Tegangan = Beda-potensial = Kuat-Arus ∗ Hambatan;
V = i ∗ R;
Vtot = VAB + VBC;
sedangkan,
itot = iAB = iBC;
sehingga,
tegangan-cabang di BC = VBC = iBC ∗ RBC;
iBC = itot =
tot
tot
R
V
; dimana, Vtot = 5V;
Rtot = RAB + RBC; RAB = 20Ω = 0.02K;
= 0.02K + 1.2K;
= 1.22K;
13. 10 | H a lS.N.M.P. Simamora -Diktat
lalu, itot =
K
V
22.1
5
= 4.098360656mA;
dengan demikian, VBC = iBC ∗ RBC = 4.918032787V;
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
float R1,R2,RBC,RAB,Rtot,itot,iBC,Vtot,VBC;
R1=2;
R2=3;
Vtot=5;
RBC=(R1*R2)/(R1+R2);
RAB=0.02;
Rtot=RAB+RBC;
itot=Vtot/Rtot;
iBC=itot;
VBC=iBC*RBC;
cout << VBC << "V";
return 0;
}
Tampilan jalannya program:
c) Hitung tegangan-cabang di AB.
Solusi:
Konstruksi-algoritma:
VAB = iAB ∗ RAB;
= (4.098360656mA)(20Ω)
= 81.96721311 mV
maka, tegangan-cabang di AB adalah 81.97mV.
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
14. 11 | H a lS.N.M.P. Simamora -Diktat
int main()
{
float R1,R2,RBC,RAB,Rtot,itot,iAB,Vtot,VAB;
R1=2;
R2=3;
RAB=0.02;
Vtot=5;
RBC=(R1*R2)/(R1+R2);
Rtot=RAB+RBC;
itot=Vtot/Rtot;
iAB=itot;
RAB=RAB*1000;
VAB=iAB*RAB;
cout << VAB << " mV";
return 0;
}
Tampilan jalannya program:
d) Hitung daya di R=2K.
Solusi:
Konstruksi-algoritma:
Daya = tegangan ∗ kuat-arus;
P = V ∗ i;
sedangkan, PR1 = VBC ∗ iR2K
iR2K = VBC ÷ R1;
=
K
V
2
92.4
= 2.459016393 mA;
sehingga, PR1 = VBC ∗ iR2K
= (4.92V)( 2.459016393 mA)
= 12.09352325KW
dengan demikian daya di R=2K adalah 12.09KW.
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
15. 12 | H a lS.N.M.P. Simamora -Diktat
int main()
{
float
R1,R2,RBC,RAB,Rtot,itot,iBC,i1,Vtot,VBC,PBC;
R1=2;
R2=3;
Vtot=5;
RBC=(R1*R2)/(R1+R2);
RAB=0.02;
Rtot=RAB+RBC;
itot=Vtot/Rtot;
iBC=itot;
VBC=iBC*RBC;
i1=VBC/R1;
PBC=VBC*i1;
cout << PBC << " KW";
return 0;
}
Tampilan jalannya program:
e) Hitung kuat-arus di R=3K.
Solusi:
Konstruksi-algoritma:
VR2 = VBC = 4.92V.
maka, iR2 =
2
2
R
VR
=
K
V
3
74.91803278
= 1.639344262 mA;
dengan demikian, kuat-arus di R=3K adalah 1.639mA.
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
float
R1,R2,RBC,RAB,Rtot,itot,iBC,i2,Vtot,VBC;
R1=2;
16. 13 | H a lS.N.M.P. Simamora -Diktat
R2=3;
Vtot=5;
RBC=(R1*R2)/(R1+R2);
RAB=0.02;
Rtot=RAB+RBC;
itot=Vtot/Rtot;
iBC=itot;
VBC=iBC*RBC;
i2=VBC/R2;
cout << i2 << " mA";
return 0;
}
Tampilan jalannya program:
Rangkaian elektronika tersebut disimulasikan berikut ini:
17. 14 | H a lS.N.M.P. Simamora -Diktat
Operator Logika
Ada tiga operator logika yang dikenal secara umum dalam
pemrograman yakni AND, OR, dan XOR; ditambah satu operator
NOT. Operator logika bekerja berdasar algoritma kerja logic-gates.
Algoritma Kerja Gerbang AND (disimbolkan dalam
pemrograman adalah ‘&’): luaran bernilai 1 jika-dan-hanya-jika
semua nilai-masukan bernilai 1.
Contoh: -Perhatikan konstruksi-algoritma berikut:
A←DEC(15);
B←DEC(21);
z=A•B;
tampilkan z;
Solusi:
Algoritma Matematika Informasi
DEC(15) = (...)2;
15 ÷ 2 = 7 sisa 1
7 ÷ 2 = 3 sisa 1
3 ÷ 2 = 1 sisa 1
1 ÷ 2 = 0 sisa 1
maka, disusun menjadi: (1111)2; dan A = 1111;
DEC(21) = (...)2;
21 ÷ 2 = 10 sisa 1
10 ÷ 2 = 5 sisa 0
5 ÷ 2 = 2 sisa 1
2 ÷ 2 = 1 sisa 0
1 ÷ 2 = 0 sisa 1
maka, disusun menjadi: (10101)2; dan B = 10101;
A : 01111
B : 10101 •
2
18. 15 | H a lS.N.M.P. Simamora -Diktat
C : 00101
sehingga, isi var: C adalah (00101)2 ⇒ transformasikan ke DEC.
00101= DEC(...);
= 0 + 0 + 1.(2)2 + 0 + 1.(2)0;
= 4 + 1;
= DEC(5);
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
int A,B,C;
A=15;
B=21;
C=A&B;
cout << C;
return 0;
}
Tampilan jalannya program:
Algoritma Kerja Gerbang OR (disimbolkan dalam pemrograman
adalah ‘’): luaran bernilai 1 jika-dan-hanya-jika salah-satu nilai-
masukan bernilai 1.
Contoh: -Perhatikan konstruksi-algoritma berikut:
A←DEC(16);
B←DEC(21);
z=A+B;
tampilkan z;
Solusi:
Algoritma Matematika Informasi
DEC(16) = (...)2;
16 ÷ 2 = 8 sisa 0
8 ÷ 2 = 4 sisa 0
4 ÷ 2 = 2 sisa 0
2 ÷ 2 = 1 sisa 0
19. 16 | H a lS.N.M.P. Simamora -Diktat
1 ÷ 2 = 0 sisa 1
maka, disusun menjadi: (10000)2; dan A = 10000;
DEC(21) = (...)2;
21 ÷ 2 = 10 sisa 1
10 ÷ 2 = 5 sisa 0
5 ÷ 2 = 2 sisa 1
2 ÷ 2 = 1 sisa 0
1 ÷ 2 = 0 sisa 1
maka, disusun menjadi: (10101)2; dan B = 10101;
A : 10000
B : 10101 +
C : 10101
sehingga, isi var: C adalah (10101)2 ⇒ transformasikan ke DEC.
10101= DEC(...);
= 1.(2)4 + 0 + 1.(2)2 + 0 + 1.(2)0;
= 16 + 4 + 1;
= DEC(21);
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
int A,B,C;
A=16;
B=21;
C=A|B;
cout << C;
return 0;
}
Tampilan jalannya program:
Algoritma Kerja Gerbang XOR (disimbolkan dalam pemrograman
adalah ‘∧’): luaran bernilai 1 jika-dan-hanya-jika jumlah nilai-
masukan bernilai kelipatan GANJIL.
20. 17 | H a lS.N.M.P. Simamora -Diktat
Contoh: -Perhatikan konstruksi-algoritma berikut:
A←DEC(14);
B←DEC(22);
z=A⊕B;
tampilkan z;
Solusi:
Algoritma Matematika Informasi
DEC(14) = (...)2;
14 ÷ 2 = 7 sisa 0
7 ÷ 2 = 3 sisa 1
3 ÷ 2 = 1 sisa 1
1 ÷ 2 = 0 sisa 1
maka, disusun menjadi: (1110)2; dan A = 1110;
DEC(22) = (...)2;
22 ÷ 2 = 11 sisa 0
11 ÷ 2 = 5 sisa 1
5 ÷ 2 = 2 sisa 1
2 ÷ 2 = 1 sisa 0
1 ÷ 2 = 0 sisa 1
maka, disusun menjadi: (10110)2; dan B = 10110;
A : 01110
B : 10110 ⊕
C : 11000
sehingga, isi var: C adalah (11000)2 ⇒ transformasikan ke DEC.
11000= DEC(...);
= 1.(2)4 + 1.(2)3 + 0 + 0 + 0;
= 16 + 8;
= DEC(24);
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
int A,B,C;
A=14;
B=22;
C=A^B;
cout << C;
return 0;
21. 18 | H a lS.N.M.P. Simamora -Diktat
}
Tampilan jalannya program:
Algoritma Kerja Gerbang NOT (disimbolkan dalam
pemrograman adalah ‘&’): luaran bernilai 1 jika-dan-hanya-jika nilai-
masukan bernilai 0.
Contoh: -Perhatikan konstruksi-algoritma berikut:
zT←DEC(15);
z=∼(zT);
tampilkan z;
Solusi:
Algoritma Matematika Informasi: -Algoritma Komplemen DEC
Langkah-1: -transformasikan DEC-to-BIN dengan panjang 16-bit
(gunakan Algoritma FAST)
DEC(15) = xxxx xxxx xxxx xxxx
= 0000 0000 0000 1111
Langkah-2: -tambahkan dengan (1)2;
0000 0000 0000 1111
1 +
0000 0000 0001 0000
Langkah-3: -NOT-kan bit tersebut;
0000 0000 0001 0000 ⇒ 1111 1111 1110 1111
Langkah-4: -tambahkan dengan (1)2;
1111 1111 1110 1111
1 +
1111 1111 1111 0000
Langkah-5: -transformasikan bit tersebut ke DEC;
i. komplemen-kan bit tersebut;
1111 1111 1111 0000 ⇒ 0000 0000 0000 1111
ii. tambah-kan dengan (1)2;
0000 0000 0000 1111
1 +
0000 0000 0001 0000
22. 19 | H a lS.N.M.P. Simamora -Diktat
iii. transformasikan ke DEC;
0000 0000 0001 0000= 0 + ... + 0.(2)4
+ 0 + 0 + 0 + 0;
= DEC(16);
iv. kali-kan dengan DEC(-1)
DEC(16) ∗ DEC(-1) = DEC(-16);
maka, diperoleh bahwa ∼(DEC(15)) = DEC(-16); sehingga isi
var: z = (-16)10;
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
int zT=;
zT=15;
z=~(zT);
cout << z;
return;
}
Tampilan jalannya program:
Misalkan, perhatikan konstruksi-algoritma berikut ini:
zK←(21H≥055) && (DEC(55)≠21H) (055=DEC(45));
tampilkan zK;
Tuliskan pemrograman C++ untuk menyelesaikan persoalan
tersebut.
Solusi:
Algoritma Matematikan Informasi
Transformasikan seluruh data-numerik ke dalam DEC;
21H= 0x21 = (21)16 = (...)10;
= 2.(16)1 + 1.(16)0
= 32 + 1 = DEC(33);
23. 20 | H a lS.N.M.P. Simamora -Diktat
055 = (55)8 = (...)10;
= 5.(8)1 + 5.(8)0
= 40 + 5 = DEC(45);
Asumsikan,
x←21H≥055;
apakah 21H≥055; jawab: false (0);
maka, x = 0;
y←DEC(55)≠21H;
apakah DEC(55)≠21H; jawab: true (1);
maka, y = 1;
z←055=DEC(45);
apakah 055=DEC(45); jawab: true (1);
maka, z = 1;
sehingga, prioritas pengerjaan pada AND dibandingkan OR oleh
sebab AND level-nya lebih tinggi dibandingkan OR.
zK = x • y + z;
diuraikan, zK= (x • y);
= 0;
selanjutnya, zK = (zK + z);
= 1;
maka, isi terbaru/termutahir var: zK = 1 (true);
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
unsigned int zK;
zK=(0x21>=055)&&(55!=0x55)||(055==45);
cout << zK;
return 0;
}
Tampilan jalannya program:
24. 21 | H a lS.N.M.P. Simamora -Diktat
Kasus: -Sebuah var: sR menampung data-numerik DEC(32),
lalu di-XOR-kan dengan (1100)2, selanjutnya hasilnya di-AND-
kan dengan 025; lalu di-OR-kan dengan nilai-awal. Hasil-akhir
ditampungkan kembali ke sR, dan di-NOT-kan. Tentukan nilai
terbaru/termutar sR.
Solusi:
Algoritma Matematika Informasi:
DEC(32) = (...)2;
32 ÷ 2 = 16 sisa 0
16 ÷ 2 = 8 sisa 0
8 ÷ 2 = 4 sisa 0
4 ÷ 2 = 2 sisa 0
2 ÷ 2 = 1 sisa 0
1 ÷ 2 = 0 sisa 1
maka, disusun menjadi: (100000)2 ;
025 = (25)8 = (...)2;
Transformasi terlebih dahulu ke DEC, lalu selanjutnya ke BIN;
025 = (25)8 = (...)10;
= 2.(8)1 + 5.(8)0
= 16 + 5 = DEC(21);
DEC(21) = (...)2;
21 ÷ 2 = 10 sisa 1
10 ÷ 2 = 5 sisa 0
5 ÷ 2 = 2 sisa 1
2 ÷ 2 = 1 sisa 0
1 ÷ 2 = 0 sisa 1
maka, disusun menjadi: (10101)2 ;
DEC(32) : 10 0000
(1100)2 : 00 1100 ⊕
sR : 10 1100
(25)8 : 01 0101 •
sR : 00 0100
(32)10 : 10 0000 +
sR : 10 0100
25. 22 | H a lS.N.M.P. Simamora -Diktat
Isi var: sR di-NOT-kan:
sR : 10 0100
sR : 01 1011
Uji nilai DEC isi terbaru var: sR,
DEC(52) : 0000 0011 0100
( ... )10 : 1111 1101 1011 +
DEC(...) :10000 0000 1111
1 : tanda +;
sehingga, 1111 = DEC(15), dan hasil NOT dari sR adalah:
(15)10 − (52)10 = (-37)10;
Gunakan Cara ke-2: Algoritma Komplemen DEC;
sR = 10 0100 = (...)10;
= 1.(2)5 + 0.(2)4 + 0.(2)3 + 1.(2)2 + 0.(2)1 + 0.(2)0
= 32 + 0 + 0 + 4 + 0 + 0
= DEC(36)
Langkah-1: -transformasikan DEC-to-BIN dengan panjang 16-bit
(gunakan Algoritma FAST)
DEC(36) = xxxx xxxx xxxx xxxx
= 0000 0000 0010 0100
Langkah-2: -tambahkan dengan (1)2;
0000 0000 0010 0100
1 +
0000 0000 0010 0101
Langkah-3: -NOT-kan bit tersebut;
0000 0000 0010 0101 ⇒ 1111 1111 1101 1010
Langkah-4: -tambahkan dengan (1)2;
1111 1111 1101 1010
1 +
1111 1111 1101 1011
Langkah-5: -transformasikan bit tersebut ke DEC;
i. komplemen-kan bit tersebut;
1111 1111 1101 1011 ⇒ 0000 0000 0010 0100
ii. tambah-kan dengan (1)2;
0000 0000 0010 0100
1 +
0000 0000 0010 0101
26. 23 | H a lS.N.M.P. Simamora -Diktat
iii. transformasikan ke DEC;
0000 0000 0010 0101= 0 + ... + 1.(2)5
+ 1.(2)2
+ 1.(2)0
;
= DEC(37);
iv. kali-kan dengan DEC(-1)
DEC(37) ∗ DEC(-1) = DEC(-37);
maka, diperoleh bahwa ∼(DEC(36)) = DEC(-37); sehingga isi
var: sR = (-37)10;
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
int sR,a;
sR=32;
a=sR;
sR=sR^12;
sR=sR&025;
sR=sR|a;
sR=(~sR);
cout << sR;
return 0;
}
Tampilan jalannya program:
Kasus: -Perhatikan sirkuit logic-
gate berikut ini:
Tentukan Z1 dan Z2 dalam DEC.
30. 27 | H a lS.N.M.P. Simamora -Diktat
62 ÷ 16 = 3 sisa 14 ; 14 ⇒ e;
3 ÷ 16 = 0 sisa 3
maka, disusun menjadi: (3e)16 = 0x3e;
Dengan demikian, isi terbaru/termutahir zK = DEC(62) = 0x3e
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
int zK;
zK=(75)^0x75;
cout << zK << endl;
cout << hex << zK;
return 0;
}
Tampilan jalannya program:
Kasus: -Buktikan expression berikut:
z • 1 = z;
untuk z ∈ data-numerik;
Solusi:
misalkan: z←DEC(18);
maka, DEC(18) = (...)2;
18 ÷ 2 = 9 sisa 0
9 ÷ 2 = 4 sisa 1
4 ÷ 2 = 2 sisa 0
2 ÷ 2 = 1 sisa 0
1 ÷ 2 = 0 sisa 1
maka, disusun menjadi: (10010)2 ;
1 ditansformasikan dengan panjang 16-bit: 1111 1111
dan 1111 1111 = DEC(-1);
Pembuktikan:
z1 = z + 1;
31. 28 | H a lS.N.M.P. Simamora -Diktat
z2 = z;
DEC(18) : 0001 0010
1 : 1111 1111 •
z1 : 0001 0010
maka, z1 = DEC(18); dan z2 = DEC(18); sehingga terbukti.
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
unsigned int z1,z2,z;
z=18;
z1=z&(-1);
z2=z;
cout << z1 << " " << z2;
return 0;
}
Tampilan jalannya program:
32. 29 | H a lS.N.M.P. Simamora -Diktat
Struktur Kendali Proses
Ada tiga jenis struktur kendali proses yang umum digunakan
dalam pemrograman, yakni: jika-dan-hanya-jika, perulangan, dan
seleksi. Blok kontrol jika-dan-hanya-jika dikenal dengan if-then-
else; perulangan ada tiga kelompok, yakni while, do-while, dan
for; serta seleksi dikenal dengan switch.
3.1 Blok kontrol: if-then-else
Format umum blok dapat dituliskan sebagai berikut:
if( ... ) {
statement;
} else {
statement;
}
Kasus: -Perhatikan statement berikut, dan selesaikan persoalan
yang disajikan; dimana nilai f(x) harus real.
f(x) =
)12(
)3(
+
−
x
x
; range: -5 ≤ x ≤ 5; dan x diperoleh dengan
metode input-value by end-user;
Solusi:
Konstruksi-algoritma:
Agar x selalu bernilai real, maka (2x+1) ≠ 0; sehingga x ≠ -0.5;
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
float fx,x;
3
33. 30 | H a lS.N.M.P. Simamora -Diktat
cout << "Tentukan x?: ";
cin >> x;
if((x==-0.5)||(x<-5)||(x>5)) {
cout << "Maaf, out-of-range...";
} else {
cout << "x=" << x;
cout << " ; f(" << x << ")=";
fx=(x-3)/(2*x+1);
cout << fx;
}
return 0;
}
Tampilan jalannya program:
Kasus: -Perhatikan statement berikut, dan selesaikan persoalan
yang disajikan; dimana nilai z(s) harus real.
z(s) =
s
s )12( −
; range: -1.5 < s < 1.5; dan s diperoleh
dengan metode input-value by end-user;
Solusi:
Konstruksi-algoritma:
Agar s selalu bernilai real, maka s ≠ 0;
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
34. 31 | H a lS.N.M.P. Simamora -Diktat
int main()
{
float s,zS;
cout << "Tentukan s?: ";
cin >> s;
if((s==0)||(s<=-1.5)||(s>=1.5)) {
cout << "Maaf, out-of-range...";
} else {
cout << "s=" << s << " ; ";
cout << "z(" << s << ")=";
zS=(2*s-1)/s;
cout << zS;
}
return 0;
}
Tampilan jalannya program:
3.2 Blok kontrol: while
Format umum blok dapat dituliskan sebagai berikut:
while( ... ) {
statement;
}
Kasus: -Tampilkanlah lima bilangan bulat genap dengan range -3
s.d 15; dimana bilangan-awal diperoleh dengan metode input-
35. 32 | H a lS.N.M.P. Simamora -Diktat
value by end-user. Lakukan proteksi terhadap nilai-masukan
tersebut agar sesuai dengan ketentuan yang ditetapkan.
Solusi:
Konstruksi-algoritma:
Agar nilai-masukan sesuai dengan ketentuan, maka:
i. tidak-boleh bilangan pecahan
ii. tidak-boleh bilangan ganjil
iii. bilangan kurang-dari -3 harus di-block
iv. bilangan-awal tidak-boleh lebih-besar atau sama-dengan 7
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
float x;
int b,i;
cout << "Tentukan bilangan-awal?: ";
cin >> x;
b=x;
if((x-b!=0)||(x<-3)||(x>=7)) {
cout << "Maaf, out-of-range...";
} else {
if(b%2!=0) {
x=x+1;
i=0;
while(i<5) {
cout << x << " ";
x=x+2;
i=i+1;
}
} else {
i=0;
while(i<5) {
cout << x << " ";
x=x+2;
i=i+1;
}
}
}
return 0;
}
36. 33 | H a lS.N.M.P. Simamora -Diktat
Tampilan jalannya program:
3.3 Blok kontrol: do-while
Format umum blok dapat dituliskan sebagai berikut:
do {
statement;
} while( ... );
Kasus: -Tampilkanlah enam bilangan bulat ganjil dengan range -5
s.d 18; dimana bilangan-awal diperoleh dengan metode input-
value by end-user. Lakukan proteksi terhadap nilai-masukan
tersebut agar sesuai dengan ketentuan yang ditetapkan.
Solusi:
Konstruksi-algoritma:
Agar nilai-masukan sesuai dengan ketentuan, maka:
i. tidak-boleh bilangan pecahan
ii. tidak-boleh bilangan genap
iii. bilangan kurang-dari -5 harus di-block
iv. bilangan-awal tidak-boleh lebih-besar atau sama-dengan 8
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
37. 34 | H a lS.N.M.P. Simamora -Diktat
float r;
int b,i;
cout << "Tentukan bilangan-awal?: ";
cin >> r;
b=r;
if((r-b!=0)||(b<-5)||(b>=8)) {
cout << "Maaf, out-of-range...";
} else {
if(b%2==0) {
b=b+1;
i=0;
do {
cout << b << " ";
b=b+2;
i=i+1;
} while(i<6);
} else {
i=0;
do {
cout << b << " ";
b=b+2;
i=i+1;
} while(i<6);
}
}
return 0;
}
Tampilan jalannya program:
38. 35 | H a lS.N.M.P. Simamora -Diktat
3.4 Blok kontrol: for
Format umum blok dapat dituliskan sebagai berikut:
for( ... ) {
statement;
}
Kasus: -Tampilkanlah empat bilangan pecahan dengan range -5
s.d 12; untuk selisih antar-bilangan=0.5, dimana bilangan-awal
harus bentuk pecahan yang diperoleh dengan metode input-value
by end-user. Lakukan proteksi terhadap nilai-masukan tersebut
agar sesuai dengan ketentuan yang ditetapkan.
Solusi:
Konstruksi-algoritma:
Agar nilai-masukan sesuai dengan ketentuan, maka:
i. tidak-boleh bilangan bulat sebagai nilai-masukan
ii. format bilangan pecahan 10.0 adalah 10;
iii. bilangan kurang-dari -5 harus di-block
iv. bilangan-awal tidak-boleh lebih-besar atau sama-dengan 10.5
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
float d;
int b,i;
cout << "Tentukan bilangan-awal?: ";
cin >> d;
b=d;
if((d-b==0)||(d<=-5)||(d>=10.5)) {
cout << "Maaf, out-of-range...";
} else {
for(i=0;i<4;i=i+1) {
cout << d << " ";
d=d+0.5;
}
}
return 0;
}
39. 36 | H a lS.N.M.P. Simamora -Diktat
Tampilan jalannya program:
Kasus: -Apabila ditampilkan sejumlah data-numerik berikut:
[1]: -1;
[2]: -2;
[3]: -3;
[4]: -4;
[5]: -5;
[6]: -6;
[7]: -7;
Selesaikan persoalan ini, dimana nilai-masukan menggunakan
metode deklarasi pada badan-program.
Solusi:
Konstruksi-algoritma:
Blok perulangan untuk indeks dan isi indeks dipisahkan, sehingga
kontrol-perulangan saling independ satu terhadap yang lain.
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
int t,i;
t=-1;
for(i=0;i<7;i=i+1) {
40. 37 | H a lS.N.M.P. Simamora -Diktat
cout << "[" << (i+1) << "]" << ": ";
cout << t;
cout << ";" << endl;
t=t-1;
}
return 0;
}
Tampilan jalannya program:
3.5 Blok kontrol: switch
Format umum blok dapat dituliskan sebagai berikut:
switch( ... ){
case 1: {
statement;
break;
}
case 2: {
statement;
break;
}
...
default: {
statement;
break;
}
}
41. 38 | H a lS.N.M.P. Simamora -Diktat
Kasus: -Ada tiga pilihan diberikan kepada end-user, yakni: Pilihan-
1: menampilkan statement dua baris, yaitu baris pertama adalah
“Teknik Informatika / FTI”; sedangkan baris ke-2 adalah
“Universitas BALE, Bandung”; Pilihan-2: menampilkan statement
“Mari Belajar Pemrograman C++”; dan Pilihan ke-3
menampilkan pertukaran isi dua variabel, var: s1=(-6); var:
s2=666; Selain ketiga pilihan tersebut, lakukan proteksi terhadap
nilai-masukan oleh end-user.
Solusi:
Konstruksi-algoritma:
Untuk pertukaran dua variabel, digunakan algoritma berikut:
s1←(-6);
s2←(666);
z = s1;
s1 = s2;
s2 = z;
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
int x;
cout << "Tentukan pilihan 1 s.d 3?: ";
cin >> x;
switch(x) {
case 1:
{
cout << "Teknik Informatika / FTIn";
cout << "Universitas BALE, Bandung";
break;
}
case 2:
{
cout << "Mari Belajar Pemrograman C++";
break;
}
case 3:
{
int z,s1,s2;
s1=-6;
s2=666;
42. 39 | H a lS.N.M.P. Simamora -Diktat
cout << s1 << " " << s2 << endl;
z=s1;
s1=s2;
s2=z;
cout << s1 << " " << s2;
break;
}
default:
{
cout << "Maaf, out-of-range...";
break;
}
}
return 0;
}
Tampilan jalannya program:
Kasus: -Ada empat pilihan diberikan kepada end-user, dengan
format tampilan berikut ini:
1. Operasi Logika XOR
2. Operasi Modulo
3. Operasi Perbandingan
4. Operasi Arithmatika Pengurangan
Adapun konstruksi-algoritma diuraikan sebagai berikut:
Pilihan ke-1:
z1?;
z2?;
46. 43 | H a lS.N.M.P. Simamora -Diktat
Kasus: - empat pilihan diberikan kepada end-user, dengan format
tampilan berikut ini:
1. Operasi AND
2. Operasi XOR
3. Operasi OR
4. Operasi NOT
Adapun konstruksi-algoritma diuraikan sebagai berikut:
z1?;
z2?;
Tentukan pilihan anda?: _
Untuk Pilihan ke-4, masing-masing z1 dan z2 akan diperoleh
hasil operasi komplemen-nya.
Solusi:
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
int t,z1,z2,z;
cout << "Tentukan z1?: ";
cin >> z1;
cout << "Tentukan z2?: ";
cin >> z2;
cout << "1. Operasi ANDn";
cout << "2. Operasi XORn";
cout << "3. Operasi ORn";
cout << "4. Operasi NOTn";
cout << "---------------------------------------
------n";
cout << "Tentukan pilihan anda?: ";
cin >> t;
switch(t) {
case 1: {
z=z1&z2;
cout << z1 << " AND " << z2 << " = ";
cout << z;
break;
}
case 2: {
z=z1^z2;
cout << z1 << " XOR " << z2 << " = ";
cout << z;
break;
48. 45 | H a lS.N.M.P. Simamora -Diktat
Operator Matematika
Umumnya pada setiap bahasa pemrograman, library translator
yang digunakan menyediakan operator-operator khusus
matematika dalam bentuk function atau method. Beberapa operator
khusus matematika yang umum disediakan seperti: fungsi-fungsi
trigonometri, konstanta Bilangan PHI (π), kuadrat, akar-pangkat
2, logaritma basis bilangan 10. Function atau method ini
disimpankan pada header file (di translator Dev-Cpp) math.h.
Misalkan, tentukan volume bola apabila jari-jarinya adalah 3-ssp.
Solusi:
Konstruksi-algoritma:
r←3;
vol=
3
3
4
r∗∗π ;
tampilkan vol;
vol = (4÷3) ∗ (3.14) ∗ (r)3;
Karena menyesuaikan dengan kapabilitas Dev-Cpp dalam
operator DIV, maka ditransformasikan menjadi:
vol = (4 ∗ (3.14) ∗ (r)3) ÷ 3;
= 113.0973355 ssp3;
Dengan demikian, volume bola tersebut adalah 113.0973355 ssp3;
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float vol,r,phi,r3;
4
49. 46 | H a lS.N.M.P. Simamora -Diktat
r=3;
phi=M_PI;
r3=pow(r,3);
vol=(4*phi*r3)/3;
cout << vol;
return 0;
}
Tampilan jalannya program:
Dari penyelesaian kasus ini dapat disimpulkan bahwa operator
khusus perpangkatan adalah:
z=pow(a,b); dimana z = ab;
Kasus: -Jika z = log(1000), maka tentukan berapa isi
terbaru/termutahir z.
Solusi:
Konstruksi-algoritma
z = log(1000);
maka, untuk mencari nilai log bilangan basis 10 yakni:
z =
( )
( ))10log(
)1000log(
;
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float z;
z=1000;
cout << "log(" << z << ") = ";
z=(log(z))/(log(10));
cout << z;
return 0;
}
50. 47 | H a lS.N.M.P. Simamora -Diktat
Tampilan jalannya program:
Kasus: -Perhatikan model geometri berikut ini:
OA = 3-ssp;
OB = 4-ssp;
Tentukan AB.
Solusi:
Konstruksi-algoritma:
Jika OA = 3-ssp; OB = 4-ssp, maka:
AB = ( )22
)()( OBOA + ;
= ( )22
)4()3( + ;
= ( )169 + ;
= 25-ssp;
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float OA,OB,AB;
OA=3;
OB=4;
OA=pow(OA,2);
OB=pow(OB,2);
AB=sqrt(OA+OB);
cout << AB;
return 0;
}
51. 48 | H a lS.N.M.P. Simamora -Diktat
Tampilan jalannya program:
Dari penyelesaian kasus ini dapat disimpulkan bahwa operator
khusus akar-pangkat 2 adalah:
z=sqrt(S); dimana z = S ;
Perhatikan model grafis berikut ini:
Model ini diturunkan dari nilai sine(x), cosine(x), dan tangent(x);
dimana x adalah nilai sudut (atau disimbolkan dengan θθθθ).
Umumnya pada pemrograman, nilai trigonometri dinyatakan
dalam radian, bukan derajat; sehingga nilai derajat harus
ditransformasikan ke dalam bentuk radian dan sebaliknya.
52. 49 | H a lS.N.M.P. Simamora -Diktat
Misalkan, aR←60o; tentukan sin(aR), cos(aR), dan tan(aR).
Solusi:
Konstruksi-algoritma:
2π rad = 360o;
maka, 1o = (π÷180) rad;
aR=60;
aR= aR ∗ (π ÷180);
Diuraikan satu-persatu sebagai berikut:
mencari nilai sin(aR)
aR=aR∗(π÷180);
z1=sin(aR);
tampilkan z1;
mencari nilai cos(aR)
aR=aR∗(π÷180);
z2=cos(aR);
tampilkan z2;
mencari nilai tan(aR)
aR=aR∗(π÷180);
z3=tan(aR);
tampilkan z3;
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float aR,z1,z2,z3,phi;
phi=M_PI;
aR=60;
aR=aR*(phi/180);
z1=sin(aR);
z2=cos(aR);
z3=tan(aR);
cout << "sin(60)=" << z1 << endl;
cout << "cos(60)=" << z2 << endl;
cout << "tan(60)=" << z3;
return 0;
}
53. 50 | H a lS.N.M.P. Simamora -Diktat
Tampilan jalannya program:
Dari penyelesaian kasus ini dapat disimpulkan bahwa operator
khusus trigonometri adalah:
z1=sin(x); dimana x =
∗
180
π
x ;
z2=cos(t); dimana t =
∗
180
π
t ;
z3=tan(s); dimana s =
∗
180
π
s ;
Kasus: -Perhatikan konstruksi-algoritma berikut:
zK = (1 ÷ (tan(z))) ∗ cos(z);
Tentukan zK untuk z ∈ 0, 30, 60, 90, 120; gunakan struktur
kendali proses for dalam penanganan proses repetisi.
Solusi:
Hindari tan(z)=∞;
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float z,zK,phi,a,a1;
int i;
phi=M_PI;
z=0;
for(i=0;i<5;i=i+1) {
cout << (i+1) << ". " << z << " ";
if(z==0||z==90) {
cout << "N/A" << endl;
} else {
a=z;
54. 51 | H a lS.N.M.P. Simamora -Diktat
a=a*(phi/180);
a1=tan(a);
zK=(1/a1)*cos(a);
cout << zK << endl;
}
z=z+30;
}
return 0;
}
Tampilan jalannya program:
Kasus: -Perhatikan konstruksi-algoritma berikut:
zT = (1 ÷ (sin(z))) ∗ tan(z);
Tentukan zT untuk z ∈ 0, 15, 30, 45, 60, 75, 90, 105, 120;
gunakan struktur kendali proses while dalam penanganan proses
repetisi.
Solusi:
Hindari tan(z)=∞; dan sin(z)=0;
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float z,zT,phi,a,a1;
int i;
phi=M_PI;
z=0;
i=0;
while(z<=120) {
cout << (i+1) << ". " << z << " ";
if(z==0||z==90) {
62. 59 | H a lS.N.M.P. Simamora -Diktat
Teknik Array 1D
Agar sebuah variabel dapat menampung lebih dari satu nilai data,
maka digunakan teknik array (larik). Array dapat didefinisikan
sebagai sebuah teknik atau metode untuk menampungkan lebih
dari dua data, numerik atau non-numerik; dengan tipe-data yang
sama sebanyak kapasitas variabel tersebut yang ditetapkan.
Indeks array dimulai dari 0, bukan 1 sehingga pencacah untuk
indeks yang umum disebut math-based.
Misalkan, sebuah variabel yakni sns menampung data-numerik
0.56, -1, 2.75, 3, 3, -12.5;
maka, dapat disebutkan indeks ke-2 (math-based) adalah -1; namun
apabila dideklarasikan dengan teknik array 1D yakni:
sns[0] = 0.56;
sns[1] = -1;
sns[2] = 2.75;
sns[3] = 3;
sns[4] = 3;
sns[5] = -12.5;
disimpulkan bahwa, panjang array var: sns adalah 6.
Apabila var: sns ditransformasikan dengan teknik array 2D
(asumsi disusun dalam 3-baris;2-kolom), maka dapat dituliskan
sebagai berikut:
sns[0][0] = 0.56;
sns[0][1] = -1;
sns[1][0] = 2.75;
sns[1][1] = 3;
sns[2][0] = 3;
sns[2][1] = -12.5;
5
63. 60 | H a lS.N.M.P. Simamora -Diktat
Apabila isi var: sns akan ditampilkan secara vertikal, maka:
0.56
-1
2.75
3
3
-12.5
Dituliskan dalam pemrograman C++ (asumsi: penanganan proses
repetisi menggunakan struktur kendali proses while) sebagai
berikut:
#include<iostream>
using namespace std;
int main()
{
float sns[7]={0.56,-1,2.75,3,3,-12.5};
int i;
i=0;
while(i<6) {
cout << sns[i] << endl;
i=i+1;
}
return 0;
}
Tampilan jalannya program:
Dituliskan dalam pemrograman C++ (asumsi: penanganan proses
repetisi menggunakan struktur kendali proses for) sebagai
berikut:
#include<iostream>
using namespace std;
int main()
64. 61 | H a lS.N.M.P. Simamora -Diktat
{
float sns[7]={0.56,-1,2.75,3,3,-12.5};
int i;
for(i=0;i<6;i=i+1) {
cout << sns[i] << endl;
}
return 0;
}
Tampilan jalannya program:
Perbedaam while dengan do-while terletak pada posisi statement
yang akan dieksekusi dan blok program kontrol perulangan.
Dituliskan dalam pemrograman C++ (asumsi: penanganan proses
repetisi menggunakan struktur kendali proses do-while) sebagai
berikut:
#include<iostream>
#include<conio.h>
#include<stdio.h>
using namespace std;
int main()
{
float sns[7]={0.56,-1,2.75,3,3,-12.5};
int i;
i=0;
do {
cout << sns[i] << endl;
i=i+1;
}while(i<6);
cout << "nTekan sembarang tombol...";
getch();
system("cls");
return 0;
}
65. 62 | H a lS.N.M.P. Simamora -Diktat
Tampilan jalannya program:
Kasus: -Sebuah variabel, var: xL, menampungkan sejumlah data-
numerik, yakni: 56H,056,DEC(23),DEC(-23),065; apabila (math-
based) data ke-2 saling dipertukarkan dengan ke-5, lalu hasil
termutahir ditampungkan ke var: xR, dan dilakukan operasi
komputasi sebagai berikut:
LR[1]←xL[2]⊕xR[3];
LR[2]←xL[4]−xR[5];
LR[3]←xL[5]xR[1];
LR[4]←xL[1]•xR[4];
Hasil-akhir ditampungkan ke var: LR, maka tampilkan secara
horisontal isi xL, xR, dan LR.
Solusi:
Algoritma Matematika Informasi:
u←xL[2];
xL[2]←xL[5];
xL[5]←u;
maka, diperoleh bahwa:
var: xL ∈ {56H,056,DEC(23),DEC(-23),065};
var: xR ∈ {56H,065,DEC(23),DEC(-23),056};
56H = (56)16 = (...)10;
= 5.(16)1 + 6.(16)0;
= 80 + 6 = DEC(86);
DEC(86) = (...)2;
86 ÷ 2 = 43 sisa 0
43 ÷ 2 = 21 sisa 1
69. 66 | H a lS.N.M.P. Simamora -Diktat
LR[2]=xL[4]|xR[0];
LR[3]=xL[0]&xR[3];
for(i=0;i<4;i=i+1) {
cout << LR[i] << " ";
}
return 0;
}
Tampilan jalannya program:
Kasus: -Apabila sejumlah data non-numerik ditampungkan ke var:
b2 berikut ini (math-based):
b2[1]←’♥’;
b2[2]←’A’;
b2[3]←’♠’;
b2[4]←’7’;
b2[5]←’a’;
b2[6]←’♣’;
b2[7]←’♦’;
Tampilkanlah isi b2 dirunut dari belakang secara horisontal
sebelum dan sesudah. Gunakan struktur kendali proses do-while
dalam penanganan proses repetisi. Dan gunakan metode swapping
untuk menampilkan perubahan posisi isi array.
Solusi:
Konstruksi-algoritma:
‘♥’: 3;
‘A’: 65;
‘♠’: 6;
‘7’: 55;
‘a’: 97;
‘♣’: 5;
‘♦’: 4;
sebelum: b2 ∈ {‘♥’, ‘A’, ‘♠’, ‘7’, ‘a’, ‘♣’, ‘♦’};
70. 67 | H a lS.N.M.P. Simamora -Diktat
sesudah: b2 ∈ {‘♦’, ‘♣’, ‘a’, ‘7’, ‘♠’, ‘A’, ‘♥’};
Dituliskan dalam pemrograman C++
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
char b2[8],k;
int i;
b2[0]=char(3);
b2[1]=char(65);
b2[2]=char(6);
b2[3]=char(55);
b2[4]=char(97);
b2[5]=char(5);
b2[6]=char(4);
i=0;
do {
cout << b2[i] << " ";
i=i+1;
} while(i<7);
cout << endl;
i=0;
do{
k=b2[i];
b2[i]=b2[7-1-i];
b2[7-1-i]=k;
} while(i<3);
i=0;
do {
cout << b2[i] << " ";
i=i+1;
} while(i<7);
return 0;
}
Tampilan jalannya program:
71. 68 | H a lS.N.M.P. Simamora -Diktat
Kasus: -Uraikanlah dan tampungkan Model Bilangan 4 Formula
sesuai statement berikut ini:
s←4;
shr[0]=(s+s)−(s+s);
shr[1]=(s+s)÷(s+s);
shr[2]=(s÷s)+(s÷s);
shr[3]=s−(s(s−s));
shr[4]=s+((s−s)∗s);
shr[5]=s+(s(s−s));
shr[6]=s+((s+s)÷s);
shr[7]=(s+s)−(s÷s);
shr[8]=(s+s)+(s−s);
shr[9]=(s+s)+(s÷s);
shr[10]=(44−s)÷s;
shr[11]=44÷(√s∗√s);
shr[12]=s∗(s−(s÷s));
shr[13]=(44÷s)+√s;
shr[14]=s+s+s+√s;
Gunakan struktur kendali proses for untuk penanganan proses
repetisi/looping. Dan tampilkan isi var: shr secara horisontal.
Solusi:
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float s,shr[15],a,b,c,d,e;
int i;
s=4;
a=(s+s);
b=(s-s);
c=(s/s);
d=(pow(s,b));
e=(sqrt(s));
shr[0]=a-a;
shr[1]=a/a;
shr[2]=c+c;
shr[3]=s-d;
shr[4]=s+(b*s);
shr[5]=s+d;
72. 69 | H a lS.N.M.P. Simamora -Diktat
shr[6]=s+(a/s);
shr[7]=a-c;
shr[8]=a+b;
shr[9]=a+c;
shr[10]=(44-s)/s;
shr[11]=44/(e*e);
shr[12]=s*(s-c);
shr[13]=(44/s)+e;
shr[14]=a+s+e;
for(i=0;i<15;i=i+1) {
cout << shr[i] << " ";
}
return 0;
}
Tampilan jalannya program:
Kasus: -Berdasarkan kasus sebelumnya, lakukan urutan indeks
terbalik pada isi var: shr; menggunakan teknik decreasing.
Gunakan struktur kendali proses do-while dalam penanganan
proses looping/repetisi.
Solusi:
sebelum: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14;
sesudah: 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0;
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float s,shr[15],a,b,c,d,e;
int i;
s=4;
a=(s+s);
b=(s-s);
c=(s/s);
d=(pow(s,b));
73. 70 | H a lS.N.M.P. Simamora -Diktat
e=(sqrt(s));
shr[0]=a-a;
shr[1]=a/a;
shr[2]=c+c;
shr[3]=s-d;
shr[4]=s+(b*s);
shr[5]=s+d;
shr[6]=s+(a/s);
shr[7]=a-c;
shr[8]=a+b;
shr[9]=a+c;
shr[10]=(44-s)/s;
shr[11]=44/(e*e);
shr[12]=s*(s-c);
shr[13]=(44/s)+e;
shr[14]=a+s+e;
i=0;
do {
cout << shr[i] << " ";
i=i+1;
} while(i<15);
cout << endl;
i=0;
do {
cout << shr[(15-1)-i] << " ";
i=i+1;
}while(i<15);
return 0;
}
Tampilan jalannya program:
Kasus: -Sebuah lingkaran dengan radius=2.75-ssp; apabila nilai
radius ditampungkan (math-based) ke indeks ke-1, area lingkaran
ditampungkan ke indeks-2, keliling lingkaran ditampungkan ke
indeks ke-3 var: YBS; maka tampilkan isi YBS secara vertikal.
Gunakan struktur kendali proses while dalam penanganan proses
repetisi/looping.
74. 71 | H a lS.N.M.P. Simamora -Diktat
Solusi:
Konstruksi-algoritma:
r←2.75;
maka, YBS[1]←2.75;
area = π ∗ r2;
= 3.14 ∗ (2.75)2;
= 23.75829444;
maka, YBS[2]←23.75829444;
Keliling = 2∗π∗r;
= (2)(3.14)(2.75);
= 17.27875959;
maka, YBS[3]←17.27875959;
sehingga, YBS ∈ {2.75,23.75829444,17.27875959};
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float r,phi,YBS[4];
int i;
r=2.75;
phi=M_PI;
YBS[0]=2.75;
YBS[1]=phi*(pow(r,2));
YBS[2]=(2*phi)*r;
i=0;
while(i<3) {
cout << YBS[i] << endl;
i=i+1;
}
return 0;
}
Tampilan jalannya program:
75. 72 | H a lS.N.M.P. Simamora -Diktat
Kasus: -Perhatikan konstruksi-algoritma berikut ini:
jika 21∗41=861 adalah (2∗4)∗100+(2+4)∗10+1;
sehingga, 800 + 60 + 1 = 861;
dan, 31∗81=2511 adalah (3∗8)∗100+(3+8)∗10+1;
sehingga, 2400 + 110 + 1 = 2511;
Selesaikan persoalan ini dengan teknik array 1D. Gunakan
struktur kendali proses for dalam penanganan proses repetisi.
Solusi:
Konstruksi-algoritma:
x1 ∗ y1 = c;
xy ∈ Bilangan Bulat;
a←x∗y∗100;
b←(x+y) ∗10;
dan, c=a+b+1;
Misalkan, 41 dan 51; xy1⇐451; maka, x=4; dan y=5;
41 ∗ 51 = 2091;
diuraikan: a=4∗5∗100=2000;
b=(4+5)∗10=90;
c=2000+90+1=2091;
Misalkan, 61 dan 91; xy1⇐691; maka, x=6; dan y=9;
61 ∗ 91 = 5551;
diuraikan: a=6∗9∗100=5400;
b=(6+9)∗10=150;
c=5400+150+1=5551;
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int i,zR[4],a,b,c,x,y;
cout << "Tentukan x?: ";
cin >> x;
cout << "Tentukan y?: ";
cin >> y;
a=x*y*100;
b=(x+y)*10;
c=a+b+1;
76. 73 | H a lS.N.M.P. Simamora -Diktat
zR[0]=x*10+1;
zR[1]=y*10+1;
zR[2]=zR[0]*zR[1];
cout << "Bilangan yang ditentukan: ";
cout << x << "1 dan " << y << "1" << endl;
cout << "Hasil perkalian = " << c << endl;
for(i=0;i<3;i=i+1) {
cout << zR[i] << " ";
}
return 0;
}
Tampilan jalannya program:
77. 74 | H a lS.N.M.P. Simamora -Diktat
Algoritma Matematika Informasi
Data dan informasi yang di-input-kan ke dalam sistem
komputer/komputer modern akan diproses secara matematik;
oleh sebab itu, dasar pemrosesan dalam sistem
komputer/komputer modern adalah Algoritma Matematika
Informasi. Dasar kerja dan pemrosesan Algoritma Matematika
Informasi adalah operasi arithmatika dan operasi logika, Hukum
De’Morgan, Logika Matematika, dan Teori Himpunan.
Misalkan, z=(234)10; transformasikan isi z ke DEC.
Solusi:
(234)10 = 2-ratusan + 3-puluhan + 4-satuan;
= 2.(10)2 + 3.(10)1 + 4.(10)0 ;
= 200 + 30 + 4;
= DEC(234);
6.1 Tranformasi BIN-to-DEC
Bilangan Basis 2 disebut binary-digit (bit), umumnya dituliskan
dalam kode sebutan BIN. Bilangan basis ini memiliki range 0 s.d
1, dan berikut dituliskan level kesetaraan dengan DEC:
BIN DEC BIN DEC
000 000 0 001 001 9
000 001 1 001 010 10
000 010 2 001 011 11
000 011 3 001 100 12
000 100 4 001 101 13
000 101 5 001 110 14
000 110 6 001 111 15
000 111 7 010 000 16
001 000 8 010 001 17
6
78. 75 | H a lS.N.M.P. Simamora -Diktat
Contoh: -Tuliskan Algoritma Matematika Informasi untuk
menyelesaikan persoalan berikut ini:
(001011)2 = (...)10;
Solusi:
Algoritma Matematika Informasi:
(001011)2 = 0.(2)5 + 0.(2)4 + 1.(2)3 + 0.(2)2 + 1.(2)1 + 1.(2)0;
= 0 + 0 + 8 + 0 + 2 + 1;
= DEC(11);
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float B[6],D;
int i;
B[0]=1*(pow(2,0));
B[1]=1*(pow(2,1));
B[2]=0*(pow(2,2));
B[3]=1*(pow(2,3));
B[4]=0*(pow(2,4));
B[5]=0*(pow(2,5));
D=0;
for(i=0;i<6;i=i+1) {
D=D+B[i];
}
cout << D;
return 0;
}
Tampilan jalannya program:
Contoh: -Tuliskan Algoritma Matematika Informasi untuk
menyelesaikan persoalan berikut ini:
(010001)2 = (...)10;
79. 76 | H a lS.N.M.P. Simamora -Diktat
Solusi:
Algoritma Matematika Informasi:
(010001)2 = 0.(2)5 + 1.(2)4 + 0.(2)3 + 0.(2)2 + 0.(2)1 + 1.(2)0;
= 0 + 16 + 0 + 0 + 0 + 1;
= DEC(17);
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float B[6],D;
int i;
B[0]=1*(pow(2,0));
B[1]=0*(pow(2,1));
B[2]=0*(pow(2,2));
B[3]=0*(pow(2,3));
B[4]=1*(pow(2,4));
B[5]=0*(pow(2,5));
D=0;
for(i=0;i<6;i=i+1) {
D=D+B[i];
}
cout << D;
return 0;
}
Tampilan jalannya program:
Contoh: -Tuliskan Algoritma Matematika Informasi untuk
menyelesaikan persoalan berikut ini:
(1010101)2 = (...)10;
Solusi:
Algoritma Matematika Informasi:
(1010101)2=1.(2)6 + 0.(2)5 + 1.(2)4 + 0.(2)3 + 1.(2)2 + 0.(2)1 + 1.(2)0
80. 77 | H a lS.N.M.P. Simamora -Diktat
= 64 + 0 + 16 + 0 + 4 + 0 + 1;
= DEC(85);
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float B[7],D;
int i;
B[0]=1*(pow(2,0));
B[1]=0*(pow(2,1));
B[2]=1*(pow(2,2));
B[3]=0*(pow(2,3));
B[4]=1*(pow(2,4));
B[5]=0*(pow(2,5));
B[6]=1*(pow(2,6));
D=0;
for(i=0;i<7;i=i+1) {
D=D+B[i];
}
cout << D;
return 0;
}
Tampilan jalannya program:
6.2 Tranformasi OCT-to-DEC
Bilangan Basis 8 adalah basis bilangan yang digunakan untuk
pengalamatan hardware; umumnya dituliskan dalam kode sebutan
OCT. Bilangan basis ini memiliki range 0 s.d 7. Dalam
pemrograman umum diidentifikasi dengan prefix 0...; umumnya
pada Bahasa Pemrograman C/C++, JAVA, dan JavaScript.
Misalkan, 056, 076, 023; namun salah bila dituliskan 078.
81. 78 | H a lS.N.M.P. Simamora -Diktat
Berikut ditunjukkan bilangan/data-numerik kesetaraan OCT
terhadap DEC.
OCT DEC OCT DEC
00 0 11 9
01 1 12 10
02 2 13 11
03 3 14 12
04 4 15 13
05 5 16 14
06 6 17 15
07 7 20 16
10 8 21 17
Contoh: -Tuliskan Algoritma Matematika Informasi untuk
menyelesaikan persoalan berikut ini:
(21)8 = (...)10;
Solusi:
Algoritma Matematika Informasi:
(21)8 = 021 = 2.(8)1 + 1.(8)0;
= 16 + 1;
= DEC(17);
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float O[3],D;
int i;
O[0]=1*(pow(8,0));
O[1]=2*(pow(8,1));
D=0;
for(i=0;i<2;i=i+1) {
D=D+O[i];
}
cout << D;
return 0;
}
82. 79 | H a lS.N.M.P. Simamora -Diktat
Tampilan jalannya program:
Contoh: -Tuliskan Algoritma Matematika Informasi untuk
menyelesaikan persoalan berikut ini:
(171)8 = (...)10;
Solusi:
Algoritma Matematika Informasi:
(171)8= 0171 = 1.(8)2 + 7.(8)1 + 1.(8)0;
= 64 + 56 + 1;
= DEC(121);
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float O[4],D;
int i;
O[0]=1*(pow(8,0));
O[1]=7*(pow(8,1));
O[2]=1*(pow(8,2));
D=0;
for(i=0;i<3;i=i+1) {
D=D+O[i];
}
cout << D;
return 0;
}
Tampilan jalannya program:
83. 80 | H a lS.N.M.P. Simamora -Diktat
6.3 Tranformasi HEX-to-DEC
Bilangan Basis 16 adalah basis bilangan yang digunakan untuk
pengalamatan hardware dan microcontroller; umumnya dituliskan
dalam kode sebutan HEX. Bilangan basis ini memiliki range 0 s.d
9 dilanjutkan dengan A s.d F. Dalam pemrograman umum
diidentifikasi dengan prefix 0x... atau ...H; umumnya digunakan
pada Bahasa Pemrograman C/C++, JAVA, dan JavaScript.
Misalkan, 0x56, 0x76, 0x45, 0xa6, 8H, 0x23; namun salah bila
dituliskan 0x7G.
Berikut ditunjukkan bilangan/data-numerik kesetaraan HEX
terhadap DEC.
HEX DEC HEX DEC
0h 0 9h 9
1h 1 Ah 10
2h 2 Bh 11
3h 3 Ch 12
4h 4 Dh 13
5h 5 Eh 14
6h 6 Fh 15
7h 7 10h 16
8h 8 11h 17
Tidak ada perbedaan mode status capital maupun lower-case untuk
pengenal yakni H atau h.
Contoh: -Tuliskan Algoritma Matematika Informasi untuk
menyelesaikan persoalan berikut ini:
(11)16 = (...)10;
Solusi:
Algoritma Matematika Informasi:
(11)16 = 0x11 = 1.(16)1 + 1.(16)0;
= 16 + 1;
= DEC(17);
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
84. 81 | H a lS.N.M.P. Simamora -Diktat
int main()
{
float H[3],D;
int i;
H[0]=1*(pow(16,0));
H[1]=1*(pow(16,1));
D=0;
for(i=0;i<2;i=i+1) {
D=D+H[i];
}
cout << D;
return 0;
}
Tampilan jalannya program:
Contoh: -Tuliskan Algoritma Matematika Informasi untuk
menyelesaikan persoalan berikut ini:
(1ae)16 = (...)10;
Solusi:
Algoritma Matematika Informasi:
(1ae)16 = 0xAE = 1.(16)2 + 10.(16)1 + 14.(16)0;
= 256 + 160 + 14;
= DEC(430);
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float H[4],D;
int i;
H[0]=14*(pow(16,0));
H[1]=10*(pow(16,1));
H[2]=1*(pow(16,2));
D=0;
85. 82 | H a lS.N.M.P. Simamora -Diktat
for(i=0;i<3;i=i+1) {
D=D+H[i];
}
cout << D;
return 0;
}
Tampilan jalannya program:
Contoh: -Tuliskan Algoritma Matematika Informasi untuk
menyelesaikan persoalan berikut ini:
(a0b0)16= (...)10;
Solusi:
Algoritma Matematika Informasi:
(a0b0)16= 0xa0b0 = 10.(16)3 + 0.(16)2 + 11.(16)1 + 0.(16)0;
= 40960 + 0 + 176 + 0;
= DEC(41136);
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float H[5],D;
int i;
H[0]=0*(pow(16,0));
H[1]=0xb*(pow(16,1));
H[2]=0*(pow(16,2));
H[3]=0xa*(pow(16,3));
D=0;
for(i=0;i<4;i=i+1) {
D=D+H[i];
}
cout << D;
return 0;
}
86. 83 | H a lS.N.M.P. Simamora -Diktat
Tampilan jalannya program:
6.4 Tranformasi DEC-to-BIN
Untuk merepresentasikan data-numerik dalam decimal ke binary-
digit, digunakan transformasi DEC-to-BIN.
Misalkan: DEC(215) = (...)2;
Solusi:
Algoritma Matematika Informasi
215 ÷ 2 = 107 sisa 1
107 ÷ 2 = 53 sisa 1
53 ÷ 2 = 26 sisa 1
26 ÷ 2 = 13 sisa 0
13 ÷ 2 = 6 sisa 1
6 ÷ 2 = 3 sisa 0
3 ÷ 2 = 1 sisa 1
1 ÷ 2 = 0 sisa 1
maka, disusun-ulang menjadi: (11010111)2;
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int dE[15],x,y;
int i,N;
x=215;
N=0;
while(x>0) {
y=x%2;
dE[N]=y;
N=N+1;
x=x/2;
}
for(i=0;i<N;i=i+1) {
87. 84 | H a lS.N.M.P. Simamora -Diktat
cout << dE[N-1-i];
}
return 0;
}
Tampilan jalannya program:
Contoh: --Tuliskan Algoritma Matematika Informasi untuk
menyelesaikan persoalan berikut ini:
(101)10 = (...)2;
Solusi:
Algoritma Matematika Informasi:
101 ÷ 2 = 50 sisa 1
50 ÷ 2 = 25 sisa 0
25 ÷ 2 = 12 sisa 1
12 ÷ 2 = 6 sisa 0
6 ÷ 2 = 3 sisa 0
3 ÷ 2 = 1 sisa 1
1 ÷ 2 = 0 sisa 1
maka, disusun-ulang menjadi: (1100101)2;
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int data[15],x,y;
int i,N;
x=101;
N=0;
while(x>0) {
y=x%2;
data[N]=y;
N=N+1;
88. 85 | H a lS.N.M.P. Simamora -Diktat
x=x/2;
}
for(i=0;i<N;i=i+1) {
cout << data[N-1-i];
}
return 0;
}
Tampilan jalannya program:
6.5 Tranformasi DEC-to-OCT
Untuk merepresentasikan data-numerik dalam decimal ke binary-
digit, digunakan transformasi DEC-to-OCT.
Misalkan: DEC(215) = (...)8;
Solusi:
Algoritma Matematika Informasi
215 ÷ 8 = 26 sisa 7
26 ÷ 8 = 3 sisa 2
3 ÷ 8 = 0 sisa 3
maka, disusun-ulang menjadi: (327)8;
Berbeda dengan BIN, pada OCT umumnya sebuah translator
menyediakan function/method untuk mentransformasikan ke octal.
Asumsi menggunakan function/method yang disediakan oleh
translator.
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
unsigned int data;
data=215;
cout << oct << data;
return 0;
}
89. 86 | H a lS.N.M.P. Simamora -Diktat
Tampilan jalannya program:
Contoh: -Tuliskan Algoritma Matematika Informasi untuk
menyelesaikan persoalan berikut ini:
(121)10 = (...)8;
Solusi:
Algoritma Matematika Informasi:
121 ÷ 8 = 15 sisa 1
15 ÷ 8 = 1 sisa 7
1 ÷ 8 = 0 sisa 1
maka, disusun-ulang menjadi: (171)8;
Asumsi menggunakan cara konvensional/model analitik
berdasarkan Algoritma Matematika Informasi.
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int data[15],x,y;
int i,N;
x=121;
N=0;
while(x>0) {
y=x%8;
data[N]=y;
N=N+1;
x=x/8;
}
for(i=0;i<N;i=i+1) {
cout << data[N-1-i];
}
return 0;
}
90. 87 | H a lS.N.M.P. Simamora -Diktat
Tampilan jalannya program:
6.6 Tranformasi DEC-to-HEX
Untuk merepresentasikan data-numerik dalam decimal ke binary-
digit, digunakan transformasi DEC-to-HEX.
Misalkan: DEC(315) = (...)16;
Solusi:
Algoritma Matematika Informasi
315 ÷ 16 = 19 sisa 11 ; 11 ⇒ B;
19 ÷ 16 = 1 sisa 3
1 ÷ 16 = 0 sisa 1
maka, disusun-ulang menjadi: (13B)16;
Berbeda dengan BIN, pada HEX umumnya sebuah translator
menyediakan function/method untuk mentransformasikan ke hexal.
Asumsi menggunakan function/method yang disediakan oleh
translator.
Dituliskan dalam pemrograman C++
#include<iostream>
using namespace std;
int main()
{
unsigned int data;
data=315;
cout << hex << data;
return 0;
}
Tampilan jalannya program:
91. 88 | H a lS.N.M.P. Simamora -Diktat
Contoh: -Tuliskan Algoritma Matematika Informasi untuk
menyelesaikan persoalan berikut ini:
(621)10 = (...)16;
Solusi:
Algoritma Matematika Informasi:
621 ÷ 16 = 38 sisa 13 ; 13 ⇒ D;
38 ÷ 16 = 2 sisa 6
2 ÷ 16 = 0 sisa 2
maka, disusun-ulang menjadi: (26D)16;
Asumsi menggunakan cara konvensional/model analitik
berdasarkan Algoritma Matematika Informasi.
Dituliskan dalam pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
char data[15];
int x,y;
int i,N;
x=621;
N=0;
while(x>0) {
y=x%16;
if(y>=10&&y<=15) {
if(y==10) {
data[N]='a';
}
if(y==11) {
data[N]='b';
}
if(y==12) {
data[N]='c';
}
if(y==13) {
data[N]='d';
}
if(y==14) {
data[N]='e';
}
if(y==15) {
data[N]='f';
93. 90 | H a lS.N.M.P. Simamora -Diktat
6.7 Algoritma FAST
Algoritma ini bekerja berdasar teknik/metode BCD (Binary-
Coded-Decimal) 8421; 8421 menjelaskan posisi setiap digit pada
deret Bilangan Basis 2.
Apabila diuraikan, maka deret Bilangan Basis 2 (dari kanan-ke-
kiri merujuk pada posisi MSB-LSB); MSB: Most-Significant-Bit
berada pada posisi kiri; LSB: Least-Significant-Bit berada pada
posisi kanan; atau secara umum disebut juga: MSD: Most-
Significant-Digit; dan LSD: Least-Significant-Digit;
dst ... 1024 256 128 64 32 16 8 4 2 1;
Contoh: -Tuliskan Algoritma Matematika Informasi untuk
persoalan berikut ini:
5ah = (...)2;
Solusi:
Gunakan Algoritma FAST: -transformasi HEX-to-BIN
Langkah-1: pisahkan digit berdasar posisi MSD-LSD;
LSD ⇒ a;
MSD ⇒ 5;
Langkah-2: transformasikan setiap digit ke dalam DEC;
0xa = DEC(10);
0x5 = DEC(5);
Langkah-3: transformasikan masing-masing digit DEC tersebut
dalam representasi posisi bit di deret BIN dengan masing-masing
panjang 4-bit;
DEC(10) = xxxx = 8+0+2+0;
DEC(5) = xxxx = 0+4+0+1;
Langkah-4: transformasikan setiap digit DEC tersebut dalam BIN
dengan panjang masing-masing 4-bit;
DEC(10) = 8+0+2+0 = 1010;
DEC(5) = 0+4+0+1 = 0101;
Langkah-5: concatenate-kan bit tersebut dalam posisi MSD-LSD;
5ah = 0101 1010;
Dengan demikian, diperoleh bahwa 5ah = (01011010)2;
Dibuktikan dengan pemrograman C++
#include<iostream>
#include<math.h>
95. 92 | H a lS.N.M.P. Simamora -Diktat
Tampilan jalannya program:
Kasus: -Tuliskan Algoritma Matematika Informasi untuk
persoalan berikut ini:
0666 = (...)16;
Solusi:
Gunakan Algoritma FAST: -transformasi OCT-to-HEX
Langkah-1: pisahkan digit berdasar posisi MSD-LSD;
LSD ⇒ 6;
MSD/LSD ⇒ 6;
MSD ⇒ 6;
Langkah-2: transformasikan setiap digit ke dalam DEC;
06 = DEC(6);
06 = DEC(6);
06 = DEC(6);
Langkah-3: transformasikan masing-masing digit DEC tersebut
dalam representasi posisi bit di deret BIN dengan masing-masing
panjang 3-bit;
DEC(6) = xxx = 4+2+0;
DEC(6) = xxx = 4+2+0;
DEC(6) = xxx = 4+2+0;
Langkah-4: transformasikan setiap digit DEC tersebut dalam BIN
dengan panjang masing-masing 4-bit;
DEC(6) = 4+2+0 = 110;
DEC(6) = 4+2+0 = 110;
DEC(6) = 4+2+0 = 110;
Langkah-5: concatenate-kan bit tersebut dalam posisi MSD-LSD;
0666 = 110 110 110;
Langkah-6: split-kan kelompok bit tersebut dalam posisi MSD-
LSD masing-masing 4-bit;
110110110 = xxx1 1011 0110; ganti x⇒0;
sehingga, diperoleh: 0001 1011 0110
Langkah-7: transformasikan setiap kelompok BIN tersebut ke
DEC dalam posisi MSD-LSD;
96. 93 | H a lS.N.M.P. Simamora -Diktat
0110 = 0+4+2+0 = DEC(6);
1011 = 8+0+2+1 = DEC(11);
0001 = 0+0+0+1 = DEC(1);
Langkah-8: transformasikan masing-masing DEC tersebut ke
HEX sesuai dengan posisi MSD-LSD;
DEC(6) = 6H;
DEC(11) = BH;
DEC(1) = 1H;
Langkah-9: concatenate-kan setiap digit HEX tersebut sesuai
dengan posisi MSD-LSD; menjadi: 1B6H
Dengan demikian, diperoleh bahwa 0666 = (1b6)16;
Dibuktikan dengan pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float D,bi1[3],bi2[5],s1,s2,s3;
float z1,z3;
int i,z2;
s1=6;
s2=6;
s3=6;
cout << "0" << s3 << s2 << s1 << " = ";
bi1[0]=s1*(pow(8,0));
bi1[1]=s2*(pow(8,1));
bi1[2]=s3*(pow(8,2));
D=0;
for(i=0;i<3;i=i+1) {
D=D+bi1[i];
}
cout << "DEC(" << D << ")n";
z1=6;
z2=11;
z3=1;
cout << "0x" << z3;
cout << hex << z2;
cout << z1 << " = ";
bi2[0]=z1*(pow(16,0));
bi2[1]=z2*(pow(16,1));
bi2[2]=z3*(pow(16,2));
D=0;
97. 94 | H a lS.N.M.P. Simamora -Diktat
for(i=0;i<3;i=i+1) {
D=D+bi2[i];
}
cout << "DEC(" << D << ")";
return 0;
}
Tampilan jalannya program:
Kasus: -Tuliskan Algoritma FAST untuk menyelesaikan
persoalan berikut:
(010011)2 = (...)16;
Solusi:
Algoritma Matematika Informasi:
010011 ⇒ xx01 0011 ; ganti x=0; ⇒ 0001 0011;
selanjutnya: LSD: 0011: (3)10 = 3H;
dan, MSD: 0001: (1)10 = 1H;
lalu, di-concatenate-kan menjadi: 13H;
maka diperoleh bahwa, (010011)2 = (13)16;
Dibuktikan dengan pemrograman C++
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float D,bi1[7],bi2[3],s1,s2,s3,s4,s5,s6;
float z1;
int i,z2;
s1=1;
s2=1;
s3=0;
s4=0;
s5=1;
s6=0;
cout << s6 << s5;
cout << s4 << s3 << s2 << s1 << " = ";
99. 96 | H a lS.N.M.P. Simamora -Diktat
Daftar Pustaka
Davis, S. R. (2004). C++ for Dummies-5th Edition. Wiley
Publishing.
Eggleston, D.L. (2011). Basic Electronics for Scientist and Engineers.
Cambridge University Press.
Sedgewick, R. (2003). Algorithms-third edition. Addison-Wesley.
Simamora, S.N.M.P. (2002). "Diktat SK-100 Dasar Komputer dan
Pemrograman". Dept. Sistem Komputer, Fak. Teknik. ITHB.
Bandung.
Simamora, S.N.M.P. (2011). "Diktat Kuliah TIF301 Algoritma
dan Pemrograman-1". Program studi Teknik Informatika. Univ.
BALE. Bandung.
Simamora, S.N.M.P. (2013). "Diktat Kuliah Algoritma dan
Pemrograman-I". Program studi Teknik Informatika. Univ.
Widyatama. Bandung.
Simamora, S.N.M.P. (2016). Modul Belajar Praktis Algoritma dan
Pemrograman. Penerbit Deepublish. Yogyakarta.
Skiena, S. S. (1998). The Algorithm Design Manual. Springer
Verlag, New York.
Winston, W. L. (1994). Introduction to Mathematical Programming:
Applications and Algorithms 2nd Edition. Duxbury Pr.
♣