Algoritma Pemrograman Pertemuan Ke-12 (Record) :: NoorIfada :: 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 1
Pendahuluan Record adalah elemen larik yang bertipe terstruktur 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 S1 Teknik Informatika-Unijoyo 3 Pendefinisian Record 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 2
Menggunakan Tipe Data Record Contoh 1: Misalrecord 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 nilai mata kuliah S1 Teknik Informatika-Unijoyo 5 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) 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 3
Contoh 2: 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 Contoh 2: 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) S1 Teknik Informatika-Unijoyo 8 4
Contoh 2: 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 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); write('----------------------------------------------'); S1 Teknik Informatika-Unijoyo 9 Contoh 2: Solusi Algoritma [bagian 3/3]: DESKRIPSI: (* Program Utama *) write( Jumlah Mahasiswa? ) read(n) bacadata urut tampil S1 Teknik Informatika-Unijoyo 10 5
Contoh 2: 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 Contoh 2: 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 6
Contoh 2: Solusi Pascal [bagian 3/3]: (* PROGRAM UTAMA *) write( Jumlah Mahasiswa? ); readln(n); writeln; bacadata; clrscr; urut; tampil; end. S1 Teknik Informatika-Unijoyo 13 Contoh 2: 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 7
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, 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 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 8
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) 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 9
Summary Record adalah elemen larik yang bertipe terstruktur 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, Yogyakarta: Andi Offset. Noor Ifada [2005]. Diktat Matakuliah Algoritma Pemrograman (Hibah Kompetisi A1), Bangkalan: Jurusan Teknik Informatika, Universitas Trunojoyo. Rinaldi Munir [2003]. Algoritma dan Pemrograman dengan Pascal dan C edisi Kedua, Bandung: Informatika. S1 Teknik Informatika-Unijoyo 20 10