modul algoritma Bab 7 record
-
Upload
eko-widyanto-napitupulu -
Category
Data & Analytics
-
view
81 -
download
1
Transcript of 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;
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)
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
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 (->).
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
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;
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];
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;
}
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)
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);
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; }