- •2014 Оглавление
- •Введение
- •Раздел 1. Постановка задачи
- •Раздел 2. Математическая формулировка задачи
- •Раздел 3. Алгоритмизация задачи
- •Раздел 4. Идентификаторы программы
- •Раздел 5. Схемы алгоритмов
- •Раздел 6. Текст программы
- •Раздел 7. Результаты выполнения программы
- •Раздел 8. Анализ результатов
- •Раздел 9. Инструкция по работе с программой
- •Заключение
- •Список использованных источников
Раздел 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();
}