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 Keliling : real, Luas : real > Lingkaran : Hasil
: real,
type Hasil = record JariJari : real; Keliling : real; Luas : real; end; 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
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; end; var TabMhs : array[1..Nmaks] of Mahasiswa; k, N : integer; begin write(‘Masukkan jumlah data ? ‘);readln(N); for k := 1 to N do writeln(‘Data ke-‘,k,’ : ‘); begin 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; 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 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; end; var TabMhs : array[1..Nmaks] of Mahasiswa; Bantuan : Mahasiswa; I, J, N : integer; procedure BacaData; begin for I := 1 to N do begin writeln; write(‘Nomor Mahasiwa ke-‘,I,’ write(‘Nama Mahasiwa ke-‘,I,’ write(‘Kode Mata Kuliah ke-‘,I,’ write(‘Nilai Mahasiwa ke-‘,I,’ end; end;
? ? ? ?
‘);readln(TabMhs[I].NIM); ‘);readln(TabMhs[I].Nama); ‘);readln(TabMhs[I].Kode); ‘);readln(TabMhs[I].Nilai);
S1 Teknik Informatika-Unijoyo
11
• Solusi Pascal… [bagian 2/3]: procedure urut; begin for I := 1 to N-1 do for J := 1 to N-1 do if TabMhs[J].NIM > TabMhs[J+1].NIM then begin Bantuan := TabMhs[J]; TabMhs[J]:= TabMhs[J+1]; TabMhs[J+1]:= Bantuan; end; end; procedure tampil; begin writeln; writeln('------------------------------------------------'); writeln(' Nomor Nama Kode Nilai '); writeln('------------------------------------------------'); for I := 1 to N do begin writeln(TabMhs[I].NIM:10,TabMhs[I].Nama:20,TabMhs[I].Kode:10,TabMhs[I].Nilai:5); end; writeln('------------------------------------------------'); end;
S1 Teknik Informatika-Unijoyo
12
• Solusi Pascal… [bagian 3/3]: (* PROGRAM UTAMA *) begin 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 Nama Mahasiwa ke-1 Kode Mata Kuliah ke-1 Nilai Mahasiwa ke-1 Nomor Mahasiwa ke-2 Nama Mahasiwa ke-2 Kode Mata Kuliah ke-2 Nilai Mahasiwa ke-2 Nomor Mahasiwa ke-1 Nama Mahasiwa ke-1 Kode Mata Kuliah ke-1 Nilai Mahasiwa ke-1
? ? ? ? ? ? ? ? ? ? ? ?
0604100044 Adi Darmaji FTC104 B 0604100011 Elisa Hadi FTC111 A 0604100020 Aditya FTC115 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 type Mahasiswa : record TabMhs : array[1..Nmaks] of Mahasiswa
const Nmaks = 100; Mn = 10; type MataKuliah = record KodeMK : string[8]; NamaMK : string[20]; Nilai: char; end; Mahasiswa = record NIM : integer; Nama : string[20]; MK : array[1..Mn] of MataKuliah; end; 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 type Mahasiswa : record 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; end; Mahasiswa = record NIM : integer; Nama : string[20]; MK : array[1..Mn] of MataKuliah; end; var TabMhs : array[1..Nmaks] of Mahasiswa; I, J, M, N : integer; begin write(’Masukkan Jumlah Data Mahasiswa ? ’);readln(N); for I := 1 to N do begin 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 begin 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; end; writeln; end; 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