АЛГОРИТМЫ, СТРУКТУРЫ ДАННЫХ И ПРОГРАММИРОВАНИЕ Введение в дисциплину Развитие информационных технологий неразрывно связано с совершенствованием языков программирования, которые, в свою очередь, предоставляют разработчикам новые возможности в развитии информационных технологий. Эти процессы взаимосвязаны и дополняют друг друга. Стремительный рост информационных технологий, особенно Интернет технологий, потребовал революционных преобразований в технологии программирования, что нашло свое отражение в появлении платформы программирования взамен существующих сред визуального программирования. Пионером в этой новой технологии программирования является корпорация Microsoft, которая в начале 2000г. создала продукт .NET Framework, содержащий новую платформу .NET (произносится «дот-нет»), предназначенную для разработки и выполнения программ. Платформа .NET включает не только среду разработки для нескольких языков программирования, называемую Visual Studio.NET, но и множество других средств, позволяющих решать проблемы переносимости программ на различные типы компьютеров, безопасности – невозможность несанкционированных действий, совместимости типов данных для разных языков программирования и т.д. Структура платформы .NET не привязана к конкретному языку программирования и позволяет разрабатывать приложения на любом из языков, входящих в состав среды разработки Visual Studio.NET. Более того, отдельные части проекта могут быть написаны на различных языках и объединены в одно приложение. Платформа .NET является структурой открытого типа – может легко пополняться различными языками и средами программирования, что позволит реализовать эволюционный путь развития технологий программирования. Хотя платформа .NET не привязана к конкретному языку программирования, но в состав среды разработки Visual Studio.NET был введен новый язык программирования C# (си-шарп). Ведущим программистом, возглавившим группу разработчиков языка C#, является Андерс Хейлсберг, который долгое время руководил разработками языков программирования фирмы Borland. Это наложило свой отпечаток на возможности языка C#, основой которого являются языки C, C++ и технология визуальных компонентов среды Delphi. Содержание дисциплины включает изучение основ построения алгоритмов решения различных задач, основ языка программирования C#, изучение основных алгоритмов работы с массивами данных, сортировки и поиска элементов массивов по некоторым ключевым элементам, алгоритмы решения различных транспортных задач, представленных графами. Тема 1 Простые операторы языка программирования C#. Лекция_1 СТРУКТУРА ПЛАТФОРМЫ .NET (За основу 1 первой лекции взята глава 1 Учебника для ВУЗОВ – C# Программирование на языке высокого уровня. Автор Т.А. Павловская, ПИТЕР, 2009) 1.1 Введение в платформу .NET Идея платформы .NET это создание единой системы, предназначенной для разработки и выполнения приложений, написанных на любом языке программирования. Для написания приложений в платформу .NET включена среда разработки для нескольких языков программирования, называемая Visual Studio.NET, которая содержит текстовый редактор, предназначенный для ввода и корректировки кода проекта приложения, средства отладки и запуска проекта, справочную систему и другие элементы. Для обеспечения совместимости типов данных разных языков программирования платформа .NET требует для каждого языка программирования использование общей системы типов (Common Type System – CTS) – однообразной формы представления данных в памяти компьютера. Для обеспечения переносимости приложений на различные типы компьютеров в платформе .NET предусмотрен единый промежуточный язык компиляции (Common Intermediate Language – CIL), в который преобразуются приложения, написанные на любом языке платформы. Команды этого языка не привязаны к конкретной операционной системе и типу компьютера и тем более к исходному коду приложения. Программа на языке CIL выполняется не самостоятельно, а под управлением системы, которая называется общеязыковой средой выполнения (Common Language Runtime,– CLR), и которая может быть установлена в любой операционной системе на любом компьютере. Общеязыковая среда выполнения включает JIT компилятор, переводящий код с языка CIL в машинные команды конкретного процессора. Название JIT компилятора характеризует принцип его работы – то есть компилируются только те части приложения, которые требуется выполнить в данный момент (just in time – вовремя). Для обеспечения безопасности в платформе .NET использован системный подход – на этапе компиляции приложения создается специальный файл с расширением exe или dll – сборка, которая содержит код на языке CIL и метаданные. Метаданные включают имя и версию сборки, сведения об объектах и типах данных, используемых в приложении, список файлов (сборок), от которых зависит данная сборка и т.д., что позволяет обеспечить безопасность и облегчает установку и развертывание приложения на компьютеры пользователей. Платформа .NET содержит огромную библиотеку классов (Framework Class Library – сокращенно .NET Framework), которые можно использовать при программировании на любом языке .NET. При изложении материала мы будем часто использовать термины приложение, проект, программа. Термин «приложение» можно для начала воспринимать как синоним слова «программа». Приложения, разрабатываемые для «консоли», будем называть программами. Программы, разрабатываемые для «Windows» (Windows-приложения) будем называть приложениями. Приложение в стадии разработки называется проектом. Подробное изучение библиотеки классов .NET – необходимая, но и наиболее трудоемкая задача программиста при освоении этой платформы. Платформа .NET рассчитана на объектно-ориентированную технологию создания программ, поэтому прежде чем начинать изучение языка C#, необходимо познакомиться с основными понятиями объектноориентированного программирования (ООП). 1.2 Объектно-ориентированное программирование Принципы ООП проще всего понять на примере программ моделирования. В реальном мире каждый предмет или процесс обладает набором статических и динамических характеристик, иными словами, свойствами и поведением. Поведение объекта зависит от его состояния и внешних воздействий. Например, объект «автомобиль» никуда не поедет, если в баке нет бензина, а если повернуть руль, изменится положение колес. Понятие объекта в программе совпадает с обыденным смыслом этого слова: объект представляется как совокупность данных, характеризующих его состояние, и функций их обработки, моделирующих его поведение. Вызов функции на выполнение часто называют посылкой сообщения объекту. При создании объектно-ориентированной программы предметная область представляется в виде совокупности объектов. Выполнение программы состоит в том, что объекты обмениваются сообщениями. Это позволяет использовать при программировании понятия, более адекватно отражающие предметную область. Важным свойством объекта является его обособленность. Детали реализации объекта, то есть внутренние структуры данных и алгоритмы их обработки, скрыты от пользователя объекта и недоступны для непреднамеренных изменений. Объект используется через его интерфейс – совокупность правил доступа. Скрытие деталей реализации называется инкапсуляцией (от слова «капсула»). Ничего сложного в этом понятии нет: ведь и в обычной жизни мы пользуемся объектами через их интерфейсы. Сколько информации пришлось бы держать в голове, если бы для просмотра новостей надо было знать устройство телевизора! Таким образом, объект является «черным ящиком», замкнутым по отношению к внешнему миру. Это позволяет представить программу в укрупненном виде на уровне объектов и их взаимосвязей, а, следовательно, управлять большим объемом информации и успешно отлаживать сложные программы. Сказанное можно сформулировать более кратко и строго: объект – это инкапсулированная абстракция с четко определенным интерфейсом. Инкапсуляция позволяет изменить реализацию объекта без модификации основной части программы, если его интерфейс остался прежним. Простота модификации является очень важным критерием качества программы: ведь любой программный продукт в течение своего жизненного цикла претерпевает множество изменений и дополнений. Кроме того, инкапсуляция позволяет использовать объект в «другом окружении» и быть уверенным, что он не испортит не принадлежащие ему области памяти. Каждый год в мире пишется огромное количество новых программ, и важнейшее значение приобретает возможность многократного использования кода. Преимущество объектно-ориентированного программирования состоит в том, что для объекта можно определить наследников, корректирующих или дополняющих его поведение. При этом нет необходимости не только повторять исходный код родительского объекта, но даже иметь к нему доступ. Наследование является мощнейшим инструментом ООП и применяется для следующих взаимосвязанных целей: – исключения из программы повторяющихся фрагментов кода; – упрощения модификации программы; – упрощения создания новых программ на основе существующих. Кроме того, только благодаря наследованию появляется возможность использовать объекты, исходный код которых недоступен, но в которые требуется внести изменения. Наследование позволяет создавать иерархии объектов. Иерархия представляется в виде дерева, в котором более общие объекты располагаются ближе к корню, а более специализированные – на ветвях и листьях. Наследование облегчает использование библиотек объектов, поскольку программист может взять за основу объекты, разработанные кем-то другим, и создать наследников с требуемыми свойствами. Объект, на основании которого строится новый объект, называется родительским объектом, объектом-предком, базовым классом, или суперклассом, а унаследованный от него объект — потомком, подклассом, или производным классом. ООП позволяет писать гибкие, расширяемые и читабельные программы. Во многом это обеспечивается благодаря полиморфизму, под которым понимается многообразие форм реализаций одноименных методов в цепочке наследуемых классов. Полиморфизм позволяет во время выполнения программы с помощью одного и того же имени (имени метода) выполнять разные действия или обращаться к объектам разного типа. Чаще всего понятие полиморфизма связывают с механизмом виртуальных методов, который мы рассмотрим в дисциплине «Технология программирования» в следующем семестре. Подводя итог сказанному, сформулирую достоинства ООП: – использование при программировании понятий, близких к предметной области; – возможность успешно управлять большими объемами исходного кода благодаря инкапсуляции, то есть скрытию деталей реализации объектов и упрощению структуры программы; – возможность многократного использования кода за счет наследования; – сравнительно простая возможность модификации программ; – возможность создания и использования библиотек объектов. Эти преимущества особенно явно проявляются при разработке программ большого объема и классов программ. Однако ничто не дается даром: создание объектно-ориентированной программы представляет собой весьма непростую задачу, поскольку требует разработки иерархии объектов, а плохо спроектированная иерархия может свести к нулю все преимущества объектно-ориентированного подхода. Кроме того, идеи ООП не просты для понимания и в особенности для практического применения. Чтобы эффективно использовать готовые объекты из библиотек, необходимо освоить большой объем достаточно сложной информации. Неграмотное же применение ООП способно привести к созданию излишне сложных программ, которые невозможно отлаживать и усовершенствовать. 1.3 Классы Для представления объектов в языках C#, Java, С++, Delphi и т. п. используется понятие класс, аналогичное обыденному смыслу этого слова в контексте «класс членистоногих», «класс млекопитающих», «класс задач» и т. п. Класс является обобщенным понятием, определяющим характеристики и поведение некоторого множества конкретных объектов этого класса, называемых экземплярами класса. «Классический» класс содержит данные, задающие свойства объектов класса, и функции (методы), определяющие их поведение. В последнее время в класс часто добавляется третья составляющая — события, на которые может реагировать объект класса. Все классы библиотеки .NET, а также все классы, которые создает программист в, среде .NET, организованы в единую иерархическую структуру и имеют одного общего предка — класс object. Внутри нее классы логически сгруппированы в так называемые пространства имен, которые служат для упорядочивания имен классов и предотвращения конфликтов имен: в разных пространствах имена могут совпадать. Пространства имен могут быть вложенными, их идея аналогична знакомой вам иерархической структуре каталогов на компьютере. Любая программа, создаваемая в .NET, использует пространство имен System. В нем определены классы, которые обеспечивают базовую функциональность, например, поддерживают выполнение математических операций, управление памятью и ввод-вывод. Обычно в одно пространство имен объединяют взаимосвязанные классы. Например, пространство System.Net содержит классы, относящиеся к передаче данных по сети, System.Windows.Forms — элементы графического интерфейса пользователя, такие как формы, кнопки и т. д. Имя каждого пространства имен представляет собой неделимую сущность, однозначно его определяющую. Последнее, о чем необходимо поговорить, прежде чем начать последовательное изучение языка C#, — среда разработки Visual Studio.NET. 1.4 Среда Visual Studio.NET Как и любая среда визуального программирования, среда разработки Visual Studio.NET предоставляет средства написания, корректировки, компиляции, отладки и запуска приложений, использующих .NET совместимые языки. Фактически можно говорить, что платформа .NET включает среды разработки Visual Studio.NET для четырех языков: C#, VB.NET, C++ и J#, но, в настоящее время, известны разработки для подключения к платформе .NET еще и других языков программирования. Среда Visual Studio.NET позволяет создавать проекты различных типов, например: – Windows-приложение используют элементы управления, традиционные для интерфейса Windows; – консольное приложение выполняет вывод «на консоль», то есть в окно командного процессора; – библиотеки классов (Dll модули), в которых объединяются классы, предназначенные для использования в других приложениях; – веб-приложение, это приложения, методы которых могут вызываться через Интернет и т.д. Большая часть технологий среды Visual Studio.NET предназначена для создания Windows- и веб- приложений, однако разработчики предусмотрели работу и с консольными приложениями. При работе с консольным приложением пользователь получает в свое распоряжение текстовое окно очень похожее на окно командной строки операционной системы Windows или окно текстового режима (не графического) среды Турбо Паскаль. «Консольные приложения наилучшим образом подходят для изучения языка, так как в них не используется множество стандартных объектов, необходимых для создания графического интерфейса» [2]. Поэтому в этой дисциплине мы будем создавать только консольные приложения, чтобы больше времени уделять изучению различных алгоритмов обработки данных и сосредоточиться на базовых свойствах языка C#. В дисциплине «Технология программирования», которая читается во втором семестре, все внимание будет уделено вопросам технологий программирования с использованием Windows-приложений и основ объектно-ориентированного программирования. Для работы в среде Visual Studio.NET необходимы элементарные знания по созданию проектов, их сохранению на магнитном диске, вызову проектов для дальнейшего написания кода программы и т.д. поэтому изучения языка C# начнем с изучения среды Visual Studio.NET. 1.5 Создание проекта. Основные окна среды Для создания проекта необходимо, после запуска среды Visual Studio.NET, в главном меню выбрать команду File ->New -> Project…. В левой части открывшегося диалогового окна нужно выбрать пункт Visual C# Windows, а в правой – пункт Console Application. В поле Name можно ввести имя проекта, но рекомендую оставлять имя проекта по умолчанию. В поле Location (место сохранения проекта на диске) обязательно задайте размещение проекта на рабочем столе компьютера. После подтверждения заданных значений среда создаст проект с указанным именем. Примерный вид кода программы, представлен на рисунке 1.1. Рисунок 1.1 – Примерный вид среды после создания проекта консольного приложения В верхней части экрана рисунка 1.1 располагается главное меню (с режимами File, Edit, View и т. д.) и панель инструментов для быстрого выбора команд режимов среды. В верхней правой части экрана располагается окно управления проектом Solution Explorer (если оно не отображается, следует воспользоваться командой View -> Solution Explorer главного меню). В окне перечислены все ресурсы, входящие в проект, например, ссылки на пространства имен System, System.Data, System.Xml и т.д. Основное пространство экрана занимает окно редактора, в котором располагается код (текст) программы, созданный средой автоматически. Код программы представляет собой шаблон, в который Вы будете добавлять свой код по мере необходимости. При отображении кода программы использована цветовая подсветка различных его составляющих. Для служебных слов (зарезервированных слов кода) используется синий цвет. Комментарии отображаются серым или темно-зеленым, остальной текст - черным. Слева от текста находятся символы структуры, включающие вертикальные линии и квадратики, внутри которых может находиться минус или плюс. Если щелкнуть на любом квадратике с минусом, то можно «свернуть» соответствующий фрагмент (блок) кода, при этом минус превращается в плюс. Если щелкнуть на квадратик с плюсом, то блок кода «разворачивается» в соответствующем месте экрана. Подобные структуры отображения информации применяются при отображении папок системы Windows и позволяют сфокусировать внимание на нужных фрагментах кода программы. Для записи проекта на магнитный диск необходимо воспользоваться следующей последовательностью команд File->Save All (нажать кнопку на инструментальной панели, на которой изображено множество дискет). Для сохранения только изменений в редактируемом файле можно выбрать команду File->Save Program.cs или нажать кнопку на инструментальной панели, на которой изображена одна дискета. Для открытия проекта необходимо воспользоваться следующей последовательностью команд File->Open Project. 1.6 Вопросы для проверки 1.6.1. Совокупность средств, с помощью которых программисты пишут, корректируют, преобразуют в машинные коды, отлаживают и запускают программы, называется … A) Платформой .NET. B) Средой разработки приложений Visual Studio.NET. C) Сборкой среды Visual Studio.NET. D) Приложением языка C#. E) Проектом языка C#. 1.6.2 Что содержит файл с расширением .cs? A) Это файл исходного кода программы. B) Это файл проекта программы. C) Это файл решения. D) Это файл сборки. E) Это ресурсный файл. 1.6.3 Что содержит файл сборки? 1.6.4 Что содержит .NET Framework платформы .NET? 1.6.5 Что содержит CTS платформы .NET? Продолжение темы 1 Простые операторы языка программирования C#. Лекция 2. ВВЕДЕНИЕ В ЯЗЫК C# 2.1 Понятие алгоритма Если рассматривать процесс написания любой программы, то можно выделить два основных этапа – этап разработки алгоритма решения задачи и этап реализации алгоритма. Для понимания этапа разработки алгоритма решения задачи, необходимо определится с понятием алгоритма. «Современное значение слова алгоритм очень схоже со значением слов рецепт, процесс, метод, способ, процедура, программа, однако в слове «алгоритм» имеется свой дополнительный оттенок. Помимо того что алгоритм – не просто свод конечного числа правил, задающих последовательность выполнения операций при решении той или иной специфической задачи, он ещё имеет пять важнейших особенностей»[ 4]. Понятие алгоритма включает пять основных свойств, каждое из которых характеризует его особенность и отличает от значений других слов определяющих последовательность действий. Основными свойствами алгоритма являются: – конечность; – определенность; – эффективность; – ввод данных; – вывод данных. Необходимо отметить, что при определении свойств алгоритма многие авторы ограничиваются набором из первых трех его свойств. В данном разделе мы кратко рассмотрим характеристики всех пяти свойств алгоритма. Первым свойством алгоритма является его конечность, т.е. алгоритм должен заканчиваться после конечного числа шагов. При этом число шагов может быть очень большим, но конечным. «Процедуру, обладающую всеми характеристиками алгоритма, за исключением конечности, можно назвать вычислительным методом» [4]. Вторым свойством алгоритма является определенность, т.е. каждый шаг алгоритма должен быть точно определен. Например, в рецептах допускаются указания типа «Добавьте щепотку соли» [4], что не учитывает размеры пальцев и не точно определяет количество продукта. Третьим свойством алгоритма является его эффективность, т.е. решение должно выполнятся быстро и правильно с наименьшими затратами используемых ресурсов. Существует большое число различных методик оценки эффективности алгоритма – это целая наука, но пока мы ограничимся только определением. Процесс организации ввода данных и управление программой в современном понятии алгоритма выделен в отдельное его свойство. Это свойство во многом определяет так называемый «пользовательский интерфейс ввода данных» – т.е. возможность использования программы для ввода данных в процессе ее эксплуатации. Последнее свойство алгоритма характеризует вывод результатов работы программы. Это может быть таблица, график, рисунки технологических процессов, некоторые цифровые или аналоговые значения, звуковые сигналы аварийных ситуаций и т.д. 2.2 Этап разработки алгоритма решения задачи Разработка алгоритма решения задачи начинается с анализа задачи – т.е. необходимо точно понять суть задачи и требования к решению. Только после анализа задачи можно приступать к разработке алгоритма – разрабатывать последовательность шагов, приводящих к решению задачи. Заключительным действием разработки алгоритма решения задачи является проверка алгоритма. На этапе разработки алгоритма, если алгоритм не очевиден, необходимо использовать технологию «нисходящего программирования». Для этого необходимо решение задачи представить в виде нескольких взаимосвязанных отдельных подзадач или блоков. Каждый блок может разбиваться на фрагменты и т.д. пока алгоритм реализации каждого фрагмента не станет очевиден. Алгоритмы отдельных фрагментов решения задачи объединяются в один алгоритм решения всей задачи. Этот этап разработки алгоритма является наиболее важным, так как он должен рассматривать все возможные варианты решения задачи. Особенно он необходим при решении больших или логически сложных задач, алгоритм решения которых не очевиден. При решении простых, учебных программ часто алгоритм решения задачи определяется интуитивно или вы его «держите в голове» иногда даже не осознавая, что это и есть алгоритм. При рассмотрении таких задач мы будем рассматривать только ее реализацию. При разработке алгоритма возможны различные варианты решения задачи, поэтому необходимо уметь выполнить «анализ алгоритма»[4,] для выбора наиболее подходящего варианта решения. Результатом разработки алгоритма является его подробное словесное описание или его структурная схема. Существует несколько методик проверки правильности работы алгоритма, например, задаются некоторые фиксированные значения данных и вручную просматривается алгоритм решения задачи. Наилучшим вариантом проверки алгоритмов является его реализация с помощью некоторого языка программирования – т.е. описание разработанного алгоритма с помощью программного кода (текста программы) языка программирования и проверка его работы на компьютере. Перейдём к этапу реализации алгоритма. 2.3 Этап реализации алгоритма Этап реализации алгоритма включает: – по разработанному алгоритму написание кода программы на одном из языков программирования; – тестирование программы – запуск программы на компьютере и проверка результатов ее работы по некоторым контрольным точкам, либо руководствуясь здравым смыслом. Чтобы воплощать в жизнь этапы реализации алгоритма необходимо знание хотя бы одного языка программирования. Изучение программирования невозможно без знания основ алгоритмизации, и освоение основ алгоритмизации невозможно без программирования. Все алгоритмические языки программирования, как правило, были основаны на использовании технологии структурированного или процедурного программирования. В настоящее время определяющей является технология объектно-ориентированного программирования (ООП), для которой разработаны специальные визуальные среды программирования, например, Delphi, VISUAL C++, различные VISUAL STUDIO и т.д. В данном учебнике подробно рассмотрены вопросы программирования с использованием объектно-ориентированного языка C# в визуальной среде программирования Visual Studio.NET. В первой части учебника рассмотрены основы программирования на языке C#, без которых невозможно освоение технологий объектноориентированного программирования и технологий программирования, предоставляемых средой визуального программирования Visual Studio.NET. Естественно на начальном этапе освоения языка программирования мы будем подробно рассматривать некоторые вопросы алгоритмизации, так как процессы разработки алгоритмов решения задач и написание программного кода взаимосвязаны, но в дальнейшем будет рассматриваться только идея алгоритма решения задачи и ее программная реализация. 2.4 Символика языка C# Язык программирования C# является объектно-ориентированным языком программирования, поддерживающим новые .NET технологии. Как и в любом языке в C# существует алфавит – набор символов, с помощью которых записывается код (текст) программы. В языке C# используются следующие символы для написания программ: – любые буквы (включая буквы любого национального алфавита), при этом язык C# различает заглавные и строчные буквы; – цифры от 0 до 9; – служебные знаки; – служебные слова; – комментарии по тексту программы. Если с буквами и цифрами все понятно, то служебные знаки и слова (а их очень много) мы будем осваивать в процессе изучения языка. При написании кода программы его различным конструкциям (операторам, функциям, объектам, записям, переменным и т.д.) необходимо присваивать имена – идентификаторы, которые могут состоять из букв (желательно использовать латинский алфавит), цифр (0 – 9) и символа подчеркивания ‘_’, но начальный символ идентификатора должен быть либо буква, либо символ подчеркивания, но не цифра. Например: – правильно – A_9, B34, TYTI, Max; – неправильно – A-9, B 34, 13FIG. В качестве идентификатора можно использовать и служенные слова, если перед ними стоит символ ‘@’, например, @for, но использование служебных слов в идентификаторах является признаком плохого воспитания в программировании. Использование символа ‘@’ с не служебными словами запрещено. 2.5 Описание переменных Есть множество различных определений понятия «переменной» языка программирования, но наиболее правильной, с точки зрения аппаратного обеспечения компьютера, является определение переменной как области памяти компьютера, которая в разные моменты времени выполнения программы может содержать разные значения. Символическое имя, которое ставится в соответствие этой области памяти, называют именем переменной или идентификатором переменной. Переменная – это область памяти компьютера, обозначенная идентификатором, в которой хранятся изменяемые в процессе работы программы данные. Перед использованием переменной в программе ее необходимо объявлять – указывать тип переменной и ее имя. Тип переменной указывает, какие значения можно записывать в переменную – целые, вещественные, символьные и т.д. Имя переменной является идентификатором. Например: int TYT; float cym, kol; Это означает, что переменная TYT – целого типа, а переменные cym, kol – вещественного типа (дробные). Объявление переменных одного типа должно заканчиваться точкой с запятой. Фактически при объявлении переменной используется оператор объявления – действие, которое заканчивается точкой с запятой. Однако в литературе это действие обычно называют не использование оператора объявления, а просто объявление переменной программы. В отличие от языка программирования BASIC, в котором первое использование переменной в программе является и ее объявлением, или языка программирования PASCAL, в котором используемые переменные необходимо объявлять в начале программы в специальном разделе, в языке программирования C# объявление переменной допускается в любом месте программы. Естественно можно объявлять все переменные и в начале программы, по аналогии с языком PASCAL, и непосредственно перед первым ее использованием в программе, по аналогии с языком BASIC. 2.6 Типы данных языка C# Одной из задач новой технологии программирования .NET является использование общей системы типов – CTS (Common Type System), которая позволит стандартизировать представление данных в памяти компьютера для любого языка программирования, работающего с этой технологией. Условно все типы данных CTS подразделяются на значимые (целые, вещественные и т.д.) и ссылочные (массивы, классы и т.д.). Переменным значимых типов память компьютера под данные выделяется во время компиляции программы, а переменным ссылочного типа – во время выполнения программы с помощью оператора new. Обозначение типов данных в технологии .NET имеет иерархическую структуру, например, System.Int32, поэтому в языке C# для упрощения записи некоторых часто используемых типов ввели понятие простых (примитивных) типов. Простые типы это сокращенная запись некоторых значащих и ссылочных типов CTS. В таблице 2.1 приведены простые типы языка C# и соответствующие им типы CTS. Таблица 2.1 – Простые типы языка C# Простой тип языка C# byte sbyte short int long usort uint ulong float double object char string decimal bool Тип CTS платформы .NET System.Byte System.SByte System.Int16 System.Int32 System.Int64 System.UInt16 System.UInt32 System.UInt64 System.Single System.Double System.Object System.Char System.String System.Decimal System.Boolean Выбор типа данных в программе обуславливается требованиями точности вычислений и объемами выделяемой под переменные памяти компьютера. На первом этапе освоения программирования мы будем использовать только простые типы, а все остальные типы данных мы будем рассматривать в процессе освоения материала. 2.7 Константы языка C# Объявление констант в языке C# осуществляется аналогично объявлению переменных, но с добавлением служебного слова const. Например: const char CIMV = 'y'; const int MAX = 640; Константа – это область памяти компьютера, обозначенная идентификатором, в которой хранятся неизменяемые в процессе работы программы значения данных. При объявлении константы необходимо указывать не только тип константы, но и ее значение. 2.8 Понятие пространства имен языка C# Любая программа на языке C# начинается с указаний о подключении к коду программы некоторого пространства имен с помощью оператора using. Например: using System; using System.Windows.Forms; и т.д. При этом одному оператору using может соответствовать только одно пространство имен. Каждое пространство имен соответствует определенной группе классов платформы .NET (каждый класс это некоторый тип). Таким образом, все множество типов (CTS насчитывает более 4000 различных типов) платформы .NET по своему функциональному назначению было объединено в логически связанные группы, получившие названия пространства имен. И если для решения некоторой задачи необходимы некоторые классы, методы, функции или данные, то вы должны подключить к вашей программе соответствующее пространство имен. Таким образом, в языке C# реализуется возможность использования ранее написанных библиотек классов платформы .NET. Необходимо отметить, что многие авторы учебников по языку C# не используют термин библиотека, а ограничиваются понятием пространство имен. Наиболее часто используемые пространства имен перечислены в таблице 2.2. Таблица 2.2 – Некоторые пространства имен платформы .NET Пространство имен .NET Назначение System Корневое пространство имен, содержащее класс Object и множество классов для работы с простыми типами данных, наборами математических функций, вводом-выводом данных, операцией сборки мусора и т.д. System.Data Классы этих пространств имен System.data.SqlClient и т.д. предназначены для работы с базами данных System.Drawing Классы этих пространств имен содержат System.Drawing.Drawing2D графические примитивы, наборы И т.д. шрифтов, типов линий, наборы средств отображения графической информации на экране монитора и поддержки печати System.IO Классы этого пространства имен отвечают за операции ввода-вывода данных в файл и т.п. System.Net Наборы классов, отвечающих за передачу данных по сетям System. Security Наборы классов, использующиеся для повышения безопасности передачи данных по сетям System.Web Наборы классов, предназначенные для работы в web-приложениях System.Windows.Form Классы этого пространства имен предназначены для работы с элементами интерфейса Windows – окнами, кнопками и другими элементами управления Одна из проблем начинающих программистов заключается в определении названия и способа подключения необходимого пространства имен. Технологию работы с пространством имен мы будем рассматривать по мере изучения языка C#. Необходимо отметить, что «мастера создания приложений» различных Visual Studio автоматически выбирают необходимые пространства имен, которые без надобности лучше не менять. Например, если по умолчанию в Visual Studio 2010 выбрать проект в консольной реализации (Fail->New>Project->Console Application), то мастер создания проекта автоматически подключит пространства имен представленных на рисунке 1.1. После определения пространства имен программы мастер создания консольного приложения Visual Studio 2010 специальным указанием namespace Console Application { . . .} определил область кода программы, в которой можно использовать типы данных создаваемого приложения. Необходимо отметить, что внешний вид главного окна среды зависит от настроек окна, которые выполняет программист «под себя». Рекомендуем, на этапе освоения среды оставлять настройки «по умолчанию». 2.9 Вопросы для проверки 2.9.1 Переменные S, K и SIM описаны следующим образом: double S; int K; char SIM; Какое из приведенных ниже высказываний верно? A) переменная S - логического типа, K - целого, SIM - вещественного; B) переменная S - вещественного типа, K - строкового, SIM - целого; C) переменная S - вещественного типа, K - символьного, SIM - целого; D) переменная S - целого типа, K - вещественного, SIM - логического; E) переменная S - вещественного типа, K - целого, SIM - символьного; 2.9.2 Для чего используются символы ‘{’ . . . . ‘}’ ? A) Так указывается раздел описания констант. B) Так указывается раздел предпроцессора. C) Так указывается раздел комментариев. D) Так указывается раздел блока. E) Так указывается раздел описания данных. 2.9.3 Понятие алгоритма. 2.9.4 Что включает этап разработки алгоритма решения задачи? 2.9.5 Что включает этап реализации алгоритма?