11
BAB VII RECORD Record (rekaman) tersusun atas beberapa medan (field). Setiap field mempunyai tipe sendiri, baik tipe dasar yang sudah ada atau tipe bentukan. Setiap record merupakan satu kesatuan yang mempunyai pengertian yang utuh. A. Mendefinisikan Record Selain merupakan satu pengertian yang utuh, record dapat pula merepresentasikan sebuah table. Algoritmik Pascal C Type titik=record< x,y:integer > type titik=record x,y:integer, end; Typedef struct int x,y; } titik; Untuk table, nama field record di ambil dari kepala kabel. Misalnya diberikan table seperti berikut ini: No. NIM Nama Alamat Tanggal lahir Defenisi record yang sesuai adalah: Algoritmik Pascal C type tanggal=record < dd : integer mm : integer yy : integer > type tanggal=record dd : integer; mm : integer; yy : integer: end; typedef struct { int dd, mm, yy; } tanggal; type data=record< no : byte NIM : string[8] Nama : string[30] Alamat : string[30] Tgl_Lahir : tanggal > type data=record no : byte; NIM : string[8]; Nama : string[30]; Alamat : string[30]; Tgl_Lahir : tanggal; end; typedef struct { int no; char NIM[8]; char Nama[30]; char Alamat[30]; tanggal Tgl_Lahir, } data;

modul algoritma Bab 7 record

Embed Size (px)

Citation preview

Page 1: modul algoritma Bab 7 record

BAB VII

RECORD

Record (rekaman) tersusun atas beberapa medan (field). Setiap field mempunyai

tipe sendiri, baik tipe dasar yang sudah ada atau tipe bentukan. Setiap record merupakan

satu kesatuan yang mempunyai pengertian yang utuh.

A. Mendefinisikan Record

Selain merupakan satu pengertian yang utuh, record dapat pula merepresentasikan

sebuah table.

Algoritmik

Pascal C

Type titik=record<

x,y:integer >

type titik=record x,y:integer,

end;

Typedef struct int x,y;

} titik;

Untuk table, nama field record di ambil dari kepala kabel. Misalnya diberikan table

seperti berikut ini:

No. NIM Nama Alamat Tanggal lahir

Defenisi record yang sesuai adalah:

Algoritmik Pascal C

type tanggal=record < dd : integer

mm : integer yy : integer

>

type tanggal=record dd : integer;

mm : integer; yy : integer:

end;

typedef struct { int dd, mm, yy;

} tanggal;

type data=record< no : byte NIM : string[8]

Nama : string[30]

Alamat : string[30] Tgl_Lahir :

tanggal >

type data=record no : byte; NIM : string[8];

Nama : string[30];

Alamat : string[30]; Tgl_Lahir :

tanggal; end;

typedef struct { int no; char NIM[8];

char Nama[30]; char Alamat[30];

tanggal Tgl_Lahir, } data;

Page 2: modul algoritma Bab 7 record

B. Cara Mengakses Elemen Record

Cara mengakses elemen record adalah dengan menggunakan operator titik (.).

aturannya nama variabel bertipe record di ikuti tanda titik kemudian baru field yang

dikehendaki. Misalnya akan diinisialisasikan titik A sebagai titik asal (0,0) :

Algoritma Pascal C

Deklarasi A :

titik

var A : titik;

Struct titik A;

Deskripsi A.x ←

0 A.x ← 0

A.x:=0; A.y:=0;

A.x=0; A.y=0;

Contoh 7.1.

Buatlah algoritma untuk menentukan jarak dari 2 titik, a(x1, y2) dan (x2, y2).

Analisis:

Posisi titik A(x1, y1) dan B(x2, y2) secara umum dapat digambarkan sebagai berikut :

r B(x2, y2)

