Разработка программного продукта, выполняющего расчёт комплексных оценок для сотрудников высшего учебного заведения
Разработка подсистемы формирования комплексной оценки в системе мониторинга наукометрических показателей работников высшего учебного заведения. Виды и методы шкалирования. Исследование существующих математических моделей построения комплексных оценок.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 10.11.2012 |
Размер файла | 3,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
this.personsTableAdapter.Fill(this.khAIDataSet41.Persons);
// TODO: данная строка кода позволяет загрузить данные в таблицу "khAIDataSet4.ЗапросИзЗапросов". При необходимости она может быть перемещена или удалена.
this.запросИзЗапросовTableAdapter2.Fill(this.khAIDataSet4.ЗапросИзЗапросов);
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
Data.Add(new List<double>());
personAss.Add(new List<string>());
personAss[i].Add(dataGridView1[0, i].Value.ToString());
for (int j = 1; j < dataGridView1.ColumnCount; j++)
{
if (dataGridView1[j, i].Value.ToString() == "")
Data[i].Add(0);
else
Data[i].Add(Convert.ToDouble(dataGridView1[j, i].Value));
}
}
for (int j = 1; j < dataGridView1.ColumnCount; j++)
{
NoDegree.Add(new List<double>());
Doctor.Add(new List<double>());
Kand.Add(new List<double>());
}
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
if (dataGridView2[1, i].Value.ToString() == "")
{
for (int j = 1; j < dataGridView1.ColumnCount; j++)
{
if (dataGridView1[j, i].Value.ToString() == "")
{
NoDegree[j - 1].Add(0);
}
else
{
NoDegree[j - 1].Add(Convert.ToDouble(dataGridView1[j, i].Value));
}
}
}
else
{
if (dataGridView2[1, i].Value.ToString() == "6")
{
for (int j = 1; j < dataGridView1.ColumnCount; j++)
{
if (dataGridView1[j, i].Value.ToString() == "")
{
Kand[j - 1].Add(0);
}
else
{
Kand[j - 1].Add(Convert.ToDouble(dataGridView1[j, i].Value));
}
}
}
else
{
if (dataGridView2[1, i].Value.ToString() == "1")
{
for (int j = 1; j < dataGridView1.ColumnCount; j++)
{
if (dataGridView1[j, i].Value.ToString() == "")
{
Doctor[j - 1].Add(0);
}
else
{
Doctor[j - 1].Add(Convert.ToDouble(dataGridView1[j, i].Value));
}
}
} } }
}
}
public List<List<double>> Doctor=new List<List<double>>();
public List<List<double>> Kand=new List<List<double>>();
public List<List<double>> NoDegree = new List<List<double>>();
public List<List<double>> Data = new List<List<double>>();
public List<double> person;
public List<List<string>> personAss = new List<List<string>>();
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
private void fillByToolStripButton1_Click(object sender, EventArgs e)
{
textBox1.Visible = true;
label2.Visible = true;
try
{ this.запросИзЗапросовTableAdapter2.FillBy(this.khAIDataSet4.ЗапросИзЗапросов, comboBox1.SelectedText);
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
person = new List<double>();
for (int i = 1; i < dataGridView1.ColumnCount; i++)
{
if (dataGridView1[i, 0].Value.ToString() == "")
person.Add(0);
else
person.Add(Convert.ToDouble(dataGridView1[i, 0].Value));
}
try
{
this.звание_СтепеньTableAdapter1.FillBy(this.khAIDataSet5.Звание_Степень, comboBox1.SelectedText);
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
double f = 0;
if (dataGridView2[1, 0].Value.ToString() == "1")
{
f = Factor(Doctor, person);
}
else
{
if (dataGridView2[1, 0].Value.ToString() == "6")
{
f = Factor(Kand, person);
}
else
{
if (dataGridView2[1, 0].Value.ToString() == "")
{
f = Factor(NoDegree, person);
}
}
}
textBox1.Text = f.ToString();
int ind = 0;
for (int i = 0; i < personAss.Count; i++)
{
if (personAss[i].Contains(dataGridView1[0, 0].Value.ToString()))
ind = i;
}
personAss[ind].Add(f.ToString());
}
public double Factor(List<double> person)
{
double f = person[0];
for (int i = 1; i < person.Count; i++)
f += person[i];
return f;
}
public double Factor(List<List<double>> degree, List<double> person)
{
double f = 0;
for (int i = 0; i < person.Count; i++)
{
if (degree[i].Max() == 0)
f += degree[i].Max();
else
f += person[i] / degree[i].Max();
}
return f;
} }
}
FormКафедра.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ZedGraph;
namespace Assessment
{
public partial class FormКафедра : Form
{
public FormКафедра()
{
InitializeComponent();
}
private void FormКафедра_Load(object sender, EventArgs e)
{
// TODO: данная строка кода позволяет загрузить данные в таблицу "номерКаф_Степень._НомерКаф_Степень". При необходимости она может быть перемещена или удалена.
this.номерКаф_СтепеньTableAdapter.Fill(this.номерКаф_Степень._НомерКаф_Степень);
// TODO: данная строка кода позволяет загрузить данные в таблицу "тНомерКафедры.ЗапросНомерКафедры". При необходимости она может быть перемещена или удалена.
this.запросНомерКафедрыTableAdapter2.Fill(this.тНомерКафедры.ЗапросНомерКафедры);
// TODO: данная строка кода позволяет загрузить данные в таблицу "номерКафедры.ЗапросНомерКафедры". При необходимости она может быть перемещена или удалена.
this.запросНомерКафедрыTableAdapter1.Fill(this.номерКафедры.ЗапросНомерКафедры);
// TODO: данная строка кода позволяет загрузить данные в таблицу "запросИзЗапросов._ЗапросИзЗапросов". При необходимости она может быть перемещена или удалена. this.запросИзЗапросовTableAdapter.Fill(this.запросИзЗапросов._ЗапросИзЗапросов);
// TODO: данная строка кода позволяет загрузить данные в таблицу "khAI1DataSet.ЗапросНомерКафедры". При необходимости она может быть перемещена или удалена.
this.запросНомерКафедрыTableAdapter.Fill(this.khAI1DataSet.ЗапросНомерКафедры);
// TODO: данная строка кода позволяет загрузить данные в таблицу "khAIDataSet.SienceUnits". При необходимости она может быть перемещена или удалена.
this.sienceUnitsTableAdapter.Fill(this.khAIDataSet.SienceUnits);
dataGridView1.RowCount = 4;
dataGridView1[0, 0].Value = "Без степени";
dataGridView1[0, 1].Value = "Степень Кандидат наук";
dataGridView1[0, 2].Value = "Степень Доктор наук";
dataGridView1[0, 3].Value = "Всего";
}
public List<List<double>> Doctor;
public List<List<double>> Kand;
public List<List<double>> NoDegree;
public List<List<double>> Data;
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
private void fillByToolStripButton_Click(object sender, EventArgs e)
{
try
{
this.запросНомерКафедрыTableAdapter2.зтНомерКафедры(this.тНомерКафедры.ЗапросНомерКафедры, new System.Nullable<int>(((int)(System.Convert.ChangeType(comboBox1.SelectedText, typeof(int))))));
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
try
{
this.номерКаф_СтепеньTableAdapter.НомерКаф_Степень(this.номерКаф_Степень._НомерКаф_Степень, new System.Nullable<int>(((int)(System.Convert.ChangeType(comboBox1.SelectedText, typeof(int))))));
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
Doctor = new List<List<double>>();
Kand = new List<List<double>>();
NoDegree = new List<List<double>>();
Data = new List<List<double>>();
for (int i = 0; i < dataGridView2.RowCount - 1; i++)
{
Data.Add(new List<double>());
for (int j = 3; j < dataGridView2.ColumnCount; j++)
{
if (dataGridView2[j, i].Value.ToString() == "")
Data[i].Add(0);
else
Data[i].Add(Convert.ToDouble(dataGridView2[j, i].Value));
}
}
for (int j = 3; j < dataGridView2.ColumnCount; j++)
{
NoDegree.Add(new List<double>());
Doctor.Add(new List<double>());
Kand.Add(new List<double>());
}
for (int i = 0; i < dataGridView2.RowCount - 1; i++)
{
if (dataGridView3[1, i].Value.ToString() == "")
{
for (int j = 3; j < dataGridView2.ColumnCount; j++)
{
if (dataGridView2[j, i].Value.ToString() == "")
{
NoDegree[j - 3].Add(0);
}
else
{
NoDegree[j - 3].Add(Convert.ToDouble(dataGridView2[j, i].Value));
}
}
}
else
{
if (dataGridView3[1, i].Value.ToString() == "6")
{
for (int j = 3; j < dataGridView2.ColumnCount; j++)
{
if (dataGridView2[j, i].Value.ToString() == "")
{
Kand[j - 3].Add(0);
}
else
{
Kand[j - 3].Add(Convert.ToDouble(dataGridView2[j, i].Value));
}
}
}
else
{
if (dataGridView3[1, i].Value.ToString() == "1")
{
for (int j = 3; j < dataGridView2.ColumnCount; j++)
{
if (dataGridView2[j, i].Value.ToString() == "")
{
Doctor[j - 3].Add(0);
}
else
{
Doctor[j - 3].Add(Convert.ToDouble(dataGridView2[j, i].Value));
}
}
}
}
}
}
if (NoDegree.Count == 0)
dataGridView1[1, 0].Value = 0;
else
dataGridView1[1, 0].Value = NoDegree[0].Count;
if (Kand.Count == 0)
dataGridView1[1, 1].Value = 0;
else
dataGridView1[1, 1].Value = Kand[0].Count;
if (Doctor.Count == 0)
dataGridView1[1, 2].Value = 0;
else
dataGridView1[1, 2].Value = Doctor[0].Count;
dataGridView1[1, 3].Value = Data.Count;
}
}
}
FormFactor.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Assessment
{
public partial class FormFactor : Form
{
public FormFactor()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
private void FormFactor_Load(object sender, EventArgs e)
{
// TODO: данная строка кода позволяет загрузить данные в таблицу "степень.Звание_Степень". При необходимости она может быть перемещена или удалена.
this.звание_СтепеньTableAdapter.Fill(this.степень.Звание_Степень);
// TODO: данная строка кода позволяет загрузить данные в таблицу "запросИзЗапросов._ЗапросИзЗапросов". При необходимости она может быть перемещена или удалена.
this.запросИзЗапросовTableAdapter.Fill(this.запросИзЗапросов._ЗапросИзЗапросов);
dataGridView1.RowCount = 4;
dataGridView1[0, 0].Value = "Общее количество";
dataGridView1[0, 1].Value = "Без степени";
dataGridView1[0, 2].Value = "Степень Кандидат наук";
dataGridView1[0, 3].Value = "Степень Доктор наук";
for (int i = 0; i < dataGridView2.RowCount - 1; i++)
{
Data.Add(new List<double>());
for (int j = 0; j < dataGridView2.ColumnCount; j++)
{
if (dataGridView2[j, i].Value.ToString() == "")
Data[i].Add(0);
else
Data[i].Add(Convert.ToDouble(dataGridView2[j, i].Value));
}
}
for (int j = 0; j < dataGridView2.ColumnCount; j++)
{
NoDegree.Add(new List<double>());
Doctor.Add(new List<double>());
Kand.Add(new List<double>());
}
for (int i = 0; i < dataGridView2.RowCount - 1; i++)
{
if (dataGridView3[1, i].Value.ToString() == "")
{
for (int j = 0; j < dataGridView2.ColumnCount; j++)
{
if (dataGridView2[j, i].Value.ToString() == "")
{
NoDegree[j].Add(0);
}
else
{
NoDegree[j].Add(Convert.ToDouble(dataGridView2[j, i].Value));
}
}
}
else
{
if (dataGridView3[1, i].Value.ToString() == "6")
{
for (int j = 0; j < dataGridView2.ColumnCount; j++)
{
if (dataGridView2[j, i].Value.ToString() == "")
{
Kand[j].Add(0);
}
else
{
Kand[j].Add(Convert.ToDouble(dataGridView2[j, i].Value));
}
}
}
else
{
if (dataGridView3[1, i].Value.ToString() == "1")
{
for (int j = 0; j < dataGridView2.ColumnCount; j++)
{
if (dataGridView2[j, i].Value.ToString() == "")
{
Doctor[j].Add(0);
}
else
{
Doctor[j].Add(Convert.ToDouble(dataGridView2[j, i].Value));
}
}
}
}
}
}
}
public List<List<double>> Doctor = new List<List<double>>();
public List<List<double>> Kand = new List<List<double>>();
public List<List<double>> NoDegree = new List<List<double>>();
public List<List<double>> Data = new List<List<double>>();
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int x = 0;
int x1 = 0;
int x2 = 0;
int x3 = 0;
int ind = comboBox1.SelectedIndex;
for (int j = 0; j < NoDegree[ind].Count; j++)
{
if (NoDegree[ind][j] != 0)
x1 += 1;
}
dataGridView1[1, 1].Value = x1;
for (int j = 0; j < Kand[ind].Count; j++)
{
if (Kand[ind][j] != 0)
x2 += 1;
}
dataGridView1[1, 2].Value = x2;
for (int j = 0; j < Doctor[ind].Count; j++)
{
if (Doctor[ind][j] != 0)
x3 += 1;
}
x = x1 + x2 + x3;
dataGridView1[1, 3].Value = x3;
dataGridView1[1, 0].Value = x;
dataGridView1[3, 0].Value = Data.Count;
dataGridView1[3, 1].Value = NoDegree[0].Count;
dataGridView1[3, 2].Value = Kand[0].Count;
dataGridView1[3, 3].Value = Doctor[0].Count;
dataGridView1[2, 0].Value = 100.0 * Convert.ToDouble(x) / Convert.ToDouble(Data.Count);
dataGridView1[2, 1].Value = 100.0 * Convert.ToDouble(x1) / Convert.ToDouble(NoDegree[0].Count);
dataGridView1[2, 2].Value = 100.0 * Convert.ToDouble(x2) / Convert.ToDouble(Kand[0].Count);
dataGridView1[2, 3].Value = 100.0 * Convert.ToDouble(x3) / Convert.ToDouble(Doctor[0].Count);
}
}
}
FormSotrGr.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ZedGraph;
namespace Assessment
{
public partial class FormSotrGr : Form
{
public FormSotrGr()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
public List<List<double>> DataPerson = new List<List<double>>();
public List<List<double>> DataFactor = new List<List<double>>();
private void FormSotrGr_Load(object sender, EventArgs e)
{
// TODO: данная строка кода позволяет загрузить данные в таблицу "khAIDataSet4.ЗапросИзЗапросов". При необходимости она может быть перемещена или удалена.
this.запросИзЗапросовTableAdapter.Fill(this.khAIDataSet4.ЗапросИзЗапросов);
// TODO: данная строка кода позволяет загрузить данные в таблицу "khAIDataSet.Persons". При необходимости она может быть перемещена или удалена.
this.personsTableAdapter.Fill(this.khAIDataSet.Persons);
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
DataPerson.Add(new List<double>());
for (int j = 1; j < dataGridView1.ColumnCount; j++)
{
if (dataGridView1[j, i].Value.ToString() == "")
DataPerson[i].Add(0);
else
DataPerson[i].Add(Convert.ToDouble(dataGridView1[j, i].Value));
}
}
for (int j = 1; j < dataGridView1.ColumnCount; j++)
{
DataFactor.Add(new List<double>());
}
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
for (int j = 1; j < dataGridView1.ColumnCount; j++)
{
if (dataGridView1[j, i].Value.ToString() == "")
{
DataFactor[j-1].Add(0);
}
else
{
DataFactor[j-1].Add(Convert.ToDouble(dataGridView1[j, i].Value));
}
}
}
}
public double [] P(List<List<double>> Data)
{
double[] p = new double[Data.Count];
double[] x = new double[Data.Count];
double m = Data[0].Count;
for (int i = 0; i < Data.Count; i++)
for (int j = 0; j < Data[i].Count; j++)
{
if (Data[i][j] != 0)
x[i] += 1;
}
for (int i = 0; i < Data.Count; i++)
{
p[i] = x[i] / m;
}
return p;
}
public double [] Q(List<List<double>> dataPerson,List<List<double>> dataFactor)
{
int n=dataPerson.Count;
int m=dataFactor.Count;
double[] qPodg = new double[n];
double[] q0Podg = new double[n];
double[] qPerson = new double[n];
double[] pPerson = new double[n];
double[] pFactor = new double[m];
double[] qFactor = new double[m];
double[] B = new double[m];
double[] B0 = new double[m];
pPerson = P(dataPerson);
pFactor=P(dataFactor);
for (int i = 0; i < n; i++)
{
qPerson[i] = 1 - pPerson[i];
if ((pPerson[i] != 0)&&(qPerson[i] != 0))
q0Podg[i] = Math.Log(pPerson[i] / qPerson[i]);
else
q0Podg[i] = 0.0;
}
for (int j = 0; j < m; j++)
{
qFactor[j] = 1 - pFactor[j];
if ((qFactor[j] != 0)&&(pFactor[j] != 0))
B0[j] = Math.Log(qFactor[j] / pFactor[j]);
else
B0[j] = 0.0;
}
double Qsr = q0Podg[0];
double Bsr = B0[0];
for (int i = 0; i < n; i++)
Qsr += q0Podg[i];
for (int j = 0; j < m; j++)
Bsr += B0[j];
Qsr = Qsr / Convert.ToDouble(n);
Bsr = Bsr / Convert.ToDouble(m);
double Q02 = q0Podg[0] * q0Podg[0];//сумма квадратов начальных значений
double B02 = B0[0] * B0[0];
for (int i = 0; i < n; i++)
Q02 += q0Podg[i] * q0Podg[i];
for (int j = 0; j < m; j++)
B02 += B0[j] * B0[j];
double sQ = (Q02 - n * Q02) / Convert.ToDouble(n - 1);//дисперсии
double sB = (B02 - m * B02) / Convert.ToDouble(m - 1);
double alfaQ=Math.Sqrt((1+sB/2.89)/(1-sQ*sB/8.35));
double alfaB = Math.Sqrt((1 + sQ / 2.89) / (1 - sQ * sB / 8.35));
for (int i = 0; i < n; i++)
qPodg[i] = alfaQ * q0Podg[i] + Bsr;
for (int j = 0; j < m; j++)
B[j] = alfaB * B0[j] + Qsr;
return qPodg;
}
private void DrawGraph()
{
// Получим панель для рисования
GraphPane pane = zedGraphSotr.GraphPane;
if (checkBox1.Checked == false)
{
// Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
pane.CurveList.Clear();
}
Color[] _colors = new Color[] {Color.Black,
Color.Blue,
Color.Brown,
Color.Gray,
Color.Green,
Color.Indigo,
Color.Orange,
Color.Red,
Color.YellowGreen};
// Для генерации случайных точек и случайного цвета кривой
Random rnd = new Random();
Color curveColor = _colors[rnd.Next(_colors.Length)];
// Создадим список точек
PointPairList list = new PointPairList();
double xmin = -5;
double xmax = 5;
// Заполняем список точек
for (double x = xmin; x <= xmax; x += 0.5)
{
// добавим в список точку
list.Add(x, Pq(Q(DataPerson, DataFactor)[comboBox1.SelectedIndex], x));
}
string s = "Сотрудник " + comboBox1.SelectedValue.ToString();
// Создадим кривую с названием "S",
// которая будет рисоваться голубым цветом (Color.Blue),
// Опорные точки выделяться не будут (SymbolType.None)
LineItem myCurve = pane.AddCurve(s, list, curveColor, SymbolType.Circle);
pane.XAxis.Title.Text = "Трудность, B";
pane.YAxis.Title.Text = "Вероятность ,P(B)";
pane.Title.Text = "График по сотруднику ";
// Вызываем метод AxisChange (), чтобы обновить данные об осях.
// В противном случае на рисунке будет показана только часть графика,
// которая умещается в интервалы по осям, установленные по умолчанию
zedGraphSotr.AxisChange();
// Обновляем график
zedGraphSotr.Invalidate();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
DrawGraph();
}
}
}
FormFactorGr.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ZedGraph;
namespace Assessment
{
public partial class FormFactorGr : Form
{
public FormFactorGr()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Close();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
DrawGraph();
}
private double Pb(double Q, double b)
{
return (Math.Exp(1.7 * (Q - b))) / (1 + Math.Exp(1.7 * (Q - b)));
}
private void DrawGraph()
{
// Получим панель для рисования
GraphPane pane = zedGraphSotr.GraphPane;
// GraphPane pane = new GraphPane();
if (checkBox1.Checked == false)
{
// Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
pane.CurveList.Clear();
}
Color[] _colors = new Color[] {Color.Black,
Color.Blue,
Color.Brown,
Color.Gray,
Color.Green,
Color.Indigo,
Color.Orange,
Color.Red,
Color.YellowGreen};
// Для генерации случайных точек и случайного цвета кривой
Random rnd = new Random();
Color curveColor = _colors[rnd.Next(_colors.Length)];
// Создадим список точек
PointPairList list = new PointPairList();
double xmin = -5;
double xmax = 5;
// Заполняем список точек
for (double x = xmin; x <= xmax; x += 0.5)
{
// добавим в список точку
list.Add(x, Pb(x, B(DataPerson, DataFactor)[comboBox1.SelectedIndex]));
}
string s = "Показатель " + comboBox1.SelectedItem.ToString();
// Создадим кривую с названием "Sinc",
// которая будет рисоваться голубым цветом (Color.Blue),
// Опорные точки выделяться не будут (SymbolType.None)
LineItem myCurve = pane.AddCurve(s, list, curveColor, SymbolType.Circle);
pane.XAxis.Title.Text = "Подготовленность, Q";
pane.YAxis.Title.Text = "Вероятность ,P(Q)";
pane.Title.Text = "Кривая показателя";
// Вызываем метод AxisChange (), чтобы обновить данные об осях.
// В противном случае на рисунке будет показана только часть графика,
// которая умещается в интервалы по осям, установленные по умолчанию
zedGraphSotr.AxisChange();
// pane.AxisChange();
// Обновляем график
//Invalidate();
zedGraphSotr.Invalidate();
}
private double[] B0(double[] p, int M)//начальное значение подготовленности
{
double[] q = new double[M];
double[] B0 = new double[M];
for (int i = 0; i < M; i++)
{
q[i] = 1 - p[i];
B0[i] = Math.Log(p[i] / q[i]);
}
return B0;
}
private double [] Q0(double [] p,int N)//начальное значение подготовленности
{
double[] q = new double[N];
double [] Q0=new double[N];
for (int i = 0; i < N; i++)
{
q[i] = 1 - p[i];
Q0[i] = Math.Log(p[i] / q[i]);
}
return Q0;
}
private double Q0sr(int N, double [] p)//нахождение среднего значения подготовленности
{
double[] q0 = new double[N];
double sum = Q0(p, N)[0];
for (int i = 1; i < N - 1; i++)
sum += Q0(p, N)[i];
return sum / N;
}
private double B0sr(int M, double[] p)//нахождение среднего значения трудности заданий
{
double[] b0 = new double[M];
double sum = B0(p, M)[0];
for (int i = 1; i < M - 1; i++)
sum += B0(p, M)[i];
return sum / M;
}
private double Sq(double [] p,int N)//дисперсия q
{
double sumq0 = Q0(p, N)[0] * Q0(p, N)[0];
for (int i = 1; i < N - 1; i++)
sumq0 += Q0(p, N)[i] * Q0(p, N)[i];
return (sumq0 - N * Q0sr(N, p) * Q0sr(N, p)) / N - 1;
}
private double Sb(double []p,int M)//дисперсия b
{
double sumb0 = B0(p, M)[0] * B0(p, M)[0];
for (int i = 1; i < M - 1; i++)
sumb0 += Q0(p, M)[i] * Q0(p, M)[i];
return (sumb0 - M * Q0sr(M, p) * Q0sr(M, p)) / M - 1;
}
private double Aq(double [] pq,double [] pb, int N,int M)//угловой коэффициент
{
return Math.Sqrt((1 + Sb(pb, M) / 2.89) / (1 - Sq(pq, N) * Sb(pb, M) / 8.35));
}
private double Ab(double[] pq, double[] pb, int N, int M)//угловой коэффициент
{
return Math.Sqrt((1 + Sq(pq, N) / 2.89) / (1 - Sq(pq, N) * Sb(pb, M) / 8.35));
}
private double[] Q(double[] pq, double[] pb, int N, int M)//окончательные значения параметра Q
{
double[] Q = new double[N];
for (int i = 0; i < N; i++)
Q[i] = Aq(pq, pb, N, M) * Q0(pq, N)[i] + B0sr(M, pb);
return Q;
}
private double[] B(double[] pq, double[] pb, int N, int M)//окончательные значения параметра B
{
double[] B = new double[M];
for (int i = 0; i < M; i++)
B[i] = Ab(pq, pb, N, M) * B0(pb, M)[i] + Q0sr(N, pq);
return B;
}
public List<List<double>> DataPerson = new List<List<double>>();
public List<List<double>> DataFactor = new List<List<double>>();
private void FormFactorGr_Load(object sender, EventArgs e)
{
// TODO: данная строка кода позволяет загрузить данные в таблицу "khAIDataSet5.ЗапросИзЗапросов". При необходимости она может быть перемещена или удалена.
this.запросИзЗапросовTableAdapter.Fill(this.khAIDataSet5.ЗапросИзЗапросов);
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
DataPerson.Add(new List<double>());
for (int j = 1; j < dataGridView1.ColumnCount; j++)
{
if (dataGridView1[j, i].Value.ToString() == "")
DataPerson[i].Add(0);
else
DataPerson[i].Add(Convert.ToDouble(dataGridView1[j, i].Value));
}
}
for (int j = 1; j < dataGridView1.ColumnCount; j++)
{
DataFactor.Add(new List<double>());
}
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
for (int j = 1; j < dataGridView1.ColumnCount; j++)
{
if (dataGridView1[j, i].Value.ToString() == "")
{
DataFactor[j-1].Add(0);
}
else
{
DataFactor[j-1].Add(Convert.ToDouble(dataGridView1[j, i].Value));
}
}
}
}
public double [] P(List<List<double>> Data)
{
double[] p = new double[Data.Count];
double[] x = new double[Data.Count];
double m = Data[0].Count;
for (int i = 0; i < Data.Count; i++)
for (int j = 0; j < Data[i].Count; j++)
{
if (Data[i][j] != 0)
x[i] += 1;
}
for (int i = 0; i < Data.Count; i++)
{
p[i] = x[i] / m;
}
return p;
}
public double [] B(List<List<double>> dataPerson,List<List<double>> dataFactor)
{
int n=dataPerson.Count;
int m=dataFactor.Count;
double[] qPodg = new double[n];
double[] q0Podg = new double[n];
double[] qPerson = new double[n];
double[] pPerson = new double[n];
double[] pFactor = new double[m];
double[] qFactor = new double[m];
double[] B = new double[m];
double[] B0 = new double[m];
pPerson = P(dataPerson);
pFactor=P(dataFactor);
for (int i = 0; i < n; i++)
{
qPerson[i] = 1 - pPerson[i];
if ((pPerson[i] != 0)&&(qPerson[i] != 0))
q0Podg[i] = Math.Log(pPerson[i] / qPerson[i]);
else
q0Podg[i] = 0.0;
}
for (int j = 0; j < m; j++)
{
qFactor[j] = 1 - pFactor[j];
if ((qFactor[j] != 0)&&(pFactor[j] != 0))
B0[j] = Math.Log(qFactor[j] / pFactor[j]);
else
B0[j] = 0.0;
}
double Qsr = q0Podg[0];
double Bsr = B0[0];
for (int i = 0; i < n; i++)
Qsr += q0Podg[i];
for (int j = 0; j < m; j++)
Bsr += B0[j];
Qsr = Qsr / Convert.ToDouble(n);
Bsr = Bsr / Convert.ToDouble(m);
double Q02 = q0Podg[0] * q0Podg[0];//сумма квадратов начальных значений
double B02 = B0[0] * B0[0];
for (int i = 0; i < n; i++)
Q02 += q0Podg[i] * q0Podg[i];
for (int j = 0; j < m; j++)
B02 += B0[j] * B0[j];
double sQ = (Q02 - n * Q02) / Convert.ToDouble(n - 1);//дисперсии
double sB = (B02 - m * B02) / Convert.ToDouble(m - 1);
double alfaQ=Math.Sqrt((1+sB/2.89)/(1-sQ*sB/8.35));
double alfaB = Math.Sqrt((1 + sQ / 2.89) / (1 - sQ * sB / 8.35));
for (int i = 0; i < n; i++)
qPodg[i] = alfaQ * q0Podg[i] + Bsr;
for (int j = 0; j < m; j++)
B[j] = alfaB * B0[j] + Qsr;
return B;
}
}
}
Размещено на Allbest.ru
Подобные документы
Проектирование программного обеспечения для классифицирования выпускников высшего учебного заведения. Выбор системы управления базами данных и языка программирования. Разработка структуры данных, схема базы данных. Реализация программного комплекса.
дипломная работа [2,4 M], добавлен 27.03.2013Порядок контроля и приемки программного обеспечения, требования к документации. Текст программы: модуль Program.cs, sprav predmets.cs. Сообщения, выдаваемые программисту. Капитальные вложения по внедрению системы. Расчет годовой экономии от эксплуатации.
дипломная работа [7,4 M], добавлен 29.06.2012База данных для автоматизации работы информационно-технической службы учебного заведения в области учета оборудования. Даталогическое проектирование. Ключевые поля и индексы. Ограничения бизнес правил. Пользовательский интерфейс. Запросы к базе данных.
курсовая работа [2,2 M], добавлен 12.02.2013Пути формирования имиджа учебного заведения как одной из составляющих деятельности образовательного учреждения. Проблемы интернет-маркетинга, его продвижение. Пример типичной динамики развития корпоративного портала как части интернет-пространства.
курсовая работа [387,3 K], добавлен 13.04.2014Описание высшего учебного заведения как отрасли производства. Основные задачи кафедры, организация документооборота. Анализ существующих средств электронного документооборота. Обоснование необходимости разработки, целей, назначения и структуры модели.
курсовая работа [345,4 K], добавлен 06.05.2011Создание программного продукта, автоматизирующего деятельность сотрудника учебного заведения, занимающегося учетом проведения научно-практических конференций. Выбор языка, среды программирования, разработка алгоритмов, проектирование интерфейса программы.
курсовая работа [1,5 M], добавлен 06.12.2012Анализ проектирования баз данных и освещение методов построения форм и отчетов на примере построения программы ведения электронной документации учебного заведения. Разработка и построение инфологической модели по предметной области "Университет".
курсовая работа [6,3 M], добавлен 03.11.2014Характеристика высшего учебного заведения "МФПА", структура подразделений учебной части. Анализ диаграммы дерева узлов, стадии проектирования информационной системы учета успеваемости студентов. Основные особенности построения модели "Как должно быть".
курсовая работа [3,1 M], добавлен 12.04.2012История развития информационных технологий. Появление Интернета, браузеры. Основы web-программирования: классификация сайтов, языки программирования. Создание сайта для кафедры высшего учебного заведения: технология создания и руководство пользователя.
дипломная работа [471,5 K], добавлен 23.04.2015Особенности создания автоматизированной информационной системы для системного администратора библиотеки. Функции ввода и обновления данных и печати документов. Технологическая последовательность выполнения процедур системы, инструкция пользователя.
курсовая работа [430,0 K], добавлен 12.03.2013