Приложение C# для работы с одномерными и многомерными массивами



МИНИСТЕРСТВО ОБРАЗОВАНИЯ РФ

Государственное образовательное учреждение

высшего профессионального образования

«РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ИННОВАЦИОННЫХ ТЕХНОЛОГИЙ И ПРЕДПРИНИМАТЕЛЬСТВА»

Пензенский филиал 

 

Факультет информационных технологий

 

КАФЕДРА «УПРАВЛЕНИЕ ИНФОРМАЦИОННЫМИ РЕСУРСАМИ»

 

Курсовая работа

по дисциплине «Высокоуровневые методы информатики и программирования»

Тема:

«Приложение C# для работы с одномерными и многомерными массивами»

 

 

 

                                                                   Выполнили:

            студенты гр. 09Э3                                                                  

                                              Клипиков А. и Азизова Т.                                                  

                                                                                                            

                                                                                                              ______________

                                                                                                               (подпись, дата)

 

 

                                                                  Проверила:

                                                                          преподаватель

                                                                                           Д.Д. Аббясова

 

                                                                                                                                 ______________

                                                                                                                                 (подпись, дата)

 

 

 

 

 

 

 

                                                    Пенза 2011

СОДЕРЖАНИЕ

 

 

Введение              3

1 Теоретические сведения              4

2 Работа с массивами в C#              8

   2.1 Работа с одномерными массивами              9

   2.2 Работа с многомерными массивами

   2.3 Пользовательская форма «Главное меню»

   2.4 Пользовательская форма «Об авторах»

   2.5 Пользовательская форма «О программе»

Заключение

Список использованной литературы              19

Приложение №1

Приложение №2

Приложение №3

Приложение №4

Приложение №5

Приложение №6

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                      Введение

 

 

Язык программирования С# был создан в конце 1990-х годов и стал частью общей NET-стратегии Microsoft. Впервые он увидел свет в качестве b-версии в середине 2000 года. Главным архитектором С# был Андерс Хейлсберг – один из ведущих специалистов в области языков программирования, получивший признание во всем мире. Достаточно сказать, что в 1980-х он был автором весьма успешного продукта Turbo Pascal, изящная реализация которого установила стандарт для всех будущих компиляторов. С# непосредственно связан с С, C++ и Java. Эти три языка - самые популярные и самые любимые языки программирования в мире. Более того, почти все профессиональные программисты сегодня знают С и C++, и большинство знает Java. Поскольку С# построен на прочном, понятном фундаменте, то переход от этих "фундаментальных" языков к "надстройке" происходит без особых усилий со стороны программистов. Так как Андерс Хейлсберг не собирался изобретать свое "колесо", он сосредоточился на введении усовершенствований и новшеств.

Родоначальником С# является язык С. От С язык С# унаследовал синтаксис, многие ключевые слова и операторы. Кроме того, С# построен на улучшенной объектной модели, определенной в C++. Если вы знаете С или C++, то с С# вы сразу станете друзьями. С# и Java связаны между собой несколько сложнее. Как упоминалось выше, Java также является потомком С и C++. У него тоже общий с ними синтаксис и сходная объектная модель. Подобно Java C# предназначен для создания переносимого кода. Однако С# -- не потомок Java. Скорее С# и Java можно считать двоюродными братьями, имеющими общих предков, но получившими от родителей разные наборы "генов".

 

 

 

                               1 ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

 

В последнее время  С и С++ является наиболее используемым языком для разработки коммерческих и бизнес приложений. Эти языки устраивают многих разработчиков, но в действительности не обеспечивают должной продуктивности разработки. К примеру, процесс написания приложения на С++ зачастую занимает значительно больше времени, чем разработка эквивалентного приложения, скажем, на Visual Basic. Сейчас существуют языки, увеличивающие продуктивность разработки за счет потери в гибкости, которая так привычна и необходима программистам на С/С++. Подобные решения являются весьма неудобными для разработчиков и зачастую предлагают значительно меньшие возможности. Эти языки также не ориентированы на взаимодействие с появляющимися сегодня системами и очень часто они не соответствуют существующей практике программирования для Web. Многие разработчики хотели бы использовать современный язык, который позволял бы писать, читать и сопровождать программы с простотой Visual Basic и в то же время давал мощь и гибкость C++, обеспечивал доступ ко всем функциональным возможностям системы, взаимодействовал бы с существующими программами и легко работал с возникающими Web стандартами.

