Kamis, 21 Februari 2013

Contoh Soal Algoritma Larik


Salam All,
Terkait dengan tidak tersedianya ruangan untuk pertemuan pagi ini, berikut Saya berikan uraian tugas kelompok yang diekivalensikan sebagai pertemuan sesi pertama hari ini, Selasa 23 Oktober 2012.
Kamu Pasti Bisa (KPB) adalah lembaga bimbingan belajar yang sedang menanjak sukses. KPB memiliki banyak siswa dan tutor. Oleh karena itu, KPB membutuhkan aplikasi (program) yang dapat membantu aktifitas mereka. Buatlah sebuah algoritma untuk membantu aktifitas KPB dengan melakukan proses sebagai berikut :
1. Memasukkan data siswa ke dalam larik bernama Siswa. Data siswa terdiri dari nama, jenis kelamin, alamat, dan nomor telepon. Algoritma akan membaca jumlah data siswa yang akan disimpan ke dalam larik Siswa.
2. Menampilkan data siswa ke piranti keluaran
3. Memasukkan nilai akhir setiap siswa ke dalam larik bernama Nilai, di mana setiap elemen larik Nilai berisi nama siswa dan nilainya.
4. Memasukkan data tutor ke dalam larik bernama Tutor. Data tutor terdiri dari nama, jenis kelamin, alamat, nomor telepon, tanggal menjadi tutor
5. Menampilkan data tutor ke piranti keluaran
6. Memasukkan nama mata pelajaran yang diajar setiap tutor ke dalam larik Jadwal, di mana setiap elemen larik Jadwal berisi nama tutor, nama mata pelajaran yang diajar, dan waktu kursus.
7. Memasukkan nilai-nilai siswa pada mata pelajaran Matematika ke dalam larik Rincian_nilai_Mtk, di mana setiap elemen larik Rincian_nilai berisi nama siswa, nilai kehadiran, nilai tugas, dan nilai ujian.
8. Memasukkan nilai akhir siswa pada mata pelajaran Matematika ke dalam larik nilai_akhir_Mtk, di mana setiap elemen larik tersebut berisi nama siswa dan nilai akhir. Nilai akhir diperoleh dari formula berikut : 30% nilai kehadiran+30% nilai tugas+40% niai ujian.
9. Menampilkan data siswa dengan nilai akhir pada mata pelajaran Matematika di atas 79.
10. Menyimpan data siswa dengan nilai akhir pada mata pelajaran Matematika di atas 79 ke dalam larik Siswa_berprestasi, dan menyimpan data siswa dengan nilai akhir pada mata pelajaran Matematika kurang atau sama dengan 79 ke dalam larik Siswa_rata_rata.
11. Menampilkan nama siswa yang memiliki nilai tertinggi pada mata pelajaran Matematika.
Seluruh proses di atas, dilakukan oleh algoritma dengan menggunakan Procedure.
Adapun yang harus diselesaikan pagi ini adalah prosedur nomor 7 sampai dengan 11
Setelah algoritma selesai dibuat, ubahlah algoritma menjadi program.

Jawab :
JAWABAN SOAL PERTEMUAN SELASA, 23 OKTOBER 2012
Algoritma KPB
{Menyelesaikan pekerjaan KPB}
Deklarasi :
            type data_mtk : record <nama : string, kehadiran : real, tugas : real, ujian : real>
            type data_na_mtk : record <nama : string, nilai_akhir : real>
            type data_siswa_nilai : record <nama : string, nilai_akhir : real>
            type larik_data_mtk : array [1 . . 1000] of data_mtk
            type larik_data_na_mtk : array [1 . . 1000] of data_na_mtk
type larik_siswa_nilai: array [1 . . 1000] of data_siswa_nilai
            rincian_nilai_mtk : larik_data_mtk
            nilai_akhir_mtk : larik_data_na_mtk
            siswa_berprestasi : larik_siswa_nilai
            siswa_rata_rata : larik_siswa_nilai
procedure isi_data_siswa (input jml_siswa : integer, output siswa : larik_data_siswa)
procedure isi_nilai_akhir (input jml_siswa : integer, siswa : larik_data_siswa , output nilai : larik_data_nilai)
            procedure isi_data_tutor (input jml_tutor : integer, output tutor : larik_data_tutor)
