Algoritma Pemrograman Pertemuan Ke-13 (Record) Noor Ifada
[email protected]
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
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; end; var Lingkaran : Hasil;
S1 Teknik Informatika-Unijoyo
4
Menggunakan Tipe Data Record
Contoh 1: Misal 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
nilai mata kuliah S1 Teknik Informatika-Unijoyo
5
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 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 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
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 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
Contoh 2: Solusi Algoritma … [bagian 3/3]: DESKRIPSI: (* Program Utama *) write(‘Jumlah Mahasiswa ? ‘) read(N) bacadata urut tampil
S1 Teknik Informatika-Unijoyo
10
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; 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
Contoh 2: 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
Contoh 2: Solusi Pascal… [bagian 3/3]: (* PROGRAM UTAMA *) begin 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 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, 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 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