- •Примеры курсовых работ
- •Реферат
- •Введение
- •1 Исследование предметной области
- •1.1 Описание предметной области
- •1.2 Описание входных и выходных данных
- •2.1.2 Описание связей
- •2.2 Даталогическая модель
- •3 Практическая реализация базы данных
- •3.1 Выбор системы управления базами данных
- •3.2 Создание таблиц
- •3.3 Запросы
- •Заключение
- •Список использованных источников и литературы
- •4 Курса гр. 10-гр-20
- •Введение
- •1 Постановка задачи
- •2 Программная реализация решения задачи
- •2.1 Алгоритмизация проблемы
- •2.2 Реализация динамической части
- •2.3 Реализация исполняемой части
- •4 Руководство пользователя
- •Заключение
- •Список использованных источников и литературы
2.3 Реализация исполняемой части
Исполняемая часть приложения объединяет программные коды, которые резидентно находятся в оперативной памяти в течении всего времени выполнения программы. Поэтому в нашем случае сюда необходимо включить классы, содержащие данные, которые загружаются в программу один раз, и методы, которые подготавливают данные для обработки, инициируют вычисления и осуществляют вывод результата.
К исходным данным, согласно алгоритму, относятся вектор-столбец и прямоугольная матрица. Для их хранения в программе идеально подходят структуры данных в форме одномерного и двухмерного массивов.
В нашем случае цель состоит в применении параллельного программирования как средства, существенно повышающего производительность вычислений. Поэтому исходными данными очевидно должны быть массивы очень больших размерностей. Для заполнения их данными как нельзя лучше подходят генераторы псевдослучайных чисел, что и нашло своё воплощение в программе.
Согласно условию задачи, исполняемая часть должна быть реализована на C#. Соответствующий листинг представлен далее:
/*
Программа, вычисляющая произведение матриц с помощью
параллельных вычислений. Вычисления производятся с помощью функции threadMatrixProduct, которая вызывается из динамической
сборки.
*/
using System;
using Matrix;
class Program
{
/*генерация матрицы m x n целых случайных чисел, не
превышающих величину max:
*/
static public double[,] GetRNDArray(int m, int n, double max)
{
double[,] a = new double[m,n];
Random rnd = new Random(DateTime.Now.Millisecond);
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
a[i,j] = rnd.Next((int)max);
return a;
}
//вывод матрицы на консоль:
static void matrixPrn (string title, double[,] a)
{
int m = a.GetLength (0);
int n = a.GetLength (1);
Console.WriteLine(title);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++)
Console.Write("\t" + a[i,j]);
Console.WriteLine();
}
}
static void Main()
{
Console.WriteLine("Вычисление произведения матриц");
Console.WriteLine("---------------------------------");
Console.Write("число строк 1-й матрицы: ");
int m = Convert.ToInt32(Console.ReadLine());
Console.Write("число столбцов 1-й и строк 2-й матриц: ");
int k = Convert.ToInt32(Console.ReadLine());
Console.Write("число столбцов 2-матрицы: ");
int n = Convert.ToInt32(Console.ReadLine());
//Объявление и генерация исходных матриц
//1-я матрица:
double[,] a = matrixGenerate(m, k);
//2-я матрица:
double[,] b = matrixGenerate(k, n);
//вычисление произведения матриц с помощью
//параллельных вычислений, реализованных в виде
//функции, вызываемой из динамической библиотеки:
double[,] c = MatrixProd.threadMatrixProduct(a, b);
matrixPrn("\n\ta = ", a);
matrixPrn("\n\tb = ", b);
matrixPrn("\n\ta * b = ", c);
}
}
Здесь следует сделать ряд пояснений: подключено пространство имён Matrix, которое содержит реализацию функции параллельных вычислений произведения матриц threadMatrixProduct из класса MatrixProd, созданного ранее на F#. генерацию матриц случайных чисел выполняет метод GetRNDArray (), который использует генератор псевдослучайных чисел Next() класса Random.
3 Руководство программиста
В качестве среды разработки программного обеспечения выбрана Xamarin Studio 5.0 на платформе Mono Framework 3.0, которая является аналогом Visual Studio 10 для .NET 4.0 и, при этом распространяется совершенно бесплатно. Пакет разработчика Xamarin Studio является преемником своего более раннего аналога Mono Develop, а Mono Framework – аналогом .NET, но при этом реализована для нескольких операционных систем, в то время как .NET только для Windows.
Следует также отметить, что консольное приложение, оттранслированное в среде Xamarin Studio будет функционировать не только под управлением Mono Framework но и .NET Framework, так как эти платформы полностью совместимы.
Как отмечалось ранее, наше приложение должно состоять из двух частей – динамической и базовой. Базовая часть представляет собой исполняемую сборку, а динамическая часть – динамическую сборку.
Для создания динамической сборки откроем проект Библиотека (Library) для F# среды Xamarin Studio. Проекту дадим имя имя F#. В окно исходного кода следует ввести, либо скопировать рассмотренный ранее текст программы, реализующей динамическую сборку. В результате компиляции получим динамическую сборку F#.dll.
Исполняемую сборку также реализуем с помощью Xamarin Studio, где создадим проект C для консольного приложения C#. К проекту подключим динамическую сборку F#.dll, построенную ранее. После компиляции получим исполняемую сборку C.exe.
Таким образом будет создано приложение для вычисления произведения матриц, состоящее из двух файлов: Реализация процесса вычислений в форме динамической сборки, позволит в дальнейшем подключать её к любому приложению для .NET, осуществляя таким образом повторное использование присущее компонентной модели эволюционной стратегии проектирования программных продуктов.
