S1 Teknik Informatika-Unijoyo 1
Algoritma Pemrograman
Pertemuan Ke-12
(
Record
)
::
::
S1 Teknik Informatika-Unijoyo 3
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
Pendahuluan
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 5
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
Menggunakan Tipe Data
Record
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
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?: ‘);
S1 Teknik Informatika-Unijoyo 7
Mengurutkan data berdasarkan nomor mahasiswa (NIM)
dengan urutan dari yang terkecil ke yang terbesar dan
kemudian menampilkannya pada tabel seperti di bawah ini:
Contoh 2:
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 9
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('---');
Contoh 2: Solusi Algoritma … [bagian 2/3]:
DESKRIPSI: (* Program Utama *)
write(‘Jumlah Mahasiswa ? ‘)
read(N)
bacadata
urut
tampil
S1 Teknik Informatika-Unijoyo 11 Program URUT_NIM;
const Nmaks = 100;
type
Mahasiswa = record
NIM : integer;
TabMhs : array[1..Nmaks] of Mahasiswa; Bantuan : Mahasiswa;
I, J, N : integer;
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);
end;
end;
Contoh 2: Solusi Pascal … [bagian 1/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
S1 Teknik Informatika-Unijoyo 13
(* PROGRAM UTAMA *)
begin
write
(‘Jumlah Mahasiswa ? ‘);
readln
(N);
writeln
;
bacadata
;
clrscr;
urut
;
tampil
;
end.
Contoh 2: Solusi Pascal… [bagian 3/3]:
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
S1 Teknik Informatika-Unijoyo 15
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
Tipe Data
Record
dengan
Field
Tipe
Record
(
Record
Terstruktur)
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
;
end
;
Mahasiswa =
record
NIM :
integer
;
Nama :
string
[20];
MK :
array
[1..Mn]
of
•
Cara mengakses elemen TabMhs :
TabMhs[N] {elemen ke-N dari TabMhs}
TabMhs[N].NIM {mengacu field NIM dari elemen ke-N dari TabMhs}
S1 Teknik Informatika-Unijoyo 17
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
•
Solusi Algoritma 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
S1 Teknik Informatika-Unijoyo 19