KUG1A3 Algoritma& Pemrograman Burhanuddin D Prodi S1-Sistem Komputer, F Teknik Elektro Universitas Telkom Presentasi 3 Tipe Baru, Enumerasi dan Bentukan
MENDEFINISIKAN TYPE BARU Menentukan nama tipe ( pada Kamus ) Menentukan definisi domain harga Menentukan aturan penulisan konstanta Menentukan operator Type NamaOrang : string { Domain NamaOrang = domain string } Type tidak menentukan alokasi memori di komputer, tetapi hanya mendefinisikan pola struktur informasi. Constant Org1 : NamaOrang = ‘Budi’ { Operator unt NamaOrang = operator string } Nama : NamaOrang { deklarasi variabel} 2
TYPE BARU dalam Pascal Urutan dalam deklarasi : Menentukan nama type Menentukan konstanta dengan tipe tersebut Menentukan variabel dengan tipe tersebut Type NamaOrang : string; Const Org1 : namaorang =‘Budi’; Var nama : namaorang; Type tidak menentukan alokasi memori di komputer, tetapi hanya mendefinisikan pola struktur informasi. 3
Tipe Enumerasi Tipe yang domainnya dibuat dengan urutan tertentu Contoh : integer dan karakter Bisa juga dibentuk sendiri Contoh : Type hari = ( senin, selasa, rabu, kamis) Deklarasi variabelnya day : hari { day adalah variabel bertipe hari } Pengisian nilai day kamis
Tipe Enumerasi (lanj) Ada beberapa fungsi pada tipe ini First() : elemen pertama Last() : elemen terakhir Succ() : elemen berikutnya Pred() : elemen sebelumnya Contoh First(day) Last(day) Succ(senin) Pred(kamis) { hasilnya : senin } { hasilnya : kamis } { hasilnya : selasa } { hasilnya : rabu }
Tipe enumerasi dalam Pascal Deklarasi dengan : Type hari = (senin, selasa, rabu, kamis ); var day : hari; Tipe enumerasi yang dideklasikan pada program TIDAK DAPAT dilakukan pembacaan atau penulisan variabel. readln(day); { error} write(day); { error } writeln(‘Setelah rabu=’,succ(rabu)); {error}
Tipe Bentukan Type nama_type : < elemen_1 : type_1, Pascal : sama dengan tipe record Tipe yang terdiri dari beberapa komponen Type nama_type : < elemen_1 : type_1, elemen_2 : type_2, elemen_3 : type_3, ……………………> Deklarasi variabel: bentuk1 : nama_type
Tipe Bentukan ( lanj) Contoh : Type lahir : < tempat : string, tanggal : integer, bulan : integer, tahun : integer > Deklarasi variabelnya ultah : lahir Yang bisa diakses/diolah adalah nama variabelnya !
Tipe Bentukan ( lanj) Cara mengakses / mengolah : ultah. tempat ‘Solo’ ultah.tanggal 19 ultah.bulan 2 ultah.tahun 1990 umur 2009 - ultah.tahun output (‘Jika lahir pada’,ultah.tahun, ‘maka umumnya kira –kira ‘, umur, ‘tahun’)
Tipe Bentukan ( lanj) Contoh : Type jam : < hh : integer [0..23], mm : integer [0..59], ss : integer[0..59]> Deklarasi variabelnya hour : jam Konstanta : Constant jam1 : jam = <10,10,10>
Tipe bentukan dalam Pascal Type jam = record hh : integer; mm : integer; ss : integer ; end; Deklarasi variabelnya var hour : jam; Mengakses variabel : hour.hh := 10; writeln( ‘menit =‘, hour.mm);
Contoh : JAM MENIT DETIK Pernyataan : Dibaca sebuah harga berupa bilangan bulat, positif dan lebih kecil dari 1 juta, yang mewakili besaran dalam detik. Harus dihitung ekivalensinya, berapa hari, jam berapa menit dan berapa detik. Contoh : data 309639 akan menghasilkan 3, 14, 0, 39, yang artinya 3 hari, 14 jam, 0 menit dan 9 detik
Contoh : JAMMENITDETIK ( lanj) Spesifikasi: Input : n (detik), integer Proses : menghitung hari, jam, menit, detik Output : HARI, JAM, MENIT, DETIK Analisis : nama-nama variabel n : bilangan yang dibaca, integer 0 sampai 999999 H : HARI, bilangan bulat positif, HARI J : JAM, bilangan bulat positif antara 0 - 23 M : MENIT, bilangan bulat antara 0 -59 D : DETIK, bilangan bulat antara 0 - 59 Rumus : 1 hari = 86400 detik; 1 jam = 3600 detik dan 1 menit = 60 detik. 1 hari = hasil bagi n dengan 86400 1 jam = sisa hasil bagi dibagi dengan 3600 dst.
Catatan : Ini adalah contoh program dengan asersi yang lengkap, yang merupakan pembuktian kebenaran program. Namun setiap baris mengandung asersi. Untuk selanjutnya, asersi dituliskan “secukupnya”, dan pelajaran mengenai asersi yang lengkap akan dicakup pada matakuliah Analisa algoritma. Program tersebut adalah pola solusi untuk “menguraikan” sebuah besaran (detik) menjadi besaran lain (hari, jam, menit, detik) berdasarkan rumus konversi besaran. Pemilihan nama informasi pada program tersebut kurang mengandung artinya, maka disertakan definisi nama singkat sebagai komentar. Jika pemilihan nama sudah interpretatif, tidak perlu lagi deskripsi nama seperti pada contoh.
Contoh : PERKALIAN PECAHAN Pernyataan: Tuliskanlah algoritma untuk membaca dua buah besaran bertype pecahan, dan menuliskan hasil kali kedua pecahan tersebut. Pecahan harus direpresentasi sebagai dua buah bilangan integer yang menyatakan pembilang dan penyebut. Penyebut selalu tidak pernah sama dengan nol. Pecahan negatif ditandai dengan pembilang berupa integer negatif
Pecahan <1,2> merepresentasi 1/2 Contoh : Pecahan <1,2> merepresentasi 1/2 Pecahan <-4,2> merepresentasi -4/2 Pecahan <1,1> merepresentasi 1/1 Pecahan <0,2> merepresentasi 0/2 Pecahan <1,0> BUKAN PECAHAN! Perlu deklarasi tipe bentukan ! Pembuatan Algoritma Tipe pecahan : pembilang dan penyebut Dalam notasi algoritma : Type pecahan : < pembilang : integer, penyebut : inetger >
Pembuatan Algoritma (lanj) Perkalian pecahan : Pembilang bilangan1 x pembilang bilangan2 Penyebut bilangan1 x penyebut bilangan2 Dalam notasi algoritma : a. Deklarasikan P1,P2,P3 : variabel bertipe pecahan. b. P3.pembilang P1.pembilang*P2.pembilang P3.penyebutP1.pembilang*P2.penyebut c. Sebelum perkalian, nilai kedua pecahan harus diketahui. Bisa melalui pembacaan. d. Outputkan hasil perkalian
Algoritma : Pecahan Program KaliPecahan { menghitung perkalian 2 pecahan} { input 2 bil pecahan, output : hasil kali } Kamus Type pecahan : < pembilang : integer, penyebut : integer > P1,P2,P3 : pecahan { deklarasi var bertipe pecahan } Algoritma input ( P1,P2) P3.Pembilang P1.pembilang * P2.pembilang P3.Penyebut P1.penyebut * P2. penyebut output (P3) Jadi jika dituliskan sebuah sequence yang terdiri dari deretan instruksi/aksi ke 1,2,3,4,.........n maka setiap instruksi/aksi akan dilaksanakan secara berurutan mulai dari yang ke 1, kemudian k-2, ke-3,.... s/d ke-n. Final state dari sebuah instruksi/aksi yang ada pada urutan instruksi/aksi ke-i akan menjadi Initial state dari instruksi/aksi ke-i+1. Dengan kata lain, urut-urutan penulisan instruksi/aksi pada suatu sequence sangat penting.
Pecahan ( dalam Pascal ) Program KaliPecahan; { menghitung perkalian 2 pecahan} { input 2 bil pecahan, output : hasil kali } Type pecahan = record pembilang : integer; penyebut : integer ; End; Var P1,P2,P3 : pecahan ;
Pecahan ( dalam Pascal ) Begin Writeln('Pembilang dan penyebut pecahan pertama'); Readln(P1.pembilang,P1.penyebut); Writeln('Pembilang dan penyebut pecahan kedua'); Readln(P2.pembilang,P2.penyebut); P3.pembilang:=P1.pembilang*P2.pembilang; P3.penyebut:=P1.penyebut*P2.penyebut; Writeln('Hasil kalinya adalah', P3.pembilang,'/',P3.penyebut); End. { Kalau ditulis P3:=P1*P2; akan error }
Lagu Tipe Pascal Tipe obyek banyak macamnya Integer tuk bilangan bulat Pecahan namanya real Karakter tunggal pakai char Ada lagi tipe logika Dia bernama boolean Kalau kumpulan karakter Nama tipenya adalah string Jangan sampai salah menuliskan tipe obyeknya Jangan sampai salah, kalau salah program tak jalan Jangan sampai salah menuliskan operatornya Jangan sampai salah, kalau salah program kan error
Lagu Tipe (lanj) Ada juga obyek terurut Namanya enumerasi Dia tidak pakai kutip Karna bukan termasuk string Obyek majemuk di program Pascal Tulis nama dan sama dengan Ikuti dengan kata record Lalu komponen dan tipenya Ingat tipe record jangan lupa akhiri end Ingat tipe record dekla-rasikan variabelnya Pakai tipe record, pakai nama variabelnya Tambah sebuah titik diikuti komponennya
Latihan 1: Kalkulasi Type Terstruktur Jam Pernyataan: Tuliskanlah algoritma untuk membaca dua buah besaran bertepe Jam yang mewakili awal dan akhir suatu percakapan telpon dan menuliskan durasi waktu dalam detik yang dihitung dari kedua jam yang dibaca. Type Jam terdiri dari Jam, menit dan detik dan dipakai sistem jam dengan jam 00:00:00 sampai dengan 23:59:59
Latihan soal 2. Jika type jam diubah sehingga aturan penulisannya bukan lagi dalam domain 00:00:00 sampai dengan 23:59:59 melainkan menjadi dari 00:00:00 am sampai dengan 11:59:59 pm, apa yang harus dilakukan dengan program DURASI ? 3. Tuliskanlah minimal 20 rumus dalam bidang fisika dan matematika yang dapat diprogram dengan program JARAK sebagai “pola” program. 4. Dibaca 5 buah bilangan bulat A1, A2, A3, A4 dan A5, harus dihitung jumlahnya dan dituliskan hasilnya. Bagaimana jika yang dibaca adalah 1000 buah bilangan ?
Reference: Liem, Inggriani. Diktat kuliah IF223 Algoritma & Pemrograman. Jurusan Teknik Informatika. ITB. 1999