LAMPIRAN 1
Berikut ini adalah hasil wawancara pakar dengan Kepala Kelompok Teknisi Stasiun Meteorologi Kemayoran Jakarta Bapak Rd. Nursyamsi Kurnia Utama,ST selaku pakar pada bidang ini dan sebagai Karyawan BMKG (Badan Meteorologi dan Geofisika) Jakarta:
1. Apakah itu hujan?
Jawab: Hujan adalah salah satu bentuk dari presipitasi seperti salju, embum atau kabut.
2. Bagaimanakah cara mengukur curah hujan secara manual?
Jawab: Dengan menampung air hujan yang turun disuatu wadah. Kemudian setelah hujan berhenti air hujan tersebut dimasukan kedalam gelas ukur, dan diliat berapa banyaknya air hujan yang turun.
3. Pada bulan apa sajakah biasanya hujan mencapai titik tertinggi?
Jawab: Pada bulan Februari dan Januari hujan mencapai titik tertinggi.
4. Apakah tinggi suatu daerah mempengaruhi factor terjadinya hujan?
Jawab : Tidak, karena yang mempengaruhi faktor terjadinya hujan adalah banyaknya awan yang berkumpul dan dapat membuat terjadinya hujan.
5. Apakah BMKG memiliki alat khusus untuk mengukur hujan yang turun?
Jawab: Kami memiliki alat bernama OBS, OBS dapat mengukur hujan dengan tepat. Pada alat OBS ini dapat memberikan kurva yang berubah-ubah apabila terjadi hujan. Kami melakukan pengecekkan terbaru yang dicatat oleh alat OBS ini setiap 3 jam sekali.
6. Apakah BMKG mempunyai alat lain selain OBS?
Jawab: Kami memiliki alat yang mirip dengan OBS. apabila OBS dilakukan pengecekan setiap 3jam sekali alat pengukuran Helman dapat menyimpan data tentang hujan yang terjadi selama 24jam. Sehingga kami melakukan pengecekkan pada Helman setiap 1x24jam, yaitu biasanya pada jam 7 pagi hari.
7. Bagaimanakah membagi hujan deras, sedang, dan ringan/gerimis?
Jawab: Caranya dengan melihat dari curah hujan yang sudah di ukur oleh alat OBS dan pengukuran helman. Pada curah hujan 0-25mm maka dapat dibilang gerimis, 25-75mm disebut hujan sedang, dan 76-100mm disebut hujan deras.
8. Bagaimanakah kategori hujan menurut lama waktu hujannya?
Jawab: Hujan dengan waktu 0-30menit dapat dibilang sebentar, 30-60menit itu cukup lama, 60-90menit termasuk lama, dan 90-120menit adalah lama sekali.
LAMPIRAN 2 Form1.h
#pragma once #include "Form2.h"
namespace Testing {
using namespace System;
using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data;
using namespace System::Drawing; /// <summary>
/// Summary for Form1 /// </summary>
public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); //
//TODO: Add the constructor code here //
protected:
/// <summary>
/// Clean up any resources being used. /// </summary> ~Form1() { if (components) { delete components; } }
private: System::Windows::Forms::Button^ button1; private: System::Windows::Forms::Button^ button2;
private: System::Windows::Forms::DateTimePicker^ dateTimePicker1; protected:
private:
/// <summary>
/// Required designer variable. /// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code /// <summary>
/// Required method for Designer support - do not modify /// the contents of this method with the code editor.
/// </summary>
void InitializeComponent(void) {
this->button1 = (gcnew System::Windows::Forms::Button()); this->button2 = (gcnew System::Windows::Forms::Button());
this->dateTimePicker1 = (gcnew System::Windows::Forms::DateTimePicker()); this->SuspendLayout(); // // button1 // this->button1->Location = System::Drawing::Point(92, 161); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(106, 39); this->button1->TabIndex = 0;
this->button1->Text = L"Input Data";
this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this,&Form1::button1_Click); // // button2 // this->button2->Location = System::Drawing::Point(92, 65); this->button2->Name = L"button2"; this->button2->Size = System::Drawing::Size(100, 39); this->button2->TabIndex = 1;
this->button2->UseVisualStyleBackColor = true;
this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click); // // dateTimePicker1 // this->dateTimePicker1->Format = System::Windows::Forms::DateTimePickerFormat::Short; this->dateTimePicker1->Location = System::Drawing::Point(10, 10); this->dateTimePicker1->Margin = System::Windows::Forms::Padding(1); this->dateTimePicker1->Name = L"dateTimePicker1"; this->dateTimePicker1->RightToLeft = System::Windows::Forms::RightToLeft::No; this->dateTimePicker1->Size = System::Drawing::Size(86, 20); this->dateTimePicker1->TabIndex = 6; // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(292, 266); this->Controls->Add(this->dateTimePicker1); this->Controls->Add(this->button2); this->Controls->Add(this->button1); this->Name = L"Form1";
this->Text = L"Menu Utama";
this->ResumeLayout(false); }
#pragma endregion
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void Form1_Closing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) {
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Form2^ form2 = gcnew Form2;
form2->Show(); }
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
MessageBox::Show("Menu Help\nSistem aplikasi ini bertujukan untuk memprediksi\nkemungkinan akan terjadinya banjir di Jakarta\ndengan menggunakan 3 parameter yang harus di inputkan\nYaitu Curah Hujan, Debit Sungai, dan Lama Hujan\n\n\nHow to use?\n1. Pilih Input Data\n2. Masukkan Curah Hujan / sesuaikan dengan yang ada di database\n3. Masukkan Debit Sungai / sesuaikan dengan yang ada di database\n4. Masukkan Lama Hujan (WAJIB)\n5. Klik
Hitung\n\n\nCopyright by Dennis and Edo"); }
}; }
Form2.h
#include "FFLLAPI.h"
namespace Testing {
using namespace System;
using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Summary for Form2 /// </summary>
public ref class Form2 : public System::Windows::Forms::Form { public: int curahhujanfromdatabase; int debitsungaifromdatabase; Form2(void) { InitializeComponent(); //
// }
protected:
/// <summary>
/// Clean up any resources being used. /// </summary> ~Form2() { if (components) { delete components; } }
private: System::Windows::Forms::TrackBar^ trackBar1; protected:
private: System::Windows::Forms::TrackBar^ trackBar2; private: System::Windows::Forms::TrackBar^ trackBar3; private: System::Windows::Forms::Button^ button1; private: System::Windows::Forms::Label^ label1; private: System::Windows::Forms::Label^ label2; private: System::Windows::Forms::Label^ label3;
private: System::Windows::Forms::DateTimePicker^ dateTimePicker1; private: System::Windows::Forms::Label^ label4;
private: System::Windows::Forms::Label^ label5; private: System::Windows::Forms::Label^ label6;
protected: protected: private:
/// <summary>
/// Required designer variable. /// </summary>
System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary>
void InitializeComponent(void) {
this->trackBar1 = (gcnew System::Windows::Forms::TrackBar()); this->trackBar2 = (gcnew System::Windows::Forms::TrackBar()); this->trackBar3 = (gcnew System::Windows::Forms::TrackBar()); this->button1 = (gcnew System::Windows::Forms::Button()); this->label1 = (gcnew System::Windows::Forms::Label()); this->label2 = (gcnew System::Windows::Forms::Label()); this->label3 = (gcnew System::Windows::Forms::Label());
this->dateTimePicker1 = (gcnew System::Windows::Forms::DateTimePicker()); this->label4 = (gcnew System::Windows::Forms::Label());
this->label5 = (gcnew System::Windows::Forms::Label()); this->label6 = (gcnew System::Windows::Forms::Label());
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->trackBar1))->BeginInit(); (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->trackBar2))->BeginInit(); (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->trackBar3))->BeginInit(); this->SuspendLayout(); // // trackBar1 // this->trackBar1->Location = System::Drawing::Point(12, 51); this->trackBar1->Maximum = 100; this->trackBar1->Name = L"trackBar1"; this->trackBar1->Size = System::Drawing::Size(135, 45); this->trackBar1->TabIndex = 0;
this->trackBar1->Scroll += gcnew System::EventHandler(this, &Form2::trackBar1_Scroll); // // trackBar2 // this->trackBar2->Location = System::Drawing::Point(12, 184); this->trackBar2->Maximum = 120; this->trackBar2->Name = L"trackBar2"; this->trackBar2->Size = System::Drawing::Size(135, 45); this->trackBar2->TabIndex = 1;
this->trackBar2->Scroll += gcnew System::EventHandler(this, &Form2::trackBar2_Scroll);
// // trackBar3 // this->trackBar3->Location = System::Drawing::Point(12, 119); this->trackBar3->Name = L"trackBar3"; this->trackBar3->Size = System::Drawing::Size(135, 45); this->trackBar3->TabIndex = 2;
this->trackBar3->Scroll += gcnew System::EventHandler(this, &Form2::trackBar3_Scroll); // // button1 // this->button1->Location = System::Drawing::Point(122, 221); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(75, 23); this->button1->TabIndex = 3; this->button1->Text = L"Hitung"; this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this, &Form2::button1_Click); // // label1 // this->label1->AutoSize = true; this->label1->Location = System::Drawing::Point(184, 51); this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(13, 13); this->label1->TabIndex = 4;
this->label1->Text = L"0";
this->label1->Click += gcnew System::EventHandler(this, &Form2::label1_Click); // // label2 // this->label2->AutoSize = true; this->label2->Location = System::Drawing::Point(184, 184); this->label2->Name = L"label2"; this->label2->Size = System::Drawing::Size(13, 13); this->label2->TabIndex = 5; this->label2->Text = L"0"; // // label3 // this->label3->AutoSize = true; this->label3->Location = System::Drawing::Point(184, 119); this->label3->Name = L"label3"; this->label3->Size = System::Drawing::Size(13, 13); this->label3->TabIndex = 6; this->label3->Text = L"0";
this->label3->Click += gcnew System::EventHandler(this, &Form2::label3_Click);
// dateTimePicker1 // this->dateTimePicker1->Format = System::Windows::Forms::DateTimePickerFormat::Short; this->dateTimePicker1->Location = System::Drawing::Point(12, 10); this->dateTimePicker1->Margin = System::Windows::Forms::Padding(1); this->dateTimePicker1->Name = L"dateTimePicker1"; this->dateTimePicker1->RightToLeft = System::Windows::Forms::RightToLeft::No; this->dateTimePicker1->Size = System::Drawing::Size(86, 20); this->dateTimePicker1->TabIndex = 5; // // label4 // this->label4->AutoSize = true; this->label4->Location = System::Drawing::Point(12, 99); this->label4->Name = L"label4"; this->label4->Size = System::Drawing::Size(68, 13); this->label4->TabIndex = 7;
this->label4->Text = L"Debit Sungai"; // // label5 // this->label5->AutoSize = true; this->label5->Location = System::Drawing::Point(12, 35); this->label5->Name = L"label5";
this->label5->Size = System::Drawing::Size(66, 13); this->label5->TabIndex = 8;
this->label5->Text = L"Curah Hujan"; // // label6 // this->label6->AutoSize = true; this->label6->Location = System::Drawing::Point(12, 167); this->label6->Name = L"label6"; this->label6->Size = System::Drawing::Size(64, 13); this->label6->TabIndex = 9;
this->label6->Text = L"Lama Hujan"; // // Form2 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(292, 266); this->Controls->Add(this->label6); this->Controls->Add(this->label5); this->Controls->Add(this->label4); this->Controls->Add(this->dateTimePicker1); this->Controls->Add(this->label3); this->Controls->Add(this->label2); this->Controls->Add(this->label1);
this->Controls->Add(this->button1); this->Controls->Add(this->trackBar3); this->Controls->Add(this->trackBar2); this->Controls->Add(this->trackBar1); this->Name = L"Form2";
this->Text = L"Input Data";
this->Load += gcnew System::EventHandler(this, &Form2::Form2_Load); (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->trackBar1))->EndInit(); (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->trackBar2))->EndInit(); (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->trackBar3))->EndInit(); this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion
private: System::Void Form2_Load(System::Object^ sender, System::EventArgs^ e) { curahhujanfromdatabase = trackBar1->Value;
debitsungaifromdatabase = trackBar3->Value; }
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { int model = ffll_new_model();
ffll_load_fcl_file(model, "project.fcl"); int child = ffll_new_child(model);
ffll_set_value(model, child, 1, trackBar2->Value); ffll_set_value(model, child, 2, trackBar3->Value);
int percentage = (int)ffll_get_output_value(model, child); ffll_close_model(model);
MessageBox::Show("Kemungkinan banjir : " + String::Concat("", percentage) + "%");
}
private: System::Void trackBar1_Scroll(System::Object^ sender, System::EventArgs^ e) { label1->Text = String::Concat("", trackBar1->Value);
}
private: System::Void trackBar2_Scroll(System::Object^ sender, System::EventArgs^ e) { label2->Text = String::Concat("", trackBar2->Value);
}
private: System::Void trackBar3_Scroll(System::Object^ sender, System::EventArgs^ e) { label3->Text = String::Concat("", trackBar3->Value);
}
private: System::Void label1_Click(System::Object^ sender, System::EventArgs^ e) { }
private: System::Void label3_Click(System::Object^ sender, System::EventArgs^ e) { }
}; }
Testing.cpp
#include "stdafx.h" #include "Form1.h"
using namespace Testing;
[STAThreadAttribute]
int main(array<System::String ^> ^args) {
// Enabling Windows XP visual effects before any controls are created Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Create the main window and run it Application::Run(gcnew Form1()); return 0; } Project.fcl FUNCTION_BLOCK VAR_INPUT
curahhujan REAL; (* RANGE(0 .. 100) *) lamahujan REAL; (* RANGE(0 .. 120) *) debitsungai REAL; (* RANGE(0 .. 10) *) END_VAR
VAR_OUTPUT
kemungkinanbanjir REAL; (* RANGE(0 .. 100) *) END_VAR FUZZIFY curahhujan TERM deras := (76, 0) (100, 1) (100, 0); TERM sedangg := (25, 0) (25, 1) (76, 0); TERM gerimis := (0, 0) (10, 1) (25, 0); END_FUZZIFY FUZZIFY lamahujan TERM lamasekali := (80, 0) (90, 1) (100, 1) (120, 0); TERM lama := (50, 0) (65, 1) (75,1) (90, 0); TERM cukuplama := (20, 0) (35, 1) (45, 1) (60, 0); TERM sebentar := (0, 0) (10, 1) (20, 1) (30, 0) ; END_FUZZIFY FUZZIFY debitsungai TERM tinggi := (7, 0) (9, 1) (10, 0); TERM sedang := (4, 0) (6, 1) (8, 0); TERM rendah := (0, 0) (3, 1) (5, 0); END_FUZZIFY FUZZIFY kemungkinanbanjir
TERM banjirbesar := (60, 0) (80, 1) (100, 1) (100, 0); TERM banjir := (25, 0) (50, 1) (65, 1) (70, 0); TERM tidakbanjir := (0, 0) (20, 1) (30, 0); END_FUZZIFY DEFUZZIFY valve METHOD: COG; END_DEFUZZIFY RULEBLOCK first AND:MIN; ACCUM:MAX;
RULE 0: IF deras AND lamasekali AND tinggi THEN banjirbesar; RULE 1: IF deras AND lamasekali AND sedang THEN banjirbesar; RULE 2: IF deras AND lamasekali AND rendah THEN banjir; RULE 3: IF deras AND lama AND tinggi THEN banjirbesar; RULE 4: IF deras AND lama AND sedang THEN banjirbesar; RULE 5: IF deras AND lama AND rendah THEN banjir;
RULE 6: IF deras AND cukuplama AND tinggi THEN banjirbesar; RULE 7: IF deras AND cukuplama AND sedang THEN banjir; RULE 8: IF deras AND cukuplama AND rendah THEN banjir; RULE 9: IF deras AND sebentar AND tinggi THEN banjirbesar; RULE 10: IF deras AND sebentar AND sedang THEN banjir; RULE 11: IF deras AND sebentar AND rendah THEN tidakbanjir; RULE 12: IF sedangg AND lamasekali AND tinggi THEN banjirbesar; RULE 13: IF sedangg AND lamasekali AND sedang THEN banjirbesar; RULE 14: IF sedangg AND lamasekali AND rendah THEN tidakbanjir;
RULE 15: IF sedangg AND lama AND tinggi THEN banjirbesar; RULE 16: IF sedangg AND lama AND sedang THEN banjir; RULE 17: IF sedangg AND lama AND rendah THEN banjir; RULE 18: IF sedangg AND cukuplama AND tinggi THEN banjir; RULE 19: IF sedangg AND cukuplama AND sedang THEN tidakbanjir; RULE 20: IF sedangg AND cukuplama AND rendah THEN tidakbanjir; RULE 21: IF sedangg AND sebentar AND tinggi THEN banjir;
RULE 22: IF sedangg AND sebentar AND sedang THEN tidakbanjir; RULE 23: IF sedangg AND sebentar AND rendah THEN tidakbanjir; RULE 24: IF gerimis AND lamasekali AND tinggi THEN banjir; RULE 25: IF gerimis AND lamasekali AND sedang THEN tidakbanjir; RULE 26: IF gerimis AND lamasekali AND rendah THEN tidakbanjir; RULE 27: IF gerimis AND lama AND tinggi THEN banjir;
RULE 28: IF gerimis AND lama AND sedang THEN tidakbanjir; RULE 29: IF gerimis AND lama AND rendah THEN tidakbanjir; RULE 30: IF gerimis AND cukuplama AND tinggi THEN tidakbanjir; RULE 31: IF gerimis AND cukuplama AND sedang THEN tidakbanjir; RULE 32: IF gerimis AND cukuplama AND rendah THEN tidakbanjir; RULE 33: IF gerimis AND sebentar AND tinggi THEN banjir;
RULE 34: IF gerimis AND sebentar AND sedang THEN tidakbanjir; RULE 35: IF gerimis AND sebentar AND rendah THEN tidakbanjir; END_RULEBLOCK