Перечень объектов, в интересах которых решаются задачи 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Перечень объектов, в интересах которых решаются задачи



Задачи решаются в интересах любого заинтересованного в этом человека (т.е. человека, запустившего программу).

Периодичность решения задач

Задачи могут решаться практически с любой периодичностью (), необходимой пользователю.

Условия, при которых прекращается решение задач автоматизированным способом

Поставленные задачи решаются только автоматизированным способом.

Связи разрабатываемого программного средства

Данное приложение доступно для заявителей при условии наличия в их распоряжении исполняемого файла программы. Приложение не требует доступа в сеть Интернет и доступно только с локальной системы.

Выходная информация

Основной выводимой информацией являются решения поставленных задач. Однако, помимо них, программа выводит сообщения о некорректном вводе.

Входная информация

Входной информацией являются параметры и значения, необходимые для решения поставленных задач.


Алгоритм задачи

Рис. 1 Алгоритм разработанной программы

Исходный текст программы

Программа состоит из нескольких файлов:

MainWindow.xaml.cs

using System.Windows;

 

namespace KDZ_Ternovoy

{

/// <summary>

/// Логика взаимодействия для Window1.xaml

/// </summary>

public partial class MainWindow: Window

{

public MainWindow()

{

InitializeComponent();

}

 

private void FirstTaskButton_Click(object sender, RoutedEventArgs e)

{

FirstTask Task1_Window = new FirstTask();

Task1_Window.Show();

}

 

private void SecondTaskButton_Click(object sender, RoutedEventArgs e)

{

SecondTask Task2_Window = new SecondTask();

Task2_Window.Show();

}

}

}

 

FirstTask.xaml.cs

using System;

using System.Windows;

using System.Windows.Controls;

 

namespace KDZ_Ternovoy

{

/// <summary>

/// Логика взаимодействия для FirstTask.xaml

/// </summary>

public partial class FirstTask: Window

{

public FirstTask()

{

InitializeComponent();

// Сразу же отключаем кнопку

searchForNearestPerfectButton.IsEnabled = false;

}

// Обработчик изменения текста в поле

private void inputNumberTextBox_TextChanged(object sender, TextChangedEventArgs e)

{

// Проверка на корректность введенных значений

changeFormElementStates(GeneralMethods.validateInputTextAsInteger(inputNumberTextBox.Text) && Convert.ToInt64(inputNumberTextBox.Text) > 0);

}

 

// Вызов метода поиска ближайшего совершенного числа

private void searchForNearestPerfectButton_Click(object sender, RoutedEventArgs e)

{

// Еще раз провалидируем входные данные (мало ли)

if (GeneralMethods.validateInputTextAsInteger(inputNumberTextBox.Text) && Convert.ToInt64(inputNumberTextBox.Text) > 0)

{

Int64 nearest = Task1MethodContainer.searchForNearestPerfect(Convert.ToInt64(inputNumberTextBox.Text));

outputTextBox.Content = nearest.ToString();

}

}

 

// Изменение состояний элементов на форме

private void changeFormElementStates(bool validateState)

{

if (!validateState)

{

wrongInputNumberLabel.Visibility = Visibility.Visible;

searchForNearestPerfectButton.IsEnabled = false;

}

else

{

wrongInputNumberLabel.Visibility = Visibility.Hidden;

searchForNearestPerfectButton.IsEnabled = true;

}

}

 

// Выход

private void closeFirstTaskButton_Click(object sender, RoutedEventArgs e)

{

this.Close();

}

}

}

 

SecondTask.xaml.cs

using System;

using System.Collections.Generic;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

 

namespace KDZ_Ternovoy

{

/// <summary>

/// Логика взаимодействия для SecondTask.xaml

/// </summary>

public partial class SecondTask: Window

{

public SecondTask()

{

InitializeComponent();

XTextBox.Text = "0";

YTextBox.Text = "0";

KTextBox.Text = "5";

drawPicture.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));

 

}

 

 

private void changeFormElementStates(bool validateState, Button button, Label label)

{

if (!validateState)

{

label.Visibility = Visibility.Visible;

button.IsEnabled = false;

}

else

{

label.Visibility = Visibility.Hidden;

button.IsEnabled = true;

}

}

 

private void XTextBox_TextChanged(object sender, TextChangedEventArgs e)

{

changeFormElementStates(GeneralMethods.validateInputTextAsInteger(XTextBox.Text), drawPicture, wrongXLabel);

}

 

private void YTextBox_TextChanged(object sender, TextChangedEventArgs e)

{

changeFormElementStates(GeneralMethods.validateInputTextAsInteger(YTextBox.Text), drawPicture, wrongYLabel);

}

 

private void KTextBox_TextChanged(object sender, TextChangedEventArgs e)

{

changeFormElementStates(GeneralMethods.validateInputTextAsInteger(KTextBox.Text) && (Convert.ToInt64(KTextBox.Text) > 2 && Convert.ToInt64(KTextBox.Text) < 16), drawPicture, wrongKLabel);

}

 

private void drawPicture_Click(object sender, RoutedEventArgs e)

