Algoritma-DianWirawan -1211600729
-
Upload
dianwirawan -
Category
Documents
-
view
226 -
download
5
description
Transcript of Algoritma-DianWirawan -1211600729
Dian Wirawan - 1211600729 Halaman 1
TUGAS KULIAH
Analisa dan Algoritma
Dosen : Ir. SJUKANI, MM
Tugas ini Dibuat dan Dianalisa oleh:
Dian Wirawan
NIM : 1211600729
HP : 085710215171
PROGRAM PASCA SARJANA TEKNOLOGI INFORMASI
PROGRAM STUDI MAGISTER ILMU KOMPUTER
UNIVERSITAS BUDI LUHUR
JAKARTA
©2013
Dian Wirawan - 1211600729 Halaman 2
SOAL 1
Sintaks Umum :
#include <iostream.h> 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 :
1.a. Apa yang tercetak bila : untuk A diinputkan 2, dan untuk B diinputkan 4
Jawab:
1.a. Yang tercetak bila : A di input 2, dan B diinput 4, adalah 4
Pembuktian:
No A B X =
A
Y =
B
While (X != Y)
Cetak X If (X <
Y)
X = X + A
Else
Y = Y +
B
1 2 4 2 4 4 4
2 2 4 4 4 X = Y kondisi sudah terpenuhi pada
perulangan ke - 2
Pertanyaan :
1.b. Apa yang tercetak bila : untuk A diinputkan 4, dan untuk B diinputkan 7
Jawaban: 1.b. Yang tercetak bila : A di input 4, dan B diinput 7, adalah 28
Dian Wirawan - 1211600729 Halaman 3
Pembuktian:
No A B X =
A
Y =
B
While (X != Y)
Cetak X If (X <
Y)
X = X
+ A
Else Y = Y +
B
1 4 7 4 7 8 8
2 4 7 8 7 8 14 8
3 4 7 8 14 12 14 12
4 4 7 12 14 16 14 16
5 4 7 16 14 16 21 16
6 4 7 16 21 20 21 20
7 4 7 20 21 24 21 24
8 4 7 24 21 24 28 24
9 4 7 24 28 28 28 28
10 4 7 28 28 X = Y Kondisi Sudah Terpenuhi, pada perulangan ke 10
SOAL 2
Pertanyan :
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.
Algoritma dituangkan ke dalam bahasa C++
#include <iostream.h> void main() {
int bil1, bil2, bil3;
cout <<"Masukan Bilangan Bulat ke -1 =";
cin >> bil1; cout <<"Masukan Bilangan Bulat ke -2 =";
cin >> bil2;
cout <<"Masukan Bilangan Bulat ke -3 ="; cin >> bil3;
if ((( bil1 + bil2) > bil3) && (( bil2 + bil3) > bil1) && (( bil1 + bil3) >
bil2)) cout << "SEGITIGA";
else
cout << "BUKAN SEGITIGA";
}
Dian Wirawan - 1211600729 Halaman 4
Output
Bukti:
No Bil 1 Bil 2 Bil 3
Cetak “Segitiga” Jika 3 pernyataan ini T Selain itu cetak
“Bukan
Segitiga”
(Bil1+Bil2)
> Bil3
(Bil2+Bil3) >
Bil1
(Bil1+Bil3) >
Bil2
1 2 2 2 T T T Segitiga
2 7 3 5 T T T Segitiga
3 3 2 8 T F F Bukan
4 1 2 3 F T F Bukan
SOAL 3 Kode :
#include<iostream.h>
void main() { int N,X,T,Batas;
N = 95;
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 (1211600729)
Dian Wirawan - 1211600729 Halaman 5
Jawaban:
Yang tercetak adalah, bila N diisi dengan 2 digit terakhir NIM (29) adalah 169
Pembuktian:
No N X T = N Batas =
N + 100
while ( T <= Batas) Cout T
T = T + X X = X + 10
1 29 20 29 129 49 30 49
2 29 30 49 129 79 40 79
3 29 40 79 129 119 50 119
4 29 50 119 129 169 60 169
5 29 60 169 129 T > Batas Keluar dari perulangan
SOAL 4
Soal :
1. Tujuan Ali dari Titik A ke Titik B
2. Waktu keberangkatan 09:00:00 3. Badu mencatat 3 buah bilangan yang menyatakan jam, menit, detik waktu
keberangkatan Ali
4. Setelah 8175 detik Ali tiba di Titik B
Pemecahan Soal :
1. Waktu berangkat dapat dipecah menjadi 9 jam, 0 menit, dan 0 detik 2. Total waktu yang diperlukan 8175 detik, maka 8175 detik setara dengan 2
jam. Sisa 975 detik, dimana 1 menit setara dengan 60 detik, maka 975 detik
setara dengan 16 menit. Sisa 15 detik (2:16:15)
3. Ali akan tiba di titik B pukul 11:16:15 (9:00:00 ditambah 2:16:15)
Algoritma dituangkan ke dalam C++ :
#include<iostream.h> void main()
{ int J, M, D, TotWaktu, Jam, Menit, Detik;
J = 9; M = 0; D = 0; TotWaktu = 8175; Jam = TotWaktu / 3600;
Menit = (TotWaktu - 3600 * Jam) / 60;
Detik = TotWaktu - (3600 * Jam + 60 * Menit);
J = J + Jam; M = M + Menit;
D = D + Detik;
cout << "Ali tiba di titik B Pukul " << J << ":" << M << ":" << D; }
Output
Dian Wirawan - 1211600729 Halaman 6
SOAL 5
Soal :
1. 1 Quarter = 25 sen
2. 1 Dime = 10 sen 3. 1 Nickel = 5 sen
4. 1 Penny = 1 sen
Pertanyaan :
Susun program untuk mencetak masing-masing keping koin yang diperlukan
untuk kembalian.
Kode Program :
#include<iostream.h>
void main() { int Kem, Qua, Dim, Nic;
cout << "Input uang kembalian : ";
cin >> Kem; Qua = Kem/25;
Kem=Kem-Qua*25;
Dim = Kem/10; Kem=Kem-Dim*10;
Nic = Kem/5;
Kem=Kem-Nic*5;
cout << " " << Qua << " " << Dim << " " << Nic << " " << Kem; }
Output
SOAL6
Kasus :
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
Dian Wirawan - 1211600729 Halaman 7
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.
Kode Program :
#include<iostream.h>
#include<stdlib.h>
void main() { int nilai, koin5, koin3;
koin5 = 0;
koin3 = 0;
cout << "Nilai uang : ";
cin >> nilai;
if ((nilai < 8) || (nilai > 100)) {
cout << "DATA SALAH";
exit(1); }
while (nilai > 0) {
if (nilai % 5 == 0) { koin5 = nilai / 5;
nilai = 0;
} else { koin3 = koin3 + 1;
nilai = nilai - 3;
}
} cout << koin5 << " " << koin3;
}
Output
Dian Wirawan - 1211600729 Halaman 8
SOAL7
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.
Kode Program :
#include <iostream.h>
void main() { int titikA, titikB, kecA, kecB, waktu;
titikA = 0; titikB = 1000;
kecA = 5;
kecB = 10;
waktu = 0;
while (titikA<titikB) {
titikA = titikA + kecA; titikB = titikB - kecB;
waktu = waktu + 1;
if(waktu % 10 == 0) kecA = kecA + 2;
}
cout << "Berpapasan detik ke " << waktu; }
Dian Wirawan - 1211600729 Halaman 9
SOAL8 Kasus :
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.
Kode Program :
#include<stdlib.h>
void main() { int x, y, x2, y2;
x = 1;
while (x > 0) { y = 1;
while (y > 0) {
y2 = 13*y*y+1; x2 = x * x;
if (y2==x2) {
cout <<"Jumlah pohon semula yang ada di kebun
besar adalah"<< " "<< x2; exit(1);
}
if (y2>x2) { y=0;
break;
} y=y+1;
}
x=x+1;
} }