Файл: Исследование вычислительной эффективности объектноориентированных приложений.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 05.05.2024

Просмотров: 60

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

ПОСТАНОВКА ЗАДАЧИ

2. РАЗРАБОТКА ТЕХНИЧЕСКОГО ЗАДАНИЯ

2.1. Анализ вариантов использования программы

2.2. Требования к приложениям

3.АНАЛИЗ АЛГОРИТМА РЕШЕНИЯ

3.1. Метод Монте-Карло

3.2. Определение попадания точки внутрь фигуры

4. ПРОЦЕДУРНОЕ ПРИЛОЖЕНИЕ НА БАЗЕ WPF/C#

4.1. Программные средства разработки

4.3. Системные требования

4.4. Структура приложения

4.5. Результаты работы

5. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРИЛОЖЕНИЕ НА БАЗЕ WPF/C#

5.1. Программные средства разработки

5.2. Логическое проектирование

5.4. Руководство системного программиста

5.5. Руководство программиста

5.6. Руководство оператора

5.7. Результаты работы

6. АНАЛИЗ ВЫЧИСЛИТЕЛЬНОЙ ЭФФЕКТИВНОСТИ ПРИЛОЖЕНИЙ

7. УЛУЧШЕНИЕ ХАРАКТЕРИСТИК КАЧЕСТВА ПРИЛОЖЕНИЙ

7.1. Использование встроенной оптимизации кода

7.2. Профилирование

ЗАКЛЮЧЕНИЕ

СПИСОК ЛИТЕРАТУРЫ

ПРИЛОЖЕНИЕ

Файл MainWindow.xaml.cs (процедурное приложение)

Файл MainWindow.xaml

Файл MainWindow.xaml.cs (объектно-ориентированное приложение)

Файл MainWindow.xaml

Файл Figure.cs

Файл Rectangle.cs

Файл Triangle.cs

Файл MonteCarlo.cs



textBox_Cx.IsEnabled = false; textBox_Cy.IsEnabled = false;

textBox_Kx.IsEnabled = false; textBox_Ky.IsEnabled = false;

}

}

private void Window_Loaded(object sender, RoutedEventArgs e)

{

Result_dataGrid.ColumnWidth = Result_dataGrid.Width / 5 - 2;

Result_dataGrid.CanUserAddRows = false;

Start_Btn.IsEnabled = false;

Clear_Btn.IsEnabled = false;

}

}

}

Файл MainWindow.xaml




xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:local="clr-namespace:oop_kurs_oop"

mc:Ignorable="d"

Title="OOPMC" Height="292" Width="580.5" Loaded="Window_Loaded">






































Файл Figure.cs


using System;

using System.Windows;
namespace Application2

{

abstract public class MyFigure

{

abstract public double Square();

abstract public bool IsInFigure(Point point);

}

}

Файл Rectangle.cs


using System;

using System.Windows;
namespace Application2

{

public class MyRectangle : MyFigure

{

private Point a, c;
public MyRectangle()

{

a = new Point(0, 0);

c = new Point(1, 1);

}

public MyRectangle(Point a, Point c)

{

this.a = a;

this.c = c;

}

public MyRectangle(MyRectangle rect)

{

a = rect.a;

c = rect.c;

}

override public double Square()

{

double sq;

sq = Math.Abs((a.X - c.X) * (a.Y - c.Y));

return sq;

}
override public bool IsInFigure(Point Point)


{

if (Point.X <= c.X && Point.X >= a.X && Point.Y >= a.Y && Point.Y <= c.Y)

return true;

else return false;

}

}

}

Файл Triangle.cs


using System;

using System.Windows;
namespace Application2

{

public class MyTriangle : MyFigure

{

private Point c, k, d;
public MyTriangle()

{

c = new Point(0, 0);

k = new Point(0, 1);

d = new Point(1, 0);

}

public MyTriangle(Point c, Point k, Point d)

{

this.c = c;

this.k = k;

this.d = d;

}

public MyTriangle(MyTriangle triangle)

{

c = triangle.c;

k = triangle.k;

d = triangle.d;

}
override public bool IsInFigure(Point point)

{

double y_kc = (point.X - k.X) * ((c.Y - k.Y) / (c.X - k.X)) + k.Y;

double y_kd = (point.X - k.X) * ((d.Y - k.Y) / (d.X - k.X)) + k.Y;

if (point.Y < y_kc && point.Y > y_kd) return true;

else return false;

}
override public double Square()

{

double square = Math.Abs((c.X - k.X) * (c.Y - d.Y)) / 2;

return square;

}

}

}

Файл MonteCarlo.cs


using System;

using System.Collections.Generic;

using System.Windows;

using System.Diagnostics;
namespace Application2

{

public class MonteCarlo

{

private MyFigure abcd, obmf, oaf, ckd;

private List
points;

private Point a, c, k, f;

private double s_find, s_rect;

private double time, err;

public double S_real { get; }
public MonteCarlo(Point a, Point c, Point k)

{

s_find = 0; time = 0; err = 0;

this.a = a; this.c = c; this.k = k;

f = new Point(a.X + Math.Abs(a.Y - c.Y) / 2, a.Y + Math.Abs(a.Y - c.Y) / 2);

abcd = new MyRectangle(a, c);

oaf = new MyCircle(new Point(a.X, a.Y + Math.Abs(a.Y - c.Y) / 2), Math.Abs(a.Y - c.Y) / 2);

obmf = new MyRectangle(new Point(a.X, a.Y + Math.Abs(a.Y - c.Y) / 2), new Point(a.X + Math.Abs(a.Y - c.Y) / 2, c.Y));

ckd = new MyTriangle(c, k, new Point(c.X, a.Y));

points = new List
();

s_rect = abcd.Square();

S_real = s_rect - (obmf.Square() + ckd.Square() + oaf.Square() / 4.0);

}
private void Distribution(int N)

{

Random Rand = new Random();

for (int i = 0; i < N; i++)

{

Point point1 = new Point(a.X + (c.X - a.X) * Rand.NextDouble(), a.Y + (c.Y - a.Y) * Rand.NextDouble());

points.Add(point1);

}

}
private bool IsInFigure(Point p)

{

if (p.X > k.X)

{

if (ckd.IsInFigure(p))

return false;

return true;

}

if (p.X < f.X)

{

if (p.Y >= f.Y)

{

return false;

}

if (p.Y < f.Y)

{

if (oaf.IsInFigure(p)) return false;

}

}

return true;

}
private void MonteCarloSquare(int N)

{

int M = 0;

for (int i = 0; i < N; i++)

{

if (IsInFigure(points[i]))

M++;

}

s_find = s_rect * ((double)M / N);

}
public void Start(int N)

{

Stopwatch Watch = new Stopwatch();

Watch.Restart();

Distribution(N);

MonteCarloSquare(N);

Watch.Stop();

time = Watch.ElapsedMilliseconds;

err = Error();

}
private double Error()

{

return (Math.Abs(S_real - s_find) / S_real) * 100;

}
public string[] Print()

{

string[] str = new string[5];

str[2] = Math.Round(s_find, 3).ToString(); str[3] = Math.Round(err,3).ToString(); str[4] = Math.Round(time, 3).ToString();

return str;

}

}

}