Anda di halaman 1dari 4

ADT TANGKI AIR

“Tangki Air di Rumah” berfungsi untuk memberikan kenyamanan dan keamanan penggunaan air
di rumah. Asumsikan saja bahwa tangki air terhubung dengan sumber air melalui pipa yang terhubung juga
dengan pompa air. Dari tanki ke rumah terhubung dengan pipa yang ujungnya berupa kran-kran yang dapat
membuka secara otomatis, dikontrol dari peralatan elektronik melalui peralatan mekanik. Untuk
mengambil air dari tanki, terlebih dahulu harus ditekan sebuah tombol yang telah dipasang di rumah. Air
akan dialirkan ke kran yang dimaksud jika air di tanki tidak kosong. Otomatisasi dilakukan oleh peralatan
elektronik melalui peralatan mekanik.
Setiap saat akan terjadi pemanipulasian Tangki Air (mengisi dan mengurangi volume air)
sehingga ketika volume air berkurang dari volume total, mesin pompa akan otomatis hidup dan melakukan
pengisian tanki, mesin pompa akan berhenti secara otomatis jika tanki penuh. Begitu pula jika sipemilik
akan menyalakan tombol untuk mengambil air dari tanki, make terlebih dahulu dilakukan pengecekan
terhadap isi tanki, jika tanki kosong make keran tidak akan membuka.

1. Vocabulary Sistem

Cerita diatas merupakan realita sistem, realita sistem terdiri dari aspek perangkat keras dan
perangkat lunak. Sebelum mengimplementasikan sistem perlu untuk memodelkan permasalahan tersebut
pada model sederhana dalam tataran lojik. Untuk mendapatkan model sistem, perlu dicari pembendaharaan
yang dipunyai oleh sistem tersebut.
Tanki air mempunyai atribut volume total dan volume saat itu (Current), Tanki harus dimanipulasi
untuk dapat digunakan oleh sipemilik rumah. Manipulasi terhadap Tanki Air meliputi :
 Mengisi Tanki Air
 Mengambil air dari Tanki sebanyak n liter
 Sebelum mengisi, harus dicek dahulu isi tankinya, jika penuh make tidak dilakukan pengisian.
 Sebelum mengambil air harus dicek dahulu, jika kosong make proses pengambilan air gagal dan kran
tidak membuka.
 Jangan lupa untuk mendefinisikan Tanki Air pada saat awal kejadian. Tanki air berisi volume current
adalah 0 liter dan volume total n liter (silahkan definisikan sendiri).

Asumsi sistem :
 Ketika sedang mengisi tanki tidak boleh melakukan aksi lain
 Aspek waktu pada sistem dihilangkan.

2. Topik Pembicaraan Sistem

Yang menjadi topik pembicaraan adalah Bagaimana memanipulasi Tanki Air ?. Kalimat itu dapat
dipisahkan menjadi 1. Bagaimana memanipulasi -------2. Tanki Air. Potongan kalimat Bagaimana
memanipulasi akan dijabarkan dalam primitif-primitif yang telah dijelaskan secara umum dalam 5 hal di
atas. Sedangkan Potongan kalimat yang kedua adalah Tanki Air, merupakan objek pembicaraan yang
dimanipulasi. Tanki Air terdiri dari 2 atribut yang sangat dominan yaitu Volume Total dan Volume saat
tertentu(Volume Current). Tanki Air akan dijabarkan dalam struktur data komposisi.

1 Acep taryana/ Teknik Elektro Unsoed 08/01/19


3. Struktur Data Komposisi Tanki Air dan Primitif

Secara lebih lengkap, didapatkan pembendaharaan kalimat Sistem Tanki Air sebagai berikut :

--Kamus Umum
Type TankiAir is record
VolumeTotal : real --- Menyatakan daya tampung maksimum tanki
VolumeCurrent : real --- Menyatakan volume air saat tertentu
end

--Jika T adalah TankiAir, cara deklarasi dan akses :


----Deklarasi :
------ T : TankiAir
------ T.VolumeCurrent untuk mengetahui banyaknya volume air pada saat tertentu.
------ T.VolumeTotal untuk mengetahui daya tampung maksimum tanki
--Definisi
---Tanki Kosong T.VolumeCurrent = 0

