Anda di halaman 1dari 10

UTSKU1072/Pengenalan Teknologi Informasi B

Tanggal: 25 Maret 2017


Halaman 1 dari 10

Soal 1. Pilihan Jawaban dan Jawaban Singkat [Bobot : 25%]


Soal 1.a. Pilihan Jawaban[Bobot: 15%]

DESKRIPSI SOAL DAN JAWABAN

Petunjuk:
Beri lingkaranpada huruf pilihan yang benar dan beri tanda silangpada huruf untuk pilihan jawaban yang salah.
Contoh cara menjawab: Contoh cara mengoreksi jawaban:
1. Dalam kamus suatu program kita dapat 1. Dalam kamus suatu program kita dapat
mendeklarasikan: mendeklarasikan:
a. Variabel a. Variabel
b. Instruksi pengulangan b. Instruksi pengulangan
c. Instruksi input/output c. Instruksi input/output
d. Konstanta d. Konstanta

Jawablah semua pertanyaan di bawah ini sesuai petunjuk di atas:

1. Manakah di antara pernyataan berikut yang termasuk ke dalam teknik-teknik yang digunakan pada computational
thinking.
a. Membuat kode program berdasarkan algoritma yang sudah dibuat.
b. Membuat satu set instruksi langkah-demi-langkah untuk menyelesaikan masalah.
c. Memecahkan masalah atau sistem yang komplek menjadi bagian-bagian yang lebih kecil yang lebih mudah
dikelola.
d. Menambahkan informasi baru pada permasalahan yang dihadapi.
2. Manakah di antara pernyataan berikut yang termasuk ke dalam karakteristik computational thinking.
a. Kemampuan memberikan pemecahan masalah menggunakan komputer atau perangkat lain.
b. Kemampuan melakukan identifikasi, analisa dan implementasi solusi dengan berbagai kombinasi langkah/cara
dan sumberdaya yang efisien dan efektif.
c. Kemampuan membuat kode program menggunakan bahasa pemrograman Pascal.
d. Kemampuan melakukan generalisasi solusi untuk berbagai masalah berbeda.
3. Perhatikan potongan program dalam C++ berikut:
int a, b;
bool f;
a = 1; b = 1; f = false;
if ((a>b) || (!f)) {
a = b - 1;
cout<<"abcde"<<endl;
}else {
cout<<"edcba"<<endl;
}
cout<<a<<", "<<b<<endl;
Manakah yang benar?
a. Ekspresi ((a>b) || (!f)) bernilai true c. cout adalah perintah untuk mendapatkan input
dari pengguna
b. Baris terakhir yang tampil di layar adalah: d. Program akan menampilkan edcba dan bukan
1, 1 abcde

4. Perhatikan program C++ berikut:


#include <iostream>
using namespace std;