A((𝑥1 − 𝑦1) (y2-y1)

(𝑥2 − 𝑥1)

Dengan rumus Phytagoras, maka diperoleh rumus jarak dua titik adalah :

𝑟 = √ (𝑥2 − 𝑥1)2 + (𝑦2 – 𝑦1 )2

Algoritma 7.1.

Algoritma menentukan jarak 2 titik

{diketahui koordinat A(x1, y1) dan B(x2, y2), dicari jarak r dari A ke B }

Deklarasi

type titik = record< x,y : integer; >

A,B : titik jarak : real

Deskripsi

read(A.x, A.y) read(B.x, B.y) jarak ← sqrt((sqr(A.x-B.x)+(sqr(A.y-B.y))))

write(jarak)

Page 3: modul algoritma Bab 7 record

Translasi 7.1.

Bahasa Pascal Bahasa C

program Panjang_Garis;

uses wincrt; type titik=record x, y : integer;

end; var A,B : titik;

jarak: real; begin writeln (‘Masukkan koordinat titik A’);

write (Nilai absis x1 :’); readln(A.x); write (Nilai ordinat y1 : ‘); readln(A.y); writeln (‘Masukan koordinat titik B’);

write (Nilai absis x2 : ‘); readln(B.x); write (Nilai ordinat y2 : ‘) readln(B.y);

jarak := sqrt((sqr(A.x-B.x)+(sqr(A.y-B.y)))); write (Panjang Garis AB = ‘jarak:4:2);

end.

#include <stdio.h>

#include <math.h> typedef struct { int x, y;

} titik; main() {

titik A,B; float jarak; printf(“Masukkan koordinat titik A\n”);

printf(“Nilai absis x1 :”); scanf(“%d”,&A.x); printf(“Nilai ordinat y1 :”);

scanf(“%d”,&A.y); printf(“Masukkan koordinat titik B\n);

printf(Nilai absis x2 :”); scanf(“%d”,&B.x); printf(Nilai ordinat y2 :”);

scanf(“%d”,&B.y); jarak = sqrt((pow((A.x – B.x),2) +

(pow((A.y – B.y),2)))); printf(“Panjang Garis AB = %4.2f” jarak);

return 0; }

Contoh 7.2.

Buatlah algoritma untuk menjumlah 2 bilangan kompleks.

Analisis :

Bilangan kompleks tersusun atas bagian realmdan bagian imajiner berbentuk a + b

bi, di mana i = √−1 . Misalnya bilangan pertama adalah bil1 = a1 + b1.i Dan bil2 = a2 +

b2.i maka hasil jumlah bil1 dan bilangan 2 adalah :

bil1 + bil2=(a1+a2) + (b1+b2)i

Algoritma 7.2.

procedure jumlah_bilangan_kompleks(input x, y : kompleks ; output jumlah : kompleks)

Deklarasi

type kompleks =record < ,a, b : real >

Deskripsi jumlah.a ← x.a + y.a

jumlah.b ← x.b + y.b

Page 4: modul algoritma Bab 7 record

Translasi 7.2.

Bahasa pascal Bahasa C

program

Penjumlahan_Bilangan_Kompleks; user wincrt; type kompleks = record

a, b : real; end,

var bil1, bil2 : kompleks; total : kompleks;

proceure jumlah_bilangan_kompleks (x,y: kompleks ;var jumlah : kompleks);

begin jumlah.a := x.a + y.a;

jumlah.b := x.b + y.b; end;

begin writeln (‘Bilangan kompleks bil1‘);