Учитывая все подобные пожелания, Microsoft разработала новый язык - C#. В него входит много полезных особенностей - простота, объектная ориентированность, типовая защищенность, "сборка мусора", поддержка совместимости версий и многое другое. Данные возможности позволяют быстро и легко разрабатывать приложения, особенно COM+ приложения и Web сервисы. При создании C#, его авторы учитывали достижения многих других языков программирования: C++, C, Java, SmallTalk, Delphi, Visual Basic и т.д. Надо заметить, что по причине того, что C# разрабатывался с чистого листа, у его авторов была возможность (которой они явно воспользовались), оставить в прошлом все неудобные и неприятные особенности (существующие, как правило, для обратной совместимости), любого из предшествующих ему языков. В результате получился действительно простой, удобный и современный язык, по мощности не уступающий С++, но существенно повышающий продуктивность разработок.

Очень часто можно проследить такую связь - чем более язык защищен и устойчив к ошибкам, тем меньше производительность программ, написанных на нем. К примеру, рассмотрим две крайности - очевидно, это Assembler и Java. В первом случае вы можете добиться фантастической быстроты своей программы, но вам придется очень долго заставлять ее работать правильно не на вашем компьютере. В случае же с Java - вы получаете защищенность, независимость от платформы, но, к сожалению, скорость вашей программы вряд ли совместима со сложившимся представлением о скорости, например, какого-либо отдельного клиентского приложения (конечно, существуют оговорки - JIT компиляция и прочее).

В C#, как в, несомненно, современном языке, существуют характерные особенности для обхода возможных ошибок. Например, помимо упомянутой выше "сборки мусора", там все переменные автоматически инициализируются средой и обладают типовой защищенностью, что позволяет избежать неопределенных ситуаций в случае, если программист забудет инициализировать переменную в объекте или попытается произвести недопустимое преобразование типов. Также в C# были предприняты меры для исключения ошибок при обновлении программного обеспечения. Изменение кода, в такой ситуации, может непредсказуемо изменить суть самой программы. Чтобы помочь разработчикам бороться с этой проблемой C# включает в себя поддержку совместимости версий (vesioning). В частности, в отличие от C++ и Java, если метод класса был изменен, это должно быть специально оговорено. Это позволяет обойти ошибки в коде и обеспечить гибкую совместимость версий. Также новой особенностью является native поддержка интерфейсов и наследования интерфейсов. Данные возможности позволяют разрабатывать сложные системы и развивать их со временем.

В C# была унифицирована система типов, теперь вы можете рассматривать каждый тип как объект. Несмотря на то, используете вы класс, структуру, массив или встроенный тип, вы можете обращаться к нему как к объекту. Объекты собраны в пространства имен (namespaces), которые позволяют программно обращаться к чему-либо. Это значит, что вместо списка включаемых файлов заголовков в своей программе вы должны написать какие пространства имен, для доступа к объектам и классам внутри них, вы хотите использовать. В C# выражение using позволяет вам не писать каждый раз название пространства имен, когда вы используете класс из него. Например, пространство имен System содержит несколько классов, в том числе и Console. И вы можете писать либо название пространства имен перед каждым обращением к классу, либо использовать using, как это было показано в примере выше.

Важной и отличительной от С++ особенностью C# является его простота. К примеру, всегда ли вы помните, когда пишите на С++, где нужно использовать "->", где "::", а где "."? Даже если нет, то компилятор всегда поправляет вас в случае ошибки. Это говорит лишь о том, что в действительности можно обойтись только одним оператором, а компилятор сам будет распознавать его значение. Так в C#, оператор"->" используется очень ограничено (в unsafe блоках, о которых речь пойдет ниже), оператор "::" вообще не существует. Практически всегда вы используете только оператор "." и вам больше не нужно стоять перед выбором.

В C#, также как и в Visual Basic после каждого выражения case в блоке switch подразумевается break. И более не будет происходить странных вещей, если вы забыли поставить этот break. Однако если вы действительно хотите чтобы после одного выражения case, программа перешла к следующему, вы можете переписать свою программу с использованием, например, оператора goto.

Многим программистам (на тот момент, наверное, будущим программистам) было не так легко во время изучения C++ полностью освоиться с механизмом ссылок и указателей. В C# (кто-то сейчас вспомнит о Java) нет указателей. В действительности нетривиальность указателей соответствовала их полезности. Например, порой, трудно себе представить программирование без указателей на функции. В соответствии с этим в C# присутствуют Delegates - как прямой аналог указателя на функцию, но их отличает типовая защищенность, безопасность и полное соответствие концепциям объектно-ориентированного программирования.

