Разработка программы на языке C#
ОГЛАВЛЕНИЕ
Введение
Раздел 1. Постановка задачи
Раздел 2. Математическая
формулировка задачи
Раздел 3. Алгоритмизация задачи
Раздел 4. Идентификаторы программы
Раздел 5. Схемы алгоритмов
Раздел 6. Текст программы
Раздел 7. Результаты выполнения
программы
Раздел 8. Анализ результатов
Раздел 9. Инструкция по работе с
программой
Заключение
Список использованных источников
ВВЕДЕНИЕ
Цель работы: «Создать программу на языке
программирования СИ#, которая проверит, есть ли в матрице хотя бы один столбец,
содержащий положительный элемент, и найти его номер. Упорядочить его элементы
по возрастанию».
Тема работы: «Разработка программы на языке С#».
На сегодняшний день существует множество
различных средств вычислительной техники (в том числе и ЭВМ), позволяющих существенно
повысить эффективность деятельности инженеров при решении различных задач.
Знание основных методов и приемов программирования нужны не только будущему
программисту, но и любому специалисту, использующему компьютер в своей
профессиональной деятельности - это способствует развитию строгого
“алгоритмического” мышления, пониманию основных принципов устройства и работы
компьютера, умению грамотно сформулировать задачу для разработчиков прикладного
программного обеспечения [5].
В данной курсовой работе создавалась программа
для вычислений над матрицами.
В качестве среды программирования выбрана MS
Visual Studio 2010 и язык программирования C# («си шарп»), изучаемый на
занятиях по дисциплине “Основы алгоритмизации и программирования”. К
достоинствам языка С# следует отнести то, что данный язык имеет 300 000
библиотек разных функций, которые работают с максимальным быстродействием.
Алгоритмы и программы, которые представляют интерес для изучения и
исследования, исчисляются десятками и сотнями. Одни из них решают конкретные
задачи на основе известных методов, другие образуют “системную” основу для
огромного большинства прикладных программ. К последней группе алгоритмов можно
отнести методы обработки информации, представленной в виде одномерных и
двухмерных массивов (матриц). Работа с матрицами - это одна из стандартных
функций, возникающих в процессе решения задач самого различного характера [4].
На сегодняшний день математическое
программирование - важная составляющая всего программирования. Большие и
сложные вычисления благодаря простым программам становятся простыми.
РАЗДЕЛ 1. ПОСТАНОВКА ЗАДАЧИ
Реализация решения поставленной задачи
осуществляется посредством 6 методов: static void Main, public static void
GetPositiveNumeric, public static void SortRow, public static void PrintData,
public static int[,] inputMatrix, public static void outputMatrix.
Ключевое слово static
является модификатором. Далее идет тип возвращаемого значения. В данном случае
ключевое слово void
указывает на то, что метод ничего не возвращает. Такой метод еще называется
процедурой. Далее идет название метода. Каждый из методов выполняет свою
определенную функцию. Например, в методе «public static void GetPositiveNumeric»
мы ищем в столбцах матрицы положительные элементы, и, при их наличии,
записываем индексы этих элементов в текстовый файл.
Программа предусматривает вывод следующих
результатов выполнения:
· исходная матрица в виде таблицы;
· сообщение, содержащее информацию о
наличии столбцов, имеющих положительный элемент;
· в случае если такой (-ие) стобец
(-ы) имеется (-ются):
· сообщение о индексах этого (-их)
элемента (-ов);
· результирующая матрица в виде
таблицы;
· в случае если такой (-их) строки
(-к) не имеется:
· в текстовый файл выводится исходная
матрица в виде таблицы.
Вышеперечисленные результаты работы программы в
текстовый файл “output.txt”.
РАЗДЕЛ 2. МАТЕМАТИЧЕСКАЯ ФОРМУЛИРОВКА ЗАДАЧИ
Матрица - это система элементов a [i,
j] (чисел, функций или иных величин, над которыми можно производить
алгебраические операции), расположенных в виде прямоугольной схемы. Если схема
имеет m строк и n столбцов, то говорят о (m` n)-матрице. В случае, если m=n,
матрица называется квадратной, а число m=n - ее порядком [1].
Числа a[i,
j], входящие в состав матрицы, называются ее элементами. В записи a[i,
j] первый индекс i означает номер строки, а второй индекс j - номер столбца
[2].
Двумерный массив - это одномерный массив,
элементами которого являются одномерные массивы. Другими словами, это набор
однотипных данных, имеющий общее имя, доступ к элементам которого
осуществляется по двум индексам [3]. Наглядно двумерный массив удобно
представлять в виде таблицы, в которой n
строк и m столбцов, а под
ячейкой таблицы, состоящей в i-й
строке и j-м столбце понимают
некоторый элемент массива a[i][j].
РАЗДЕЛ 3. АЛГОРИТМИЗАЦИЯ ЗАДАЧИ
Суть программы в том, что бы создать методы, в
которых будут производиться основные логические и математические операции. И
сделать метод Main таким, что
бы в нем не производилось никаких действий кроме ввода и вывода информации.
Для решения нашей задачи нам нужно сначала найти
в матрице столбец, где есть хотя бы один положительный элемент. Для этого нам
нужно проверить каждый элемент всех столбцов. Если в столбце есть таковой
элемент, тогда находим его номер и сортируем столбец по возрастанию.
В программе будет присутствовать 6 методов.
Первый - “Main” создает текстовый файл с конечной матрицей. Второй -
“GetPositiveNumeric” ищет положительные элементы в столбцах исходной матрицы,
которая находится в текстовом файле “input.txt”,
а затем находит индексы этого элемента. Третий - “SortRow” сортирует столбцы
массива с положительными элементами по возрастанию. Четвертый - “PrintData”
выводит матрицу на дисплей. Пятый и шестой - “inputMatrix” и “outputMatrix”
производят чтение и запись матрицы из файла / в файл соответственно.
В результате работы программы в текстовом файле
“output.txt”
мы увидим матрицу - это и будет решение задачи.
РАЗДЕЛ 4. ИДЕНТИФИКАТОРЫ ПРОГРАММЫ
Первый метод - «Main», имеет только один
идентификатор - mas,
который задает массив.
Идентификаторы второго метода указаны в Таблице
1.
Таблица 1 - Идентификаторы метода
«GetPositiveNumeric»
Обозначение
параметров
|
Смысл
параметров
|
В
формулах
|
В
программе
|
|
|
arr
|
Матрица определенной размерности
|
|
arr[j, i]
|
Элемент
матрицы
|
|
i
|
Индекс
строки
|
|
j
|
Индекс
столбца
|
Таблица 2 - Идентификаторы метода
«SortRow»
Обозначение
параметров
|
Смысл
параметров
|
В
формулах
|
В
программе
|
|
|
newArr
|
Новый массив
|
|
sortArr
|
Сортировка
массива
|
|
indexRow
|
Индекс
элемента
|
Таблица 3 - Идентификаторы метода
«PrintData»
Обозначение
параметров
|
В
формулах
|
В
программе
|
|
|
arr[j, i]
|
Элементы
матрицы
|
|
i
|
Индекс
строки
|
|
j
|
Индекс
столбца
|
Таблица 4 - Идентификаторы метода
«inputMatrix»
Обозначение
параметров
|
Смысл
параметров
|
В
формулах
|
В
программе
|
|
|
colsLines
|
Количество
строк
|
|
elems
|
Элементы
|
|
matrix
|
Матрица
|
|
i
|
Индекс
строки
|
|
j
|
Индекс
столбца
|
|
elemMas
|
Элемент
массива
|
|
matrix[i,
k]
|
Элементы
матрицы “matrix”
|
Таблица 5
- Идентификаторы метода «outputMatrix»
Обозначение
параметров
|
Смысл
параметров
|
В
формулах
|
В
программе
|
|
|
i
|
Индекс
строки
|
|
k
|
Индекс
столбца
|
|
matrix[i,
k]
|
Элементы
матрицы “matrix”
|
РАЗДЕЛ 5. СХЕМЫ АЛГОРИТМОВ
Схема алгоритмов выполнена в виде структурных
схем (схем Насси-Шнейдермана). Инструмент для создания схем - программа
Structorizer.
Схемы, созданы в программе Structorizer,
экспортированы в формат PNG
и далее были обработаны средствами программы Photoshop.
Схемы составлялись отдельно для каждой подпрограммы-метода. Схемы отображают
алгоритм функционирования программы (Рисунок 1).
программа
листинг матрица
Рисунок 1 - Схемы алгоритма программы.
РАЗДЕЛ 6. ТЕКСТ ПРОГРАММЫ
Листинг метода
“Main”.
static void Main(string[] args)
{inputFile =
"input.txt";outputFile = "output.txt";
//чтение
матрицы
из
файла[,]
mas = inputMatrix(inputFile);
//печать исходной матрицы
Console.WriteLine("ИСХОДНАЯ
МАТРИЦА");
PrintData(ref
mas);
//метод поиска элементов
GetPositiveNumeric(ref mas,
outputFile);
//запись
матрицы
в
файл
outputMatrix(outputFile, mas);
//печать конечной матрицы
Console.WriteLine("КОНЕЧНАЯ
МАТРИЦА");(ref
mas);
}
Листинг метода
“GetPositiveNumeric”.
public static void
GetPositiveNumeric(ref int[,] arr, string fileName)
{
//ОТКРЫВАЕМ
ПОТОКfile
= new StreamWriter(Convert.ToString(Environment.CurrentDirectory) +
"\\" + fileName, false);.WriteLine("ПОЛОЖИТЕЛЬНЫЕ
ЭЛЕМЕНТЫ");(int
i = 0; i < arr.GetLength(0); i++)
{(int j = 0; j <
arr.GetLength(1); j++)
{
// при условии записываем в файл и выводим на
экран(arr[j, i] > 0)
{.WriteLine("Элемент {0} с
индексами[{1}][{2}]", arr[j, i], j, i);
file.WriteLine("Элемент
" + arr[j, i] + " с индексами["
+ j + "][" + i + "]");
}
}.WriteLine();
//закрываем
поток.Close();previewRow
= -1;(int i = 0; i < arr.GetLength(1); i++)
{(int j = 0; j <
arr.GetLength(0); j++)
{(arr[j, i] > 0 && i !=
previewRow)
{
//запуск метода сортировки столбца
SortRow(ref
arr, i);
previewRow = i;;
}
}
}
}
Листинг метода
“SortRow”.
//метод
поиска
элементовstatic
void SortRow(ref int[,] sortArr, int indexRow)
{[] newArr = new
int[sortArr.GetLength(0)];
//копирование
массива(int
i = 0; i < newArr.Length; i++) newArr[i] = sortArr[i, indexRow];
//сортирвка.Sort(newArr,
(x, y) => x.CompareTo(y));
//запись
в
исходный
массив(int
i = 0; i < sortArr.GetLength(0); i++) sortArr[i, indexRow] = newArr[i];
}
Листинг метода
“PrintData”.
//вывод матрицы на дисплей
public static void PrintData(ref
int[,] arr)
{(int i = 0; i <
arr.GetLength(0); i++)
{(int j = 0; j <
arr.GetLength(1); j++)
{.Write("{0}\t", arr[i,
j]);
}.WriteLine();
}.WriteLine();
}
Листинг метода
“inputMatrix”.
//чтение
матрицы
из
файлаstatic
int[,] inputMatrix(string fileName)
{[,] matrix;line;colsLines =
File.ReadAllLines(Convert.ToString(Environment.CurrentDirectory) +
"\\" + fileName).Length;file = new
StreamReader(Convert.ToString(Environment.CurrentDirectory) + "\\" +
fileName);= file.ReadLine();[] elems = line.Split(new char[] { ',' });= new
int[colsLines, elems.Length];.Close();= new
StreamReader(Convert.ToString(Environment.CurrentDirectory) + "\\" +
fileName);(int i = 0; (line = file.ReadLine()) != null; i++)
{[] elemMas = line.Split(new char[]
{ ',' });(int k = 0; k < elemMas.Length; k++) matrix[i, k] =
Convert.ToInt32(elemMas[k]);
}.Close();matrix;
}
Листинг метода
“outputMatrix”.
//запись
матрицы
в
файлstatic
void outputMatrix(string fileName, int[,] matrix)
{file = new
StreamWriter(Convert.ToString(Environment.CurrentDirectory) + "\\" +
fileName, true);(int i = 0; i < matrix.GetLength(0); i++)
{line = "";(int k = 0; k
< matrix.GetLength(1); k++)
{(k == 0) line +=
Convert.ToString(matrix[i, k]);line += "," +
Convert.ToString(matrix[i, k]);
}.WriteLine(line);
}.Close();
}
РАЗДЕЛ 7. РЕЗУЛЬТАТЫ ВЫПОЛНЕНИЯ ПРОГРАММЫ
Результат работы мы можем увидеть в текстовом
файле “ output.txt” на рисунке 2. Здесь мы видим индексы положительных
элементов исходной матрицы, а также конечную матрицу с сортировкой элементов по
возрастанию.
Рисунок 2 - Конечная матрица.
РАЗДЕЛ 8. АНАЛИЗ РЕЗУЛЬТАТОВ
В ходе разработки программы все неполадки были
устранены, программа работает корректно, дополнительное тестирование не
требуется.
Работа программы проверялась для различных
исходных данных. В таблице 6 представлены исходные данные и полученные
результаты. Их анализ показывает, что программа работает корректно.
Таблица 6 - Анализ результатов работы программы.
Исходные
данные
|
Результат
|
-5,8,-4
-11,-2,5 -2,7,-8
|
-5,-2,-8
-11,7,-4 -2,8,5
|
-2,-8,-4
-1,-2,-1 -6,-7,-8
|
-2,-8,-4
-1,-2,-1 -6,-7,-8
|
2,-8,-4
1,-2,3 6,-7,-8
|
1,-8,-8
2,-2,-4 6,-7,3
|
2,-8,-4
-1,-2,0 6,-7,0
|
-1,-8,-4
2,-2,0 6,-7,0
|
РАЗДЕЛ 9. ИНСТРУКЦИЯ ПО РАБОТЕ С ПРОГРАММОЙ
Работу с программным кодом, написанным на языке
С#, будем осуществлять посредством программного продукта Microsoft
Visual Studio
2010.
Для просмотра кода программы, необходимо её
запустить. Для этого выполним двойной щелчок по файлу проекта программы,
имеющего имя “Program.cs”. Результатом выполнения этих действий и будет
открытие окна программы Microsoft
Visual Studio
2010, а в центре экрана можно увидеть код программы курсового проекта, имеющего
вид, представленный на рисунке 3.
Рисунок 3 - Окно программы.
В использовании программы нет ничего сложного.
Для начала, пользователь должен зайти в папку, где находится сама программа,
затем запустить файл “input.txt”.
После того, как вы это сделали, откроется текстовый файл, где находится
исходная матрица (Рисунок 4). Числа в матрице можно менять на свое усмотрение,
после этого нужно будет сохранить файл.
Рисунок 4 - Текстовый файл с исходной матрицей.
Числа в матрице можно менять на свое усмотрение,
после этого нужно будет сохранить файл. Затем запускаем файл “Inga.exe”
и перед нами откроется и автоматически закроется консольное окно. После
правильного выполнения вышеуказанных действий нужно открыть текстовый файл с
именем “output.txt”
(Рисунок 5). Там и будет находиться конечная матрица и искомые индексы
положительных элементов.
ЗАКЛЮЧЕНИЕ
В ходе выполнения курсовой работы была получена
работоспособная программа, удовлетворяющая начальному заданию. Кроме того
сделаны дополнения, которые усовершенствовали программу и сделали ее более
удобной и эффективной.
После выполнения задания курсовой работы можно
подвести итоги. Разработка данного курсового проекта позволила мне глубже
вникнуть в возможности языка С#, лучше ознакомится со структурными методами
программирования, оценить необходимость составления блок-схемы перед написанием
программы.
Разработка программы позволила мне применить на
практике и расширить полученные знания по программированию на языке С#, изучить
наиболее важные и распространенные методы сортировки, а также математический
аппарат работы с матрицами, без которых невозможно представить ни одну
информационную систему.
Работа с многомерными массивами данных имеет не
только самостоятельное значение - она используется для эффективного решения
других задач в компьютерных системах. Эта программа мало кому пригодится, но
немного изменив код можно получать очень полезные программы. Поэтому я считаю,
программа написана не зря, потому что данный код можно использовать для разных
целей в программировании.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Матрица(б.д.). Получено май 2014
r., из wikipedia.org: http://ru.wikipedia.org/wiki/Матрица_(математика)
. Матрицы. Виды матриц. (б.д.).
Получено май 2014 r., из spiruk:
http://spiruk.wordpress.com/2011/12/18/определение-матрицы-виды-матриц/
. Матрицы. Операции над матрицами.
(б.д.). Получено май 2014 r., из mathelp.spb.ru:
http://www.mathelp.spb.ru/book1/matrix_and_det.htm
4. Самоучитель С#. (б.д.). Получено
май 2014 г., из http://mysharp.ru/
. C# (си шарп). (б.д.). Получено май
2014 г., из HYPERLINK
"http://ru.wikipedia.org/wiki/C_Sharp" http://ru.wikipedia.org/wiki/C_Sharp