Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КурсООП 9301 / 9301_Solovyov_Пояснительная записка курсовой работе по дисциплине ООП.docx
Скачиваний:
80
Добавлен:
03.06.2014
Размер:
1.54 Mб
Скачать

Краткая справка по теме:

Балльная оценка объектов

К недостаткуперехода от векторной оценки объектов к скалярной следует отнести абстрактный характер последней, поскольку скалярнаяоценка измеряется в абсолютной шкале. При желании этот недостатокустраняетсяпутем пересчета многокритериальной скалярной оценки объектаиз абсолютной в более привычную балльную шкалу, например, в

пятибалльную.

Лучшей оценке ставится в соответствие высший балл EB , например, EB=5 , а худшей оценке присваивается низший балл EH . Он может устанавливаться в пределах от 1 до EB-1 , например EH=EB -2=3 .

Пересчету подвергается каждый оптимизируемый признак.

Пример .Сопоставим варианты трех конфигураций систем

в пятибалльной шкале: EH=1, EB=5 .

Таблица 2

Показателен тот факт, что балльность оценок вычисленных на основеформул (17) и (18)условна, поскольку они не имеют ничего общего с каждойиз исходных оценок в отдельности. Меньшая величинаоценок, вычисленныхпо формуле (17)по сравнению с формулой (18), объясняется исключением изоценок «минимальных достижений»объектов. Оценки, вычисленные вбаллах,отражают те же закономерности упорядочения вариантов, что иотносительные нормированныеоценки(см. таблицу 2).Такимобразом,балльные оценкивсего лишь более привычны, адля кого-то иболее удобныдля анализа результатов.

Расчётные формулы:

(12)

(17)

(18)

Формализация задачи:

Рис. 2.1 UMLдиаграмма

Задание реализовано на основе базовых классов, созданных редактором форм (классы Program и Form1).

Функции (12), (17), (18) представлены в виде методов f12, f17, f18 соответственно.

Листинг программы

Program.cs //Задание 7-1

// Сопоставить оценки, поставленные 10 конфигурациям систем по 3-м показателям . Оценивание производилось по 10-балльной шкале.

//В столбцах правой части табл. 1 привести расчеты оценок по указанным в верхней строке номерам формул.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

namespace _2Face_CourseWork02

{

static class Program

{

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

}

}

}

Form1.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 System.IO;

namespace _2Face_CourseWork02

{

public partial class Form1 : Form

{

private int[,] data; // тут хранятся данные таблицы

/**

* конструктор

*/

public Form1()

{

InitializeComponent();

this.data = new int[,]{ // инициализируем массив данными из задания

{ 10, 8, 3, 9 },

{ 9, 7, 5, 10 },

{ 8, 6, 8, 8 },

{ 8, 5, 7, 7 },

{ 7, 9, 5, 6 },

{ 6, 7, 8, 5 },

{ 8, 5, 8, 10 },

{ 9, 4, 8, 6 },

{ 10, 8, 3, 9 },

{ 9, 8, 4, 8 },

};

this.ShowData(); // и рисуем их на форме

}

/**

* Отображение данных массива this.data

*/

private void ShowData()

{

this.dataGridView1.Columns.Clear();// удаляем всё, что было:

this.dataGridView1.Rows.Clear();

this.dataGridView1.Columns.Add("c_", "Конф-я");//добавляем названия столбцов:

for( int i=0; i<this.data.GetLength(1); i++ )

this.dataGridView1.Columns.Add("c"+i, "P" + (i+1).ToString() );

this.dataGridView1.Columns.Add("_12", "(12)");

this.dataGridView1.Columns.Add("_17", "(17)");

this.dataGridView1.Columns.Add("_18", "(18)");

this.dataGridView1.Rows.Add(this.data.GetLength(0)); // добавлям строки:

// заполняем данными:

for (int i = 0; i < this.data.GetLength(0); i++)

{

this.dataGridView1.Rows[i].Cells[0].Value = (i+1).ToString();

for (int j = 0; j < this.data.GetLength(1); j++)

{

this.dataGridView1.Rows[i].Cells[j+1].Value = this.data[i, j].ToString();

}

}

}

/**

* Чтение данных с формы

*/

private void ReadData()

{

this.data = new int[this.dataGridView1.Rows.Count, 4]; // по условию задано, что столбцов с данными 4, а вот строк - сколько угодно

for (int i = 0; i < this.dataGridView1.Rows.Count; i++)

{

for (int j = 0; j < this.data.GetLength(1); j++)

{

this.data[i, j] = int.Parse(this.dataGridView1.Rows[i].Cells[j+1].Value.ToString());

}

}

}

/**

* Функция (12) */

private double f12(int[] x)

{

return x.Average();

}

/**

* Функция (17) */

private double f17(int[] x)

{

double n = x.Length;

double min = x.Min();

double max = x.Max();

double t = 0;

for (int i = 0; i < x.Length; i++)

{

t += (x[i] - min) / (max - min);

}

return t / n;

}

/**

* Функция (18) */

private double f18(int[] x)

{

return x.Average() / x.Max();

}

/**

* Расчёт последних трёх столбцов таблицы */

private void Fill()

{

this.ReadData();// считываем данные:

for (int i = 0; i < this.data.GetLength(0); i++)

{

// формируем массив целых числел из текущей i-ой строчки.

// этот массив будет передаваться в функции (12),(17),(18)

int[] x = new int[this.data.GetLength(1)];

for (int j = 0; j < this.data.GetLength(1); j++)

{

x[j] = this.data[i,j];

}

this.dataGridView1.Rows[i].Cells[this.data.GetLength(1) + 1].Value = this.f12(x).ToString();// заполняем сами поля

this.dataGridView1.Rows[i].Cells[this.data.GetLength(1) + 2].Value = this.f17(x).ToString();

this.dataGridView1.Rows[i].Cells[this.data.GetLength(1) + 3].Value = this.f18(x).ToString();

}

this.dataGridView1.Sort(this.dataGridView1.Columns[this.data.GetLength(1) + 3], ListSortDirection.Ascending); // сортировка

}

/**

* Обработчик кнопки "GO"

*/

private void gOToolStripMenuItem_Click(object sender, EventArgs e)

{

this.Fill();

}

/**

* Кнопка экспорт

*/

private void exportToolStripMenuItem_Click(object sender, EventArgs e)

{

this.Fill(); // перерасчитываем данные (на всякий случай)

SaveFileDialog dlg = new SaveFileDialog();//далее открываем диалог сохранения файла

dlg.FileName = "результат.txt";

dlg.Filter = "TXT|*.txt";

dlg.ShowDialog();

if (dlg.FileName.Length == 0)

return;

// создаём объект w класса StreamWriter, с помощью которого запишем результаты в поток (в файл)

StreamWriter w = new StreamWriter( dlg.FileName );

w.WriteLine("Результат:");

for (int i = 0; i < this.dataGridView1.Rows.Count; i++)

{

for (int j = 0; j < this.dataGridView1.Columns.Count; j++)

{

w.Write("{0,4}\t", this.dataGridView1.Rows[i].Cells[j].Value.ToString());

}

w.WriteLine();

}

w.Close(); // закрываем поток

}

}

}