Файл: Курсовая работа Название дисциплины Программирование Тема.doc

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 09.01.2024

Просмотров: 107

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


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

В зависимости от количества операндов в C# есть одноместные, двухместные и одна трёхместная операция.

По назначению операции можно сгруппировать таким образом: арифметические, операции сравнения, логические, побитовые, специальные.

Рассмотрим основные операции языка C#.

1) Операция присваивания

Операция, обозначаемая знаком =, называется операцией присваивания. Данная операция является бинарной, имеет два операнда. Например, X=Y. Операнд слева от знака может быть только переменной, объектом. Операнд справа может быть выражением, т. е. записью в которой используются знаки других операций. Как правило, операция = является главной операцией, образующей оператор присваивания.

Имеется интересная особенность этой операции. Она допускает цепочку присваиваний. Например, X=Y=Z=10;

2) Арифметические операции

Различают 5 операций, выполняющих арифметические действия над числами.

Выполнение первых трёх операций очевидно и не требует пояснения. А вот операция деления зависит от типа данных. Если тип данных, участвующих в операции, вещественный, то результат получится по правилам деления с целой и дробной частью. Если тип целый, то результатом деления также является целое число.

Деление по модулю возможно только для целых чисел. Оно обеспечивает получение остатка от деления двух целых чисел.

Например, в результате операции 15% 4 получится число 3. Таким образом, пара операций / и % обеспечивает для целых чисел специфическую возможность: можно получить и целую часть, и остаток от деления.

Арифметические операции можно объединять вместе с операцией присваивания, записывая две операции в виде одной. Это так называемая сокращённая форма записи.

К арифметическим операциям относятся две специфические операции — инкремент и декремент. Эти операции позволяют изменять значения переменных на 1. Инкремент — увеличивает, обозначается знаком ++. Декремент — уменьшает, обозначается знаком — -. По сути дела, эти операции являются сокращённой формой записи для выражений типа i = i +1 и i = i — 1. Например, вместо a = a + 1; можно записать: a++; (постфиксный вариант) или ++a; (префиксный вариант). Аналогично: — -Prim; Prim--;

Между двумя последними формами нет никакой разницы, если эти операции являются единственными в записи выражения, т. е. используются самостоятельно. Если же речь идёт об использовании в сложном выражении, то приходится учитывать, когда на самом деле выполняются эти операции. Суть в том, что при постфиксном варианте записи значение переменной сначала используется, а потом изменяется на 1. При префиксном, наоборот, сначала изменяется, а потом используется.


3) Поразрядные операции

В C# имеются операции, пригодные для обработки отдельных разрядов памяти (например, в видеопамяти графического дисплея). Такие операции называются поразрядными (операции с битами). Они позволяют изменять, считывать и сдвигать разряды в переменных. При этом переменная рассматривается не как число, а как комбинация двоичных разрядов, т. е. как логический код. Операция выполняется отдельно над каждым разрядом. Перечень поразрядных операций приведён в следующей таблице.

Поразрядные операции можно использовать только с целочисленными типами данных, к вещественным числам их применять нельзя! 4) Операции отношения:

Все операции отношения используются для сравнения значений переменных или выражений. Эти операции вырабатывают значение булевского типа: ИСТИНА (true) или ЛОЖЬ (false). Численных эквивалентов для этих значений в языке C# не существует. Перечень операций приведён в таблице:

При выполнении операций сравнения следует помнить одну специфическую особенность. Точное сравнение вещественных чисел возможно только с нулём!

Сравнение ненулевых вещественных чисел, полученных путём вычислений, возможно только с определённой точностью. Это связано с формой представления вещественных чисел (формат с плавающей запятой). А вот числа формата Decimal можно сравнивать между собой на равно.

5) Логические операции:

Логические операции используются для составления логических выражений на основе выражений, которые используют операции сравнения. Такие выражения называются булевыми. Значением булевого выражения также может быть ИСТИНА и ЛОЖЬ.

6) Операция «приведение к типу»:

Эта операция используется тогда, когда необходимо преобразовать значение одного типа в значение другого типа. Это так называемое явное преобразование типов. Операция задаётся указанием имени типа в круглых скобках.

7) Строковые преобразования. Класс Convert

Не существует явного преобразования арифметических типов в строки! Операция «приведение к типу» здесь невозможна. Однако, в базовом классе Object имеется и определён метод ToString. Так как все арифметические типы данных считаются потомками (наследниками) класса Object, то для них предусмотрена соответствующая реализация этого метода. Следовательно, метод ToString можно использовать, когда любое арифметическое значение надо преобразовать в строку.

Достаточно часто требуется обратное преобразование — строку в число. Для таких преобразований предусмотрен специальный класс методов — класс Convert, встроенный в пространство имен System. Этот класс содержит 15 статических методов вида To (ToBoolean, … ТоInt64), где Type может принимать значения от Boolean до UInt64 (см. таблицу встроенных типов). Единственным исключением является тип Object, — метода ToObject нет по понятным причинам, поскольку для всех типов существует неявное преобразование к типу Object.



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

8) Понятие исключения

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

Исключения являются нормальным способом уведомления об ошибках в работе программы. Возможна стандартная обработка исключения, когда система просто информирует пользователя о случившейся неприятности и завершает выполнение программы. Однако, считается хорошим стилем, когда программист предусматривает возможность появления исключения и сам обеспечивает его обработку. Говорят, что программист «ловит» исключение, вставляя в текст программы соответствующий блок. Пример обработки исключения будет рассмотрен в одной из моих ближайших статей.

