Algoritma Pemrograman Pertemuan Ke-12 (Record) :: Noor Ifada :: S1 Teknik Informatika-Unijoyo 1
Sub Pokok Bahasan Pendahuluan Pendefinisian Record Menggunakan Tipe Data Record Tipe Data Record dengan Field Tipe Record (Record Terstruktur) S1 Teknik Informatika-Unijoyo 2
Pendahuluan Pada pembahsan-pembahasan sebelumnya, contoh-contoh algoritma yang dibahas adalah menggunakan larik dengan elemen-elemen bertipe sederhana. Elemen larik juga dapat bertipe terstruktur, atau biasa disebut sebagai record S1 Teknik Informatika-Unijoyo 3
Pendefinisian Record Dengan menggunakan tipe data record, beberapa item data yang masing-masing dapat mempunyai tipe data berbeda-beda dapat dikumpulkan. Masing-masing item data disebut dengan field. Jadi record terdiri dari kumpulan field yang dapat berbeda tipe. Biasanya suatu record berisi beberapa field untuk sebuah subyek tertentu DEKLARASI type Hasil : record<jarijari : real, Keliling : real, Luas : real > Lingkaran : Hasil type Hasil = record JariJari : real; Keliling : real; Luas : real; var Lingkaran : Hasil; S1 Teknik Informatika-Unijoyo 4
Menggunakan Tipe Data Record Misalnya record TabMhs adalah sebuah larik yang elemennya menyatakan nilai ujian mata kuliah (MK) yang diambil seorang mahasiswa. Data (field) setiap mahasiswa adalah NIM (Nomor Induk Mahasiswa), nama mahasiswa, mata kuliah yang diambil, dan nilai mata kuliah tersebut. S1 Teknik Informatika-Unijoyo 5
Solusi Algoritma dan PASCAL: DEKLARASI const Nmaks = 100 type Mahasiswa : record<nim : integer, NamaMhs : string, KodeMK : string, Nilai : char > TabMhs: array[1..nmaks] of Mahasiswa k : integer {pencatat indeks larik} N : integer DESKRIPSI: read(n) for k 1 to N do read(tabmhs[k].nim) read(tabmhs[k].namamhs) read(tabmhs[k].kodemk) read(tabmhs[k].nilai) endfor const Nmaks = 100; type Mahasiswa = record NIM : integer; NamaMhs : string[20]; KodeMK : string[10]; Nilai : char; var TabMhs : array[1..nmaks] of Mahasiswa; k, N : integer; write( Masukkan jumlah data? );readln(n); for k := 1 to N do writeln( Data ke-,k, : ); write( Masukkan NIM?: ); readln(tabmhs[k].nim); write( Masukkan NAMA?: ); readln(tabmhs[k].namamhs); write( Masukkan KODE?: ); readln(tabmhs[k].kodemk); write( Masukkan NILAI?: ); readln(tabmhs[k].nilai); end. S1 Teknik Informatika-Unijoyo 6
Contoh kasus: Mengurutkan data berdasarkan nomor mahasiswa (NIM) dengan urutan dari yang terkecil ke yang terbesar dan kemudian menampilkannya pada tabel seperti di bawah ini: S1 Teknik Informatika-Unijoyo 7
Solusi Algoritma [bagian 1/3]: Algoritma URUT_NIM DEKLARASI ( * Program Utama *) const Nmaks = 100 type Mahasiswa : record<nim : integer, Nama : string, Kode : string, Nilai: char > TabMhs : array[1..nmaks] of Mahasiswa Bantuan : Mahasiswa I, J, N : integer procedure BacaData { Membaca data record TabMhs } DEKLARASI (* Prosedur BacaData *) { Tidak ada } DESKRIPSI: (* Prosedur BacaData *) for I 1 to N do write( Nomor Mahasiwa ke-,i,? ) read(tabmhs[i].nim) write( Nama Mahasiwa ke-,i,? ) read(tabmhs[i].nama) write( Kode Mata Kuliah ke-,i,? ) read(tabmhs[i].kode) write( Nilai Mahasiwa ke-,i,? ) read(tabmhs[i].nilai) endfor S1 Teknik Informatika-Unijoyo 8
Solusi Algoritma [bagian 2/3]: procedure urut { Mengurutkan isi record TabMhs berdasarkan NIM } DEKLARASI (* Prosedur urut *) { Tidak ada } DESKRIPSI: (* Prosedur urut *) for I 1 to N-1 do for J 1 to N-1 do if TabMhs[J].NIM > TabMhs[J+1].NIM then Bantuan := TabMhs[J]; TabMhs[J]:= TabMhs[J+1]; TabMhs[J+1]:= Bantuan; endif endfor endfor procedure tampil {Menampilkan isi record TabMhs yg telah diurutkan berdasarkan NIM dlm bentuk tabel } DEKLARASI (* Prosedur tampil *) { Tidak ada } DESKRIPSI: (* Prosedur tampil *) write('-----------------------------------------------') write(' Nomor Nama Kode Nilai ') write('-----------------------------------------------') for I 1 to N do with TabMhs[I] do write(nim,nama,kode,nilai); endfor write('----------------------------------------------'); S1 Teknik Informatika-Unijoyo 9
Solusi Algoritma [bagian 3/3]: DESKRIPSI: (* Program Utama *) write( Jumlah Mahasiswa? ) read(n) bacadata urut tampil S1 Teknik Informatika-Unijoyo 10
Solusi Pascal [bagian 1/3]: Program URUT_NIM; const Nmaks = 100; type Mahasiswa = record NIM : integer; Nama : string[20]; Kode : string[10]; Nilai: char; var TabMhs : array[1..nmaks] of Mahasiswa; Bantuan : Mahasiswa; I, J, N : integer; procedure BacaData; for I := 1 to N do writeln; write( Nomor Mahasiwa ke-,i,? );readln(tabmhs[i].nim); write( Nama Mahasiwa ke-,i,? );readln(tabmhs[i].nama); write( Kode Mata Kuliah ke-,i,? );readln(tabmhs[i].kode); write( Nilai Mahasiwa ke-,i,? );readln(tabmhs[i].nilai); S1 Teknik Informatika-Unijoyo 11
Solusi Pascal [bagian 2/3]: procedure urut; for I := 1 to N-1 do for J := 1 to N-1 do if TabMhs[J].NIM > TabMhs[J+1].NIM then Bantuan := TabMhs[J]; TabMhs[J]:= TabMhs[J+1]; TabMhs[J+1]:= Bantuan; procedure tampil; writeln; writeln('------------------------------------------------'); writeln(' Nomor Nama Kode Nilai '); writeln('------------------------------------------------'); for I := 1 to N do writeln(tabmhs[i].nim:10,tabmhs[i].nama:20,tabmhs[i].kode:10,tabmhs[i].nilai:5); writeln('------------------------------------------------'); S1 Teknik Informatika-Unijoyo 12
Solusi Pascal [bagian 3/3]: (* PROGRAM UTAMA *) write( Jumlah Mahasiswa? ); readln(n); writeln; bacadata; clrscr; urut; tampil; end. S1 Teknik Informatika-Unijoyo 13
Hasil Keluaran: Jumlah Mahasiswa? 3 Nomor Mahasiwa ke-1? 0604100044 Nama Mahasiwa ke-1? Adi Darmaji Kode Mata Kuliah ke-1? FTC104 Nilai Mahasiwa ke-1? B Nomor Mahasiwa ke-2? 0604100011 Nama Mahasiwa ke-2? Elisa Hadi Kode Mata Kuliah ke-2? FTC111 Nilai Mahasiwa ke-2? A Nomor Mahasiwa ke-1? 0604100020 Nama Mahasiwa ke-1? Aditya Kode Mata Kuliah ke-1? FTC115 Nilai Mahasiwa ke-1? C ------------------------------------------------ Nomor Nama Kode Nilai ------------------------------------------------ 0604100011 Elisa Hadi FTC111 A 0604100020 Aditya FTC115 C 0604100044 Adi Darmaji FTC104 B ------------------------------------------------ S1 Teknik Informatika-Unijoyo 14
Tipe Data Record dengan Field Tipe Record (Record Terstruktur) Tipe data record juga dapat memiliki field berupa tipe data record yang lainnya. Misalnya item-item data pada data nilai-nilai mata kuliah yang diambil setiap mahasiswa pada suatu semester. Data yang disimpan di dalam record adalah sbb: 1. NIM (Nomor Induk Mahasiswa) 2. NamaMhs (nama mahasiswa) 3. Mata Kuliah (MK) yang diambil mahasiswa tersebut, berupa record: Kode mata kuliah ke-1 Nama mata kuliah ke-1 Nilai mata kuliah ke-1 Kode mata kuliah ke-2 Nama mata kuliah ke-2 Nilai mata kuliah ke-2 Kode mata kuliah ke-n Nama mata kuliah ke-n Nilai mata kuliah ke-n S1 Teknik Informatika-Unijoyo 15
Solusi Algoritma dan PASCAL: DEKLARASI const Nmaks = 100 const Mn = 10 type MataKuliah : record<kodemk : string, NamaMK : string, Nilai : char > type Mahasiswa : record<nim : integer, Nama : string, MK : array[1..mn] of MataKuliah > TabMhs : array[1..nmaks] of Mahasiswa const Nmaks = 100; Mn = 10; type MataKuliah = record KodeMK : string[8]; NamaMK : string[20]; Nilai: char; Mahasiswa = record NIM : integer; Nama : string[20]; MK : array[1..mn] of MataKuliah; var TabMhs: array[1..nmaks] of Mahasiswa; Cara mengakses elemen TabMhs : TabMhs[N] { elemen ke-n dari TabMhs } TabMhs[N].NIM { mengacu field NIM dari elemen ke-n dari TabMhs } TabMhs[N].MK[M].KodeMK { mengacu field KodeMK ke-m dari elemen ke-n dari TabMhs } S1 Teknik Informatika-Unijoyo 16
Solusi Algoritma untuk mengisi TabMhs: Algoritma RECORD_DATA_MAHASISWA { Mengisi elemen record mahasiswa } DEKLARASI const Nmaks = 10 const Mn = 10 type MataKuliah : record<kodemk : string, NamaMK : string, Nilai : char> type Mahasiswa : record<nim : integer, Nama : string, MK : array[1..mn] of MataKuliah> LarikMhs : array[1..nmaks] of Mahasiswa I, J, M, N : integer DESKRIPSI: write( Masukkan Jumlah Data Mahasiswa? ) read(n) for I 1 to N do write( Nomor Mahasiswa ke-,i,? ) read(tabmhs[i].nim) write( Nama Mahasiswa ke-,i,? ) read(tabmhs[i].nama) write( Masukkan Jumlah Data Mata Kuliah? ) read(m) for J 1 to M do write( Kode Mata Kuliah ke-,j,? ) read(tabmhs[i].mk[j].kodemk) write( Nama Mata Kuliah ke-,j,? ) read(tabmhs[i].mk[j].namamk) write( Nilai Mata Kuliah ke-,j,? ) read(tabmhs[i].mk[j].nilai) endfor endfor S1 Teknik Informatika-Unijoyo 17
Solusi PASCAL untuk mengisi TabMhs: Program RECORD_DATA_MAHASISWA; const Nmaks = 100; Mn = 10; type MataKuliah = record KodeMK : string[8]; NamaMK : string[20]; Nilai: char; Mahasiswa = record NIM : integer; Nama : string[20]; MK : array[1..mn] of MataKuliah; var TabMhs : array[1..nmaks] of Mahasiswa; I, J, M, N : integer; write( Masukkan Jumlah Data Mahasiswa? );readln(n); for I := 1 to N do write( Nomor Mahasiswa ke-,i,? ); readln(tabmhs[i].nim); write( Nama Mahasiswa ke-,i,? ); readln(tabmhs[i].nama); write( Masukkan Jumlah Data Mata Kuliah? ); readln(m); writeln; for J := 1 to M do write( Kode Mata Kuliah ke-,j,? ); readln(tabmhs[i].mk[j].kodemk); write( Nama Mata Kuliah ke-,j,? ); readln(tabmhs[i].mk[j].namamk); write( Nilai Mata Kuliah ke-,j,? ); readln(tabmhs[i].mk[j].nilai); writeln; writeln; writeln; writeln; end. S1 Teknik Informatika-Unijoyo 18
Summary Record adalah elemen larik yang bertipe tersetruktur Tipe data record merupakan kumpulan beberapa item data dengan tipe data yang berbeda-beda atau biasa disebut sebagai field Tipe data record juga dapat memiliki field berupa tipe data record yang lainnya S1 Teknik Informatika-Unijoyo 19
Daftar Pustaka Jogiyanto HM [1989]. Turbo Pascal, Andi Offset, Yogyakarta. Noor Ifada, ST [2005]. Diktat Matakuliah Algoritma Pemrograman, Hibah Kompetisi A1, Jurusan Teknik Informatika, Universitas Trunojoyo. Rinaldi Munir [2003]. Algoritma dan Pemrograman dengan Pascal dan C edisi Kedua, Penerbit Informatika, Bandung. S1 Teknik Informatika-Unijoyo 20