--------------------------------Primitif-primitif----------------------------------------
--------- Pembentuk Tanki Air ------------
Procedure CreateTanki(T : out TankiAir);
---I.S : sembarang
---F.S : terbentuk tangki kosong

-------Ambil & Isi Tangki Air --------


Procedure Isi_Tanki(T : in out TankiAir);
---I.S : Volume tanki, kosong atau tidak penuh.
---F.S : Tanki terisi air sampai penuh.

Function KurangiVolumeTanki(JmlAir : in Real )  TankiAir;


--Mengembalikan volume tanki air (VolumeCurrent) setelah dikurangi sebanyak n liter dari semula yang
--dikirim lewat variabel JmlAir

--------Test Volume Tanki----------


Function IsEmptyTanki() : boolean ;
--Menentukan apakah tangki air kosong, jika kosong mengembalikan nilai true.

Function IsFullTanki() : boolean ;


--Menentukan apakah tanki air kosong, jika penuh mengembalikan nilai true.

Function IsSisaVolume() : real ;


-- Mengembalikan jumlah sisa volume tanki air.

2 Acep taryana/ Teknik Elektro Unsoed 08/01/19


Konversikan NA di bawah ini ke dalam bahasa C. Kompilasi dan jalankan !

TEKNIK Nomor Dokumen Identitas Nilai


ELEKTRO Nama :
UNSOED TPNA08-01 NIM :
Revisi 1.0 Tgl : 16-08-2008
1. Program SistemTankiAir
2. { Deskripsi : Program untuk Simulasi manipulasi Tanki Air di Rumah, Versi I.
3. Sistem akan meminta inputan dari user berupa tombol : 'A','a' 'M', 'm'.
4. Selama user tidak menekan tombol apapun, sistem akan mengeksekusi
5. statement di dalam repeat – until yang dalam. Jika user menekan tombol,
6. eksekusi akan dilanjutkan ke statement yang ada di luar repeat-until dalam.
7. Tombol 'A' atau 'a' berfungsi untuk mengambil air dari Tanki dengan Volume air
8. yang diambil acak, sedangkan 'M' atau 'm' untuk mematikan sistem. Sistem akan
9. secara otomatis mengisi Tanki Air jika Volume Current Tanki Air < 5 liter }

{
10. Kamus Umum }
11. Type
12. TankiAir = record
13. VolumeTotal : real {Menyatakan daya tampung maksimum tanki}
14. VolumeCurrent : real {Menyatakan volume air saat tertentu}
15. end
16. T : PTankiAir { T adalah objek Tanki Air }
17. n : Integer { Kapasitas Air }
18. Tombol : Char { Tombol pemilihan aksi }
19. JumlahAir : Integer { Jumlah Air yang diambil }
20. {--Jika T adalah TankiAir, cara deklarasi dan akses :
21. ----Deklarasi :
22. ------ T : TankiAir
23. ------ T.VolumeCurrent untuk mengetahui banyaknya volume air pada saat tertentu.
24. ------ T.VolumeTotal untuk mengetahui daya tampung maksimum tanki
25. --Definisi
26. ---Tanki Kosong T.VolumeCurrent = 0 }
27. {------------------------Deklarasi Primitif-primitif---------------------------
28. --------- Pembentuk Tanki Air ------------}
29. Procedure CreateTanki(output V : TankiAir)
30. {---I.S : sembarang
31. ---F.S : terbentuk tangki kosong}
32. Algoritma
33. V.VolumeTotal <---n
34. V.VolumeCurrent<---0

35. {-------Ambil & Isi Tangki Air --------}


36. Procedure Isi_Tanki(output V : TankiAir)
37. {---I.S : Volume tanki, kosong atau tidak penuh.
38. ---F.S : Tanki terisi air sampai penuh.}
39. Algoritma
40. V.VolumeCurrent<---V.VolumeTotal

41. Function KurangiVolumeTanki(input V : TankiAir, input JmlAir : Real ) ---> TankiAir