int main() {
int i =1;
bool x= true;
while(x) {
if (i % 2 == 1) i++;
else if (i % 5 == 1) i++;
else {
cout << i << " " << endl;
x= false;
}
}
return 0;
UTSKU1072/Pengenalan Teknologi Informasi B
Tanggal: 25 Maret 2017
Halaman 2 dari 10

Mana diantara pernyataan berikut ini yang benar berdasarkan program di atas:
a. Yang tercetak di layar dari program adalah:
10
b. Program tidak pernah berhenti (mengalami infinite loop).
c. Instruksi dalam bodyloopwhile(x)tidak pernah dieksekusi.
d. Instruksi dalam bodyloopwhile(x) dieksekusi hanya jika nilai x bernilaitrue.

5. Untuksetiapsubprogram berikut, manakah yang lebih cocok diimplementasikan sebagai fungsi?


a. Subprogram yang menampilkan menu dan menerima pilihan menu dari user
b. Subprogram yang menukar dua buah bilangan integer
c. Subprogram yang menghasilkan nilai median dari sebuah array
d. Subprogram yang menuliskan ke layar nilai dari sebuah variabel dengan tipe bentukan

Soal 1.b. Jawaban Singkat[Bobot: 10%]

DESKRIPSI SOAL DAN JAWABAN


1. Perhatikan kamus program C++ berikut:
//KAMUS
typedef struct {
float x;
float y;
} Point;
Point P;
int m, h, k;
float x;
string pesanError;
bool f;
char n;
Berikut ini adalah contoh ekspresi dalam notasi C++ untuk kamus diatas. Periksalah apakah ekspresi yang
dituliskan benar. Jika benar, tentukan type hasilnya.Jika salah, berikan komentar mengapa salah. Lihat contoh pada
no. 1 dan 2.

No Ekspresi Jawaban Type Hasil / Komentar


1 i – 1 Benar Int
2 pesanError * 4 Salah pesanError bertype string. Operasi * bukan operasi
yang tepat untuk variabel/data bertype string.
3 h * x Benar Float
4 sqrt(P.x,P.y) Salah Fungsi sqrt membutuhkan 1 parameter input
(bilangan real).
5 x % k == 0 Salah x bertype float, % (mod) bukan operasi yang tepat
untuk data bertype float
6 m + h + f + k Salah F bertype boolean (bool), operasi + bukan operasi
yang tepat untuk data bertype boolean (bool)
Catatan: walaupun representasi Boolean dalam bahasa
C/C++ menggunakan integer (1 : true, 0 : false), secara
logika, tidak tepat menggunakan suatu nilai yang
dimaksudkan sebagai Boolean ke dalam operasi
numerik
7 n != 'A' Benar Boolean
UTSKU1072/Pengenalan Teknologi Informasi B
Tanggal: 25 Maret 2017
Halaman 3 dari 10

Soal 2. Hasil Eksekusi Program [Bobot : 25%]

DESKRIPSI SOAL DAN JAWABAN

Petunjuk Soal 2.a. s.d. Soal 2.d.


Tuliskan keluaran (apa yang tercetak di layar) dari program-program di bawah ini pada kotak kosong di
samping kanan program. Semua komentar program sengaja dihilangkan. Program-program di bawah ini sudah
dipastikan lolos kompilasi.
No. Program Keluaran
2.a. #include <iostream> 4
#include <cmath> 5
using namespace std;

typedef struct {int x, y;} z;

int main() {
z a, b;

a.x = 3; a.y = -2;


b.x = 0; b.y = 2;
if ((a.x>0) && (a.y>0)) {
cout<<"1"<< endl;
} else if ((a.x>0) && (a.y<0)) {
cout<<"4"<< endl;
} else if ((a.x<0) && (a.y<0)) {
cout<<"3"<< endl;
} else if ((a.x<0) && (a.y>0)) {
cout<<"2"<< endl;
} else {
cout<<"0"<< endl;
}
if ((b.x!=0) && (b.y!=0)) {
cout<<a.x-b.y<<", "<<a.y-b.x<<endl;
cout<<b.y<<", "<<a.y<<endl;
} else {
cout<<sqrt((a.x-b.x)*(a.x-b.x)+
(a.y-b.y)*(a.y-b.y))<< endl;
}

return 0;
}
2.b. #include <iostream> 1. if end(1).
using namespace std; 2. else end(2).

int main() {
int x = 2;

cout << "1. ";


if (x <= 3) {
if (x != 0) {
cout << "if ";
} else {
cout << "else ";
}
}
cout << "end(1)." << endl;
cout << "2. ";
x = x % 3 * 6;
if (x > 3) {
if (x == 18) {
cout << "if ";
} else {
cout << "else ";
}
}
cout << "end(2)." << endl;
UTSKU1072/Pengenalan Teknologi Informasi B
Tanggal: 25 Maret 2017
Halaman 4 dari 10

No. Program Keluaran


return 0;
}
2.c. #include<iostream> 10
using namespace std; 13
123
void print_i();

int main(){
int i = 4;
if (i > 10) { cout << i << endl; }
else { cout << 10 << endl; }
i = 123;
print_i();
if (i > 10) { cout << i << endl; }
else { cout << 10 << endl; }
return 0;
}
void print_i(){
int i = 13;
cout << i << endl;
}
2.d. #include <iostream> 2
using namespace std; 6
12
int main() { 6
int i, x; 18
int N[] = {2,3,4,6,9,8,12,10,15,18}; 8
i = 0; 12
while (i < 10) { 30
if (N[i] % 2 == 1) { 30
x = N[i] * 2; 18
cout << x << " " << endl;
} else if (N[i] % 3 == 1) {
x = N[i] * 3;
cout << x << " " << endl;
} else {
x = N[i];
cout << x << " " << endl;
}
i++;
}

return 0;
}

Perhatikan program di bawah ini. Jika masukan N berturut-turut adalah:7, 8, 9, 9, 10, 6, 8, 10, 7, dan 8, maka tuliskan
keluaran program pada tempat yang disediakan.
No. Program Keluaran
2.e. #include <iostream> 8.2
using namespace std;

int main () {
int N, m;
int i, s;
float a;

s = 0;
m = 10;
i = 1;
do {
cin >> N;
s = s + N;
i = i + 1;
} while (i <= m);
a = (float)s / (float)m;
cout << a << endl;

return 0;
UTSKU1072/Pengenalan Teknologi Informasi B
Tanggal: 25 Maret 2017
Halaman 5 dari 10

Soal 3. Melengkapi Program[Bobot : 25%]

Soal 3.a. [Bobot: 10%]


DESKRIPSI SOAL DAN JAWABAN
a. Fungsi Pangkat digunakan untuk menghitung xn
Untuk n = 0, maka xn = 1
Untuk n > 0, maka xn = x*x*x*….*x (x dikalikan sebanyak n kali); contoh: 25 = 2*2*2*2*2
Untuk n < 0, maka xn = 1/x|n| dengan |n| adalah nilai absolut n. Contoh: |5| = 5; |-5| = 5
dimana x adalah bilangan real serta n adalah bilangan bulat.
Untuk menghitung nilai absolut, digunakan fungsi Absolut.
Lengkapilah fungsi Pangkat dan Absolut pada tempat yang ditentukan di bawah ini. Keduanya harus
diimplementasikan from scratch (dengan pengulangan, analisis kasus, dll.), tidak boleh menggunakan library
tambahan apa pun.

float Pangkat (int x, int n )


// Tuliskan spesifikasi fungsi di bawah ini:
// Menghasilkan x^n (x pangkat n) dengan menggunakan pengulangan dan menggunakan
// fungsi Absolut
{ // KAMUS LOKAL
float p;
int i;

// ALGORITMA – 1
p = 1;
i = 1;
while (i <= Absolut(n)) {
p = p * x;
i++;
} // i >Absolut(n)
if (n < 0) { // Kasus n < 0
p = 1 / p;
}
return p;

// ALGORITMA - 2
if (n >= 0) { // Kasus n = 0 dan n > 0
p = 1;
i = 1;
while (i <= n) {
p = p * x;
i++;
} // i > n
} else { // Kasus n < 0
p = 1;
for (i = 1; i <= Absolut(n); i++) {
p = p * x;
}
p = 1 / p;
}
return p;

// ALGORITMA - 3
if (n == 0) { // Kasus n = 0
p = 1;
} else if (n > 0) { // Kasus n > 0
p = 1;
for (i = 1; i <= n; i++) {
p = p * x;
}
} else { // Kasus n < 0
UTSKU1072/Pengenalan Teknologi Informasi B
Tanggal: 25 Maret 2017
Halaman 6 dari 10

p = 1;
for (i = 1; i <= Absolut(n); i++) {
p = p * x;
}
p = 1 / p;
}
return p;
}
intAbsolut (int x )
// menghasilkan nilai absolut dari suatu bilangan bulat
{ // KAMUS LOKAL
// ALGORITMA
if (x < 0) {
return x * -1;
} else { // x >= 0
return x;
}
}

Soal 3.b. [Bobot: 15%]


DESKRIPSI SOAL DAN JAWABAN

b. Diberikan sebuah array of integer bernama TI dengan ukuran NMax = 10. Program di bawah ini digunakan untuk
mencari bilangan dalam array yang lebih besar dari bilangan yang berada pada posisi/indeks ke-i dari TI, namun
merupakan bilangan yang terdekat dengan bilangan pada indeks ke-i tersebut. Jika bilangan pada indeks ke-i adalah
bilangan terbesar di array TI, maka berikan pesan kesalahan (lihat contoh di bawah).
Perhatikan contoh-contoh berikut:

Input Output Keterangan


TI i
[1,6,4,2,8,7,4,9,10,1] 5 8 TI[5] = 7
Bilangan yang > 7 ={8,9,10}
Yang terdekat dengan 7 = 8

[1,6,4,2,8,7,4,9,10,1] 2 6 TI[2] = 4
Bilangan yang >4 = {6,8,7,9,10}
Yang terdekat dengan 4 = 6
[1,6,4,2,8,7,4,9,10,1] 8 Tidak ada yang TI[8] = 10
lebih besar dari 10 10 adalah bilangan terbesar dalam array, sehingga
dikeluarkan pesan kesalahan

Lengkapilah program di bawah ini pada tempat-tempat yang disediakan (baca komentar program). Buatlah pula
implementasi prosedur BacaTI dan LebihBesarTerdekat berdasarkan spesifikasi yang diberikan dan tuliskan
jawabannya pada tempat yang ditentukan, yaitu pada halaman kosong di balik halaman 7 dan 8.

// Program untuk mencari bilangan dalam array yang lebih besar dari bilangan yang berada
// pada posisi/indeks ke-i, namun memiliki jarak yang paling dekat dengan TI[i]
#include <iostream>
using namespace std;

// KAMUS GLOBAL
const int NMax = 10;
int TI[NMax];// variabel global TI

void BacaTI ();


// I.S. TI sembarang
// F.S. Semua elemen TI berisi nilai-nilai dengan masukan dari user/keyboard

void LebihBesarTerdekat (int i);


// I.S. TI terdefinisi, i terdefinisi
// F.S.
// Jika TI[i] bukan bilangan terbesar di array, maka dituliskan ke layar
// bilangan yang lebih besar dari TI[i], namun berjarak paling dekat dengan TI[i]
// Jika TI[i] adalah bilangan terbesar, maka dituliskan pesan kesalahan
UTSKU1072/Pengenalan Teknologi Informasi B
Tanggal: 25 Maret 2017
Halaman 7 dari 10

// Tuliskan kode program BacaTI dan LebihBesarTerdekat di halaman kosong di balik halaman
// 7 atau 8. Tuliskan dulu header procedure, baru menuliskan kode program.
// Spesifikasi/komentar tidak perlu ditulis ulang. }

// PROGRAM UTAMA
int main () {
// KAMUS
// Lengkapi deklarasi variabel lain yang dibutuhkan
int i;

// ALGORITMA
// Membaca nilai-nilai TI dari keyboard, dengan memanggil prosedur BacaTI
// Tuliskan instruksi untuk memanggil prosedur BacaTI
BacaTI();

// Baca nilai indeks TI yang akan dicari nilai yang lebih besar, tapi terdekatnya
cin >> i;

// Menuliskan nilai lebih besar yang terdekat dengan TI[i] dengan memanggil
// prosedur LebihBesarTerdekat
// Tuliskan instruksi untuk memanggil prosedur LebihBesarTerdekat
LebihBesarTerdekat(i);

return 0;
}

void BacaTI ()
// I.S. TI sembarang
// F.S. Semua elemen TI berisi nilai-nilai dengan masukan dari user/keyboard
{ // KAMUS LOKAL
int i;

// ALGORITMA
for (i = 0; i < NMax; i++) {
cin >> TI[i];
}
}

// ALTERNATIF-1
void LebihBesarTerdekat (int i)
// I.S. TI terdefinisi, i terdefinisi
// F.S.
// Jika TI[i] bukan bilangan terbesar di array, maka dituliskan ke layar
// bilangan yang lebih besar dari TI[i], namun berjarak paling dekat dengan TI[i]
// Jika TI[i] adalah bilangan terbesar, maka dituliskan pesan kesalahan
{ // KAMUS LOKAL
int j, k;
int larger;
bool found;
// ALGORITMA
// Cari bilangan pertama yang lebih besar dari TI[i]
// Jika tidak ditemukan berarti TI[i] adalah bilangan terbesar di array
j = 0;
found = false;
while (!found && j < NMax) {
if (TI[j] > TI[i]) {
found = true;
} else {
j++;
}
}
// Menentukan bilangan lebih besar dari TI[i] yang terdekat
if (found) { // ada bilangan yang lebih besar dari TI[i]
larger = TI[j];
for (k = j; k < NMax; k++) {
if (TI[k] < larger && TI[k] > TI[i]) {
// temukan bilangan < larger tapi masih > TI[i]
larger = TI[k];
}
}
cout << larger << endl;
} else { // tidak ada bilangan lebih besar dari TI[i]
cout << "Tidak ada yang lebih besar dari " << TI[i] << endl;
UTSKU1072/Pengenalan Teknologi Informasi B
Tanggal: 25 Maret 2017
Halaman 8 dari 10

}
}

// ALTERNATIF-2
void LebihBesarTerdekat (int i)
// I.S. TI terdefinisi, i terdefinisi
// F.S.
// Jika TI[i] bukan bilangan terbesar di array, maka dituliskan ke layar
// bilangan yang lebih besar dari TI[i], namun berjarak paling dekat dengan TI[i]
// Jika TI[i] adalah bilangan terbesar, maka dituliskan pesan kesalahan
{ // KAMUS LOKAL
int j;
int larger;
bool found;
// ALGORITMA
// bilangan lebih besar terdekat pertama
if (TI[0] <= TI[i]) {
larger = TI[i]; // Memastikan bahwa larger setidaknya = TI[i]
} else { // TI[0] > TI[i]
larger = TI[0];
}
// Cari bilangan yang lebih besar terdekat dari TI[i]
for (j = 1; j < NMax; j++) {
if (j != i) {
if (TI[j] < larger && TI[j] > TI[i]) {
larger = TI[j];
}
}
}
if (larger > TI[i]) {
cout << larger << endl;
} else { // tidak ada bilangan lebih besar dari TI[i]
cout << "Tidak ada yang lebih besar dari " << TI[i] << endl;
}
}

Soal 4. Akar Persamaan Non-Linier[Bobot : 35%]


Mencari akar persamaan non linier dapat dilakukan dengan menggunakan teknik numerik pendekatan
berturut-turut. Agar dapat diselesaikan dengan metoda pendekatan berturut-turut, persamaan diatas diubah menjadi:
dan .
Buatlah program untuk mengimplementasikan metoda numerik pendekatan berturut-turut untuk mencari akar
persamaan e-x – x2 = 0 di atas, dengan langkah-langkah sebagai berikut:
1. Program menerima masukan nilai terkaan awal akar dan simpan sebagai nilai
2. Hitung
3. Simpan di

4. Hitung

5. Simpan nilai di
6. Jika , kembali ke langkah nomor 2
7. Jika maka adalah akar persamaan tersebut

Untuk menghitung , harus dibuat fungsi bernama Fx yang menerima masukan sebuah bilangan riil misalnya x, dan
menghasilkan e . Dalam fungsi tersebut, gunakan fungsi exp(x) untuk menghitung ex. Untuk menghitung |x| gunakan
-x/2

fungsi abs(x). Fungsi exp dan abs tersedia di library cmath. Untuk itu, tambahkan dalam kode program Anda:
#include <cmath>

a. Buatlah sketsa program dalam bentukflowchart untuk persoalan di atas (flowcharttidak harus detil, yang penting
menggambarkan penyelesaian persoalan dengan jelas. Lengkapi flowchart dengan kamus dan penjelasan-
penjelasan yang diperlukan.
b. Buatlah kode programuntuk persoalan di atas dalam Bahasa C++. Program yang dibuat harusmerupakan program
lengkap yang mengandung judul, spesifikasi, kamus, dan algoritma.
UTSKU1072/Pengenalan Teknologi Informasi B
Tanggal: 25 Maret 2017
Halaman 9 dari 10

Kode program dan flowchart harus bersesuaian.

Petunjuk: Kerjakan dulu mana yang Anda anggap mudah atau sesuai yang ditekankan di kelas: flowchartatau kode
program C++.

Tuliskan jawaban pada sisa halaman ini dan di halaman kosong baliknya. Jika masih kurang, gunakan
halaman-halaman kosong di balik halaman 1 s.d. 6. Jangan lupa memberikan keterangan yang jelas.

Alternatif Solusi
4.a. Sketsa program dalam bentuk flowchart
Program AkarPersamaanNon-Linier
// Input: Nilai terkaan awal x0
// Output: Akar persamaan non-linier
KAMUS
float x0, x1, err;
float Fx (float x);
// menghasilkan e^(x/2)
ALGORITMA

Start

input(x0)

x1 = Fx(x0)

Hitung err berdasarkan true


err>0.001 x0 = x1
x0 dan x1

false
Hitung err berdasarkan
output(x0) x0 dan x1

End
UTSKU1072/Pengenalan Teknologi Informasi B
Tanggal: 25 Maret 2017
Halaman 10 dari 10

Algoritma Fx:
float Fx (float x);
// menghasilkan e^(x/2)
KAMUS
ALGORITMA (Flowchart)

Fx(x)

return exp((x/2)*-1)

4.b. Program C++

// Program Akar Persamaan Non-Linier


// Spesifikasi: Program untuk menghitung akar persamaan non-linier berdasarkan terkaan
// awal
// Input: Nilai terkaan awal x0
// Output: Akar persamaan non-linier

#include <iostream>
#include <cmath>
using namespace std;

float Fx (float x);


// menghasilkan e^(x/2)

int main () {
// KAMUS
float x0, x1, err;

// ALGORITMA
cin >> x0;
x1 = Fx(x0);
err = abs((x1-x0)/x0)*100;
while (err > 0.0001) {
x0 = x1;
err = abs((x1-x0)/x0)*100;
}
cout << "Akar persamaan non-liniernya adalah = " <<x0<< endl;

return 0;
}

float Fx (float x)
// menghasilkan e^(x/2)
{ // KAMUS LOKAL
// ALGORITMA
return exp((x/2)*-1);
}