{

if (GeneralMethods.validateInputTextAsInteger(KTextBox.Text) && GeneralMethods.validateInputTextAsInteger(XTextBox.Text) && GeneralMethods.validateInputTextAsInteger(YTextBox.Text))

{

 

MyCanvas.Children.Clear();

int X = Convert.ToInt32(XTextBox.Text);

int Y = Convert.ToInt32(YTextBox.Text);

 

 

List<List<Point>> polyLineList = Task2MethodContainer.getPolylineList(Convert.ToInt32(KTextBox.Text), 250);

int numberOfFigures = polyLineList.Count - 1;

 

//Добавим основы

foreach (Point pointList in polyLineList[numberOfFigures])

{

MyCanvas.Children.Add(Task2MethodContainer.getLine(X, Y, X + pointList.X, Y + pointList.Y));

}

 

//Добавим многоугольники

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

{

MyCanvas.Children.Add(Task2MethodContainer.getPolyline(X, Y, polyLineList[i]));

 

}

}

}

 

private void closeSecondTaskButton_Click(object sender, RoutedEventArgs e)

{

this.Close();

}

}

}

 

GeneralMethods.cs

using System;

 

namespace KDZ_Ternovoy

{

/// <summary>

/// Общие методы

/// </summary>

class GeneralMethods

{

// Проверка на корректность строки (число ли там)

static public bool validateInputTextAsInteger(string inputText)

{

Int64 number;

try

{

number = Convert.ToInt64(inputText);

}

catch (FormatException)

{

return false;

}

return true;

}

}

}

 

Task1MethodContainer.cs

using System;

 

namespace KDZ_Ternovoy

{

/// <summary>

/// Методы для первого задания

/// </summary>

public class Task1MethodContainer

{

 

// Проверка на совершенность числа

static private bool isPerfect(Int64 number)

{

Int64 sum = 0;

if (number <= 0)

return false;

for (int i = 1; i < number; i++)

{

// Суммируем все делители числа

if (number % i == 0)

sum += i;

}

return (number == sum)? true: false;

}

 

 

// Поиск ближайшего совершенного числа

static public Int64 searchForNearestPerfect(Int64 basicNumber)

{

// Отколнение от нашего числа

Int64 delta = 0;

 

try

{

while (true)

{

if (isPerfect(basicNumber - delta))

{

return basicNumber - delta;

}

else if (isPerfect(basicNumber + delta))

{

return basicNumber + delta;

}

delta++;

}

}

catch

{

}

return 0;

}

}

}

 

Task2MethodContainer.cs

using System;

using System.Collections.Generic;

using System.Windows.Shapes;

using System.Windows.Media;

 

namespace KDZ_Ternovoy

{

/// <summary>

/// Методы для второй задачи

/// </summary>

class Task2MethodContainer

{

// Получение количества многоугольников в зависимости от количества лучей

static private int getNumberOfPolyLines(int K)

{

return (int)(18/(K + 2) + 2);

}

 

// Получение всех необходимых для пострения координат

static public List<List<Point>> getPolylineList(int K, int length)

{

List<List<Point>> polylineList = new List<List<Point>>();

List<Point> pointList;

 

// Считаем расстояние между многоугольниками

int numberOfPolylines = getNumberOfPolyLines(K);

double deltaLength = length / (numberOfPolylines + 1);

double tempDeltalength = deltaLength;

 

// Отклонение каждого луча в радианах

double cornerDelta = 2 * Math.PI / K;

 

// Собственно, получение координат

for (int degree = 0; degree < numberOfPolylines; degree++)

{

pointList = new List<Point>();

 

for (int i = 1; i < K + 1; i++)

{

pointList.Add(new Point((int)(tempDeltalength * Math.Cos(cornerDelta * i)), (int)(tempDeltalength * Math.Sin(cornerDelta * i))));

}

polylineList.Add(pointList);

tempDeltalength += deltaLength;

}

 

//Получим фиальные точки (это будут концы лучей)

pointList = new List<Point>();

for (int i = 1; i < K + 1; i++)

{

pointList.Add(new Point((int)(length * Math.Cos(cornerDelta * i)), (int)(length * Math.Sin(cornerDelta * i))));

}

polylineList.Add(pointList);

 

return polylineList;

}

 

// Получение объекта линии по заданным точкам

static public Line getLine(int X, int Y, int X1, int Y1)

{

Line line = new Line();

line.StrokeThickness = 2;

line.Stroke = new SolidColorBrush(Colors.Black);

line.X1 = X;

line.X2 = X1;

line.Y1 = Y;

line.Y2 = Y1;

 

return line;

}

 

// Получение объекта ломанной линии по точкам

static public Polyline getPolyline(int X, int Y, List<Point> pointList)

{

Polyline polyline = new Polyline();

polyline.StrokeThickness = 2;

polyline.Stroke = new SolidColorBrush(Colors.Black);

 

PointCollection points = new PointCollection();

 

foreach (Point point in pointList)

{

points.Add(new System.Windows.Point(X + point.X, Y + point.Y));

}

points.Add(new System.Windows.Point(X + pointList[0].X, Y + pointList[0].Y));

polyline.Points = points;

return polyline;

 

}

}

 

/// <summary>

/// Класс точки

/// </summary>

class Point

{

private int m_X;

private int m_Y;

 

public Point()

{

}

 

public Point(int X, int Y)

{

this.X = X;

this.Y = Y;

}

 

public int X

{

get { return m_X; }

set { m_X = value; }

}

 

public int Y

{

get { return m_Y; }

set { m_Y = value; }

}

}

}

 



Поделиться:


Последнее изменение этой страницы: 2017-01-24; просмотров: 291; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.70.132 (0.036 с.)