Современность C# проявляется и в новых шагах к облегчению процесса отладки программы. Традиционным средством для отладки программ на стадии разработки в C++ является маркировка обширных частей кода директивами #ifdef и т.д. В C#, используя атрибуты, ориентированные на условные слова, вы можете куда быстрее писать отлаживаемый код.

В наше время, когда усиливается связь между миром коммерции и миром разработки программного обеспечения, и корпорации тратят много усилий на планирование бизнеса, ощущается необходимость в соответствии абстрактных бизнес процессов их программным реализациям. К сожалению, большинство языков реально не имеют прямого пути для связи бизнес логики и кода. Например, сегодня многие программисты комментируют свои программы для объяснения того, какие классы реализуют какой-либо абстрактный бизнес объект. C# позволяет использовать типизированные, расширяемые метаданные, которые могут быть прикреплены к объекту. Архитектурой проекта могут определяться локальные атрибуты, которые будут связанны с любыми элементами языка - классами, интерфейсами и т.д.

 

 

 

 

 

 

                                   2 РАБОТА С МАССИВАМИ В C#

 

 

Массив - набор элементов одного и того же типа, объединенных общим именем. Массивы в С# можно использовать по аналогии с тем, как они используются в других языках программирования. Однако С# - массивы имеют существенные отличия: они относятся к ссылочным типам данных, более того - реализованы как объекты. Фактически имя массива является ссылкой на область кучи (динамической памяти), в которой последовательно размещается набор элементов определенного типа. Выделение памяти под элементы происходит на этапе инициализации массива. А за освобождением памяти следит система сборки мусора - неиспользуемые массивы автоматически утилизируются данной системой. 

Одномерный массив - это фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент имеет свой номер. Нумерация элементов массива в С# начинается с нуля, то есть, если массив состоит из 10 элементов, то его элементы будут иметь следующие номера: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 

Одномерный массив в С# реализуется как объект, поэтому его создание представляет собой двухступенчатый процесс. Сначала объявляется ссылочная переменная на массив, затем выделяется память под требуемое количество элементов базового типа, и ссылочной переменной присваивается адрес нулевого элемента в массиве. Базовый тип определяет тип данных каждого элемента массива. Количество элементов, которые будут храниться в массиве, определяется размер массива.

В общем случае процесс объявления переменной типа массив, и выделение необходимого объема памяти может быть разделено. Кроме того, на этапе объявления массива можно произвести его инициализацию.

Многомерные массивы имеют более одного измерения. Чаще всего используются двумерные массивы, которые представляют собой таблицы. Каждый элемент массива имеет два индекса, первый определяет номер строки, второй - номер столбца, на пересечении которых находится элемент. Нумерация строк и столбцов начинается с нуля. 

 Объявить двумерный массив можно одним из следующих способов:

тип [,] имя__массива;

тип [,] имя__массива = new тип [размер1, размер2];

тип [,] имя__массива{{элементы 1-ой строки}, … , {элементы n-ой строки}};

тип [,] имя__массива new тип [,]{{элементы 1-ой строки}, …, {элементы n-ой строки}};

строки}}.

 

 

                             2.1 Работа с одномерными массивами

 

Задание.

Найти сумму положительных и сумму отрицательных элементов массива X(22), сформированного случайным образом.

Для решения вышеизложенного задания был создан проект приложения AzizovaKlipikovApplicationProject, находящийся в папке проекта AzizovaKlipikovApplicationSolution.

Далее была создана форма Work1.cs, в которой  будет находиться программный код задания. В окне Solution Explorer, нажав двойным щелчком на левую клавишу мыши, активируется форма Work1.cs. В окне Properties в свойстве Text вводится название формы, которое будет отображаться  в строке состояния.

В следующем шаге на форму из окна Toolbox добавляются необходимые элементы, такие как Label – поле статического текста, Textbox - поле для ввода значений данных, DataGridView - решетка, выполняющая роль таблицы и Button – кнопка, куда помещается, непосредственно, текст программы. См. рис.2.1.1.

 

 

Рис. 2.1.1. Предварительное оформление формы первого задания

 

 

Учитывая тот факт, что в проекте необходимо обеспечить иерархичность элементов – форм, следует в текущей и последующих формах создать дополнительную кнопку для перехода в  форму - главное меню проекта, которое будет представлено позже.

Для кнопки с именем button2 формы Work1.cs, с текстовым атрибутом «В главное меню», после  двойного щелчка вводится программный код:

 