42. {--Mengembalikan volume tanki air (VolumeCurrent) setelah
43. --dikurangi sebanyak n liter dari semula yang
44. --dikirim lewat variabel JmlAir }
45. Algoritma
46. V.VolumeCurrent<---V.VolumeCurrent – JmlAir
47. ---->V;

48. {--------Test Volume Tanki----------}


49. Function IsEmptyTanki(input V : TankiAir) ---> boolean
50. {--Menentukan apakah tangki air kosong, jika kosong mengembalikan nilai true.}
51. Algoritma
52. --->( V.VolumeCurrent = 0 )

53. Function IsFullTanki(input V : TankiAir) ---> boolean


54. {--Menentukan apakah tanki air kosong, jika penuh mengembalikan nilai true.}
55. Algoritma
3 Acep taryana/ Teknik Elektro Unsoed 08/01/19
56. ---->(V.VolumeCurrent=V.VolumeTotal)
57. Function IsSisaVolume(input V : TankiAir) --> real
58. {-- Mengembalikan jumlah sisa volume tanki air.}
59. Algoritma
60. --->V.VolumeCurrent
61. Function IsKapasitas(input V : TankiAir) --> real
62. {-- Mengembalikan jumlah kapasitas volume tanki air.}
63. Algoritma
64. --->V.VolumeTotal
65. {ALGORTIMA / PROSES PROGRAM UTAMA}
66. Randomize { Inisialissi peng-acakan bilangan integer dari sistem clock }
67. n  20 { Inisialisasi nilai kapasitas TankiAir }
68. CreateTanki(T)
69. {Untuk memperlihatkan hasil dari CreateTanki, akan berpengaruh thd : }
70. output('Awal penciptaan/pendefinisian, Volume Tanki Air sbb : ')
71. output('Kapasitas Tanki : ', IsKapasitas(T))
72. output('Volume Current : ', IsSisaVolume(T))
73. delay(2500)
74. output('Sedang ngisi........')
75. delay(2500)
76. Isi_Tanki(T)
77. output('Tanki sudah diisi---> Tanki Penuh ')
78. repeat
79. repeat
80. delay(2500)
81. output('Sistem Hidup-->Pilih Menu [A]mbil Air [M]atikan Sistem')
82. if IsFullTanki(T) then
83. output('Tanki Penuh ')
84. else {Tanki kosong, tangki tidak penuh }
85. if IsEmptyTanki(T) then
86. output('Tanki Kosong ')
87. else { Tanki tidak penuh }
88. output('Tanki Tidak Penuh ')
89. until keypressed
90. Tombol Readkey
91. JumlahAir  Random(n) { Mengacak bilangan dalam range 0..19}
92. depend on (Tombol) :
93. 'A','a' : output('Aksi ambil Air : ')
94. if ( Not IsEmptyTanki(T) ) Then
95. output('Sukses, Volume Current Sebelumnya :’,IsSisaVolume(T))
96. if JumlahAir <= IsSisaVolume(T) Then
97. T  KurangiVolumeTanki(T, JumlahAir) {Ambil Air}
98. output('Diambil : ',JumlahAir,' Liter')
99. output('Maka Volume Current menjadi : ', IsSisaVolume(T))
100. else {JumlahAir > IsSisaVolume(T)}
101. output('Gagal,karena Air yang diambil melebihi V Current')
102. output('VolCurrent:',IsSisaVolume(T),'Diambil',jumlahAir)
103. if IsSisaVolume(T) < 5 then
104. output('Hidupkan Pompa Air---> ngisi Tanki.......')
105. delay(3500)
106. Isi_Tanki(T)
107. output('Tanki sudah diisi---> Tanki Penuh ')
108. else { Tanki Kosong/Empty }
109. output('Gagal, karena Tanki Kosong, Isi Dulu !')
110. Isi_Tanki(T)
111. output('Sedang ngisi........')
112. delay(2500)
113. output('Tanki sudah diisi---> Tanki Penuh ')
114. 'M','m' : output('Sistem dimatikan ')
115. break
116. until false

4 Acep taryana/ Teknik Elektro Unsoed 08/01/19

Anda mungkin juga menyukai