write (‘Nilai bagian real bil1 : ‘_; readln(bil1.a); write (‘Nilai bagian imajiner bil1 : ‘);

readln(bil1.b); writeln (‘Bilangan kompleks bil2’);

write (‘Nilai bagian real bil2 : ‘); readln(bil2.a); write (‘Nilai bagian imajiner bil2 : ‘);

readln(bil2.b); jumlah_bilangan_kompleks(bil1, bil2,

total); if (total.b < 0) then write (‘Hasil =’,total.a:4:2,’ i’)

else write

(‘Hasil=’,total.a:4:2,’+’,total.b:4:2,’I’); end.

#include <stdio.h>

typedef struct { float a, b; } kompleks;

void jumlah_bilangan_kompleks

(kompleks x,kompleks y,kompleks *jumlah) { jumlah- >a = x.a + y.a;

Jumlah- > = x.b + y.b; }

main() { kompleks bil1, bil2;

kompleks total; printf(“Bilangan kompleks bil1\n”);

printf(“Nilai bagian real bil1 :”); scanf(“%f”,&bil1.a);

printf(“Nilai bagian imajiner bil1 : “); scanf(“%f”,&bil1.a); printf(“Bilangan kompleks bil2\n”);

printf(“Nilai bagian real bil2 : “); scanf(“f”,&bil2.a);

printf(“Nilai bagian imajiner bil2 : “); scanf(“%f”,&bil2.b);

jumlah_bilangan_kompleks(bil1,bil2,&total); if ((total.b < 0))

printf(“Hasil = %4.2f%4.2f i”,total.a,total.b); else

printf(“Hasil= %4.2 + %4.2f i”,total.a,total.b);

return 0; }

Catatan :

Untuk passing parameter dalam bahasa C yang menggunakan call by refference

(yaitu menggunakan pointer *), cara mengakses fieldnya tidak menggunakan operator titik

(.) tetapi menggunakan operator panah (->).

Page 5: modul algoritma Bab 7 record

Contoh 7.3.

Buatlah daftar nilai mahasiswa didasarkan pada table berikut ini.

No.

NIM

Nama

Ujian Nilai

Mid Akhir Akhir Huruf

1. 990510001 Khoirul anam 80 95 90 A

2. 990510002 Siti julaiha 45 30 35 D

3. 990510003 Nur rohmah 50 50 50 C

4. 990510004 Agus Muhammad

90 60 70 B

5. 990510005 Nur Iskandar 40 10 20 E

Dengan ketentuan :

1. Nilai akhir diperoleh dari rumus (Ujian Mid + 2xUjian Akhir)\3.

2. Nilai huruf di peroleh dengan :

Range Nilai

Nilai Huruf

0..20 E

21..40 D

41..60 C

61..80 B

81..100 A

Analisis :

Masalah di atas perlu dipecah menjadi beberapa subprogram untuk mempermudah

penyelesaian. Tahapannya adalah sebagai berikut :

1. Dibuat struktur data yang sesuai dengan tabel tersebut.

2. Dibuat procedure masuk_data, di mana di dalamnya terdapat rumus

untuk mengisi field nilai akhir dan pemanggilan fungsi konversi ke nilai

huruf.

3. Dibuat frocedure cetak_data.

4. Dibuat fungsi untuk memperoleh nilai huruf.

Algoritma 7.3.a

function konversi_ke_huruf(input angka : real) : char

Deskripsi if (angka<=20) then konversi_ke_huruf ← ‘E’ else if ((angka>20)and (angka <= 40)) then konversi_ke_huruf ← ‘D’

else if ((angka>40) and (angka <=60)) then konversi_ke_huruf ← ‘C’ else if ((angka>60) and (angka <=80)) then konversi_ke_huruf ← ‘B’

else konversi_ke_huruf ← ‘A’ endif

Page 6: modul algoritma Bab 7 record

Algoritma 7.3.b.

procedure masuk_data(output mhs : mhs : array [1..20] of data; input n : integer)

Deklarasi type data = record < no : byte

NIM : string[8] Nama : string[30]

Alamat : string[30] Tgl_Lahir : tanggal > i : integer

Deskripsi

for ← 1 to n do with mhs[i] do

read(no) read(nim) read(nama)

read(ujian_mid) read(ujian_akhir)

nilai_akhir ← (ujian_mid + ujian_akhir*2)\3 nilai_huruf ← konversi_ke_huruf(nilai-akhir) endwith

endfor

Translasi 7.3.

Bahasa Pascal

program data_mahasiswa;

uses wincrt; type data = record

no : byte; NIM : string[8] Nama: string[20]

ujian_mid, ujian_akhir : integer nilai_akhir : real;

nilai_huruf : char; end; mahasiswa = array [1..20] of data;

var data_mhs : mahasiswa; n : integer,

function konversi_ke_huruf(angka : real) : char ; begin

if(angka<=20) then konversi_ke_huruf : = ‘E’ else if ((angka>20) and (angka <= 40)) then konversi_ke_huruf := ‘D’

else if ((angka>40) and (angka <= 60)) then konversi_ke_huruf :=’C’ else if ((angka>60) and (angka <=80)) then konversi_ke_huruf :=’B’ else konversi_ke_huruf := ‘A’;

end;

procedure masuk_data(var mhs : mahasiswa; n ; integer);

var i : integer;

Page 7: modul algoritma Bab 7 record

begin

for i: to n do

with mhs[i] do begin

write(‘No : ‘); readln(no);

wrire(‘Nim : ‘); readln(nim);

write(‘Nama : ‘); readln(nama);

write(‘Nama ujian mid : ‘); readln(ujian_mid);

write(‘Nilai ujian akhir : ‘); readln(ujian_akhir);

nilai_akhir := (ujian_mid + ujian_akhir*2)\3;

nilai_huruf := konversi_ke_huruf(nilai_akhir);

end;

end;

procedure cetak_data(mhs ; mahasisiwa; n : integer);

var i : integer;

begin

for i:=1 to ndo

withmhs[i] do begin

writeln(‘No :’, no);

writeln(‘Nim :’, nim);

writeln(‘Nama :’, nama);

writeln(‘Nilai ujian mid :’, ujian_mid);

writeln(‘Nilai ujian akhir :’, ujian_akhir);

writeln(Nilai Akhir :’, nilai_akhir:4:2);

writeln(‘Nilai Huruf :’, nilai_huruf);

writeln(‘Tekan sepasi untuk melanjutkan … ‘);

writeln;

repeat until keypressed;

end;

end;

begin

write(‘Banyak data mahasisiwa : ‘); readln(n);

masuk_data(data-mhs, n);

cetak_data(data_mhs, n);

end.

Bahasa C

#include <stdio.h>

typedef struct {

int no;

char nim[8];

char nama[20];

int ujian_mid, ujian_akhir;

float nilai_akhir;

char nilai_huruf;

} data;

typedef data mahasiswa[20];

Page 8: modul algoritma Bab 7 record

char konversi_ke_huruf(float angka)

{ if ((angka <= 20)) return ‘E’;

else if (((angka > 20) && (angka <= 40))) return ‘D’;

else if (((angka > 40) && (angka <= 60))) return ‘C’;

else if (((angka > 60) && (angka <= 80))) return ‘B’;

else return ‘A’;

}

void masuk_data(mahasiswa *mhs, int n)

{ int i;

for (i =0; i < n; i + +)

{ printf(“No : “); scanf(“%d”,&mhs[i]->no);

printf(“Nim : “);scanf(“%s”,mhs[i]->nim);

printf(“Nama : “);scanf(“%s”,mhs[i]->nama);

printf(“Nilai ujian mid : “);scan(“%d”,mhs[i]->ujian_mid);

printf(“Nilai ujian akhir : “);scan(“%d”,mhs[i]->ujian_akhir);

mhs[i]->nilai_akhir = (mhs[i]->ujian_mi + mhs[i]->ujian_akhir *2) 3.0;

mhs[i]->nilai_huruf = konversi_ke_huruf(mhs[i]->nilai_akhir);

void cetak_data(mahasiswa mhs, int n)

{ int i;

for (i = 0; < n; i + +)

{ printf(“No : %d\n”,mhs[i].no);

printf(“Nim : %s\n”,mhs[i].nim);

printf(“Nama : %s\n”,mhs[i].nama);

printf(“Nilai ujian mid : %d\n”,mhs[i].ujian_mid);

printf(“Nilai ujian akhir : %d\n”,mhs[i].ujian_akhir);

Printf(“Nilai Akhir : %4.2f\n”,mhs[i].nilai_akhir);

Printf(“Nilai Huruf :%c\n”,mhs[i].nilai_huruf);

Printf(“\n’);

}

}

main() {

mahasiswa data_mhs;

Int n;

printf(“Banyak data mahasiswa : “); scanf(“%d”,&n);

masuk_data(&data_mhs, n);

cetak_data(data_mhs, n);

return 0;

}

Page 9: modul algoritma Bab 7 record

Contoh 7.4.

Buatlah algoritma untuk menghitung selisih dua waktu yang masing-masing

berformat jam:menit:detik.

Analisis :

Diasumsikan bahwa waktu yang terakhir lebih besar dari waktu awal.

Langkah :

1. Dibaca waktu awal dan waktu akhir

2. Konverensikan masing-masing waktu tersebut ke detik

3. Hitung selisih dari langkah 2

4. Konverensikan langkah 3 ke format jam:menit:detik

Algoritma 7.4.a

procedure konversi_ke_waktu(input det : integer,output d : waktu)

Deklarasi type waktu = record

jam,menit,detik : integer; end; jam2 : integer;

Deskripsi with d do jam <- det div (60*60) { mendapatkan jam }

jam2 det mod (60*60) menit <- jam2 div 60 { mendapatkan menit }

detik <- jam2 mod 60 { mendapatkan detik } endwith

Algoritma 7.4.b.

function konversi_ke_detik(input d : waktu) : integer

Dekripsi with d do konversi_ke_detik ← jam*60*60 + menit*60 + detik

endwith

Algoritma 7.4.c

procedure selisih_waktu(input a, b : waktu; output selisih : waktu)

Deklarasi temp1, temp2, beda : integer;

Deskripsi

temp1 ← konversi_ke_detik(a) temp2 ← konversi_ke-detik(b) beda ← temp2 - temp1

Konversi_ke_waktu(beda,selisih)

Page 10: modul algoritma Bab 7 record

Translasi 7.4.

Bahasa Pascal Bahasa C

program selisih_dua_waktu; uses wincrt; type waktu = record

jam, menit, detik : integer;

end; var waktu1, waktu2 : waktu; Beda_waktu : waktu;

#include <stdio.h> typedef struct { int jam, menit, detik;

} waktu;

void konversi_ke-waktu(int det, waktu *d) { int jam2;

Contoh 7.5.

Buatlah algoritma untuk mengkonversikan koordinat polar menjadi koordinat

cartesius.

Analisis :

Konversi dari koordinat polar menjadi koordinat cartesius menggunakan rumus :

X = r*cos ( 𝜃)

Y = r*sin( 𝜃 )

Algoritma 7.5.

procedure konversi_ke_kartesius(input a : polar; output b : kartesius)

Deklarasi

type kartesius = record , x, y : real > polar = record < r, teta : real >

Deskripsi

with a do b.x <- r*cos(teta) b.y <_ r*sin(teta)

endwith

Translasi 7.5.

Bahasa Pascal Bahasa C

program konversi_koordinat; uses wincr; type kartesius = recor

x, y : real; end;

polar = record r, teta : real; end;

var asal : polar; tujuan : kartesius;

derajat: real; procedure konversi_ke_kartesius(a : polar;

var b : kartesius); begin

#include <stdio.h> #include <math.h>

typedef struct { float x, y;

} kartesius; typedef struct { float r, teta;

} polar; #define pi 3.14

void konversi_ke_kartesius(polar a, kartesius *b)

{ b- >x = a.r *cos(a.teta);

Page 11: modul algoritma Bab 7 record

with a do begin b.x := r*cos(teta);

b.y := r*sin(teta); end;

end;

b- >y = a.r*sin(a.teta); }

main() { polar asal;

kartesius tujuan; float derajat;

begin

with asal do begin write(‘nilai r : ‘); readln(r); write(‘sudut : ‘); readln9derajat);

teta : = derajat*180\pi; end;

konversi_ke_kartesius(asal, tujuan); with tujuan do begin writeln(‘absis = ‘, x:4:2);

write(‘ordinat = ‘, y:4:2); end;

end.

printf(“nilai r : “); scanf(“%f”,&asal.r); printf(“sudut : “); scanf(“%f”,&derajat);

asal.teta = derajat * 180 \ pi ;

konversi_ke_kartesius(asal,&tujuan); printf(“absis = %4.2f\n”,tujuan.x); printf(‘ordinat = %4.2f”,tujuan.y);

return 0; }