В состав библиотеки FCL (FreeClassLibrary, библиотека свободных классов — это объектно-ориентированная библиотека, нацеленная на работу с XML, веб-программирование, взаимодействие с базами данных, обработку изображений и др.) входит класс Exception, свойства и методы которого позволяют работать с исключениями. Свойства этого класса определяют виды исключений, которые задаются определёнными идентификаторами. Если в некотором блоке предполагается возможность появления исключений, то разумно заключить этот блок в фигурные скобки и предварить ключевым словом try. Вслед за этим блоком можно расположить один или несколько блоков, обрабатывающих исключения, — это так называемые catch-блоки. Каждый catch-блок имеет формальный параметр, определяющий, какое именно исключение будет обработано в этом блоке. Если в try-блоке возникает исключение, то catch-блоки начинают конкурировать в борьбе за перехват исключения. Обрабатывает исключение тот блок, параметр которого соответствует исключению. Ну, а чтобы исключение было правильно обработано, программист должен разместить в блоке необходимые операторы.

1.4 Выбор языка

Язык программирования C# вобрал лучшие черты целого ряда своих предшественников. Кроме языка C#, необходимо указать еще несколько знаковых для настоящего времени языков программирования, а именно, Java и VisualBasic.

Проанализировав основные особенности данного языка программирования, я попытаюсь сформулировать наиболее заметные преимущества данного языка программирования. Язык программирования C# призван практически реализовать компонентно-ориентированный подход к программированию, который способствует меньшей машинно-архитектурной зависимости результирующего программного кода, большей гибкости, переносимости и легкости повторного использования (фрагментов) программ.

Принципиально важным отличием от предшественников является изначальнаяориентация на безопасность кода (что особенно заметно в сравнении с языками C и C++), данная безопасность прежде всего соблюдена в самой платформе. net, но о ней поговорим позже. Расширенная поддержка событийно-ориентированного программирования выгодно отличает язык программирования C# от целого ряда предшественников. Объединение лучших идей современных языков программирования (Java, C++, VisualBasic и др.) делает язык C# не просто суммой их достоинств, а языком программирования нового поколения.

Несмотря на значительное количество принципиальных преимуществ по сравнению с существующими аналогами, язык программирования C# не лишен и отдельных недостатков, которые, весьма вероятно, носят субъективный, локальный, временный характер. Прежде всего, необходимо отметить то обстоятельство, что язык программирования C# имеет довольно сложный синтаксис (можно утверждать, что примерно 75% его синтаксических возможностей аналогичны языку программирования Java, 10% - подобны языку программирования C++, а 5% - заимствованы из языка программирования VisualBasic). Объем действительно свежих концептуальных идей в языке C# относительно невысок (по мнению некоторых исследователей, он, составляет около 10% от общего объема конструкций языка).

До настоящего времени компилятор и среда разработки программного обеспечения, поддерживающие язык C#, обладают относительно невысокой производительностью (т.е. код программы на языке C# компилируется и выполняется примерно в 100 раз медленнее, чем тот же код на языке C). Справедливости ради нужно отметить, что производительность программ на C# вполне сравнима с тем же показателем для языка Java.

И так подведём краткие итоги по преимуществам языка программирования С#:


1. Компонентно-ориентированное программирование;

2. Безопасный (по сравнению с языками C и C++) код;

3. Унифицированная система типизации;

4. Поддержка событийно-ориентированного программирования;

5. «Родной» язык для создания приложений в среде. net;

6. Объединение лучших идей современных языков программирования: Java, C++, VisualBasic и др.

Недостатки языка программирования C#:

1. Довольно сложный синтаксис (75% из Java, 10% из C++, 5% из VisualBasic);

2. Относительно немного свежих концептуальных идей (вероятно, менее чем 10% конструкций языка);

3. Относительно невысокая производительность ( в 100 раз медленнее, чем язык C, хотя и сравнимая с языком Java).

2 глава основной части


2.1 Перевод алгоритма в программный код

Воспользуемся приемами модульного программирования для создания программного кода.

Модульность в языках программирования — принцип, согласно которому программное средство (ПС, программа, библиотека, веб-приложение и др.) разделяется на отдельные именованные сущности, называемые модулями. Модульность часто является средством упрощения задачи проектирования ПС и распределения процесса разработки ПС между группами разработчиков. При разбиении ПС на модули для каждого модуля указывается реализуемая им функциональность, а также связи с другими модулями.

Программный код часто разбивается на несколько файлов, каждый из которых компилируется отдельно от остальных. Такая модульность программного кода позволяет значительно уменьшить время перекомпиляции при изменениях, вносимых лишь в небольшое количество исходных файлов, и упрощает групповую разработку. Также это возможность замены отдельных компонентов (таких как jar-файлы, so или dll библиотеки) конечного программного продукта, без необходимости пересборки всего проекта (например, разработка плагинов к уже готовой программе).

Одним из методов написания модульных программ является объектно-ориентированное программирование. ООП обеспечивает высокую степень модульности благодаря таким свойствам, как инкапсуляция, полиморфизм и позднее связывание.

Для контроля структуры программы можно использовать три метода:

1. Статический контроль,

2. Смежный контроль,

3. Сквозной контроль.

Статический контроль состоит в оценке структуры программы сточки зрения хорошо ли программа разбита на модули с учетом значений рассмотренных выше основных характеристик модуля.

Смежный контроль сверху — это контроль со стороны разработчиков архитектуры и внешнего описания ПС. Смежный контроль снизу — это контроль спецификации модулей со стороны разработчиков этих модулей.