this.Hide(); //- закрывает одну форму

AzizovaKlipikovMainForm fm = new

AzizovaKlipikovMainForm ();

fm.ShowDialog(); // - открывает другую форму

this.Close();

 

Это код позволяет закрывать активную форму и одновременно открывать другую.

Аналогичные действия проводятся и для других форм приложения.

Основной текст программы  помещается в кнопку button1, с текстовым атрибутом «ОПРЕДЕЛИТЬ»

На начальном этапе необходимо для объекта DataGridView в свойстве Columns добавить определенное количество столбцов - 22. См. рис. 2.1.2.

 

Рис. 2.1.2. Окно для добавления столбцов в таблицу

 

 

Для добавления программного кода необходимо нажать два раза на левую кнопку мыши.

Для создания одномерного массива следует объявить этот массив. Объявление происходит следующим образом:

int[] «название массива»;

«название массива» = new int[«размерность»];

 

Следующим шагом идет объявление необходимых переменных. В зависимости от типа данных определяется и тип переменной:

«тип данных» «имя переменной»;

 

Типом данных может быть int, single, float, double и т.д.

Для случайного формирования элементов массива используется генератор случайных чисел Random, который подключается следующим образом:

 

Random random = new Random();

Для непосредственного формирования массива из случайных чисел идёт присвоение объявленному массиву массива чисел:

 

«имя массива»[«имя элемента цикла»] = (random.Next(«нижний диапозон значений», «верхний диапозон значений» ));

 

Цикл в программе объявляется следующим образом:

 

for («тип данных» «имя элемента цикла» «математическая операция» «значение»; «имя элемента цикла» «математическая операция» «значение»; «имя элемента цикла» «шаг»)

 

Обычно шаг в цикле 1-ца и записывается как: «имя элемента цикла»++.

 

Инициализация одномерной таблицы происходит следующим образом:

 

DataGridView.CurrentCell=DataGridView[«имя элемента цикла», 0];

 

Присвоение массива таблице производится конвертированием исходного типа данных в строковый формат String:

 

DataGridView.CurrentCell.Value= Convert.ToString(«имя массива» [«имя элемента цикла»]);

 

Присвоение любого значения переменной Textbox производится также конвертированием исходного типа данных в строковый тип:

 

«имя Textbox».Text = «имя переменной».ToString();

 

Условие задаётся оператором if:

 

if («переменная/массив/…» «операция» «значение»);

 

Запуск формы осуществляется командой Debug/Start Debugging или нажатием на кнопку F5.

Программный код задания приводятся в Приложении №1.

Скриншот формы  приводится в  Приложении №2.

 

2.2 Работа с многомерными массивами

 

Задание.

Матрица В(7,7) сформирована случайным образом. Среди элементов ее главной диагонали найти максимальный. Если он меньше некоторого числа S, введенного с клавиатуры, все элементы строки, где он находится, увеличить в два раза.

Для выполнения задания создается форма Work2.cs и в свойстве Text вводится название формы, которое будет отражаться в строке состояния.

Далее добавляется элемент DataGridView и в окне Properties объекта выбирается свойство Columns, куда в соответствии с заданием добавляется нужное количество колонок – 7.

Для вывода элементов главной диагонали добавляется ещё один объект DataGridView, состоящий также из 7 колонок, но имеющий одномерный тип.

Также в форму добавляются два элемента Textbox, в одну из которых необходимо вводить произвольное число S, а в другую максимальный элемент главной диагонали матрицы.

Для добавления программного кода в кнопку button2 с текстовым атрибутом «ОПРЕДЕЛИТЬ» необходимо нажать два раза на левую кнопку мыши.

Практически все описанные ранее в пункте 2.1 блоки программного кода встречаются и в описываемом коде. Так как в этом задании представлен многомерный массив, добавление строк происходит следующим образом:

 

«имя DataGridView».Rows.Add(«размерность»);

 

Инициализация многомерной таблицы происходит следующим образом:

 

…………………«цикл по I»………………….

DataGridView.CurrentCell = DataGridView[0, I];

………………«цикл по J»……………….

DataGridView.CurrentCell = DataGridView[J, I];

 

Дальнейшие действия аналогичны.

Программный код задания приводятся в Приложении №3.

Скриншот формы  приводится в  Приложении №4.

 

2.3 Пользовательская форма «Главное меню»

 

