` EVALUASI MATRIKULASI ANALISA DAN DESAIN ALGORITMA
NIM
: 1011601026
NAMA
: YOGA PRIHASTOMO
KELAS
: B
NO. ABSEN
: 2
DOSEN PENGAMPU
: Ir. SJUKANI, MM
PROGRAM MAGISTER ILMU KOMPUTER UNIVERSITAS BUDI LUHUR – JAKARTA TAHUN AKADEMIK 2011
Analisa dan Desain Algoritma
Yoga Prihastomo
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
Halaman 1 Dari 10
Analisa dan Desain Algoritma
Yoga Prihastomo
- 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 void main() { int A, B, C; cin >> A >> B >> C; if ((A+B) void main() { int S1, S2, S3; cout << "Masukkan 3 Sisi Segitiga: "; cin >> S1 >> S2 >> S3; cout << endl; if ((S1 + S2) > S3) { if ((S1 + S3) > S2) Halaman 2 Dari 10
Analisa dan Desain Algoritma
Yoga Prihastomo
{
if ((S2 + S3) > S1) { cout << "Ini adalah Segitiga"; } else { cout << "Ini bukan Segitiga"; }
} else { cout << "Ini bukan Segitiga"; }
}
} else { cout << "Ini 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=26 N = 26 Batas = N + 100 Î Batas = 26 + 100 = 126 X = 20 T = N Î T = 26 - Iterasi 1 : 26 <= 126; maka T=T+X Î T=26+20=46; - Iterasi 2 : 46 <= 126; maka T=T+X Î T=46+30=76;
X=X+10 Î X=20+10=30 X=X+10 Î X=30+10=40 Halaman 3 Dari 10
Analisa dan Desain Algoritma
Yoga Prihastomo
- Iterasi 3 : 76 <= 126; maka T=T+X Î T=76+40=116; X=X+10 Î X=40+10=50 - Iterasi 4 : 116 <= 126; maka T=T+X Î T=116+50=166; X=X+10 Î X=50+10=60 - Iterasi 5 : 166 > 126; kondisi salah, maka keluar Loop Sehingga T benilai 166, dan akan tercetak 166.
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; }
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
Halaman 4 Dari 10
Analisa dan Desain Algoritma
Yoga Prihastomo
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 << "Keping Quarter : " << quarter << endl; cout << "Keping Dime : " << dime << endl; cout << "Keping Nickel : " << nickel << endl; cout << "Keping Penny : " << penny << endl; }
Halaman 5 Dari 10
Analisa dan Desain Algoritma
Yoga Prihastomo
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)
Halaman 6 Dari 10
Analisa dan Desain Algoritma
Yoga Prihastomo
{
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 !"; } }
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;
Halaman 7 Dari 10
Analisa dan Desain Algoritma
Yoga Prihastomo
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"; }
Halaman 8 Dari 10
Analisa dan Desain Algoritma
Yoga Prihastomo
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. Pohonpohon 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 <stdio.h> #include #include <stdlib.h> #pragma argsused int main(int argc, char* argv[]) { int a, b, n[400], m, index, status; status = 0; for(a=0; a<400; a++) n[a] = a*a; for(b=1; b<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; a++) { for(b=1; b<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; Halaman 9 Dari 10
Analisa dan Desain Algoritma
Yoga Prihastomo
}
}
}
} if(status == 0) { printf("Sampai dengan bilangan kombinasi yang cocok.",b); } getch(); return 0;
ke
%d
tidak
ditemukan
Halaman 10 Dari 10