Информатика и вычислительная техника
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
ФИЛИАЛ ФГОУ ВПО МОСКОВСКОГО ГОСУДАРСТВЕННОГО
УНИВЕРСИТЕТА ТЕХНОЛОГИЙ И УПРАВЛЕНИЯ
ИМ. К. Г. РАЗУМОВСКОГО В Г. ВЯЗЬМЕ
Курсовая работа
Дисциплина: «Программирование»
Специальность: 230100 «Информатика и вычислительная техника»
Курс: 2 (СФО)
Форма обучения: заочная
Вариант: № 8
Студент: Зотова Валентина Юрьевна
Преподаватель: Коростелёв Михаил Кириллович
2013
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
В настоящее время, с наступлением века высоких технологий, ни одна отрасль науки и техники не представима без использования вычислительной техники. В свою очередь работа вычислительной техники не возможна без наличия программного обеспечения, соответствующего современным требованиям качества.
Целью настоящей курсовой работы, является разработка и реализация на языках высокого уровня алгоритмов решения задач, представленных в задании курсовой работы.
Объектами исследования курсовой работы являются методы и технологии разработки программных продуктов.
Предметами исследования настоящей курсовой работы являются методы, алгоритмы и приёмы разработки программ обработки двумерных массивов, файлов, строк.
Информационной базой исследования является учебная литература по информатике и программированию, техническая документация по языку С# инструментальной среды MS Visual Studio 2010.
Практически все современные языки программирования высокого уровня (и C# в их числе) поддерживают технологию объектно-ориентированного программирования (ООП). В этой технологии главным «действующим лицом» является объект (или компонент), представляющий собой во многом независимый от остальной части программы и, в большинстве случаев, самодостаточный ее фрагмент, решающий некоторую функциональную задачу.
Существует немало языков программирования, но лишь немногие из них действительно хороши. Хороший язык программирования должен быть одновременно эффективным и гибким, а его синтаксис — кратким, но ясным. Он должен облегчать создание правильного кода, не мешая делать это, а также поддерживать самые современные возможности программирования.
Благодаря своей способности быстро приспосабливаться к постоянно меняющимся потребностям в области программирования С# по-прежнему остается живым и новаторским языком. А следовательно, он представляет собой один из самых эффективных и богатых своими возможностями языков в современном программировании.
1. ТЕОРЕТИЧЕСКОЕ ВВЕДЕНИЕ
1.1. Алфавит языка С#
В С# используется кодировка символов Unicode. Кодировка Unicode позволяет представить символы всех существующих алфавитов одновременно, что коренным образом улучшает переносимость текстов.
- прописные и строчные латинские буквы и буквы национальных алфавитов (включая кириллицу);
- арабские цифры от 0 до 9, шестнадцатеричные цифры от A до F;
- специальные знаки: " { } , | ; [ ] ( ) + - / % * . \ ' : ? < = > ! & ~ ^ @ _
- пробельные символы: пробел, символ табуляции, символ перехода на новую строку.
Из символов алфавита формируются лексемы языка: идентификаторы, ключевые (зарезервированные) слова, знаки операций, константы, разделители (скобки, точка, запятая, пробельные символы).
Идентификатор может включать латинские буквы и буквы национальных алфавитов, цифры и символ подчеркивания. Прописные и строчные буквы различаются, например, myname, myName и MyName — три различных имени. Первым символом идентификатора может быть буква или знак подчеркивания, но не цифра. Могут быть зарезервированные идентификаторы, которые имеют специальное значение для компилятора, например, include, main, int и т.д.
Часть идентификаторов С# входит в фиксированный словарь ключевых слов. Эти идентификаторы образуют подмножество ключевых слов (они так и называются ключевыми словами).
Прочие идентификаторы
после специального объявления
становятся именами. Имена
Существуют переменные, значение которых нельзя изменить(константы). Константы бывают трех видов: литералы, символические константы и перечисления.
В операторе присваивания: x=32. Число 32 является литеральной константой и его значение всегда равно 32 и его нельзя изменить.
Символические константы именуют постоянные значения. Определение символической константы происходит следующим образом:
const <тип> <идентификатор> = <значение>;
Перечисления (enumerations) являются альтернативой константам. Перечисление - это особый размерный тип, состоящий из набора именованных констант (называемых списком перечисления).
К знакам операций относится один или более символов, определяющих действие над операндами. Внутри знака операции пробелы не допускаются. Например, в выражении а + b знак + является знаком операции, а а и b — операндами. Символы, составляющие знак операций, могут быть как специальными, например, &&, | и <, так и буквенными, такими как as или new.
Операции делятся на унарные, бинарные и тернарную по количеству участвующих в них операндов. Один и тот же знак может интерпретироваться по-разному в зависимости от контекста. Все знаки операций, за исключением [ ], ( ).и ? :, представляют собой отдельные лексемы. Для разделения используются скобки, точка, запятая. Ниже перечислены все знаки операций и разделители, использующиеся в С#:
{} [] (). . :: + - * / * % & | ˆ ! ˜ =
< > ? ++ -- && || « » == != <=>= += - = .*=
/= %= &= |= ˆ= <<= >>= ->
Существуют следующие виды операций:
- Операции инкремента (++) и декремента (--), называемые также операциями увеличения и уменьшения на единицу, имеют две формы записи префиксную, когда знак операции записывается перед операндом, и постфиксную.
- Операция new служит для создания нового объекта. Формат операции: new тип ( [ аргументы ] )
- Арифметическое отрицание (унарный минус -) меняет знак операнда на противоположный. Стандартная операция отрицания определена для типов int, long, float, double и decimal.
- Логическое отрицание (!) определено для типа boo!. Результат операции значение false, если операнд равен true, и значение true, если операнд равен false.
- Поразрядное отрицание (~), часто называемое побитовым, инвертирует каждый разряд в двоичном представлении операнда типа int, uint, long или ulong.
- Операция остатка от деления (%).
Также в языке С# очень часто используются управляющие символы, все используемые символы представлены в таблице 1.1
Таблица 1.1
Управляющие символы
Вид |
Наименование |
\a |
Звуковой сигнал |
\b |
Возврат на шаг назад |
\f |
Перевод страницы |
\n |
Перевод строки |
\r |
Возврат каретки |
\t |
Горизонтальная табуляция |
\v |
Вертикальная табуляция |
\\ |
Обратная косая черта |
\’ |
Апостроф |
С# является языком со строгой типизацией. В нем необходимо объявлять тип всех создаваемых программных элементов (например, переменных, объектов, окон, кнопок и т. д.). Тип программного элемента сообщает компилятору о его размере (например, тип int показывает, что объект занимает 4 байта) и возможностях.
В С# типы делятся на две группы: базовые типы, предлагаемые языком, и типы, определяемые пользователем. Кроме того, типы С# разбиваются на две другие категории: размерные типы (типы по значению) и ссылочные типы.
Типы можно классифицировать по разным признакам. Если принять за основу строение элемента, все типы можно разделить на простые (не имеют внутренней структуры) и структурированные (состоят из элементов других типов). Для данных динамического типа размер данных в момент объявления может быть неизвестен, и память под них выделяется по запросу в процессе выполнения программы.
Почти все базовые типы являются размерными типами. Исключение составляют типы Object и String. Все пользовательские типы, кроме структур, являются ссылочными. Дополнительно к упомянутым типам, язык С# поддерживает типы указателей, однако они используются только с неуправляемым кодом. Принципиальное различие между размерными и ссылочными типами состоит в способе хранения их значений в памяти.
Целые типы, а также символьный, вещественные и финансовый типы можно объединить под названием арифметических типов.
Вещественные типы, или типы данных с плавающей точкой, хранятся в памяти компьютера иначе, чем целочисленные. Внутреннее представление вещественного числа состоит из двух частей — мантиссы и порядка, каждая часть имеет знак. Длина мантиссы определяет точность числа, а длина порядка его диапазон.
Все вещественные типы могут представлять как положительные, так и отрицательные числа. Чаще всего в программах используется тип double, поскольку его диапазон и точность покрывают большинство потребностей. Этот тип имеют вещественные литералы и многие стандартные математические функции.
Тип decimal предназначен для денежных вычислений, в которых критичны ошибки округления. Величины типа decimal позволяют хранить 28-29 десятичных разрядов.
Чаще всего типы С# разделяют по способу хранения элементов на типы-значения и ссылочные типы.
Язык С# предлагает обычный набор базовых типов, представленных в таблице 1.2
Таблица 1.2
Базовый набор типов данных
Тип |
Размер в байтах |
Тип .NET |
Описание |
Базовый тип | |||
object |
Object |
Может хранить все что угодно, т.к. является всеобщим предком | |
Логический тип | |||
Bool |
1 |
Bolean |
true или false |
Целые типы | |||
Sbyte |
1 |
SByte |
Целое со знаком (от -128 до 127) |
Byte |
1 |
Byte |
Целое без знака (от 0 до 255) |
Short |
2 |
Int16 |
Целое со знака (от -32768 до 32767) |
ushort |
2 |
UInt16 |
Целое без знака (от 0 до 65535) |
Int |
4 |
Int32 |
Целое со знаком (от -2147483648 до 2147483647) |
Uint |
4 |
UInt |
Целое число без знака ( от 0 до 4 294 967 295) |
Long |
8 |
Int64 |
Целое со знаком (от -9223372036854775808 до 9223372036854775807) |
ulong |
8 |
UInt64 |
Целое без знака (от 0 до 0fffffffffffffff) |
Вещественные типы | |||
Float |
4 |
Single |
Число с плавающей точкой двойной точности. Содержит значения приблизительно от 1.5*10-45 до 3.4*1038 c 7 значащими цифрами |
Продолжение табл.1.2
double |
8 |
Double |
Число с плавающей точкой двойной точности. Содержит значения приблизительно от ±5. 0*10-324 до ±1.7*10308 c 15-16 значащими цифрами |
Символьный тип | |||
Char |
2 |
Сhar |
Символы Unicode |
Строковый тип | |||
string |
String |
Строка из Unicode-символов | |
Финансовый тип | |||
decimal |
12 |
Decimal |
Число до 28 знаков с фиксированным положением десятичной точки. Обычно используется в финансовых расчетах. Требует суффикса <<m>> или <<М>> |
Операнды, связанные знаками операций, образуют выражения. Понятие «выражение» в языке программирования соответствует понятию «словосочетание» в языке человека. Тип выражения определяется типом операндов.
Комментарии предназначены для записи пояснений к программе и формирования документации. Компилятор комментарии игнорирует. Внутри комментария можно использовать любые символы. В С# есть два вида комментариев: однострочные и многострочные. Однострочный комментарий начинается с двух символов прямой косой черты (//) и заканчивается символом перехода на новую строку, многострочный заключается между символами-скобками /* и */ и может занимать часть строки, целую строку или несколько строк. Комментарии не вкладываются друг в друга: символы // и /* не обладают никаким специальным значением внутри комментария.
1.2. Операторы языка С#
Программа на языке С# состоит из последовательности операторов, каждый из которых определяет законченное описание некоторого действия и заканчивается точкой с запятой. Все операторы можно разделить на 4 группы: операторы следования, операторы ветвления, операторы цикла и операторы передачи управления.
Операторы следования выполняются компилятором в естественном порядке: начиная с первого до последнего. К операторам следования относятся: выражение и составной оператор. Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении значения выражения или выполнении законченного действия, например, вызова метода. Например:
++i; //оператор инкремента
x+=y; //оператор сложение с присваиванием
Console.WriteLine(x); //вызов метода
x=Math.Pow(a,b)+a*b; //
Частным случаем оператора выражения является пустой оператор ; Он используется тогда, когда по синтаксису оператор требуется, а по смыслу — нет. Составной оператор или блок представляет собой последовательность операторов, заключенных в фигурные скобки {}. Блок обладает собственной областью видимости: объявленные внутри блока имена доступны только внутри данного блока или блоков, вложенных в него. Составные операторы применяются в случае, когда правила языка предусматривают наличие только одного оператора, а логика программы требует нескольких операторов. Например, тело цикла while должно состоять только из одного оператора. Если заключить несколько операторов в фигурные скобки, то получится блок, который будет рассматриваться компилятором как единый оператор.
Операторы ветвления позволяют изменить порядок выполнения операторов в программе. К операторам ветвления относятся условный оператор if и оператор выбора switch.
Условный оператор if используется для разветвления процесса обработки данных на два направления.
Формат оператора: if ( логическое_выражение ) оператор_1; [ else оператор_2; ]
Сначала вычисляется логическое выражение. Если оно имеет значение true, выполняется первый оператор, иначе — второй. После этого управление передается на оператор, следующий за условным. Ветвь else может отсутствовать. Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок. Блок может содержать любые операторы, в том числе описания и другие условные операторы, но не может состоять из одних описаний.
Примеры условных операторов:
if ( a < 0 ) b = 1;
if ( a < b && ( a > d || a == 0 ) ) b++; else { b *= a; a = 0; } // 2
if ( a < b ) if ( a < c ) m = a; else m = c;
else if ( b < c ) m = b; else m = c; // 3
if ( b > a ) max = b; else max = a; // 4
Если требуется проверить несколько условий, их объединяют знаками логических условных операций. Например, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие a < b и одно из условий в скобках. Оператор в примере 3 вычисляет наибольшее значение из трех переменных.
Оператор выбора switch предназначен для разветвления процесса вычислений по нескольким направлениям.
Формат оператора:
switch ( <выражение> )
{
case <константное_выражение_1>:
[<оператор 1>]; <оператор перехода>;
case <константное_выражение_2>:
[<оператор 2>]; <оператор перехода>;
case <константное_выражение_n>:
[<оператор n>]; <оператор перехода>;
[default: <оператор>; ] }
Выполнение оператора начинается с вычисления выражения, расположенного за ключевым словом switch. Полученный результат сравнивается с меткой case. Если результат выражения соответствует метке case, то выполняется оператор, стоящий после этой метки, за которым обязательно должен следовать оператор перехода: break, goto и т.д. При использовании оператора break происходит выход из switch и управление передается оператору, следующему за switch. Если же используется оператор goto, то управление передается оператору, помеченному меткой, стоящей после goto.
Каждая ветвь переключателя должна заканчиваться явным оператором перехода, а именно одним из операторов break, goto или return:
- оператор break выполняет выход из самого внутреннего из объемлющих его операторов switch, for, while и do;
- оператор goto выполняет переход на указанную после него метку, обычно это метка case одной из нижележащих ветвей оператора switch;
- оператор return выполняет выход из функции, в теле которой он записан.
Операторы цикла используются для организации многократно повторяющихся вычислений. К операторам цикла относятся: цикл с предусловием while, цикл с постусловием do while, цикл с параметром for и цикл перебора foreach.. Блок, ради выполнения которого и организуется цикл, называется телом цикла. Остальные операторы служат для управления процессом повторения вычислений: это начальные установки, проверка условия продолжения цикла и модификация параметра цикла. Один проход цикла называется итерацией.
Проверка условия продолжения цикла выполняется на каждой итерации либо до тела цикла (тогда говорят о цикле с предусловием), либо после тела цикла (цикл с постусловием). Параметром цикла называется переменная, которая используется при проверке условия продолжения цикла и принудительно изменяется на каждой итерации, причем, как правило, на одну и ту же величину. Если параметр цикла целочисленный, он называется счетчиком цикла. Цикл завершается, если условие его продолжения не выполняется.
Оператор цикла while организует выполнение одного оператора (простого или составного) неизвестное заранее число раз.
Формат оператора: while ( выражение ) оператор.
Оператор цикла do while также организует выполнение одного оператора (простого или составного) неизвестное заранее число раз. Однако в отличие от цикла while условие завершения цикла проверяется после выполнения тела цикла.
Цикл с постусловием и имеет вид: do оператор while выражение.
Так как условие проверяется после выполнения тела цикла, то в любом случае тело цикла выполнится хотя бы один раз. В операторе do while, так же как и в операторе while, возможна ситуация зацикливания в случае, если условие всегда будет оставаться истинным.
Цикл с параметром имеет следующую структуру:
for ( <инициализация>; <выражение>; <модификация>) <оператор>;
Инициализация используется для объявления и/или присвоения начальных значений величинам, используемым в цикле в качестве параметров (счетчиков). В этой части можно записать несколько операторов, разделенных запятой. Областью действия переменных, объявленных в части инициализации цикла, является цикл и вложенные блоки.
Инициализация выполняется один раз в начале исполнения цикла. Выражение определяет условие выполнения цикла: если его результат истинен, цикл выполняется. Истинность выражения проверяется перед каждым выполнением тела цикла, таким образом, цикл с параметром реализован как цикл с предусловием. В блоке выражение через запятую можно записать несколько логических выражений, тогда запятая равносильна операции логическое И (&&).
Модификация выполняется после каждой итерации цикла и служит обычно для изменения параметров цикла. В части модификация можно записать несколько операторов через запятую. Оператор (простой или составной) представляет собой тело цикла. Любая из частей оператора for (инициализация, выражение, модификация, оператор) может отсутствовать, но точку с запятой, определяющую позицию пропускаемой части, надо оставить.
Циклы могут быть простые или вложенные (кратные, циклы в цикле). Вложенными могут быть циклы любых типов: while, do while, for. Каждый внутренний цикл должен быть полностью вложен во все внешние циклы. «Пересечения» циклов не допускаются.
Цикл foreach используется для просмотра всех объектов из некоторой группы данных, например, массива, списка или другого контейнера. В С# есть несколько операторов, изменяющих естественный порядок выполнения команд: оператор безусловного перехода goto, оператор выхода break, оператор перехода к следующей итерации цикла continue, оператор возврата из метода return и оператор генерации исключения throw.
Оператор безусловного перехода goto используется в одной из трех форм: goto метка, goto case константное_выражение, goto default.
Оператор goto метка передает управление на помеченный оператор. Метка является обычный идентификатор, областью видимости которого является функция, в теле которой он задан. Метка должна находиться в той же области видимости, что и оператор перехода. Следует учитывать, что использование оператора goto затрудняет чтение больших по объему программ, поэтому использовать метки нужно только в крайних случаях, например, в операторе switch.
Оператор break используется внутри операторов ветвления и цикла для обеспечения перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится break.
Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации (повторение тела цикла).
Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова.
Тип выражения должен иметь неявное преобразование к типу функции. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.
1.3. Понятие классов и объектов
Класс содержит данные, задающие свойства объектов класса, и функции, определяющие их поведение. В последнее время в класс часто добавляется третья составляющая — события, на которые может реагировать объект класса. Все классы имеют одного общего предка — класс object и организованы в единую иерархическую структуру.
Описание класса содержит ключевое слово class, за которым следует его имя, а далее в фигурных скобках — тело класса, то есть список его элементов. Кроме того, для класса можно задать его базовые классы (предки) и ряд необязательных атрибутов и спецификаторов, определяющих различные характеристики класса:
[ атрибуты ] [ спецификаторы ] class имя_класса [ : предки ] тело_класса.
Классом является специальный тип данных, включающий описание данных и описание функций (методов), которые могут быть выполнены над представителем класса — объектом.
Поле. Так называется член-переменная, содержащий некоторое значение. В ООП поля иногда называют данными объекта. К полю можно применять несколько модификаторов в зависимости от того, как вы собираетесь его использовать. В число модификаторов входят static, readonly и const.
Метод. Это реальный код, воздействующий на данные объекта (или поля). Все, используемые модификаторы класса представлены в таблице 1.3.
Таблица 1.3
Модификаторы класса
№ |
Спецификатор |
Описание |
1 |
new |
Используется для вложенных
классов. Задает новое описание класса
взамен унаследованного от предка.
Применяется в иерархиях |
2 |
public |
Доступ не ограничен |
3 |
protected |
Используется для вложенных классов. Доступ только из элементов данного и производных классов |
4 |
internal |
Доступ только из данной программы (сборки) |
5 |
protected internal |
Доступ только из данного и производных классов или из данной программы (сборки) |
6 |
private |
Используется для вложенных классов. Доступ только из элементов класса, внутри которого описан данный класс |
7 |
abstract |
Абстрактный класс. Применяется в иерархиях объектов |
8 |
sealed |
Бесплодный класс. Применяется в иерархиях объектов |
9 |
static |
Статический класс. |
К элементам класса относятся:
- Константы хранят неизменяемые значения, связанные с классом;
- Поля содержат данные класса;
- Методы реализуют действия, выполняемые классом или экземпляром;
- Свойства определяют характеристики класса в совокупности со способами их задания и получения ( методами записи и чтения);
- Конструкторы выполняют действия по инициализации экземпляров или класса в целом;
- Деструкторы определяют действия, выполняемые перед тем как объект будет уничтожен;
- Индексаторы обеспечивают возможность доступа к элементам класса по их порядковому номеру;
- Операции задают действия с объектами с помощью знаков операций;
- События, на которые может реагировать объект, определяют уведомления, которые может генерировать класс;
- Типы внутренние по отношению к классу типы данных.
Объекты класса создаются явным или неявным образом (программистом или системой). Для явного создания экземпляра используется операция new. Формат операции: new тип ( [ аргументы ]). Программа на С# состоит из взаимодействующих между собой классов. Программист создает экземпляр класса с помощью операции new, например:
Demo a = new Demo(); // создание экземпляра класса Demo
Demo b = new Demo(); // создание другого экземпляра класса Demo.
Для каждого объекта при его создании в памяти выделяется отдельная область, в которой хранятся его данные. Кроме того, в классе могут присутствовать статические элементы, которые существуют в единственном экземпляре для всех объектов класса. Часто статические данные называют данными класса, а остальные — данными экземпляра.
1.4. Структура программного модуля на С#
Программист пишет программу, компьютер ее выполняет. Программа создается на языке, понятном человеку, а компьютер умеет исполнять только программы, написанные на его языке — в машинных кодах. Совокупность средств, с помощью которых программы пишут, корректируют, преобразуют в машинные коды, отлаживают и запускают, называют средой разработки, или оболочкой.
Среда разработки обычно содержит:
текстовый редактор, предназначенный для ввода и корректировки текста программы;
- компилятор, с помощью которого программа переводится с языка, на котором она написана, в машинные коды;
- средства отладки и запуска программ;
- общие библиотеки, содержащие многократно используемые элементы программ;
- справочную систему и другие элементы.
- В эпоху стремительного развития Интернета важнейшими задачами при создании программ становятся:
- переносимость и возможность выполнения на различных типах компьютеров;
- безопасность и невозможность несанкционированных действий;
- надежность или способность выполнять необходимые функции в предопределенных условиях; средний интервал между отказами;
- использование готовых компонентов для ускорения разработки;
- межъязыковое взаимодействие и возможность применять одновременно несколько языков программирования.

- Информатика и информационные технологии
- Информатика и информационные технологии в образованных учреждениях
- Информатика как наука
- Информатика как наука
- Информатика как наука: развитие и перспектиы
- Информатика как наука: электронный период и перспективы развития
- Информатика как наука: электронный период и перспективы развития
- Информатика
- Информатика
- Информатика
- Информатика в жизни рядового чаеловека
- Информатика, виды информатики
- Информатикадан кластан тыс жұмыстарды ұйымдастыру
- Информатикадан танымдық жұмыстар жүргізу