Данная форма является первым элементом иерархии, из которой осуществляется переход в формы с заданиями. Для того, чтобы  форма запускалась по умолчанию первой, необходимо в окне Properties нажать двойным щелчком на файл Program.cs и поменять название запускаемой формы, выбрав нужную строку. См. рис. 2.3.1.

 

 

Рис. 2.3.1. Запуск необходимой формы по умолчанию

 

 

Следующим шагом является  добавление кнопок, каждая из которых будет открывать ту или иную форму.

В форму также добавляется объект Label с текстовым атрибутом «Выбор задания», а также фоновый рисунок. Для добавления изображения необходимо, нажав на форму в окне Properties, найти свойство Background Image и выбрать рисунок, который подходит по расширению. См. рис. 2.3.2.

 

 

Рис. 2.3.2. Добавление фонового рисунка в форму

 

Программный код для кнопок перехода в формы был приведен в пункте 2.1 (стр. 10).

Скриншот формы  приводится в  Приложении №5.

 

2.4 Пользовательская форма «Об авторах»

 

Данная форма является ознакомительной. В ней приводится фамилии авторов курсового проекта. Для этого из меню Toolbox в форму добавляется объект статического текста Label, куда вводится текст. Также на форме предусмотрена кнопка возврата в основное меню с текстовым атрибутом «В главное меню». Программный код кнопки приводится в пункте 2.1 (стр. 10).

Скриншот формы приводится в Приложении №6.

 

 

 

2.5 Пользовательская форма «О программе»

 

Данная форма содержит название программы, год издания и  версию, а также информацию об авторских правах.

Также на форме предусмотрена кнопка возврата в основное меню с текстовым атрибутом «В главное меню». Программный код кнопки приводится в пункте 2.1 (стр. 10).

Скриншот формы приводится в Приложении №7.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение

 

 

Язык C# явился мощным и стремительным рывком в развитии программирования. C# в скором будущем будет  занимать господствующее положение среди языков программирования в мире. Огромное множество профессиональных программистов использует именно его при разработке разного рода проектов. Очевидно, этот язык будет сохранять свое солидное положение ещё много лет, при этом динамично развиваясь и совершенствуясь. Становится очевидным, что судьбу языка программирования С# определили запросы пользователей. Его направлял опыт широкого круга пользователей, работающих в разных областях программирования. За шесть лет, отделяющих нас от первого издания описания С#, число пользователей возросло в сотни раз. За эти годы были усвоены многие уроки, были предложены и подтвердили практикой свое право на существование различные приемы программирования.

 

 

 

 

 

 

 

 

 

 

 

 

 

Список использованной литературы

 

1. Сивохин А.В., Макурин Ю.Д. Проектирование Windows-приложений в визуальных объектно-ориентированных  средах. Описание лабораторных работ. – Пенза, 2010 – 48 с.

2. Вилле К. Представляем Си Шарп. ДМК Пресс, 2001. ISBN 5-94074-039-1.

3. Зыков С.В. Современные языки программирования. Ч.I. Функциональный

подход к программированию. М.:МИФИ – 2003, 230 с.

4. Робинсон У. C# без лишних слов. ДМК Пресс, 2002. ISBN 5-94074-177-0

5. Шилдт Г. С#, учебный курс. Питер, 2003.

6. Visual C#. NET Systematically, Microsoft Press, 2003.             

7. Понамарев В. Программирование на C++/C# в Visual Studio .NET 2003

БХВ-Петербург, 2004.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение №1

 

Программный код формы Work1.cs

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace AzizovaKlipikovApplicationProject

{

    public partial class Work1 : Form

    {

        public Work1()

        {

            InitializeComponent();

        }

 

        private void AzizovaKlipikovClassForm_Load(object sender, EventArgs e)

        {

 

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            int[] k;

            k = new int[22];

            int sum1;

            int sum2;

           

            Random random = new Random();

           sum1 = 0;

           sum2 = 0;

            for (int I = 0; I < 22; I++)

            {

                k[I] = (random.Next(-50, 50));

                {

                    if (k[I] > 0)

                        sum1 += k[I];

                    DataGridView.CurrentCell = DataGridView[I, 0];

                    DataGridView.CurrentCell.Value = Convert.ToString(k[I]);

                }

                {

                    if (k[I]<0)

                        sum2+=k[I];

                }

                TextBox.Text = sum1.ToString();

                TextBox1.Text= sum2.ToString();

            }

           

        }

 

        private void label3_Click(object sender, EventArgs e)

        {

 

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

Приложение C# для работы с одномерными и многомерными массивами