Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая Ломако.docx
Скачиваний:
18
Добавлен:
13.02.2016
Размер:
1.53 Mб
Скачать

Раздел 5. Схемы алгоритмов

Схема алгоритмов выполнена в виде структурных схем (схем Насси-Шнейдермана). Инструмент для создания схем – программа Structorizer.

Схемы, созданы в программе Structorizer, экспортированы в формат PNG и далее были обработаны средствами программы Photoshop. Схемы составлялись отдельно для каждой подпрограммы-метода. Схемы отображают алгоритм функционирования программы (Рисунок 1).

Рисунок 1 – Схемы алгоритма программы.

Раздел 6. Текст программы

Листинг метода “Main”.

static void Main(string[] args)

{

string inputFile = "input.txt";

string outputFile = "output.txt";

//чтение матрицы из файла

int[,] mas = inputMatrix(inputFile);

//печать исходной матрицы

Console.WriteLine("ИСХОДНАЯ МАТРИЦА");

PrintData(ref mas);

//метод поиска элементов

GetPositiveNumeric(ref mas, outputFile);

//запись матрицы в файл

outputMatrix(outputFile, mas);

//печать конечной матрицы

Console.WriteLine("КОНЕЧНАЯ МАТРИЦА");

PrintData(ref mas);

}

Листинг метода “GetPositiveNumeric”.

public static void GetPositiveNumeric(ref int[,] arr, string fileName)

{

//ОТКРЫВАЕМ ПОТОК

StreamWriter file = new StreamWriter(Convert.ToString(Environment.CurrentDirectory) + "\\" + fileName, false);

Console.WriteLine("ПОЛОЖИТЕЛЬНЫЕ ЭЛЕМЕНТЫ");

for (int i = 0; i < arr.GetLength(0); i++)

{

for (int j = 0; j < arr.GetLength(1); j++)

{

// при условии записываем в файл и выводим на экран

if (arr[j, i] > 0)

{

Console.WriteLine("Элемент {0} с индексами[{1}][{2}]", arr[j, i], j, i);

file.WriteLine("Элемент " + arr[j, i] + " с индексами[" + j + "][" + i + "]");

}

}

}

Console.WriteLine();

//закрываем поток

file.Close();

int previewRow = -1;

for (int i = 0; i < arr.GetLength(1); i++)

{

for (int j = 0; j < arr.GetLength(0); j++)

{

if (arr[j, i] > 0 && i != previewRow)

{

//запуск метода сортировки столбца

SortRow(ref arr, i);

previewRow = i;

break;

}

}

}

}

Листинг метода “SortRow”.

//метод поиска элементов

public static void SortRow(ref int[,] sortArr, int indexRow)

{

int[] newArr = new int[sortArr.GetLength(0)];

//копирование массива

for (int i = 0; i < newArr.Length; i++) newArr[i] = sortArr[i, indexRow];

//сортирвка

Array.Sort(newArr, (x, y) => x.CompareTo(y));

//запись в исходный массив

for (int i = 0; i < sortArr.GetLength(0); i++) sortArr[i, indexRow] = newArr[i];

}

Листинг метода “PrintData”.

//вывод матрицы на дисплей

public static void PrintData(ref int[,] arr)

{

for (int i = 0; i < arr.GetLength(0); i++)

{

for (int j = 0; j < arr.GetLength(1); j++)

{

Console.Write("{0}\t", arr[i, j]);

}

Console.WriteLine();

}

Console.WriteLine();

}

Листинг метода “inputMatrix”.

//чтение матрицы из файла

public static int[,] inputMatrix(string fileName)

{

int[,] matrix;

string line;

int colsLines = File.ReadAllLines(Convert.ToString(Environment.CurrentDirectory) + "\\" + fileName).Length;

StreamReader file = new StreamReader(Convert.ToString(Environment.CurrentDirectory) + "\\" + fileName);

line = file.ReadLine();

string[] elems = line.Split(new char[] { ',' });

matrix = new int[colsLines, elems.Length];

file.Close();

file = new StreamReader(Convert.ToString(Environment.CurrentDirectory) + "\\" + fileName);

for (int i = 0; (line = file.ReadLine()) != null; i++)

{

string[] elemMas = line.Split(new char[] { ',' });

for (int k = 0; k < elemMas.Length; k++) matrix[i, k] = Convert.ToInt32(elemMas[k]);

}

file.Close();

return matrix;

}

Листинг метода “outputMatrix”.

//запись матрицы в файл

public static void outputMatrix(string fileName, int[,] matrix)

{

StreamWriter file = new StreamWriter(Convert.ToString(Environment.CurrentDirectory) + "\\" + fileName, true);

for (int i = 0; i < matrix.GetLength(0); i++)

{

string line = "";

for (int k = 0; k < matrix.GetLength(1); k++)

{

if (k == 0) line += Convert.ToString(matrix[i, k]);

else line += "," + Convert.ToString(matrix[i, k]);

}

file.WriteLine(line);

}

file.Close();

}