Круговая диаграмма принятия решений (паутинная диаграмма)
Разработка программы, реализующей метод принятия решения на основе паутинной диаграммы, исходя из количества объектов исследования, их весов и критериев оценки. Листинг программного кода и пример работы программы: расчет площади многоугольников-объектов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 10.06.2011 |
Размер файла | 1,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Пояснительная записка
по дисциплине «Теория принятия решений»
Тема: «Круговая диаграмма принятия решений (Паутинная диаграмма)»
Оглавление
1. Постановка задачи
2. Краткие теоретические сведения
3. Реализация программного средства
3.1 Проектирование
3.2 Листинг программного кода
4. Пример работы программы
Выводы
Используемые программные средства
1. Постановка задачи
Необходимо разработать программу, реализующую метод принятия решений на основе круговой диаграммы. В данном случае будет разработано программное средство, реализующее метод принятия решения на основе паутинной диаграммы. Входными данными в программе являются: количество объектов исследования, количество критериев, по которым оцениваются объекты, веса, соответствующие критериям. Эти данные могут вводится пользователем, как вручную, так и могут быть загружены из текстового файла. К входным также можно отнести настройки, которые устанавливает пользователь, тем самым регулируя объекты отображаемые на диаграмме.
Выходными данными являются, главным образом, паутинная диаграмма, отображающая веса критериев, отложенные на осях, многоугольники принятия решений и легенду об объектах на диаграмме. К выходным данным относятся также файлы, в которые пользователь сохраняет таблицу весов, диаграмму и результаты расчета площадей многоугольников, и найденной максимальной площади.
2. Краткие теоретические сведения
В теории принятия решений, существует метод, в основе которого лежит графическое отображение весов критериев принятия решений «Круговая диаграмма принятия решений». Суть метода заключается в следующем: имеются n объектов, из которых необходимо по определенным критериям mi выбрать один или несколько объектов удовлетворяющих критериям.
Для каждого объекта указывается, каким весом обладает каждый критерий, т.о. чтобы сумма весов одного критерия у всех объектов равнялась единице. .
Составляется таблица, в строки которой, записываются веса одного критерия для каждого объекта. На основании данных таблица составляется диаграмма. Лучи диаграммы соответствуют критериям. На лучах откладываются веса соответствующие критериям объектов. Затем точки на весах соединяются в многоугольники, представляющие собой объекты.
В зависимости от размеров многоугольников и их формы, принимается решение о выборе необходимого объекта. Кроме того можно наглядно оценить как соотносятся объекты между собой, как в частных критериях, так и по всем критериям в целом.
Подобные диаграммы нередко используются для наглядного отображения сравнительных значений во времени или по категориям.
программа паутинный диаграмма
3. Реализация программного средства
Среда разработки: Visual Studio 2008
Язык программирования: C#
3.1 Проектирование
При проектировании программного средства будем использовать объектно-ориентированный подход.
Список классов с кратким описанием:
1) Form.cs - это главное окно, служит для ввода данных, запуска работы программы, вывода диаграмм, ввода настроек, содержит метод подсчета площади многоугольников.
2) Reader.cs - это класс содержит методы, реализующие сохранение данных в файл.
3) Settings.cs - класс настроек визуализации программы.
4) Writer.cs - класс содержит методы реализующие чтение данных из файла.
3.2 Листинг программного кода
public class Settings
{
private bool legend;
private bool axis;
private bool pipki;
private int pipkiSize;
private bool countSum;
public Settings()
{
legend = false;
axis = false;
pipki = false;
pipkiSize = 0;
countSum = false;
}
public Settings(bool leg, bool ax, bool pip, int pipSize, bool sum)
{
legend = leg;
axis = ax;
pipki = pip;
pipkiSize = pipSize;
countSum = sum;
}
public bool getCountSum()
{
return countSum;
}
public void setCountSum(bool sum)
{
countSum = sum;
}
public int getPipSize()
{
return pipkiSize;
}
public void setPipSize(int size)
{
pipkiSize = size;
}
public bool getPipki()
{
return pipki;
}
public void setPipki(bool pip)
{
pipki = pip;
}
public bool getLegend()
{
return legend;
}
public bool getAxis()
{
return axis;
}
public void setLegend(bool leg)
{
legend = leg;
}
public void setAxis(bool ax)
{
axis = ax;
}
public class Reader
{
private string fileName;
private string[] inputTxt;
private double[,] matrix;
private double[,] table;
private int rows;
private int cols;
private System.Globalization.NumberFormatInfo numberFormat;
public Reader(string name)
{
fileName = name;
}
public void ReadTable(out double[,] table)
{
numberFormat = new System.Globalization.NumberFormatInfo();
numberFormat.CurrencyDecimalSeparator = ".";
//забираем весь текст из файла по строкам
string[] fullText = File.ReadAllLines(fileName);
//забираем первую строку в массив по строкам разделенным пробелом
string[] aloneString = fullText[0].Split(new char[] { ' ' });
//массив куда будут помещены значения файла
table = new double[fullText.Length, aloneString.Length];
//double[,] temp = new double[fullText.Length, aloneString.Length];
for (int i = 0; i < aloneString.Length; i++)
{
table[0, i] = double.Parse(aloneString[i], numberFormat);
}
for (int i = 1; i < fullText.Length; i++)
{
aloneString = fullText[i].Split(new char[] { ' ' });
for (int j = 0; j < aloneString.Length; j++)
{
table[i, j] = double.Parse(aloneString[j], numberFormat);
}
}
}
}
public static class Writer
{
private static string fileName;
private static string[] inputTxt;
private static double[,] matrix;
private static int rows;
private static int cols;
private static System.Globalization.NumberFormatInfo numberFormat;
static Writer()
{
numberFormat = new System.Globalization.NumberFormatInfo();
numberFormat.CurrencyDecimalSeparator = ".";
}
public static void WriteTable(string nameFile, double[,] table)
{
Writer.fileName = nameFile;
Writer.matrix = table;
if (Writer.matrix != null)
{
rows = matrix.GetLength(0);
cols = matrix.GetLength(1);
inputTxt = new string[rows];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
inputTxt[i] += matrix[i, j].ToString("0.0000", numberFormat);
if (j < cols - 1)
{
inputTxt[i] += " ";
}
}
}
File.WriteAllLines(nameFile, inputTxt);
}
}
}
public partial class Form1 : Form
{
Bitmap bm;
private bool goodGo = false;
//число кусков (критериев)
private float countOfPie;
//угол для кусков
private float degrees;
//число целей
private int aims;
//таблица весов
private Double[,] tables;
private double[,] fromFileTable;
private static int rows;
private static int cols;
//не верно заполненные ряды
private int[] wrongRows;
int cR = 0, cG =0, cB =0;
private Settings settings = new Settings();
public Form1()
{
InitializeComponent();
}
//получение данных для таблицы и рисования
private void getData()
{
countOfPie = (int)numericUpDown1.Value;
degrees = 360 / countOfPie;
aims = (int)numericUpDown2.Value;
settings.setLegend(checkBox1.Checked);
settings.setAxis(checkBox2.Checked);
settings.setPipki(checkBox3.Checked);
settings.setPipSize((int)numericUpDown3.Value);
settings.setCountSum(checkBox4.Checked);
}
// создание и заполнение таблицы из формы
private void createTableOfWeight()
{
tables = new double[rows, cols];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
tables[i, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value);
}
}
/*
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
textBox1.AppendText(tables[i,j].ToString());
textBox1.AppendText(" ");
}
textBox1.AppendText(" /n ");
}
*/
}
//проверка правильного заполнения рядов
private Boolean checkTable()
{
int []tempTable = new int[rows];
Boolean check = false;
double sum = 0;
int k=0;
for (int i = 0; i < tables.GetLength(0); i++)
{
sum = 0;
for (int j = 0; j < tables.GetLength(1); j++)
{
sum += tables[i,j];
// textBox1.AppendText(sum.ToString());
// textBox1.AppendText(" ");
}
//если сумма в ряде больше единицы, записываем номер этого ряда
if (sum > 1)
{
tempTable[k] = i;
k++;
sum = 0;
//textBox1.AppendText("get bug ");
}
}
//заполним таблицу ошибочных рядов
wrongRows = new int[k];
for (int l =0; l<k; l++)
{
wrongRows[l] = tempTable[l];
}
//если все ряды в порядке
if (k == 0)
{
check = true;
}
return check;
}
//рисуем
private void button1_Click(object sender, EventArgs e)
{
goodGo = true;
//DEBUG
// textBox1.AppendText(degrees.ToString());
// textBox1.AppendText(" ");
//DEBUG
//забираем данные
getData();
//забираем данные из таблицы
createTableOfWeight();
//проверяем данные, если в порядке, то рисуем.
if (checkTable() == true)
{
label3.Text = "Данные верны ";
drawMyPie();
}
else
{
// MessageBox msg = new MessageBox;
//не в порядке
string text;
text = "Ошибка в заполнении рядов: ";
for (int i = 0; i < wrongRows.Length; i++)
{
text += " " + (wrongRows[i]+1) + ";";
}
label3.Text = text;
}
}
//рисуем пирог
private void drawMyPie()
{
bm = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.Image = bm;
Graphics g = Graphics.FromImage(pictureBox1.Image);
//длина единичного отрезка на пироге
float radius = 0;
//Graphics g = Graphics.FromHwnd(panel1.Handle);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.Clear(Color.AntiqueWhite);
//смещение
int dx = 260;
//масштаб пирога. цифра больше - масштаб меньше.
int call = 70;
//пирог
Rectangle rect = new Rectangle(call, call, pictureBox1.Width - dx-call*2,
pictureBox1.Height - call*2);
float start, end;
start = 0;
end = 0;
for (int i = 0; i < countOfPie; i++)
{
start = i * degrees;
end = start + degrees;
g.DrawPie(new Pen(Color.Black, 1), rect, 0, end);
}
// единичный отрезок
radius = (pictureBox1.Height - call*2) / 2; //старый вариант
//radius = (panel1.Height) / 2 - 10;
// центр области
float Ox = (pictureBox1.Width-dx) / 2;
float Oy = pictureBox1.Height / 2;
double R = 0;
double angle = 0;
//рисуем пипки
if (settings.getPipki() == true)
{
//задание точек для пипок
PointF[] pipkiPoints = new PointF[rows];
double Rpipki = 0;
for (int lm = 0; lm < 10; lm++)
{
for (int m = 0; m < rows; m++)
{
Rpipki = (Convert.ToDouble(lm)+1)/10*radius;
//textBox1.AppendText("Rpipki = ");
//textBox1.AppendText(Rpipki.ToString());
//textBox1.AppendText("LM = ");
///textBox1.AppendText(lm.ToString());
angle = Math.PI * (degrees * m) / 180.0;
pipkiPoints[m].X = (float)(Rpipki * Math.Cos(angle)) + Ox;
pipkiPoints[m].Y = (float)(Rpipki * Math.Sin(angle)) + Oy;
SolidBrush myBrush = new SolidBrush(Color.Black);
//SolidBrush myBrush = new SolidBrush(Color.Red);
if (((lm+1) % 5) == 0)
{
g.FillEllipse(myBrush, pipkiPoints[m].X - settings.getPipSize() / 2, pipkiPoints[m].Y - settings.getPipSize() / 2, settings.getPipSize(), settings.getPipSize());
}
g.FillEllipse(myBrush, pipkiPoints[m].X - settings.getPipSize() / 4, pipkiPoints[m].Y - settings.getPipSize() / 4, settings.getPipSize() / 2, settings.getPipSize() / 2);
}
g.FillEllipse(new SolidBrush(Color.Black), Ox - settings.getPipSize() / 2, Oy - settings.getPipSize() / 2, settings.getPipSize(), settings.getPipSize());
}
}
//рисуем подписи
if (settings.getAxis() == true)
{
//определение точек для подписей осей
PointF[] textPoints = new PointF[rows];
double R1 = 0;
for (int s = 0; s < rows; s++)
{
string text2 = "Критерий ";
R1 = radius + 40;
angle = Math.PI * (degrees * s) / 180.0;
textPoints[s].X = (float)(R1 * Math.Cos(angle)) + Ox;
textPoints[s].Y = (float)(R1 * Math.Sin(angle)) + Oy;
if ((degrees * s) == 90)
{
textPoints[s].Y += 10;
}
if ((degrees * s) == 270)
{
textPoints[s].Y -= 10;
}
if ((degrees*s > 100) && (degrees*s < 260))
{
textBox1.AppendText(degrees.ToString());
textBox1.AppendText("\n");
textPoints[s].X -= 32;
textBox1.AppendText(textPoints[s].X.ToString());
textBox1.AppendText("\n");
}
text2 += " " + Convert.ToString(s + 1);
g.DrawString(text2, new Font("helveticz", 8), Brushes.Black, textPoints[s]);
}
}
PointF[] polygonPoints = new PointF[rows];
//рисование многоугольника и надписей.
for (int j = 0; j < cols; j++)
{
//получаем точки для многоугольника
for (int i = 0; i < rows; i++)
{
R = tables[i, j] * radius;
angle = Math.PI * (degrees * i) / 180.0;
polygonPoints[i].X = (float)(R * Math.Cos(angle)) + Ox;
polygonPoints[i].Y = (float)(R * Math.Sin(angle)) + Oy;
}
string text = "Объект №";
text += " " + Convert.ToString(j+1);
Pen myPen = new Pen(Color.FromArgb(cR, cG, cB), 2);
//тип линии определяем
if (j % 3 == 0)
myPen.DashStyle = DashStyle.Dot;
if (j % 2 == 0)
myPen.DashStyle = DashStyle.Dash;
if (j % 5 == 0)
myPen.DashStyle = DashStyle.DashDot;
nextRGB();
if (polygonPoints.Length > 1)
{
g.DrawPolygon(myPen, polygonPoints);
if (settings.getLegend() == true)
{
g.DrawLine(myPen, (rect.Width + 220), (j + 1) * 21, (rect.Width + 280), (j + 1) * 21);
g.DrawString(text, new Font("Helvetica", 8), Brushes.Black, rect.Width + 300, (j + 1) * 20);
}
}
}
textBox1.Clear();
if (settings.getCountSum() == true)
{
double max = 0;
int ch = 0;
//подсчет площади многоугольника.
//первый и второй катет треугольника
double pRS1 = 0;
double pRS2 = 0;
//площадь треугольника
double squareSum = 0;
double squareTriangle = 0;
for (int countSq = 0; countSq < cols; countSq++)
{
for (int pS = 1; pS <= rows; pS++)
{
if (pS == rows)
{
pRS2 = tables[0, countSq] * radius;
}
else
{
pRS2 = tables[pS, countSq] * radius;
}
pRS1 = tables[pS - 1, countSq] * radius;
angle = Math.PI * (degrees) / 180.0;
squareTriangle = 0.5 * pRS1 * pRS2 * (float)(Math.Sin(angle));
squareSum += squareTriangle;
}
if (squareSum > max)
{
ch = countSq;
max = squareSum;
}
textBox1.AppendText("Площадь многоугольника №: ");
textBox1.AppendText(Convert.ToString(countSq+1));
textBox1.AppendText(" ");
textBox1.AppendText(squareSum.ToString());
textBox1.AppendText(" единиц; ");
textBox1.AppendText("\n");
//string tex = "lj";
//tex.
}
textBox1.AppendText("Максимальная площадь ");
textBox1.AppendText(max.ToString());
textBox1.AppendText(" у объекта № ");
textBox1.AppendText(Convert.ToString(ch+1));
g.Dispose();
pictureBox1.Invalidate();
}
}
private void nextRGB()
{
int dx = 60;
cR += dx;
if (cR > 255)
{
cG += dx;
cR -= 255;
if (cG > 255)
{
cB += dx;
cG -= 255;
if (cB > 255)
{
cB -= 255;
}
}
}
}
//onPaint
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
if (goodGo == true)
drawMyPie();
}
//создание таблицы
private void CreateTable(int row, int col)
{
int _row = row;
int _col = col;
dataGridView1.ColumnCount = _col;
dataGridView1.RowHeadersVisible = false;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridView1.RowCount = _row;
}
//задание данных для таблицы
private void Button2_Click(object sender, EventArgs e)
{
getData();
rows = (int)countOfPie;
cols = aims;
CreateTable(rows, cols);
}
//применить настройки и отрисовать
private void button3_Click_1(object sender, EventArgs e)
{
if (goodGo == true)
{
getData();
drawMyPie();
}
}
private void выходToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
//очистить область диаграмм
private void button5_Click(object sender, EventArgs e)
{
// Graphics g = Graphics.FromHwnd(panel1.Handle);
Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
g.Clear(Color.AntiqueWhite);
}
private void Form1_Load(object sender, EventArgs e)
{
}
//загрузить данные
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
string fileName;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
openFileDialog1.InitialDirectory = "C:\tmp";
openFileDialog1.Filter = "diag files (*.diag)|*.abs|All files|*.*";
fileName = openFileDialog1.FileName;
Reader myReader = new Reader(fileName);
myReader.ReadTable(out fromFileTable);
//сбор и установка данных
countOfPie = fromFileTable.GetLength(0);
numericUpDown1.Value = (int)countOfPie;
degrees = 360 / countOfPie;
aims = fromFileTable.GetLength(1);
numericUpDown2.Value = aims;
rows = (int)countOfPie;
cols = aims;
//создаем таблицу на форме
CreateTable(rows, cols);
//задаем таблицу на форме
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
dataGridView1.Rows[i].Cells[j].Value =Convert.ToDouble(fromFileTable[i,j]);
}
}
}
}
//сохранить данные
private void toolStripMenuItem3_Click(object sender, EventArgs e)
{
saveFileDialog1.InitialDirectory = "C:\tmp";
saveFileDialog1.Filter = "diag files (*.diag)|*.abs|All files|*.*";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string fileName = saveFileDialog1.FileName;
Writer.WriteTable(fileName, tables);
}
}
//сохранить диаграмму
private void toolStripMenuItem4_Click(object sender, EventArgs e)
{
saveFileDialog1.InitialDirectory = "C:\tmp";
saveFileDialog1.Filter =
"Bitmap File(*.bmp)|*.bmp|" +
"GIF File(*.gif)|*.gif|" +
"JPEG File(*.jpg)|*.jpg|" +
"TIF File(*.tif)|*.tif|" +
"PNG File(*.png)|*.png";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string fileName = saveFileDialog1.FileName;
// Get the extension
string strFilExtn =
fileName.Remove(0, fileName.Length - 3);
// Save file
switch (strFilExtn)
{
case "bmp":
bm.Save(fileName, System.Drawing.Imaging.ImageFormat.Bmp);
break;
case "jpg":
bm.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg);
break;
case "gif":
bm.Save(fileName, System.Drawing.Imaging.ImageFormat.Gif);
break;
case "tif":
bm.Save(fileName, System.Drawing.Imaging.ImageFormat.Tiff);
break;
case "png":
bm.Save(fileName, System.Drawing.Imaging.ImageFormat.Png);
break;
default:
break;
}
}
}
}
4. Пример работы программы
1) Критериев - 3
Объектов - 3
Веса:
0,2 |
0,7 |
0,1 |
|
0,1 |
0,2 |
0,7 |
|
0,5 |
0,4 |
0,1 |
Площадь многоугольника №: 1 3894,08315822482 единиц;
Площадь многоугольника №: 2 15347,2689177096 единиц;
Площадь многоугольника №: 3 18783,224645555 единиц;
Максимальная площадь 18783,224645555 у объекта № 3
Исходные данные введены вручную.
2) Число критериев - 10;
Число объектов - 4.
Веса:
Данные из файла:
0.1000 0.7000 0.1000 0.1000
0.1000 0.2000 0.5000 0.2000
0.3000 0.2000 0.3000 0.2000
0.5000 0.2000 0.1000 0.1000
0.3500 0.3500 0.1500 0.1500
0.8000 0.0500 0.1000 0.0500
0.2000 0.2000 0.2000 0.4000
0.3000 0.3000 0.3000 0.1000
0.2000 0.3000 0.3000 0.2000
0.4000 0.4000 0.1000 0.1000
Площадь многоугольника №: 1 16246,5310901403 единиц;
Площадь многоугольника №: 2 29733,4839329124 единиц;
Площадь многоугольника №: 3 37040,5361935496 единиц;
Площадь многоугольника №: 4 40344,2566305399 единиц;
Максимальная площадь 40344,2566305399 у объекта № 4
Выводы
В результате проделанной работы было разработано программное средство для принятия решений на основе паутинной диаграммы.
Программное средство позволяет вводить данные в ручном и автоматическом режиме из файла; выводить паутинную диаграмму на основе введенных данных; подсчитывать площади многоугольников-объектов; определять максимальную площадь.
Пользователь, на основе полученных диаграмм принимает решение о том или ином объекте исследования.
Данное приложение может использоваться, как демонстрационно-обучающее по теме «Круговая диаграмма принятия решений» дисциплины «Теория принятия решений».
Размещено на Allbest.ru
Подобные документы
Оформление диаграммы. Размещение и редактирование диаграммы. Построение диаграмм. Круговая диаграмма. Столбчатая диаграмма. Линейная диаграмма. Ярусная диаграмма. Областная диаграмма (диаграмма площадей). Индивидуальные работы.
реферат [12,3 K], добавлен 17.11.2002Словесное описание алгоритма программы. Открытие файла процедурой Rewrite, его проверка на наличие ошибок при открытии. Особенности построения диаграммы. Листинг программы, ее тестирование и отладка. Выполнение процедуры CloseFile при закрытии файла.
контрольная работа [17,3 K], добавлен 11.06.2010Разработка сканера, который считывает литеры первоначальной, исходной программы и строит символы, исходной программы. Глобальные переменные и необходимые подпрограммы. Диаграмма состояний. Текст программы. Инструкция пользователю. Тестовый пример.
курсовая работа [3,4 M], добавлен 05.07.2008Разработка программного средства для поиска альтернативных решений многокритериальных задач. Проектирование программного средства с помощью объектно-ориентированного подхода. Пример листинга программного кода. Особенности работы программы на примере.
контрольная работа [346,5 K], добавлен 11.06.2011Процесс проектирования программы, состоящий из следующих шагов: описание прецедентов, построение диаграммы прецедентов, диаграммы взаимодействий, создание модели программных классов. Тестирование программы входными тестовыми вариантами, ее листинг.
курсовая работа [1,9 M], добавлен 25.10.2012Разработка программы для выполнения арифметических операций с комплексными числами. Разработка эскизного проекта. Диаграмма последовательностей и классов. Разработка и описание программы. Разработка программного кода и руководства пользователя.
курсовая работа [1,2 M], добавлен 25.11.2011Основные модели представления знаний. Системы поддержки принятия решений. Диаграмма UseCase. Разработка базы данных на основе трех моделей: продукционные правила, семантическая сеть, фреймовая модель. Программная реализация системы принятия решений.
курсовая работа [715,1 K], добавлен 14.05.2014Сферы применения методологии RAD. Особенности создания программного продукта, предназначенного для редактирования тестов. Рассмотрение моделей жизненного цикла: каскадная, спиральная. Этапы построения начальной контекстной диаграммы. Анализ DFD-диаграммы.
курсовая работа [1,9 M], добавлен 19.09.2012Система поддержки принятия решений "Мыслитель" и метод, заложенный в её основу. Порядок работы в программе: новая задача, составление списка альтернатив, списка критериев их оценки, сравнение критериев по степени важности, попарное сравнение альтернатив.
отчет по практике [719,2 K], добавлен 08.03.2016Разработка структурной диаграммы программного модуля для целочисленного решения задачи линейного программирования с использованием симплекс-метода. Краткое описание всех уровней диаграммы с назначением всех ее блоков. Язык программирования Visual C#.
курсовая работа [874,7 K], добавлен 27.02.2013