Файл: Исследование вычислительной эффективности объектноориентированных приложений.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.05.2024
Просмотров: 60
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
2. РАЗРАБОТКА ТЕХНИЧЕСКОГО ЗАДАНИЯ
2.1. Анализ вариантов использования программы
3.2. Определение попадания точки внутрь фигуры
4. ПРОЦЕДУРНОЕ ПРИЛОЖЕНИЕ НА БАЗЕ WPF/C#
4.1. Программные средства разработки
5. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРИЛОЖЕНИЕ НА БАЗЕ WPF/C#
5.1. Программные средства разработки
5.2. Логическое проектирование
5.4. Руководство системного программиста
6. АНАЛИЗ ВЫЧИСЛИТЕЛЬНОЙ ЭФФЕКТИВНОСТИ ПРИЛОЖЕНИЙ
7. УЛУЧШЕНИЕ ХАРАКТЕРИСТИК КАЧЕСТВА ПРИЛОЖЕНИЙ
7.1. Использование встроенной оптимизации кода
Файл MainWindow.xaml.cs (процедурное приложение)
Файл MainWindow.xaml.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;
}
}
}