procedure isi_data_jadwal (input  jml_tutor : integer, tutor : larik_data_tutor, output jadwal : larik_data_jadwal)
procedure isi_nilai_rinci_mtk (input jml_siswa : integer, siswa : larik_data_siswa , output rincian_nilai_mtk : larik_data_mtk)
procedure isi_ nilai_akhir_mtk (input jml_siswa : integer, rincian_nilai_mtk : larik_data_mtk, output nilai_akhir_mtk : larik_data_na_mtk)
procedure cetak_siswa_atas_79 (input jml_siswa : integer, nilai_akhir_mtk : larik_data_na_mtk)
procedure isi_siswa_nilai (input jml_siswa : integer, nilai_akhir_mtk : larik_data_na_mtk, output siswa_berprestasi : larik_siswa_nilai, siswa_rata_rata : larik_siswa_nilai, jml_s_p : integer, jml_s_r : integer)
procedure cetak_siswa_nilai_tertinggi (input jml_s_p : integer, siswa_berprestasi :  larik_siswa_nilai)
jum_siswa, jum_tutor  : integer
jum_s_p, jum_s_r        : integer
Definisi :
            read (jum_siswa)
            isi_data_siswa (jum_siswa, siswa)
            isi_nilai_akhir (jum_siswa, siswa, nilai)
            read (jum_tutor)
            isi_data_tutor (jum_tutor, tutor)
            isi_data_jadwal (jum_tutor, tutor, jadwal)
isi_nilai_rinci_mtk (jum_siswa, siswa, rincian_nilai_mtk)
isi_ nilai_akhir_mtk (jum_siswa, rincian_nilai_mtk, nilai_akhir_mtk)
cetak_siswa_atas_79 (jum_siswa, nilai_akhir_mtk)
isi_siswa_nilai (jum_siswa, nilai_akhir_mtk, siswa_berprestasi, siswa_rata_rata, jum_s_p, jum_s_r)
cetak_siswa_nilai_tertinggi (jum_s_p, siswa_berprestasi)
end algoritma

procedure isi_nilai_rinci_mtk (input jml_siswa : integer, siswa : larik_data_siswa , output rincian_nilai_mtk : larik_data_mtk)
{Mengisi nilai rinci siswa pada mata pelajaran Matematika}
Deklarasi :
            i           : integer          
Definisi :
            for i ¬ 1 to jml_siswa do
                        rincian_nilai_mtk[i].nama ¬ siswa[i].nama
                        read (rincian_nilai_mtk[i]. kehadiran)
                        read (rincian_nilai_mtk[i]. tugas)
                        read (rincian_nilai_mtk[i]. ujian)
            end for
end procedure

procedure isi_ nilai_akhir_mtk (input jml_siswa : integer, rincian_nilai_mtk : larik_data_mtk, output nilai_akhir_mtk : larik_data_na_mtk)
{Mengisi nilai akhir siswa pada mata pelajaran Matematika}
Deklarasi :
            i           : integer
            na        : real
           
Definisi :
            for i ¬ 1 to jml_siswa do      
na ¬ (0.3 * rincian_nilai_mtk[i].kehadiran + 0.3 * rincian_nilai_mtk[i].tugas + 0.4 * rincian_nilai_mtk[i].ujian)
nilai_akhir_mtk[i].nama ¬ rincian_nilai_mtk[i].nama
nilai_akhir_mtk[i]. nilai_akhir ¬ na
            end for
end procedure

procedure cetak_siswa_atas_79 (input jml_siswa : integer, nilai_akhir_mtk : larik_data_na_mtk)
{Menampilkan nama siswa yang memiliki nilai akhir mata pelajaran Matematika di atas 79}
Deklarasi :
            i           : integer
Definisi :
            for i ¬ 1 to jml_siswa do
                        if (nilai_akhir_mtk[i].nilai_akhir > 79) then
                                    write (nilai_akhir_mtk[i].nama)
                        end if
            end for
end procedure

procedure isi_siswa_nilai (input jml_siswa : integer, nilai_akhir_mtk : larik_data_na_mtk, output siswa_berprestasi : larik_siswa_nilai, siswa_rata_rata : larik_siswa_nilai, jml_s_p : integer, jml_s_r : integer)
{Memasukkan data siswa yang memiliki nilai mata pelajaran Matematika di atas 79 ke dalam larik siswa_berprestasi  dan selebihnya ke dalam larik siswa_rata_rata }                   
Deklarasi :
            i                       : integer          
Definisi :
            jml_s_p ¬ 0
            jml_s_r ¬ 0
            for i ¬ 1 to jml_siswa do
                        if (nilai_akhir_mtk[i].nilai_akhir > 79) then
                                    siswa_berprestasi[i] ¬ nilai_akhir_mtk[i]
                                    jml_s_p ¬ jml_s_p + 1
                        else
                                    siswa_rata_rata[i] ¬ nilai_akhir_mtk[i]
jml_s_r ¬ jml_s_r + 1
                        end if
            end for
end procedure

procedure cetak_siswa_nilai_tertinggi (input jml_s_p : integer, siswa_berprestasi :  larik_siswa_nilai)
{Menampilkan data siswa dengan nilai tertinggi pada mata pelajaran Matematika}
Deklarasi :
            i           : integer
            indeks_maks   : real
Definisi :
            indeks_maks ¬ 1
            for i ¬ 2 to jml_s_p do
if (siswa_berprestasi[i]. nilai_akhir > siswa_berprestasi[indeks_maks]. nilai_akhir) then
                                    indeks_maks ¬ i
                        end if
            end for
            write (siswa_berprestasi[indeks_maks]. nilai_akhir)
end procedure

Tidak ada komentar:

Posting Komentar