|
Новичок
Регистрация: 21.05.2009
Сообщений: 1
Провел на форуме: 4897
Репутация:
0
|
|
помоги пожалуйсто с лабораторной работой,вот задание:
1) Написать программу вычисления коэффициента конкордации ранжирования параметров для произвольного количества объектов, параметров и экспертов.
2) Выбрать предметную область изучения, объекты изучения и разработать список характеризуемых параметров. Произвести опрос 5 человек и получить:
• Ранжированную таблицу параметров (цифровой ранг от наименее значимый параметр до наиболее значимый).
• Таблицу экспертных оценок значений параметров.
• Коэффициент конкордации ранжирования параметров.
• Предпочтительный вариант для каждого из экспертов.
3) Привести не менее 3 тестов для различного количества экспертов и вариантов ранжирования.
4) Сделать выводы о влиянии на результаты экспертизы количественного и качественного состава экспертов.
есть готовая работа написанная на си шарпе,если можно то просто измените код программы,т.к. работу эту уже сдали и как бы чтобы не повторялось,нужно изменить код написания программы...вот сам листинг:
public partial class Form1 : Form
{ public List<string> ObjectName = new List<string>();
ObjectViewer ob;
int cnt_exp;
private float[,] values = null;
public Form1()
{ InitializeComponent();
}
private void btnAddObject_Click(object sender, EventArgs e)
{ if (tbxObjectName.Text == "")
return;
ObjectName.Add(tbxObjectName.Text);
if (comboBox1.Items.Count == 0)
{ comboBox1.Items.Add("выбрать все");
}
comboBox1.Items.Add(tbxObjectName.Text);
// MessageBox.Show("Объект добавлен");
tbxObjectName.Text = "";
}
private void btnSubjectListView_Click(object sender, EventArgs e)
{ ob = new ObjectViewer();
for (int i = 0; i < ObjectName.Count; i++)
{
Label l = new Label();
l.Parent = ob;
l.Location = new System.Drawing.Point( 1, 1+i*25);
l.Name = "lblObjectItem"+i.ToString();
l.Text = "объект";
TextBox tbx = new TextBox();
tbx.Parent = ob;
tbx.Location = new System.Drawing.Point(100, 1 + i * 25);
tbx.Name = "tbxObjectItem" + i.ToString();
tbx.Text = ObjectName[i];
}
ob.ShowDialog(); }
private void btnRnnTest_Click(object sender, EventArgs e)
{ if (dataGridView1.Rows.Count > 0)
{while (dataGridView1.Rows.Count>0)
{ dataGridView1.Rows.RemoveAt(0);
}
}
if (dataGridView1.Columns.Count > 2)
{while (dataGridView1.Columns.Count > 2)
{dataGridView1.Columns.RemoveAt(2);
}
}if (tbxSubjectName.Text == "")
{MessageBox.Show(this, "название предметной области не может быть пустым!", "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
if (ObjectName.Count == 0)
{MessageBox.Show(this, "Список объктов пуст, добавьте хотя бы один объект!", "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
} if (textBox1.Text == "")
{MessageBox.Show(this, "Введите число экспертов!", "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
} try
{
cnt_exp = int.Parse(textBox1.Text);
}
catch
{
MessageBox.Show(this, "Не корректно введено число экспертов!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
// добавляем столбцы
for (int i = 0; i<cnt_exp; i++)
dataGridView1.Columns.Add("user"+i.ToString(),"э сперт"+i.ToString());
for (int i = 0; i < ObjectName.Count; i++)
{
dataGridView1.Rows.Add(new string[] { ObjectName[i], (i+1).ToString()});
} dataGridView1.Enabled = true;
dataGridView1.Visible = true;
}
private void button1_Click(object sender, EventArgs e)
{
int index = comboBox1.SelectedIndex;
if (index < 0)
return;
if ( index == 0) // удаляем все
{
ObjectName.RemoveAll(EndsWithSaurus);
comboBox1.Items.Clear();
return;
}
ObjectName.RemoveAt(index-1);
comboBox1.Items.RemoveAt(index-1);
}
private static bool EndsWithSaurus(String s)
{
return true;
}
private float isSetVal(float value, int rows, int colums)
{
float val_count = 0;
for (int i=0; i<rows; i++)
{
if (values[i, colums] == value)
{
val_count++;
}
}
return val_count;
}
private void button2_Click(object sender, EventArgs e)
{
if (!dataGridView1.Visible)
return;
if (dataGridView1.Columns.Count > 2 + cnt_exp)
{
while (dataGridView1.Columns.Count > 2 + cnt_exp)
{
dataGridView1.Columns.RemoveAt(2 + cnt_exp);
}
}
values = new float[dataGridView1.Rows.Count, cnt_exp + 3];
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
for (int j = 2, c = 0; c < cnt_exp; j++, c++)
{
if (dataGridView1.Rows[i].Cells[j].Value == null)
{
MessageBox.Show(this, "не корректно введены данные!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
string buf = dataGridView1.Rows[i].Cells[j].Value.ToString();
if (buf == "")
{
MessageBox.Show(this, "не корректно введены данные!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
int val;
try
{
val = int.Parse(buf);
}
catch
{MessageBox.Show(this, "не корректно введены данные!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
} if (val < 1 || val > ObjectName.Count)
{ MessageBox.Show(this, "не корректно введены данные! Недопустимое значение", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
} values[i, c] = val;
}
}
// считаем сумму рангов для каждого эксперта
dataGridView1.Columns.Add("summ_rang", "Сумма рангов");
float rang_sum_all_expert = 0; // Оцениваем среднеарифметическое число рангов
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
float rang_sum = 0;
for (int j = 0; j < cnt_exp; j++)
{
rang_sum += values[i, j];
}
values[i, cnt_exp] = rang_sum;
dataGridView1.Rows[i].Cells[dataGridView1.Columns.Count - 1].Value = (values[i, cnt_exp] as object);
rang_sum_all_expert += rang_sum;
}
float srednee_rang = rang_sum_all_expert / dataGridView1.Rows.Count; // Отклонение от среднего
dataGridView1.Columns.Add("rang", "Ранжировка");
dataGridView1.Columns.Add("otkl_sred", "Отклонение от среднего");
dataGridView1.Columns.Add("otkl_sred_kvadrat", "Квадрат отклонения");
float kvadrat_summ = 0;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
values[i, cnt_exp + 1] = values[i, cnt_exp] - srednee_rang;
values[i, cnt_exp + 2] = values[i, cnt_exp + 1] * values[i, cnt_exp + 1];
kvadrat_summ += values[i, cnt_exp + 2];
dataGridView1.Rows[i].Cells[dataGridView1.Columns.Count - 3].Value = ((float)values[i, cnt_exp] / (float)rang_sum_all_expert as object);
dataGridView1.Rows[i].Cells[dataGridView1.Columns.Count - 2].Value = (values[i, cnt_exp + 1] as object);
dataGridView1.Rows[i].Cells[dataGridView1.Columns.Count - 1].Value = (values[i, cnt_exp + 2] as object);
}
//Определяем величину коэффициента конкордации:
float konkord_kof;
/*
* для определения связанных рангов
*/
List<float> val_list = new List<float>();
float T = 0;
for (int j = 0; j < cnt_exp; j++)
{
int group_count = 0;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
float val_cnt = isSetVal(values[i, j], i, j);
if (val_cnt == 1)
{
group_count++;
val_list.Add(values[i, j]);
}
}
/// подчет Tj – показатель связных рангов
///
for (int t = 0; t < group_count; t++)
{
float h = isSetVal(val_list[t], dataGridView1.Rows.Count, j);
T += (h*h*h-h);
}
val_list.Clear();
}
if (T>0) // определяем есть ли связанные ранги
{
konkord_kof = 12 * (float)kvadrat_summ / ((float) cnt_exp * (float)cnt_exp * ((float)dataGridView1.Rows.Count * (float) dataGridView1.Rows.Count * (float) dataGridView1.Rows.Count - (float) dataGridView1.Rows.Count) - (float) cnt_exp * (float) T);
}
else
konkord_kof = 12 * (float) kvadrat_summ / ((float) cnt_exp * (float) cnt_exp * ( (float) dataGridView1.Rows.Count * (float) dataGridView1.Rows.Count * (float) dataGridView1.Rows.Count - (float) dataGridView1.Rows.Count));
textBox2.Text = konkord_kof.ToString(); } }
|