1. Soal:
Diketahui flowchart
sebagai berikut:
Jika diyatakan dalam bentuk umum dan dalam bahasa C++ maka terlihat:
Bentuk Umum Algoritma
|
Bahasa C++
|
Read(A,B) X = A
Y = B
While( X != Y)
IF ( X < Y ) Then
X = X + A
else
Y = Y + B End If
End While
Write(X)
|
#include
void main()
{ int A,B,
X,Y; cin >> A >> B; X = A;
Y = B;
while( X != Y)
{ if( X < Y )
{ X = X + A; }
else
{ Y = Y + B; }
}
cout << X;
}
|
Pertanyaan:
a. Jika A = 2; dan B = 4, maka yang tercetak?
b. Jika
A = 4; dan B = 7, maka yang tercetak?
Jawab:
a. Jika A = 2; dan B = 4
X = A » X = 2
Y = B » Y = 4
- Iterasi
1 : 2 != 4; 2 < 4; maka
X=X+A; X=2+2=4; maka X=4; Y=4
- Iterasi 2 : 4
!= 4; kondisi salah; maka keluar
Loop. Sehingga X benilai 4, dan akan
tercetak 4
b. Jika
A = 4; dan B = 7
X = A » X = 4
Y = B » Y = 7
- Iterasi 1 : 4
!= 7; 4 < 7; maka X=X+A; X=4+4=8; maka
X=8; Y=7
- Iterasi
2 : 8 != 7; 8 > 7; maka Y=Y+B; Y=7+7=14;
maka X=8; Y=14
- Iterasi
3 : 8 != 14; 8 < 14;
maka X=X+A; Y=8+4=12; maka X=12;
Y=14
- Iterasi
4 : 12 != 14;12 < 14; maka X=X+A; Y=12+4=16; maka X=16; Y=14
- Iterasi
5 : 16 != 14; 16
> 14; maka Y=Y+B; Y=14+7=21; maka X=16;
Y=21
- Iterasi
6 : 16 != 21; 16
< 21; maka X=X+A; X=16+4=20;
maka X=20; Y=21
- Iterasi
7 : 20 != 21; 20
< 21; maka X=X+A; X=20+4=24;
maka X=24; Y=21
- Iterasi
8 : 24 != 21; 24
> 21; maka Y=Y+B; Y=21+7=28; maka X=24;
Y=28
- Iterasi
9 : 24 != 28; 24
< 28; maka X=X+A; X=24+4=28;
maka X=28; Y=28
- Iterasi 10: 28 != 28; kondisi salah; maka keluar Loop
Sehingga X
benilai 28, dan akan tercetak
28
2. Soal:
Susun algoritma untuk
menginput
3
buah
bilangan
bulat
yang
masing-masing menyatakan panjang sebuah garis. Kemudian periksa
ketiga buah garis tersebut, apakah dapat membentuk sebuah segitiga. Bila ketiga buah garis tersebut dapat membentuk sebuah segitiga,
maka cetak perkataan “SEGITIGA”, tapi bila ketiga
buah garis tersebut tidak
dapat
membentuk
sebuah segitiga,
maka cetak perkataan “BUKAN SEGITIGA”.
Pada
sebuah segitiga berlaku
suatu
kepastian
bahwa : Total panjang
dua buah sisi selalu lebih besar dari panjang satu sisi yang
lain.
Jawab:
Algoritma
dalam bahasa C++
|
#include
int main(){
int A,B,C, X,Y,Z;
cout<<"Masukan Sisi
A :";cin>>A;
cout<<"Masukan Sisi
B :";cin>>B;
cout<<"Masukan Sisi
C :";cin>>C;
X=A+B;
Y=B+C;
Z=A+C;
if(X>C){ cout <<
"SEGITIGA"; }else {
if(Y>A){ cout <<
"SEGITIGA";}else {
if(Z>B){ cout <<
"SEGITIGA";}else {
cout << " BUKAN SEGITIGA";}
}
}
}
|
Algoritma dengan logika lain dalam bahasa C++
lebih simple
|
#include
void main()
{
int A, B, C;
cin >> A >> B >> C;
|
&&
(C+A)
{
cout << "SEGITIGA";
}
else
{
cout << "BUKAN SEGITIGA";
}
}
3. Soal:
Diketahui algoritma berikut ini, ditulis dalam Bahasa
C++
#include
void main()
{
int N,X,T,Batas; N = ….. ;
Batas = N + 100; X
= 20;
T = N;
while( T <= Batas)
{
T = T + X;
X = X + 10;
}
cout << T;
}
Pertanyaan: apa yang tercetak oleh algoritma
diatas, bila N diisi dengan
2 digit terakhir NIM Saudara?
Jawab:
Dua digit terakhir NIM=50
N = 50
Batas = N
+ 100 »Batas = 50 + 100
= 150
X = 20
T = N
» T = 50
- Iterasi 1 : 50 <= 150; maka T=T+X » T=50+20=70; X=X+10 » X=20+10=30
- Iterasi 2 : 70 <= 150; maka T=T+X » T=70+30=100; X=X+10 » X=30+10=40
- Iterasi 3 : 100 <= 150; maka T=T+X » T=100+40=140;
X=X+10 » X=40+10=50
- Iterasi 4 : 140 <= 150; maka T=T+X » T=140+50=190; X=X+10 »X=50+10=60
- Iterasi 5 : 190 > 150; kondisi salah, maka keluar Loop
Sehingga T benilai 190, dan akan tercetak 190.
4. Soal:
Ali berangkat dari titik A ke titik B. Ali berangkat sebelum pukul 09:00:00
pagi. Badu mencatat dalam selembar kertas, 3 (tiga) buah bilangan yang menyatakan
Jam, Menit dan Detik pukul (jam) keberangkatan Ali dari titik A. Setelah
8175 detik kemudian dihitung sejak waktu keberangkatan,
Ali tiba di titik B. Dengan memanfaatkan data keberangkatan
yang dimiliki Badu, susunlah algoritma untuk mencetak pukul berapa (Jam, Menit,
Detik) Ali tiba di titik B.
Jawab:
Algoritma dalam bahasa C++
#include
void main()
{
int Waktu, Jam, JlhJam, Selisih,
Menit, JlhMenit, Detik,
Tiba; Waktu = 8175;
Jam = Waktu / 3600; JlhJam = Jam * 3600; Selisih = Waktu -
JlhJam; Menit = Selisih / 60; JlhMenit
= Menit * 60;
Detik = Selisih
- JlhMenit; Tiba = Jam + 9;
cout << "Ali
tiba pukul = ";
cout << "Jam
: " <<
Tiba << ":" << Menit <<
":" << Detik;
cout << " di Kota B = ";
}
Implementasi algoritma
Output\
5. Soal:
Disebuah negara berlaku satuan
uang logam (coin) sebagai
berikut: quarter
(25 sen) dime (10 sen), nickel
(5 sen) dan penny (1 sen). Apabila sebuah toko ingin mengembalikan uang belanjaan sebesar 64 sen, dengan jumlah keping coin yang paling sedikit, maka diperlukan 2 quarter, 1 dime dan 4 penny, (2*25+1*10+
4*1) atau sebanyak 7 keping. Ia tidak boleh mengembalikan dengan 6 dime dan 4 penny
(6*10+4*1) atau 10 keping,
walaupun nilainya sama-sama 64 sen. Susun
program untuk mencetak berapa keping
masing-masing coin yang diperlukan untuk uang kembalian. Nilai uang kembalian diketik melalui keyboard.
Jawab:
Algoritma dalam bahasa C++
#include
void main()
{
int quarter, dime, nickel, penny,
uang, sisa1, sisa2;
cout << "Masukkan
nilai uang : ";
cin >> uang;
quarter = uang / 25;
sisa1 = uang - ( 25 * quarter );
dime = sisa1 / 10;
sisa2 = sisa1 - ( 10 * dime );
nickel = sisa2 / 5;
penny = sisa2 - ( 5 * nickel );
cout << "Tercetak " << quarter << dime
<< nickel << penny << endl;
cout << " " << "Maksudnya
:" << endl;
cout << " " << quarter <<
"Keping Quarter " << endl;
cout << " " << dime <<
"Keping Dime " << endl;
cout << " " << nickel <<
"Keping Nickel " << endl;
cout << " " << penny <<
"Keping Penny " << endl;
cout << "Yang Menyatakan
nilai :" << uang << "Sen" << endl;
}
Implementasi algoritma
Output
6. Soal:
Ali mempunyai banyak sekali uang logam. Uang logam tersebut
hanya terdiri dari
2 macam nilai satuan yaitu : 5, dan 3 sen. Ali mau mengambil beberapa
keping uang logam tersebut senilai
minimal 8 sen dan maksimal 100 sen. Anda
diminta membantu Ali untuk menentukan keping
uang apa dan berapa
keping jumlahnya untuk
memenuhi nilai yang akan diambil
Ali, dengan ketentuan mendahulukan
mengambil keping dengan nilai tertinggi
agar didapat jumlah keping yang paling
sedikit. Untuk itu Anda diminta membuat
algoritma yang
menginputkan sebuah nilai integer yang menyatakan nilai
uang yang akan diambil Ali,
kemudian cetak berapa keping uang logam bernilai 5 sen, dan berapa keping yang bernilai 3 sen, agar
terpenuhi jumlah nilai yang akan diambil Ali. Bila nilai yang diinput kurang
dari 8,
atau
lebih
dari
100,
maka
cetak
perkataan
“DATA SALAH”
dan
proses
dihentikan.
Jawab:
Algoritma dalam bahasa C++
#include
void main()
{
int koin, P5, P3, S;
cout << "Masukkan jumlah koin : ";
cin >> koin;
if (koin >= 8 && koin <= 100)
{
S = koin % 5;
if(S == 0)
{
P5 = koin / 5; P3 =
0;
}
else
{
P5 = koin / 5;
while(P5 >= 0)
{
S = koin - (P5 * 5);
if(S % 3 == 0)
{
P3 = S / 3;
break;
}
else
{
P5--;
}
}
}
cout << "Jumlah koin 5 sen : "
<< P5 <<
" keping" <<
endl;
cout << "Jumlah koin 3 sen : "
<< P3 <<
" keping" <<
endl;
}
else
{
cout << "Maaf, Data yang Anda input salah !";
}
}
Implementasi algoritma Jika
data yang di input kurang dari 8 misalnya 5
Hasilnya
Jika
data yang di input lebih dari 8 dan
kurang 100
Misalnya
80,Hasilnya
Jika
data yang di input lebih dari 100
Misalnya
120,Hasilnya
7. Soal:
Titik A dan titik B dihubungkan
hanya oleh sebuah jalan yang panjangnya
= 1000 m. Ali berangkat dari
titik
A
menuju titik B tepat
jam
08:00:00 pagi dengan kecepatan tetap 5 m/detik. Tetapi 10 detik kemudian, kecepatannya naik 2m/detik menjadi 7m/detik.
Demikian
seterusnya, setiap 10 detik
kecepatan Ali
naik
2m/detik. Tepat pada jam yang sama (08:00:00) Badu berangkat
dari titik B menuju titik A dengan kecepatan
tetap 10 m/detik, tidak pernah berubah. Susun algoritma untuk mencetak berapa detik setelah
keberangkatan, Ali dan Badu bertemu, berpapasan dijalan. Catatan : satuan waktu terkecil
adalah dalam detik.
Jawab:
Algoritma dalam bahasa C++
|
#include
void main
()
{
int jarak,
det, ketemu, stat,
V1, V2, T0, sb, TV1,
bb, ta, stv;
jarak = 1000; V1 = 5;
V2 = 10; T0 = 10; sb = 0;
TV1 = V1+2;
bb = 0;
stv = jarak;
stat = 0;
ta = 0;
cout <<
"Jarak Antara Titik
A dan Titik B = " << jarak << "
meter" ;
cout << "\nKecepatan Awal Ali = " << V1 << " m/dt";
cout << "\nKecepatan Ali Naik menjadi = " <<
TV1 <<
" m/dt";
cout << "\nKecepatan Awal Badu = "
<< V2 << "
m/dt";
cout << "\nSelang Waktu Perubahan Ali = "
<< T0 <<
" detik \n";
for(det=1; ; det++)
{
if(ta <= jarak
|| stv >=
0)
{
if(ta <= jarak)
{
ta += V1;
}
if(stv >= 0)
{
stv -= V2;
}
if(ta >= stv && stat
== 0)
{
ketemu = det;
stat = 1;
}
if(T0 != 0)
{
if(det % T0 == 0)
{
V1 += TV1;
}
}
if(sb != 0)
{
if(det % sb == 0)
{
V2 += bb;
}
}
}
else break;
}
cout << "\nJadi Pertemuan Ali dan Badu
pada waktu ke :" <<
ketemu << "
detik";
}
|
Implementasi algoritma
Output
8. Soal:
Sebuah kebun besar ditanami
pohon bibit sebanyak
n baris. Setiap baris terdiri
dari n pohon, sehingga kebun besar ini dapat kita sebut ukurannya = n x n. Pohon-
pohon tersebut
kemudian dicabut dan ditanam ulang menjadi 13 buah kebun
dengan ukuran lebih kecil yaitu setiap kebun kecil terdiri dari m baris dan setiap baris terdiri dari
m
pohon.
Setelah terbentuk
13
kebun kecil ukuran m x m, ternyata pada kebun besar masih tersisa 1 pohon. Susun program untuk mencetak berapa jumlah pohon semula yang ada di
kebun besar.
Jawab:
Algoritma Dalam Bahasa C++
#include
#include
#include
#include
#pragma argsused
int main(int argc, char* argv[])
{
int a, b, n[400], m, index, status;
status = 0;
for(a=0; a<400 span="" style="letter-spacing: -.35pt;"> 400>a++)
n[a] = a*a;
for(b=1; b<400 span="" style="letter-spacing: -.35pt;"> 400>b++)
{
m = (b * b * 13) + 1;
printf("=>
Untuk m = %d, maka jumlah pohon di kebun besar =
%d\n",abs(b),abs(m));
}
for(a=1; a<400 span="" style="letter-spacing: -.35pt;"> 400>a++)
{
for(b=1; b<400 span="" style="letter-spacing: -.35pt;"> 400>b++)
{
m = (b * b * 13) + 1;
if(m == n[a])
{
printf("=> m Pada kebun kecil = %d \n",b);
printf("=> n Pada kebun besar = %d \n",a);
printf("=> Jumlah pohon di kebun besar = %d
\n",abs(n[a])); status = 1; break;
}
}
}
if(status == 0)
{
printf("Sampai dengan bilangan ke %d tidak ditemukan
kombinasi yang cocok.",b);
}
getch();
return 0;
}
Implementasi algoritma
Output