Listing Program
1.
Mainform.cs
/** Created by SharpDevelop. * User: asus
* Date: 7/23/2014 * Time: 4:51 PM *
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace AHPTest
{
/// <summary>
/// Description of MainForm.
/// </summary>
public partial class MainForm : Form {
string [] kriteria = new string[] {"IMK","Usia
Mentoring","Training Pengurus","Hafalan Al-Qur'an","Jumlah
Kelompok Mentoring"};//poin-poin kriteria
string [] alternatif = new string[] {"Amat
Baik","Baik","Cukup","Kurang"};//poin-poin alternatif setiap kriteria
AHPTest.Data m_kriteria;//variabel yang menyimpan nilai matriks dan eigen vektor dari kriteria
List<Data> m_alternatif;//variabel yang menyimpan nilai matriks dan eigen vektor dari alternatif
float [][] matriks;//matriks sementara untuk menampung nilai yang diinput user
data_pen [][] data_sat;
pengumpulan.hasil [] data_hasil;
Nilai y;
public MainForm() {
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
inisialisasi_tabel();//memulai membuat tabel sebagai tempat input nilai perbandingan
m_alternatif = new List<Data>();
data_sat = new MainForm.data_pen[2][];
bidang = new string[]{"Kaderisasi,",
"Syiar",
"KW",
"Akkom",
"LSO-IT"};
//
// TODO: Add constructor code after the InitializeComponent() call.
// }
void inisialisasi_tabel()
{
if (button1.Text == "Simpan Kriteria")//jika teks tombol seperti kondisi ini
{
dg.Columns.Add("C0","");//menambah 1 kolompada tabel,ada 2 parameter,nilai CO sebagai nama kolom, nilai "" sebagai headertext
dg.Rows.Insert(0,"");//menambah 1 baris pada tabel,ada 2 parameter, satu index baris, satu lagi nilai isi sel di kolom pertama di baris tersebut
dg[0,0].Value = "";//nilai dari sel [kolom ke-,baris ke-]
= 1;i<kriteria.Length+1;i++)//membuat tabel matriks dengan ukuran = jumlah kriteria
{
dg.Columns.Add("C"+i.ToString(),"");
dg.Rows.Insert(i,kriteria[i-1]);
dg[i,0].Value = kriteria[i-1];
dg[i,i].Value = "1";
}
}
else
{
dg.Columns.Add("C0","");
dg.Rows.Insert(0,"");
dg[0,0].Value = "";
for (int i
= 1;i<alternatif.Length+1;i++)//membuat tabel matriks dengan ukuran = jumlah poin alternatif
{
dg.Columns.Add("C"+i.ToString(),"");
dg.Rows.Insert(i,alternatif[i-1]);
dg[i,0].Value = alternatif[i-1];
dg[i,i].Value = "1";
}
}
}
void DgCellValidated(object sender, DataGridViewCellEv
entArgs e)//ketika suatu user mengisi suatu sel, maka sel yang merupakan perbandingan terbalik dari sel tsb akan otomatis terisi dgn nilai 1/sel
{
try{
dg[e.RowIndex,e.ColumnIndex].Value
= (1/float.Parse(dg[e.ColumnIndex,e.RowIndex].Value.ToString()
)).ToString();
}
catch{
}
void Button1Click(object sender, EventArgs e)
{
if (button1.Text == "Simpan Kriteria") {
matriks
= new float[kriteria.Length][];//membuat ukuran matriks for (int i = 0;i<kriteria.Length;i++) {
matriks[i] = new float[kriteria.Length];// membuat ukuran sub matriks
for (int j = 0;j<kriteria.Length;j++) {
matriks[i][j] = float.Parse(dg[j+1,i+1
].Value.ToString());//memindahkan nilai dari tabel ke matriks dengan iterasi sebanyak poin poin yang dibandingkan
}
}
m_kriteria
= new Data(kriteria,matriks);//membuat tempat baru bagi variable m_kriteria untuk menyimpan nilai matriks dan poin poin kriteria
dg.Rows.Clear();//membersihkan baris, agar bisa digunakan oleh alternatif
dg.Columns.Clear();//membersihkan kolom button1.Text = "Simpan Alternatif";//teks berganti
inisialisasi_tabel();//lakukan kembali inisialisasi
}
else if (button1.Text == "Simpan Alternatif") {
matriks
= new float[alternatif.Length][];//hampir sama, yang ini untuk menyimapn alternatif
for (int i = 0;i<alternatif.Length;i++) {
for (int j = 0;j<alternatif.Length;j++) {
matriks[i][j] = float.Parse(dg[j+1,i+1
].Value.ToString());
}
}
for (int i = 0;i<kriteria.Length;i++) {
m_alternatif.Add(new Data(alternatif,matri
ks));
}
button1.Text = "Selesai";
}
else if (button1.Text == "Selesai") {
pengumpulan x
= new pengumpulan(m_kriteria,m_alternatif);//membuat form untuk mengumpulkan data
x.ShowDialog();//menampilkannya
data_hasil = x.da;//variabel yang menyimpan data data calon
y
= new Nilai(data_hasil,m_kriteria,m_alternatif);//membuat form hasil menampilkan hasil dari peritungan AHP
y.ShowDialog();//menampilkannya. dg.Rows.Clear();
dg.Columns.Clear();
//dg.Rows.Add();
dg.Columns.Add("C","Nama/Bidang");
for (int i = 0;i<5;i++) {
dg.Rows.Insert(i,data_hasil[(y.kandidat[i]
.index/2)-1].nama);
dg.Columns.Add("C",bidang[i]);
}
data_sat[0] = new data_pen[5];
button1.Text = "Tahap 2";
dg.CellValidated -= DgCellValidated;
else if (button1.Text == "Tahap 2") {
for (int i = 0;i<5;i++) {
data_sat[0][i].nama =
dg[0,i].Value.ToString();
data_sat[0][i].index = 0;
data_sat[0][i].free = true;
data_sat[0][i].prio = new List<sbyte>();
int max;
for (int j = 0;j<5;j++) {
max = 4-j;
for (int k = 0;k<5;k++) {
if (sbyte.Parse(dg[k+1,i].Value.To String()) == (sbyte)max)
{
data_sat[0][i].prio.Add((sbyte
)k);
break;
}
}
}
}
dg.Rows.Clear();
dg.Columns.Clear();
dg.Columns.Add("C","Bidang/Nama");
for (int i = 0;i<5;i++) {
dg.Columns.Add("C",data_hasil[(y.kandidat[
i].index/2)-1].nama);
dg.Rows.Insert(i,bidang[i]);
}
data_sat[1] = new data_pen[5];
button1.Text = "Proses...";
}
{
for (int i = 0;i<5;i++) {
data_sat[1][i].nama =
dg[0,i].Value.ToString();
data_sat[1][i].index = 0;
data_sat[1][i].free = true;
data_sat[1][i].prio = new List<sbyte>();
int max;
for (int j = 0;j<5;j++) {
max = 5-j;
for (int k = 0;k<5;k++) {
if (sbyte.Parse(dg[k+1,i].Value.To String()) == (sbyte)max)
{
data_sat[1][i].prio.Add((sbyte
)k);
break;
}
}
}
}
gale_shapley();
}
}
public struct data_pen {
public string nama { get; set; } public List<sbyte> prio { get; set; } public sbyte index { get; set; } public bool free { get; set; } }
sbyte ind = 0;
void gale_shapley()
{
{
if (data_sat[1][data_sat[0][ind].prio[data_sat [0][ind].index]].free)
{
data_sat[1][data_sat[0][ind].prio[data_sat
[0][ind].index]].index = ind;
data_sat[1][data_sat[0][ind].prio[data_sat
[0][ind].index]].free = false;
data_sat[0][ind].free = false;
}
else
{
for (int i = 0;i<5;i++) {
if (data_sat[1][data_sat[0][ind].prio[ data_sat[0][ind].index]].prio[i] == ind)
{
data_sat[1][data_sat[0][ind].prio[
data_sat[0][ind].index]].index = ind;
data_sat[0][ind].free = false;
break;
}
else if (data_sat[1][data_sat[0][ind]. prio[data_sat[0][ind].index]].prio[i] ==
data_sat[1][data_sat[0][ind].prio[data_sat[0][ind].index]].ind
ex)
break;
}
}
data_sat[0][ind].index++;
MessageBox.Show(data_sat[1][data_sat[0][ind].p
rio[data_sat[0][ind].index]].index.ToString()+" :
"+data_sat[0][data_sat[1][data_sat[0][ind].prio[data_sat[0][in
d].index]].index].nama);
}
dg.Columns.Clear();
dg.Rows.Clear();
dg.Columns.Add("C","Kandidat");
for (int i = 0;i<5;i++) {
dg.Rows.Add();
dg[0,i].Value = data_sat[1][i].nama;
dg[1,i].Value =
data_sat[0][data_sat[1][i].index].nama;
}
}
bool t_hab()
{
for (int i = 0;i<5;i++) {
if (data_sat[0][i].free == true) {
ind = (sbyte)i;
return true;
}
}
return false;
}
}
}
2.
Pengumpulan.cs
/** Created by SharpDevelop. * User: asus
* Date: 7/21/2014 * Time: 6:10 PM *
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Drawing;
using System.Collections.Generic;
using System.Threading;
namespace AHPTest
{
/// <summary>
/// Description of pengumpulan.
/// </summary>
public partial class pengumpulan : Form {
Data krit;
List<Data>alternatif;
int count = 1;
public hasil [] da;
public pengumpulan(Data krit,List<Data>alternatif) {
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
this.krit = krit;
this.alternatif = alternatif;
generate();
//
// TODO: Add constructor code after the InitializeComponent() call.
// }
void generate()
{
DataGridViewComboBoxColumn x1;
dg.Columns.Insert(0,new DataGridViewTextBoxColumn(
));
dg.Columns[0].HeaderText = "No.";
dg.Columns.Insert(1,new DataGridViewTextBoxColumn(
));
dg.Columns[1].HeaderText = "Nama Kandidat";
x1 = new DataGridViewComboBoxColumn();
x1.DataSource = alternatif[i-2].keterangan;
x1.FlatStyle = FlatStyle.Flat;
x1.HeaderText = krit.keterangan[i-2];
dg.Columns.Insert(i,x1);
//dg.Rows.Add(); }
/*x1 = new DataGridViewComboBoxColumn(); x1.DataSource = alternatif[alternatif.Count-1].keterangan;
x1.FlatStyle = FlatStyle.Flat; x1.HeaderText =
krit[0].keterangan[krit[0].keterangan.Length-1];
dg.Columns.Insert(alternatif.Count+1,x1);*/ /*string [] bidang = new
string[]{"Kaderisasi","Syiar","Kewirausahaan","Akkom","LSO-IT"};
string [] nomor = new string[]{"1","2","3","4","5"}; for (int i = 1;i<6;i++) {
x1 = new DataGridViewComboBoxColumn(); x1.DataSource = nomor;
x1.FlatStyle = FlatStyle.Flat; x1.HeaderText = bidang[i-1];
dg.Columns.Insert(alternatif.Count+i+1,x1); }*/
/*for (int i = 2;i<alternatif.Count+7;i++) {
dg.Columns[i].Width = 1107/(alternatif.Count+6);
}
dg.Columns[0].Width = 40; dg.Columns[1].Width = (2*(1107/(alternatif.Count+6)))-40;*/ dg.Rows.Add();
dg.Rows[0].Cells[0].Value = "1";
void Button1Click(object sender, EventArgs e)
{
count++;
dg.Rows.Add();
dg.Rows[count-1].Cells[0].Value =
count.ToString();
}
public struct hasil {
public string nama { get; set; } public int [] nilai_p { get; set; } /*public string [] minat { get; set; } public bool habis { get; set; }
public bool free { get; set; } public int index { get; set; }*/ }
void Button2Click(object sender, EventArgs e)
{
DataGridViewComboBoxCell x1;
//float jumlah = 0f; da = new hasil[count];
for (int i = 0;i<count;i++) {
da[i].nilai_p
= new int[krit.keterangan.Length];
da[i].nama =
dg.Rows[i].Cells[1].Value.ToString();
for (int j = 2;j<alternatif.Count+2;j++) {
x1 = (DataGridViewComboBoxCell)dg[j,i];
da[i].nilai_p[j-2] =
x1.Items.IndexOf(dg[j,i].Value.ToString());
//MessageBox.Show(j.ToString());
}
/*da[i].minat = new string [] {dg[alternatif.Count+2,i].Value.ToString(),
dg[alternatif. Count+3,i].Value.ToString(),
dg[alternatif. Count+4,i].Value.ToString(),
dg[alternatif. Count+5,i].Value.ToString(),
dg[alternatif. Count+6,i].Value.ToString()};
//MessageBox.Show(i.ToString()); da[i].index = 0;
da[i].free = true; da[i].habis = false;
pb1.Value = (100*(i+1))/count; Thread.Sleep(300);*/
}
}
}
}
3.
Nilai.cs
/** Created by SharpDevelop. * User: asus
* Date: 7/23/2014 * Time: 6:04 PM *
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
namespace AHPTest
/// <summary>
/// Description of Nilai.
/// </summary>
public partial class Nilai : Form {
pengumpulan.hasil [] data_hasil;
Data m_krit;
List<Data> m_altern;
public juara [] kandidat;
public Nilai(pengumpulan.hasil [] data_hasil,Data m_krit,List<Data> m_altern)
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
this.data_hasil = data_hasil;
this.m_krit = m_krit;
this.m_altern = m_altern;
inisialisasi_tabel2();
//
// TODO: Add constructor code after the InitializeComponent() call.
// }
void inisialisasi_tabel()
{
dg.Columns.Add("C0","Nama Kandidat");
int hitung = 0;
while (hitung < m_krit.keterangan.Length) {
dg.Columns.Add("C"+(hitung+1).ToString(),"Nila
i Alt"/*m_krit.keterangan[hitung]*/);
dg.Columns.Add("C"+(hitung+2).ToString(),"Nila
i Alt");
hitung++;
}
int hitung1;
int bantu ;
for (int i = 0;i<data_hasil.Length;i++) {
dg.Rows.Add();
dg[0,i].Value = data_hasil[i].nama;
hitung1 = 0;
bantu = 1;
while (hitung1 < hitung) {
dg[bantu++,i].Value =
m_krit.prioritas[hitung1].ToString("N4");
dg[bantu++,i].Value =
m_altern[hitung1].prioritas[data_hasil[i].nilai_p[hitung1]].To
String("N4");
//MessageBox.Show(bantu.ToString()); hitung1++;
}
}
}
void inisialisasi_tabel2()
{
dg.Columns.Add("C0","Peserta");
dg.Columns[0].Width = 120;
dg.Columns.Add("C1","");
dg.Rows.Insert(0,"");
dg[0,0].Value = "Kriteria";
dg[1,0].Value = "Eigen Vector(e)";
for (int i =1;i<m_krit.keterangan.Length+1;i++) {
dg.Rows.Insert(i,m_krit.keterangan[i-1]);
dg[1,i].Value =
(m_krit.prioritas[i-1]*100f).ToString("N4");
}
dg.Rows.Insert(m_krit.keterangan.Length+1, "Total"
);
int k = 0;
float jlh;
while (k<data_hasil.Length) {
jlh = 0;
dg.Columns.Add("C",data_hasil[k].nama);
dg.Columns.Add("C","");
bantu+=2;
dg[bantu-1,0].Value = "Nilai Peserta(n)";
dg[bantu,0].Value = "e x n";
dg.Columns[bantu].DefaultCellStyle.Alignment =
DataGridViewContentAlignment.MiddleRight;
dg.Columns[bantu].Width = 50;
for (int j
= 1;j<m_krit.keterangan.Length+1;j++)
{
dg[bantu-1,j].Value =
(m_altern[j-1].prioritas[data_hasil[k].nilai_p[j-1
]]/m_altern[j-1].prioritas[0]).ToString("N4");
dg[bantu,j].Value =
((m_altern[j-1].prioritas[data_hasil[k].nilai_p[j-1
]]/m_altern[j-1].prioritas[0])*m_krit.prioritas[j-1]*100f).ToString("N2");
jlh += float.Parse(dg[bantu,j].Value.ToStr
ing());
}
if (k%2 == 0) {
dg.Columns[bantu-1].DefaultCellStyle.BackColor = Color.Gray;
dg.Columns[bantu].DefaultCellStyle.BackCol
or = Color.Gray;
}
else
{
dg.Columns[bantu-1].DefaultCellStyle.BackColor = Color.White;
dg.Columns[bantu].DefaultCellStyle.BackCol
or = Color.White;
dg[bantu,6].Value = jlh.ToString();
k++;
}
kandidat = new juara[5];
for (int i =0;i<5;i++) {
kandidat[i].index = 0;
kandidat[i].jumlah = 0f;
for (int j = 3;j<bantu+2;j+=2) if (i == 0)
{
if (float.Parse(dg[j,6].Value.ToString()) > kandidat[i].jumlah)
{
kandidat[i].jumlah
= float.Parse(dg[j,6].Value.ToString());
kandidat[i].index = (sbyte)j;
}
}
else
{
if ((float.Parse(dg[j,6].Value.ToString()) > kandidat[i].jumlah) && (float.Parse(dg[j,6].Value.ToString()
) <= kandidat[i-1].jumlah) && (sbyte)j !=
kandidat[i-1].index )
{
kandidat[i].jumlah
= float.Parse(dg[j,6].Value.ToString());
kandidat[i].index = (sbyte)j;
}
}
}
//MessageBox.Show(juara[4].ToString());
dg.Columns[kandidat[0].index].DefaultCellStyle.Bac
kColor = Color.DarkOrange;
].index-1].DefaultCellStyle.BackColor = Color.DarkOrange;
dg.Columns[kandidat[1].index].DefaultCellStyle.Bac
kColor = Color.DodgerBlue;
dg.Columns[kandidat[1
].index-1].DefaultCellStyle.BackColor = Color.DodgerBlue;
dg.Columns[kandidat[2].index].DefaultCellStyle.Bac
kColor = Color.DarkGray;
dg.Columns[kandidat[2
].index-1].DefaultCellStyle.BackColor = Color.DarkGray;
dg.Columns[kandidat[3].index].DefaultCellStyle.Bac
kColor = Color.DarkOrchid;
dg.Columns[kandidat[3
].index-1].DefaultCellStyle.BackColor = Color.DarkOrchid;
dg.Columns[kandidat[4].index].DefaultCellStyle.Bac
kColor = Color.DarkOliveGreen;
dg.Columns[kandidat[4
].index-1].DefaultCellStyle.BackColor = Color.DarkOliveGreen;
}
public struct juara {
public sbyte index; public float jumlah; }
}
}
4.
Data.cs
/** Created by SharpDevelop. * User: asus
* Date: 7/23/2014 * Time: 5:39 PM *
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
namespace AHPTest
{
/// <summary>
/// Inilah variabel yang menyimpan nilai matriks, serta
memunyai fungsi untuk memrosesnya dengan algoritma AHP. /// </summary>
public class Data {
public string [] keterangan;//variabel penyimpan bacaan keterangan
float [][] matriks;//variabel penympan matriks float [] kolom;//untuk menyimpan nilai setiap kolom public float [] prioritas;//menyiman nilai eigenvektor yang merupakan nilai prioritas
float [][] temp;//matriks pembantu mencari nilai cr public float CR;//variabel nilai inkonsistensi
public Data(string [] keterangan, float [][] matriks) {
this.keterangan = keterangan;//memindahkan nilai yang ada di parameter keterangan ke variabel keterangan form ini (nilai parameter ini adalah nilai dari form sebelumnya) this.matriks = matriks;//memindahkan nilai yang ada di parameter matriks ke matriks keterangan form ini kolom = new float[keterangan.Length];//membuat tempat nilai yang bisa ditampung kolom sepanjang jumlah poin-poin
prioritas = new float[keterangan.Length];//membuat tempat nilai bagi eigen vektor
temp = new float[keterangan.Length][];
for (int i= 0;i<keterangan.Length;i++) {
temp[i] = new float[keterangan.Length];
}
proses();
void proses()//algoritma AHP {
float jlh = 0f,eigen = 0f;//jlh sebagai penampung nilai setiap baris, eigen disini bukan eigen vektor, tapi eigen value
for (int i = 0;i<kolom.Length;i++)//proses untuk mencari jumlah nilai setiap kolom
{
for (int j =0;j<kolom.Length;j++) {
kolom[i] += float.Parse(matriks[j][i].ToSt
ring("N4"));
}
}
for (int i = 0;i<kolom.Length;i++)//proses membagi nilai setiap sel dengan jumlah nilai kolom yang bersesuaian {
for (int j =0;j<kolom.Length;j++) {
temp[j][i] = float.Parse((float.Parse((mat
riks[j][i]).ToString("N4")) / kolom[i]).ToString("N4"));
}
}
for (int i = 0;i<kolom.Length;i++)//proses untuk mencari jumlah nilai setiap baris
{
for (int j =0;j<kolom.Length;j++) {
jlh += temp[i][j];
}
prioritas[i] = float.Parse((jlh/(float)kolom.L
ength).ToString("N4"));//Nilai eigen vektor dari suatu poin = nilai jumlah baris dari poin yang bersangkutan/banyaknya poin-poin
kolom[i] = 0f;
}
for (int i = 0;i<kolom.Length;i++) {
for (int j =0;j<kolom.Length;j++) {
temp[j][i] = float.Parse ((matriks[j][i] *
prioritas[i]).ToString("N4"));
}
}
for (int i = 0;i<kolom.Length;i++) {
for (int j =0;j<kolom.Length;j++) {
kolom[i] += temp[i][j];
}
kolom[i] /= prioritas[i];
}
for (int i = 0;i<kolom.Length;i++) {
jlh += kolom[i];
}
eigen = jlh/(float)kolom.Length;
float CI =
(eigen-(float)kolom.Length)/(float)kolom.Length;
float RC = 0f;
if ((float)kolom.Length == 4f) RC = 0.9f;
else
RC = 1.12f;
CR = (CI/RC)*100f;
//MessageBox.Show("CR =
"+CR.ToString()+"%",prioritas[0].ToString("N4"));
//MessageBox.Show((prioritas[0]).ToString("N4")+": "+(prioritas[1]).ToString("N4")+":"+(prioritas[2]).ToString("N 4")+":"+(prioritas[3]).ToString("N4"));
}
}