pti b itb 2015

Upload: andrean-firnanto

Post on 07-Jul-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/18/2019 PTI B ITB 2015

    1/13

    RUBRIK PENILAIAN

    UJIAN TENGAH SEMESTER

    KU1072/PENGENALAN TEKNOLOGI INFORMASI B

    SEM. 1 2015/2016

    Soal 1. Pilihan Jawaban dan Jawaban Singkat [Bobot : 20%]Soal 1.a. Pilihan Jawaban (BOBOT : 10%) 

    DESKRIPSI PERSOALAN + JAWABAN

    Petunjuk:

    Beri lingkaran pada huruf pilihan yang benar dan beri tanda silang pada huruf untuk pilihan jawaban yang salah.

    Contoh cara menjawab:

    1.  Dalam kamus suatu program kita dapat mendeklarasikan: a.  Variabel b.  Instruksi pengulanganc.  Instruksi input/outputd.  Konstanta

    Jawablah semua pertanyaan di bawah ini sesuai petunjuk di atas:

    1.  Manakah pernyataan yang benar?a.  Berpikir komputasional adalah proses berpikir yang melibatkan cara memformulasikan masalah dan solusinya

    yang direpresentasikan dalam bentuk yang dapat diproses oleh komputer. b.  Salah satu teknik dalam berpikir komputasional adalah dekomposisi persoalan.c.  Abstraksi adalah kemampuan menyaring informasi yang tidak diperlukan dalam proses pemecahan masalah.d.  Pemrograman prosedural melibatkan pemecahan masalah dengan mengelompokkan objek-objek sejenis ke

    dalam kelas.2.  Manakah pernyataan yang benar?

    a.  Variabel adalah suatu nama yang digunakan untuk menyimpan suatu nilai bertipe tertentu.

     b.  3Orang adalah contoh nama variabel yang baik.

    c.  Himpunan nilai yang diperbolehkan untuk type data char adalah semua alfabet ‘a’ s.d. ‘z’ dan ‘A’ s.d. ‘Z’ 

    d. 

    Perintah assignment dalam Bahasa C++ ditandai dengan operator =3.  Perhatikan potongan program C++ berikut:

    int temp;temp = 10;if (temp

  • 8/18/2019 PTI B ITB 2015

    2/13

    Soal 1.b. Jawaban Singkat (BOBOT : 10%) 

    DESKRIPSI PERSOALAN + JAWABAN

    Perhatikan kamus program C++ di bawah ini:// KAMUS

    const int persen = 60;float GajiTotal, GajiPokok, Tunjangan, PotGaji;int MID1, MID2;int urutan;

    char CC1, CC2;string Message;bool found;

    Berikut ini adalah contoh ekspresi dalam notasi C++ untuk kamus di atas. 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 / Komentar1 urutan – 1 Benar int2 Message * 4 Salah Message bertype string. Operasi * bukan operasi yang

    tepat untuk variabel/data bertype string.3 CC1 || CC2 Salah CC1 dan CC2 bertype char (character). Operasi || (or)

    tidak tepat untuk variabel/data bertype char.4 found && (urutan>100) Benar bool (boolean)

    5 (persen ^ 2) + GajiTotal + MID1* MID2

    Salah Notasi ^ tidak terdefinisi untuk konstanta/nilai persenyang bertype int

    6 GajiPokok + Tunjangan - PotGaji Benar int

  • 8/18/2019 PTI B ITB 2015

    3/13

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

    DESKRIPSI PERSOALAN + 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 using namespace std;

    int main () {int a, b, c;a = 123;b = 70;if (a % 10 >= 3) {

    c = a;a = b;b = c;if (a % 5 < 3) {

    cout

  • 8/18/2019 PTI B ITB 2015

    4/13

    No. Program Keluaranreturn 0;

    }

    2.d. #include using namespace std;int main () {

    int Tab[8] = {-3,50,105,101,0,90,105,-3};int i, x, c;i = 0;x = Tab[i];c = 0;

    while (i < 8) {if (x < Tab[i]) {

    x = Tab[i];c = 1;

    } else if (x == Tab[i]) {c = c + 1;

    }i = i + 1;

    }cout

  • 8/18/2019 PTI B ITB 2015

    5/13

    Soal 3. Program Kecil [Bobot : 15%] 

    DESKRIPSI PERSOALAN

    Spektrum optik adalah spektrum yang kontinyu sehingga tidak ada batas yang jelas antara satu warna dengan warna yanglainnya. Meskipun demikian, manusia dapat memberikan batas kira-kira untuk warna-warna spektrum yang berbeda- beda. Tabel berikut memberikan range panjang gelombang dari suatu warna yang dilihat oleh mata manusia normal. Datadisesuaikan untuk kepentingan soal.

    Warna Panjang gelombang (dalam nm)

    Ungu 380 - 450

    Biru 451 - 495

    Hijau 496 - 570

    Kuning 571 - 590

    Jingga 591 - 620

    Merah 621 - 750

    Buatlah flowchart dan kode program lengkap dalam C++ untuk sebuah program yang menerima masukan berupa panjang gelombang dalam nm (bertipe integer) dan menuliskan ke layar warna sesuai dengan panjang gelombangnyasesuai dengan deskripsi di atas. Jika masukan di luar range, dituliskan pesan kesalahan “Warna tidak terdefinisi”. 

    Contoh masukan dan keluaran:Masukan Panjang Gelombang Keluaran

    495 Biru

    250 Warna tidak terdefinisi

    Tuliskan jawaban pada sisa halaman ini dan di halaman kosong baliknya. Jika masih kurang, gunakan halaman

    kosong di balik halaman 3 atau 4 (jangan lupa menuliskan nomor soal dengan jelas).

    ALTERNATIF SOLUSI

    FlowchartProgram SpektrumOptik

    // Menentukan warna berdasarkan masukan panjang gelombangKamus

    int pg; // panjang gelombang dalam nmAlgoritmaMulai

    input(pg 

    output(“Ungu”

     

    Selesai

    pg>=380 && pg=451 && pg>=495

    output(“Hijau”

     

    output(“Kuning”) 

    output(“Jingga”) 

    output

    (“Merah” 

    pg>=496 && pg>=570

    pg>=571 && pg>=590

    pg>=591 && pg>=620

    pg>=621 && pg>=750

  • 8/18/2019 PTI B ITB 2015

    6/13

    Kode Program C++

    // Program SpektrumOptik// Menentukan warna berdasarkan masukan panjang gelombang#include using namespace std;

    int main () {// Kamusint pg;

    // Algoritmacin >> pg;

    if (pg >= 380 && pg

  • 8/18/2019 PTI B ITB 2015

    7/13

    Soal 4. Faktorial dan Nilai Mahasiswa [Bobot : 25%]

    Soal 4.a. Fungsi Faktorial (BOBOT : 10%) 

    DESKRIPSI PERSOALAN + ALTERNATIF SOLUSI

    Fungsi Faktorial mempunyai parameter input berupa sebuah integer lebih besar atau sama dengan nol, misalnya a, danmenghasilkan nilai a faktorial (a!) yaitu:

    ! = ∗ ( − 1) ∗ ( − 2) ∗ … ∗ 1 Berikut adalah contoh masukan (input) dan hasil dari fungsi tersebut.

    Input (a) Hasil Faktorial(a) Keterangan4 24 4! = 4*3*2*1 = 245 120 5! = 5*4*3*2*1 = 1206 720 6! = 6*5*4*3*2*1 = 7201 1 1! = 10 1 0! = 1; kasus khusus

    Lengkapilah fungsi Faktorial di bawah ini sesuai spesifikasi di atas. Perhitungan faktorial harus dilakukan denganmenggunakan pengulangan, tidak dengan cara memanggil fungsi/prosedur lain, misalnya dari library.

    int Faktorial ( int a )

    // Tuliskan spesifikasi/penjelasan fungsi di bawah ini (dalam bentuk komentar)// Menghasilkan faktorial a// Prekondisi/asumsi : a >= 0

    { // KAMUS LOKALint i, fak;

    // ALGORITMA -1i = 1;fak = 1;while (i areturn fak;

    // ALGORITMA–2fak = 1;if (a > 0) {

    for (i = 1; i

  • 8/18/2019 PTI B ITB 2015

    8/13

    Soal 4.b. Array of Nilai Mahasiswa (BOBOT : 15%) 

    DESKRIPSI PERSOALAN + ALTERNATIF SOLUSI

    Dua buah array of bilangan integer, yaitu T1 dan T2, digunakan untuk menyimpan data nilai mahasiswa sebuah matakuliah: T1 (dengan nilai efektif Neff1) untuk menyimpan nilai semua mahasiswa (baik lulus maupun tidak) dan T2

    (dengan nilai efektif Neff2) untuk menyimpan nilai mahasiswa yang lulus saja. T1 dan T2 selalu diisi dari indeks ke-0.Jika Neff1 = 0, berarti T1 kosong; demikian pula jika Neff2 = 0, berarti T2 kosong.

    Program mula-mula menerima masukan sejumlah nilai mahasiswa (asumsi nilai 0 s.d. 100) dan menyimpannya ke T1.Selanjutnya, program membaca sebuah nilai batas nilai kelulusan, misalnya X (asumsikan 0 X) ke array T2. Di akhir program, dituliskan ulang daftar nilai yang lulus yangdisimpan di T2. Jika ternyata tidak ada yang lulus (T2 kosong), maka dituliskan “Tidak ada yang lulus”. 

    Untuk menghitung banyaknya nilai yang lebih besar dari X digunakan fungsi  CountLebihBesar, sedangkan untukmenyalin isi T1 ke T2, digunakan prosedur CopyNilai, dan untuk menuliskan isi array ke layar digunakan prosedur PrintArray.

    Contoh masukan dan keluaran program:

    Input Output

    T1 Neff1 X Tertulis Di Layar T2 Neff2

    Index Nilai Index Nilai0

    123456789

    7

    0312100257311908

    10 55 Banyaknya nilai yang lulus = 2

    Daftar nilai yang lulus =1007390

    0

    12

    100

    7390

    3

    01234

    567

    7031210

    25711

    8 50 Banyaknya nilai yang lulus = 0Tidak ada yang lulus

    0

    Tugas Anda: Buatlah kode implementasi dari fungsi CountLebihBesar, prosedur CopyNilai, dan prosedurPrintArray  serta melengkapi program utama  dengan cara melengkapi program di bawah ini. Implementasifungsi/prosedur dituliskan di halaman kosong di balik hlm. 6, 7, atau 8 dengan menuliskan header/definisi fungsi/prosedurdengan jelas (spesifikasi tidak perlu ditulis ulang). Baca instruksi yang dituliskan sebagai komentar dengan cermat.

    // Program NilaiMahasiswa// Menerima masukan daftar nilai mahasiswa suatu kuliah, menyimpannya dalam suatu array of// integer T1, membaca batas nilai lulus, menghitung berapa banyak nilai yang lulus, dan// menyimpan daftar nilai lulus dalam array of integer T2, serta menampilkan isinya

    #include

    using namespace std;

    // Konstantaconst int NMax = 100;

    // Deklarasi Prosedur/Fungsiint CountLebihBesar (int Tab[NMax], int Neff, int X);

    // Menghasilkan nilai elemen Tab (dengan nilai efektif Neff) yang lebih besar dari Xvoid CopyNilai (int Tab1[NMax], int Neff1, int Tab2[NMax], int *Neff2, int X);

    // Menyalin nilai elemen Tab1 (dengan nilai efektif Neff1) yang lebih besar dari X ke Tab2// (dengan nilai efektif Neff2)// I.S. Tab1 dan Neff1 terdefinisi. Tab1 mungkin kosong (Neff1 = 0).// F.S. Tab2 dan Neff2 berisi nilai Tab1 yang lebih besar dari X. Jika tidak ada nilai yanglebih// besar dari X, Tab2 kosong (Neff2 = 0).void PrintArray (int Tab[NMax], int Neff);

    // Mencetak semua elemen Tab berderet ke bawah (setiap elemen dipisahkan sebuah enter)// I.S. Tab dan Neff terdefinisi. Tab mungkin kosong (Neff = 0).

  • 8/18/2019 PTI B ITB 2015

    9/13

    // F.S. Jika Tab tidak kosong, semua elemen Tab tertulis berderet ke bawah dari elemen pada// indeks terkecil. Jika Tab kosong, tidak menuliskan apa pun.// Lihat contoh penulisan tabel T2 pada contoh.

    // PROGRAM UTAMA

    int main () {

    // KAMUS

    // Deklarasi array T1 dan T2, berikut nilai efektifnyaint T1[NMax]; int Neff1; // Neff1 adalah nilai efektif T1; Jika Neff1=0, berarti T1

    kosong

    int T2[NMax]; int Neff2; // Neff2 adalah nilai efektif T2; Jika Neff2=0, berarti T2kosong

    // Tuliskan di bawah ini: deklarasi variabel-variabel lain yang dibutuhkanint i, X; // harus adaint count; // tergantung implementasi di program utama

    // ALGORITMA

    // Membaca isi array T1 dari pengguna// Masukan Neff1 diasumsikan benar yaitu 0 s.d. 100cout > Neff1;

    cout T1[i];

    }

    // Menerima masukan batas nilai kelulusan Xcout > X;

    // Tuliskan di bawah ini: Instruksi untuk menuliskan banyaknya nilai T1 yang lebih besar// dari X dengan memanfaatkan fungsi CountLebihBesarcout

  • 8/18/2019 PTI B ITB 2015

    10/13

      }i++;

    }return count;

    // Algoritma-2count = 0;if (Neff > 0) {

    for (i = 0; i < Neff; i++) {if (Tab[i] > X) {

    count++;

    }}

    }return count;

    }void CopyNilai (int Tab1[NMax], int Neff1, int Tab2[NMax], int *Neff2, int X) {

    // Kamus Lokalint i, j;

    // Algoritma-1i = 0;j = 0;while (i < Neff1) {

    if (Tab1[i]>X) {

    Tab2[j] = Tab1[i];j++;

    }i++;

    } // i >= Neff1*Neff2 = j;

    // Algoritma-2if (Neff1 > 0) {

    j = 0;

    for (i = 0; i < Neff1; i++) {if (Tab1[i]>X) {

    Tab2[j] = Tab1[i];j++;

    }} // i >= Neff1*Neff2 = j;

    } else { // Neff1 = 0*Neff2 = 0;

    }}void PrintArray (int Tab[NMax], int Neff) {

    // Kamus Lokalint i;

    // Algoritma-1i = 0;while (i < Neff) {

    cout 0) {

    for (i = 0; i < Neff; i++) {cout

  • 8/18/2019 PTI B ITB 2015

    11/13

    Soal 5. Luas Area di Bawah Kurva [Bobot : 25%]

    DESKRIPSI PERSOALAN 

    Menghitung luas area di bawah suatu kurva yang dibentuk dengan suatu fungsi dapat dilakukan menggunakan pendekatannumerik. Pendekatan numerik akan memotong-motong area dengan interval tertentu, kemudian dihitung luas setiapsegmen area dengan menggunakan rumus trapesium secara berulang-ulang dan semua luas segmen dijumlahkan untukmendapatkan luas total area di bawah kurva.

    Diketahui sebuah kurva yang dibentuk dengan fungsi: f(x)=x2+1 dengan ilustrasi seperti gambar di bawah ini. Untuk

    menghitung luas trapesium suatu segmen di bawah kurva antara xkiri  dengan xkanan  dengan interval sebesar delta digunakan rumus: _ = 0.5 ∗ (() + ()) ∗  

    Sebuah program melakukan beberapa hal berikut secara berturut-turut:-  Menerima masukan rentang area di bawah kurva f(x)=x2+1 yang akan dihitung, yaitu nilai x paling kiri (x1) dan x

     paling kanan (x2). Syarat: x1 < x2.

    -  Menerima masukan interval untuk perhitungan suatu segmen area, misalnya delta. Syarat: delta > 0.-  Periksa apakah masukan x1, x2, dan delta benar sesuai dengan syarat-syarat di atas. Jika sudah sesuai, lanjutkan

    dengan langkah berikutnya. Jika tidak sesuai, diberikan pesan kesalahan: “Masukan tidak tepat” dan diulangi pembacaan masukan x1, x2, dan delta sampai didapatkan masukan yang sesuai syarat.

    -  Menghitung dan menampilkan luas area di bawah kurva dalam rentang antara x 1 dan x2 dengan interval sebesardelta. Mengingat delta mungkin tidak membagi habis rentang antara x1 s.d. x2, maka jika hal ini terjadi, dilakukan pembulatan ke atas, yaitu luas segmen terakhir (segmen paling kanan) dihitung tetap dengan interval delta sehinggax yang kanan pada segmen terakhir akan melebihi x2.

    a.  Buatlah flowchart untuk persoalan di atas (flowchart boleh tidak detil, yang penting menggambarkan penyelesaian

     persoalan dengan jelas). Lengkapi flowchart dengan kamus dan penjelasan-penjelasan yang diperlukan. b.  Buatlah program  untuk persoalan di atas dalam Bahasa C++. Program yang dibuat harus merupakan program

    lengkap yang mengandung judul, spesifikasi, kamus, dan algoritma dan harus sesuai dengan flowchart.

    Tuliskan jawaban pada sisa halaman ini dan di halaman kosong baliknya. Jika masih kurang, gunakan halaman

    kosong di balik halaman 1 atau 2 (jangan lupa menuliskan nomor soal dengan jelas).

  • 8/18/2019 PTI B ITB 2015

    12/13

    Soal 4.a. (BOBOT : 10%)

    ALTERNATIF SOLUSI

    Flowchart:Program MencariLuas

    // Menghitung luas di bawah kurva: x^2 + 1,// berdasarkan rentang x1 dan x2, serta// interval sebesar delta

    Algoritma - General

    Kamus

    float x1, x2, delta, luas;

    // Kamus tambahan - jika algoritma detil

    float t1, t2;

    Algoritma– Detail

    Catatan Alternatif Solusi:

    -  Berdasarkan soal, jawaban mahasiswa OK jika berhasil membuat setidaknya flowchart yang bersifat general.Flowchart general setidaknya harus mengandung proses input, pemrosesan penghitungan luas, dan output.

    -  Berbagai alternatif solusi lain diperbolehkan, termasuk penggunaan fungsi/prosedur.-  Format input/output bebas, kecuali yang dinyatakan secara eksplisit oleh soal.

    Mulai

    input dan validasix1 x2 delta

    Menghitung nilailuas berdasarkanx1, x2, dan delta

    output luas

    Selesai

    Perhitungan Luas

    Input dan Validasi

    Mulai

    input(x1,x2 delta

    (x1>=x2)||

    delta

  • 8/18/2019 PTI B ITB 2015

    13/13

     

    Soal 1.b. (BOBOT : 15%)

    ALTERNATIF SOLUSI

    (Berdasarkan flowchart pada solusi soal 1.a.)

    // Program MencariLuas// Menghitung luas di bawah kurva: x^2 + 1,// berdasarkan rentang x1 dan x2, serta interval sebesar delta#include

    using namespace std;

    int main () {// Kamusfloat x1, x2, delta, luas;float t1, t2;

    // Algoritma// Input dan Validasicin >> x1;cin >> x2;cin >> delta;while (x1 >= x2 || delta > x2;cin >> delta;

    } // x1 < x2 && delta < 0

    // Perhitungan Luasluas = 0;t1 = x1;t2 = x1 + delta;while (t2 < x2) {

    luas = luas + (0.5 * ((t1*t1 + 1) + (t2*t2 + 1)) * delta);t1 = t2;t2 = t2 + delta;

    } // t2 >= x2

    if (t2 > x2) {luas = luas + (0.5 * ((t1*t1 + 1) + (t2*t2 + 1)) * delta);}

    // Output luascout