МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РТ ГАПОУ «АРСКИЙ ПЕДАГОГИЧЕСКИЙ КОЛЛЕДЖ им. Г. ТУКАЯ» Зам. директора по УР ГАПОУ «Арский педагогический колледж им. Г. Тукая» ______________Мусина Л.Н. «____»____________________2023г. ДИПЛОМНЫЙ ПРОЕКТ ЯЗЫК ПРОГРАММИРОВАНИЯ С# КАК СРЕДСТВО СОЗДАНИЯ ЭЛЕКТРОННОГО УЧЕБНИКА «ТЕОРИЯ ВЕРОЯТНОСТЕЙ И МАТЕМАТИЧЕСКАЯ СТАТИСТИКА» ПМ.01. Разработка программных модулей программного обеспечения компьютерных систем Выполнил студент: 4 курс 451 группа Специальность 09.02.03 Программирование в компьютерных системах Руководитель: _____________ (Мингазова Г.Г.) Рецензент: ____________ (Мухутдинова А.Н.) Арск, 2023 год СОДЕРЖАНИЕ ВВЕДЕНИЕ .................................................................................................................. 3 ГЛАВА 1. ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ С# ....................................................................................................................................... 7 1.1 История создания языка программирования C# ................................................ 7 1.2 Достоинства и недостатки языка программирования C# ............................... 12 1.3 Структура языка программирования C# ........................................................... 13 1.4 Сфера применения языка программирования C# ............................................ 25 1.5 Язык программирования C# как средство создания электронного учебника ..................................................................................................................................... 27 Выводы по главе 1 ГЛАВА 2. ТЕХНОЛОГИЯ СОЗДАНИЯ ЭЛЕКТРОННОГО УЧЕБНИКА «ТЕОРИЯ ВЕРОЯТНОСТЕЙ И МАТЕМАТИЧЕСКАЯ СТАТИСТИКА» С ПОМОЩЬЮ ЯЗЫКА ПРОГРАММИРОВАНИЯ C# ............................................ 33 2.1 Техническое задание электронного учебника «Теория вероятностей и математическая статистика» .................................................................................... 33 2.2 Описание электронного учебника «Теория вероятностей и математическая статистика» ................................................................................................................ 35 2.3 Руководство пользователя электронного учебника «Теория вероятностей и математическая статистика» .................................................................................... 38 Выводы по главе 2 ЗАКЛЮЧЕНИЕ ......................................................................................................... 44 СПИСОК ЛИТЕРАТУРЫ......................................................................................... 45 ПРИЛОЖЕНИЕ 3 ВВЕДЕНИЕ Актуальность. Языков программирования на сегодняшний день очень много, все они разные и предназначены для решения различных задач. Одним из языков программирования, широко используемых в разработке электронных учебников, является C#. C# является одним из наиболее популярных языков программирования, используемых в различных сферах, включая разработку программного обеспечения и анализ данных. C# имеет обширную экосистему инструментов и библиотек, которые могут быть использованы для разработки электронных учебников [4, с.56]. Программирование на языке C# обладает широкими возможностями для обработки данных и реализации алгоритмов, что делает его удобным инструментом для работы с теорией вероятностей и математической статистикой. C# обладает строгой типизацией, что способствует безопасности и надежности программного кода. Он также предлагает множество средств для разработки графического интерфейса пользователя, что позволяет создавать электронные учебники с интуитивно понятным и привлекательным пользовательским интерфейсом. Одной из важных особенностей C# является его платформа .NET, которая предоставляет богатый набор инструментов и библиотек для разработки приложений. С помощью C# и .NET разработчики могут создавать многопоточные приложения, работать с базами данных, обрабатывать и анализировать большие объемы данных, а также использовать различные API и сервисы. В современном образовательном пространстве наблюдается переход к использованию электронных ресурсов и онлайн–образования. Современное образовательное пространство требует использования актуальных технологий и инструментов для эффективного обучения студентов. В настоящее время 4 электронные учебники становятся все более популярными и востребованными среди преподавателей и студентов. Они предлагают интерактивные возможности, мультимедийные материалы и более гибкий способ представления учебного материала. Электронный учебник «Теория вероятностей и математическая статистика» на языке программирования C# представляет собой инновационный подход к обучению, который отвечает современным потребностям и ожиданиям студентов. Разработка такого учебника обеспечивает удобство использования и доступность материалов, что позволяет студентам изучать и практиковать теорию вероятностей и математическую статистику в своем собственном темпе и в удобное для них время. Такой формат обучения стимулирует самостоятельность и активное участие студентов в процессе обучения, что способствует более глубокому усвоению материала и развитию практических навыков. Кроме того, электронный учебник может быть легко обновляемым и расширяемым, позволяя внедрять новые примеры, задания и методы, чтобы отразить последние тренды и развитие в области теории вероятностей и математической статистики. Теория вероятностей и математическая статистика предоставляют студентам необходимые инструменты и методы для работы с данными, обработки статистической информации, прогнозирования и принятия решений на основе вероятностных моделей. Изучение этих тем позволяет студентам развить навыки критического мышления, аналитического мышления и умения применять математические методы к реальным проблемам. Современный мир стал все более зависим от данных, и востребованность специалистов, обладающих знаниями в области теории вероятностей и математической статистики, постоянно растет. Разработка электронного учебника по этой теме на языке программирования C# предоставляет студентам удобный и эффективный способ изучения и практического применения этих знаний в различных сферах деятельности. 5 В учебном процессе электронное учебное пособие может применяться как средство организации внеаудиторной самостоятельной работы студентов колледжа для улучшения уровня усвоения учебного материала. В связи с этим многие учебные заведения пытаются внедрить в процесс образования информационные технологии со специально написанными электронными пособиями, программами, тестами. Также, разработка электронного учебника на C# может быть полезна в академической среде, облегчая изучение и понимание теории вероятностей и математической статистики. Студенты смогут изучать материалы в удобной форме, выполнять практические задания и получать обратную связь, что способствует более глубокому усвоению информации. В работе рассматривается и анализируется прикладное программное обеспечение необходимое для создания и дальнейшего использования электронных учебных пособий. описываются все этапы создания подобных электронных приложений в среде разработки Microsoft Visual Studio. Мой выбор этой темы, программы и языка программирования C# обоснован интересом к программированию, уверенностью в своих навыках в этой области и видением применимости этих знаний и навыков в будущей профессиональной деятельности. Такая дипломная работа позволит мне развить свои навыки программирования, погрузиться в изучение теории вероятностей и математической статистики и создать полезный и актуальный продукт для образовательной сферы или применения в реальных проектах. Цель: разработка электронного учебника «Теория вероятностей и математическая статистика» с использованием языка программирования С# в среде разработки Microsoft Visual Studio. Объект: процесс создания программных продуктов в ходе изучения программных модулей. Предмет: язык программирования С#. Задачи: рассмотреть историю создания языка программирования С#; 6 выявить достоинства и недостатки языка программирования С#; определить структуру языка программирования С#; определить сферы применения языка программирования С#; разработать техническое задание на проект; разработать электронный учебник «Теория вероятностей и математическая статистика»; разработать руководство пользователя электронного учебника. Для достижения цели, решения поставленных задач были использованы следующие методы: теоретические: изучение и сравнительный анализ научно– методической литературы, учебно–методической литературы, анализ передового программного опыта. Теоретическая значимость заключается в углублении теоретических основ языка программирования С#. Практическая значимость заключается в возможности внедрения в практику созданного электронного учебника для студентов Арского педагогического колледжа им. Г. Тукая, обучающихся по специальности 09.02.03 «Программирование в компьютерных системах». Структура выпускного квалификационного проекта: данный проект состоит из введения, двух глав – теоретической и практической, заключения, списка литературы, приложения. 7 ГЛАВА 1. ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ С# 1.1 История создания языка программирования C# Язык программирования C# был разработан в 2000 году компанией Microsoft. Его создание было частично вдохновлено языком Java, который был популярным языком программирования для разработки приложений в то время. Microsoft хотела создать свой собственный язык программирования, который был бы совместим с платформой .NET Framework и предоставлял разработчикам удобные инструменты для создания приложений под операционные системы Windows [6, c.78]. Многие программисты были знакомы с синтаксисом и принципами Java, поэтому C# был разработан с целью предоставить им похожий опыт, но с расширенными возможностями и улучшенной производительностью. C# также вносит свои усовершенствования и новшества, чтобы обеспечить более простой и продуктивный опыт разработки. Важной особенностью C# является его интеграция с платформой .NET Framework. .NET Framework представляет собой комплексную платформу для разработки и выполнения приложений, предоставляющую различные библиотеки и средства для работы с различными аспектами программирования, включая сетевое взаимодействие, работу с базами данных, создание графических интерфейсов и многое другое. C# стал основным языком программирования для платформы .NET, что дало разработчикам широкие возможности для создания разнообразных приложений под операционные системы Windows. С течением времени C# продолжал развиваться и усовершенствоваться. Компания Microsoft выпускала новые версии языка с новыми функциональными возможностями, улучшениями производительности и расширенными 8 библиотеками. На данный момент последней версией языка C# является C# 9.0, которая была выпущена в 2020 году вместе с .NET 5 [7, c.48]. В начале 2000–х годов компания Microsoft осознала необходимость разработки нового языка программирования, который бы сочетал преимущества языков Java и C++, а также был бы полностью интегрирован с платформой .NET Framework. Целью было создание удобного, мощного и продуктивного инструмента для разработки приложений под операционные системы Windows. Главным архитектором языка C# стал Андерс Хейлсберг (Anders Hejlsberg), который ранее работал над разработкой языков Turbo Pascal и Delphi. Он внес большой вклад в проектирование и разработку C# и сформировал его основные принципы и философию [18, c.68]. C# был разработан как часть проекта Microsoft .NET Framework, который был анонсирован в 2000 году. .NET Framework представляет собой платформу для разработки, развертывания и выполнения приложений на разных языках программирования. C# был выбран в качестве основного языка программирования для платформы, и он стал ее ключевым компонентом. C# также имел много общего с языком C++, который является мощным и гибким языком программирования, используемым для разработки системного и прикладного программного обеспечения. Некоторые элементы синтаксиса и концепции C++ были заимствованы и адаптированы в C#, что позволило программистам с опытом работы с C++ быстро освоить новый язык. C# был выпущен в 2000 году вместе с первой версией .NET Framework. С течением времени язык продолжал эволюционировать, и Microsoft выпускала новые версии C# с улучшениями и новыми возможностями. Ключевыми версиями являются C# 2.0, выпущенный в 2005 году, C# 3.0 (2007), C# 4.0 (2010), C# 5.0 (2012), C# 6.0 (2015), C# 7.0 (2017), C# 8.0 (2019) и C# 9.0 (2020). Каждая новая версия C# вносила улучшения и расширения в язык, такие как новые возможности конструкциях, добавление синтаксиса, усовершенствования асинхронного в программирования, языковых шаблонов, 9 выражений, обобщений и многое другое. Эти изменения делали C# более мощным и удобным для разработки современных приложений [22, c.77]. На данный момент C# является одним из наиболее популярных языков программирования и широко используется для разработки разнообразных типов приложений, включая настольные программы, веб–приложения, мобильные приложения и игры. История создания языка C# связана с стремлением Microsoft предоставить разработчикам удобный и мощный инструмент для создания приложений под операционные системы Windows, с интеграцией в платформу .NET Framework. За годы существования C# он продолжал развиваться и становиться все более популярным в сообществе разработчиков. В целом, история создания языка программирования C# связана с потребностью в удобном и эффективном инструменте разработки приложений под операционные системы Windows. Язык программирования C# был создан специально для ASP.NET. На C# полностью была написана и сама ASP.NET. Название «Си шарп» (от англ. sharp–диез) несет «сакральный» смысл. Знак «#» (в музыкальной нотации читается как «диез») означает повышение высоты звука на полтона. С другой стороны, название «C#» получается путем следующей «эволюционной цепочки»: C → C++ → C++++(C#), так как символ «#» можно составить из 4–х знаков «+» [19, c.93]. Вследствие технических ограничений на отображение (стандартные шрифты, браузеры и т. д.) и того, что знак диез ♯ не представлен на стандартной клавиатуре, знак # был выбран для представления знака диез при записи имени языка программирования. Это соглашение отражено в Спецификации Языка C# ECMA–334. Названия языков программирования не принято переводить, поэтому язык следует называть по–английски «Си шарп». Авторами этого языка программирования стали Скотт Вилтамут и Андерс Хейльсберг–создатель Турбо Паскаля и Дельфи, перешедший в 1996 году в Microsoft. 10 По одной из версий, он вынашивал замысел нового языка и даже новой платформы (которая сейчас носит название .NET), еще работая в компании Borland [15, c.44]. Однако изучение языка C# полезно перед знакомством с его «продвинутым младшим братом», т.к. синтаксис языков похож, C# не перегружает мозг начинающего программиста сверхвозможностями и приучает к пониманию сути происходящего. Подходит ли язык C# для первого знакомства с программированием? Если вы не обучаетесь в вузе по специальности, связанной с IT, то нет. язык C# предполагает понимание организации и принципов работы аппаратного обеспечения, в частности – памяти. Здесь многое делается с помощью указателей, они играют ключевую роль; эта тема достаточно сложная для понимания и обычно не изучается в школе. Конечно, с помощью языка C можно изучать основы программирования и не изучать при этом указатели. Однако человек будет думать, что знает язык программирования C#, мало зная о нем, по существу. Язык C# был создан разбирающимися в устройстве «железа» профессиональными программистами для написания операционной системы UNIX. Его не задумывали как язык для обучения начинающих [13, c.24]. Язык C# появился на свет виюне 2000 г. В результате кропотливой работы большой группы разработчиков компании Microsoft, возглавляемой Андерсом Хейлсбергом (Anders Hejlsberg). Появление языка C# и инициативы .NET отнюдь не случайно пришлось на начало лета 2000 г. Именно к этому моменту компания Microsoft подготовила промышленные версии новых компонентных технологий и решений в области обмена сообщениями и данными, а также создания Internet-приложений (COM+, ASP+, ADO+, SOAP, Biztalk Framework) [4, c.350]. Несомненно, лучшим способом продвижения этих новинок является создание инструментария для разработчиков с их полноценной поддержкой. В этом и заключается одна из главных задач нового языка C#. Кроме того, Microsoft 11 не могла больше расширять все те же инструменты и языки разработки, делая их все более и более сложными (а это было необходимо, так как требования поддержки современного оборудования и требования обеспечения обратной совместимости с программными продуктами начала 90-х годов становились всё более конфликтующими). Наступил момент, когда необходимо начать с чистого листа для того, чтобы создать простой, но имеющий сложную структуру набор языков, сред и средств разработки, которые позволят разработчику легко создавать современные программные продукты [7, c.35]. Язык С# и .NET являются той самой отправной точкой. Если говорить упрощенно, то .NET представляет собой новую платформу, новый API (англ. Application Programming Interface – интерфейс прикладного программирования) для программирования в Windows, а С# – новый язык, созданный с нуля, для работы с этой платформой, а также для извлечения всех выгод из прогресса сред разработки и достижений объектно – ориентированного программирования в течение последних 20 лет. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML. C# поддерживает все три «столпа» объектно–ориентированного программирования: инкапсуляцию, наследование и полиморфизм. Кроме того, в нем была реализована автоматическая «сборка мусора», обработки исключений, динамическое связывание. Итак, C#–результат спонтанного решения автора, долго занимавшегося языком C/C++ и интегрированными средами разработки, такими как Borland C++Builder и Visual C++ [10, c.66]. 12 1.2 Достоинства и недостатки языка программирования C# Язык программирования современный C# (произносится объектно–ориентированный и как «C Sharp»)–это типобезопасный язык программирования. C# позволяет разработчикам создавать различные типы безопасных и надежных приложений, работающих в .NET. C# принадлежит к хорошо известному семейству языков C. В него входит много полезных особенностей–простота, объектная ориентированность, типовая защищенность, «сборка мусора», поддержка совместимости версий и многое другое. Данные возможности позволяют быстро и легко разрабатывать приложения, особенно COM+ приложения и Web сервисы. При создании C#, его авторы учитывали достижения многих других языков программирования: C++, C, Java, SmallTalk, Delphi, Visual Basic и т.д. Достоинства: поддержка подавляющего большинства продуктов Microsoft; бесплатность ряда инструментов для небольших компаний и некоторых индивидуальных разработчиков–Visual Studio, облако Azure, Windows Server, Parallels Desktop для Mac Pro и др; битный типы данных имеют фиксированный размер (32–битный int и 64– long), что повышает «мобильность» языка и упрощает программирование, так как вы всегда знаете точно, с чем вы имеете дело; автоматическая «сборка мусора». Это значит, что нам в большинстве случаев не придётся заботиться об освобождении памяти. Вышеупомянутая общеязыковая среда CLR сама вызовет сборщик мусора и очистит память; большое количество «синтаксического «сахара»–специальных конструкций, разработанных для понимания и написания кода. Они не имеют значения при компиляции; низкий порог вхождения. Синтаксис C# имеет много схожего с другими языками программирования, благодаря чему облегчается переход для 13 программистов. Язык C# часто признают наиболее понятным и подходящим для новичков; с помощью Xamarin на C# можно писать программы и приложения для таких операционных систем, как iOS, Android, MacOS и Linux; сегодня в любом регионе России имеется немало вакантных мест на должность C#– программиста. Недостатки: приоритетная ориентированность на платформу Windows; язык бесплатен только для небольших фирм, индивидуальных программистов, стартапов и учащихся. Для крупной компании покупка лицензионной версии этого языка обойдётся в круглую сумму. Надо заметить, что по причине того, что C# разрабатывался с чистого листа, у его авторов была возможность (которой они явно воспользовались), оставить в прошлом все неудобные и неприятные особенности (существующие, как правило, для обратной совместимости), любого из предшествующих ему языков. В результате получился действительно простой, удобный и современный язык, по мощности не уступающий С++, но существенно повышающий продуктивность разработок. Очень часто можно проследить такую связь–чем более язык защищен и устойчив к ошибкам, тем меньше производительность программ, написанных на нем. 1.3 Структура языка программирования C# Структуры являются фундаментальными типами данных в C# и большинстве других современных языках программирования. По своей сути структуры просты, но вы можете удивиться, насколько быстро работа с ними 14 может стать сложной. Чаще всего проблемы возникают, если вы должны работать со структурами, созданными в других языках и сохраненными на диске или полученными в результате вызова функций из библиотек или COM-объектов [19, c.144]. В случае неуверенности в своих знаниях вы можете обратиться к документации. Множество техник, описанных в данной статье, могут быть расширены и применены к любым типам данных. В большинстве случаев вы можете описать и использовать структуру без знания о том, как она реализована – особенно как расположены в памяти ее поля. Если вы должны создать структуру для использования ее другими приложениями, или сами должны использовать чужую структуру, то в этом случае вопросы памяти становятся важными. public struct struct1 { public byte a; // 1 byte public int b; // 4 bytes public short c; // 2 bytes public byte d; // 1 byte } Разумный ответ – 8 байт, просто сумма размеров всех полей. Однако если вы попытаетесь узнать размер структуры: int size = Marshal.SizeOf(test); Причина кроется в том, что большинство процессоров лучше работает с данными, занимающими больше, чем байт, и выровненными по определенным адресным границам. Pentium предпочитает данные в блоках по 16 байт с выравниванием по адресным границам с размером, идентичным размеру самих данных [5, c.152]. Например, 4-байтовый integer должен быть выровнен по границе 4 байта. Детальные подробности в данном случае неважны. Важно то, что компилятор добавит недостающие байты, чтобы выровнять данные внутри структуры. Вы 15 можете контролировать это вручную, однако обратите внимание, что некоторые процессоры могут возвращать ошибку в случае использования невыровненных данных. Это создает дополнительные проблемы для пользователей .NET Compact Framework (интересно, много таких? – прим. пер.). Для работы вам понадобится ссылка на InteropServices: using System.Runtime.InteropServices; Например: [StructLayout(LayoutKind.Sequential)] public struct struct1 { public byte a; // 1 byte public int b; // 4 bytes public short c; // 2 bytes public byte d; // 1 byte } Это заставляет компилятор располагать поля последовательно, в порядке объявления, что и делает по умолчанию. Другими значениями атрибута являются значение Auto, которое позволяет компилятору самому определять порядок размещения полей, и значение Explicit, которое позволяет программисту указать размер каждого поля. Тип Explicit часто используется для последовательного расположения без упаковки, но в большинстве случаев проще использовать параметр Pack. Он сообщает компилятору о том, сколько должно выделяться памяти и как должны быть выровнены данные. Например, если вы укажете Pack=1, тогда структура будет организована таким образом, что каждое поле будет находиться в границах одного байта и может быть считано побайтно – т.е. никакого упаковывания не требуется. Если вы измените объявление структуры: [StructLayout(LayoutKind.Sequential, Pack=1)] public struct struct1 Именно таким образом нужно работать с большинством структур, 16 объявленных в Windows API и C/C++. В большинстве случаев вам не придется использовать другие значения параметра Pack. Если вы установите Pack=2, тогда обнаружите, что структура станет занимать 10 байт, потому что будет добавлено по одному байту к каждому однобайтовому полю, чтобы данные могли читаться кусками по 2 байта. Если установить Pack=4, размер структуры увеличится до 12 байт, чтобы структура могла быть прочитана блоками по 4 байта. Дальше значение параметра перестанет учитываться, потому что размер Pack игнорируется, если он равен или превышает выравнивание, использующееся в данном процессоре, и составляющее 8 байт для архитектуры Intel. Расположение структуры в памяти при разных значения Pack показано на рисунке: Стоит также упомянуть, что может изменить способ упаковки структуры, изменяя порядок полей в ней. Например, при изменении порядка полей на: public struct struct1 { public byte a; // 1 byte public byte d; // 1 byte public short c; // 2 bytes public int b; // 4 bytes } Так вы получите 8-байтовую структуры без дополнительны выравнивающих байтов. В данном случае это эквивалентно использованию Pack=1. Однако использование Explicit контролировать память. Например: [StructLayout(LayoutKind.Explicit)] public struct struct1 { [FieldOffset(0)] public byte a; // 1 byte позволяет вам полностью 17 [FieldOffset(1)] public int b; // 4 bytes [FieldOffset(10)] public short c; // 2 bytes [FieldOffset(14)] public byte d; // 1 byte } Эта структура займет 16 байт, вместе с дополнительными байтами после поля b. До версии C# 2.0, тип Explicit использовался в основном для указания буферов с фиксированными размерами при вызове сторонних функций. Вы не можете объявить массив фиксированной длины в структуре, потому что инициализация полей запрещена. public struct struct1 { public byte a; public int b; byte[] buffer = new byte[10]; public short c; public byte d; } Этот код выдаст ошибку. Если вам нужен массив длиной 10 байт, вот один из способов: [StructLayout(LayoutKind.Explicit)] public struct struct1 { [FieldOffset(0)] public byte a; [FieldOffset(1)] public int b; FieldOffset(5)] 18 public short c; [FieldOffset(8)] public byte[] buffer; [FieldOffset(18)] public byte d; } Таким образом, вы оставляете 10 байт для массива. Тут существует ряд интересных нюансов. Первое, почему нужно использовать смещение в 8 байт? Причина в том, что вы не можете начать массив с нечетного адреса. Если вы воспользуетесь смещением в 7 байт, то увидите ошибку времени выполнения, сообщающую о том, что структура не может быть загружена из-за проблем с выравниванием. Это важно, потому что при использовании Explicit вы можете столкнуться с проблемами, если не будете понимать, что вы делаете. Второй момент связан с тем, что в конец структуры добавляются дополнительные байты, чтобы размер структуры был кратен 8 байтам. Компилятор все еще участвует в том, как структура будет размещена в памяти. Конечно, на практике, любая внешняя структура, которую вы попытаетесь конвертировать в структуру C#, должна быть корректна выровнена. Наконец, стоит упомянуть, что вы не можете обратиться к 10-байтовому массиву, используя имя массива (например, buffer[1]), потому что C# думает, что массиву не назначено значение. Поэтому если вы не можете использовать массив и это вызывает проблему с выравниванием, гораздо лучше объявить структуру так: [StructLayout(LayoutKind.Explicit)] public struct struct1 { [FieldOffset(0)] public byte a; // 1 byte [FieldOffset(1)] 19 public int b; // 4 bytes [FieldOffset(5)] public short c; // 2 bytes [FieldOffset(7)] public byte buffer; [FieldOffset(18)] public byte d; // 1 byte } Для доступа к массиву придется воспользоваться арифметикой на указателях, что является unsafe кодом. Чтобы под структуру было выделено фиксированное количество, байт, используйте параметр Size в атрибуте StructLayout: [StructLayout(LayoutKind.Explicit, Size=64)] Сейчас в C# 2.0 массивы фиксированного размера разрешены, поэтому все вышеприведенные конструкции, в общем-то, необязательны. Стоит заметить, что массивы фиксированной длины используют тот же механизм: выделение фиксированного числа байт и указатели (что тоже является небезопасным). Если вам нужно использовать массивы для вызова функций из библиотек, возможно, лучшим способом будет явный маршалинг массивов, который считается «безопасным». Давайте рассмотрим все три упомянутых способа [9, c.23]. Обратите внимание, что структура должна быть помечена модификатором unsafe. Теперь после API вызова мы можем получить данные из массивов без использования указателей. Впрочем, неявно они все-таки используются, и любой код, обращающийся к массивам, должен быть помечен как небезопасный Третий и последний метод заключается в кастомном маршалинге. Многие C# программисты не понимают, что суть маршалинга заключается не только в том, как данные о типах передаются в библиотечные вызовы, – это еще и активный процесс, который копирует и изменяет управляемые данные. Например, если вы захотите передать ссылку на типизированный массив, вы можете передать его по значению, и система сконвертирует его в массив 20 фиксированной длины и обратно в управляемый массив без дополнительных действий с вашей стороны. В этом случае все, что нам остается сделать, это добавить атрибут MarshalAs, указывающий типа и размер массивов: [StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)] public struct DISPLAY_DEVICE { public int cb; MarshalAs(UnmanagedType.ByValArray, SizeConst=32)] public char[] DeviceName; [MarshalAs(UnmanagedType.ByValArray, SizeConst=128)] public char[] DeviceString; public int StateFlags; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public char[] DeviceID; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public char[] DeviceKey; } В этом случае при вызове библиотечной функции поля передаются путем создания неуправляемых массивов нужной длины внутри копии структуры, которая и передается в вызов. Когда функция завершает свою работу, неуправляемые массива конвертируются в управляемые символьные массивы и ссылки на них присваиваются полям структуры. В результате, после вызовы функции вы обнаружите, что структура содержит массива нужного размера, заполненные данными. В случае вызова функций сторонных библиотек, использование кастомного маршалинга является лучшим решением, поскольку при этом используется безопасный код. Хотя вызов сторонних функций с помощью p/Invoke и не является безопасным в общем смысле. Теперь, после того как мы рассмотрели довольно сложные вопросы, 21 связанные с размещением структур в памяти, самое время узнать, как получить все байты, составляющие структуру. Иными словами, как сериализовать структуру? Существует много способов сделать это, чаще всего используется метод Marshal.AllocHGlobal для выделения памяти в куче под неуправляемый массив. После этого все делается функциями, работающими с памятью, такими как StructToPtr или Copy. Пример: public static byte[] RawSerialize(object anything) { int rawsize = Marshal.SizeOf(anything); IntPtr buffer = Marshal.AllocHGlobal(rawsize); Marshal.StructureToPtr(anything, buffer, false); byte[] rawdata = new byte[rawsize]; Marshal.Copy(buffer, rawdata, 0, rawsize); Marshal.FreeHGlobal(buffer); return rawdata; } Фактически, надобность в стольких действиях отсутствует, проще переместить байты структуры напрямую в байтовый массив без использования промежуточного буфера. Ключевым объектом в этом способе является GCHandle. Он возвратит хэндл Garbage Collector'а, и вы можете использовать метод AddrOfPinnedObject для получения стартового адреса структуры. Метод RawSerialize может быть переписан следующим образом: public static byte[] RawSerialize(object anything) { int rawsize = Marshal.SizeOf(anything); byte[] rawdata = new byte[rawsize]; GCHandle handle = GCHandle.Alloc(rawdata, GCHandleType.Pinned); Marshal.StructureToPtr(anything, handle.AddrOfPinnedObject(), false); handle.Free(); return rawdata; 22 } Этот способ проще и быстрее. Вы можете использовать эти же методы для десериализации данных из байтового массива в структуру, однако более полезно будет рассмотреть решение проблемы чтения структуры из потока. Иногда возникает потребность зачитать структуру, возможно написанную на другом языке, в C# структуру. Например, вам нужно прочитать bitmap-файл, который начинается с заголовка файла, затем следует заголовок битмапа и затем собственно битовые данные. Структура заголовка файла выглядит так: [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct BITMAPFILEHEADER { public Int16 bfType; public Int32 bfSize; public Int16 bfReserved1; public Int16 bfReserved2; public Int32 bfOffBits; }; Функция, которая будет читать любой поток, и возвращать структуру, может быть написана без использования обобщений: public object ReadStruct(FileStream fs, Type t) { byte[] buffer = new byte[Marshal.SizeOf(t)]; fs.Read(buffer, 0, Marshal.SizeOf(t)); GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned); Object temp = Marshal.PtrToStructure(handle.AddrOfPinnedObject(), t); handle.Free(); return temp; } Причина этой ошибки заключается в том, что, хотя вы и передаете 23 указатель на адрес начала структуры, эта структура располагается в управляемой памяти, а неуправляемый код не может получить к ней доступ. Мы забываем о том, что стандартный маршалинг делает еще кое-какую работу при создании указателей. Перед тем, как создать указатели, для всех параметров, передаваемых по ссылке, создаются полные копии в неуправляемой памяти. После окончания вызова данные из неуправляемой памяти копируются обратно в управляемую. Написать подобную функцию, которая делает работу маршалинга, нетрудно и очевидно полезно. Все это может показаться сложным. Использование указателей на указатели не является простой вещью, именно поэтому язык C# требует, чтобы код, работающий с указателями был помечен как небезопасный (unsafe). С другой стороны, общие принципы работы довольно просты. Когда вы передаете что-то по ссылке, это содержимое копируется в неуправляемую память, и адрес на новый участок памяти передается в вызов функции. Обычно стандартный маршалинг берет всю работу на себя. Однако если вам нужно что-то сверх этого, вы можете управлять всем копированием вручную [1, c.32]. Операции – это действия над данными. Данные, участвующие в операции, часто называют операндами. В качестве операнда может выступать константа, переменная или вызов, какого – нибудь метода. Для каждой операции используется соответствующий ей знак операции, состоящий из одного или нескольких символов. В результате выполнения операций всегда получается какое-то значение, представляющее собой результат выполнения операции. В языке С# существует большое количество разнообразных операции. Их можно классифицировать по различным признакам, например, по количеству операндов, по назначению. В зависимости от количества операндов в C# есть одноместные, двухместные и одна трёхместная операция. По назначению операции можно сгруппировать таким образом: арифметические, операции сравнения, 24 логические, побитовые, специальные [10, c.22]. Как показывает практика программирования, в процессе работы программы могут возникнуть какие-либо неполадки, связанные, например, с некорректными данными. В языке C# такие ситуации обрабатываются с помощью исключений. Говорят, что если операция или метод не может выполниться корректно, то выбрасываются исключения соответствующего типа. Выражение «выбрасываются» надо понимать не буквально, а в том смысле, что при обнаружении ошибки система прерывает выполнение программы и сообщает об этом. Например, если при делении делитель оказался равен нулю, то программа будет прервана с признаком «деление на нуль». А если при попытке преобразовать строку в число один из символов строки окажется не цифровым, то тоже будет прерывание программы, но уже с другим признаком. Это и есть выбрасывание исключений. Исключения являются нормальным способом уведомления об ошибках в работе программы. Возможна стандартная обработка исключения, когда система просто информирует пользователя о случившейся неприятности и завершает выполнение программы. Однако, считается хорошим стилем, когда программист предусматривает возможность появления исключения и сам обеспечивает его обработку. Говорят, что программист «ловит» исключение, вставляя в текст программы соответствующий блок. Пример обработки исключения будет рассмотрен в одной из моих ближайших статей. В состав библиотеки FCL входит класс Exception, свойства и методы которого позволяют работать с исключениями. Свойства этого класса определяют виды исключений, которые задаются определёнными идентификаторами [20, c.102]. Если в некотором блоке предполагается возможность появления исключений, то разумно заключить этот блок в фигурные скобки и предварить 25 ключевым словом try. Вслед за этим блоком можно расположить один или несколько блоков, обрабатывающих исключения, – это так называемые catchблоки. Каждый catch – блок имеет формальный параметр, определяющий, какое именно исключение будет обработано в этом блоке. Если в try – блоке возникает исключение, то catch – блоки начинают конкурировать в борьбе за перехват исключения. Обрабатывает исключение тот блок, параметр которого соответствует исключению. Ну, а, чтобы исключение было правильно обработано, программист должен разместить в блоке необходимые операторы. 1.4 Сфера применения языка программирования C# На сегодняшний день язык C# имеет уже 10 версий, широкий функционал и огромный набор инструментов программирования. В частности, последние модификации способны: поддерживать и защищать универсальные типы и методы; оперировать типами одного корневого объекта и поддерживать типы ссылок и значений; динамически выделять объекты и упрощенные структуры для хранения их в стеке; обрабатывать исключения, удалять ошибки, восстанавливать объекты; поддерживать элементы функционального программирования (лямбда–выражения); языков; выполнять асинхронные операции с поддержкой синтаксиса других 26 определять пользовательское поведение и создавать клиентский код с помощью итераторов; автоматически освобождать память от неиспользуемых объектов и типов («сборка мусора», NULL); управлять разными версиями самого себя, поддерживать библиотеки и программы более ранних версий. Благодаря имеющимся возможностям, язык программирования. С# повсеместно используется для программирования десктопных и мобильных программ и приложений на базе платформы .NET Framework. Ресурсы языка позволяют создать целую экосистему Windows: компилировать языковые команды в понятные сигналы на любых процессорах и поддерживать любые библиотеки, шаблоны и плагины для разработки интерфейсов. Коды и логика языка С# с помощью фреймов легко адаптируются в разных операционных системах, в том числе – macOS и Linux. Это значит, что вы можете программировать одно приложение сразу для всех десктопных систем, где оно само интегрируется в системный код и приобретает требуемую нативность. Язык используется для написания софта под сервера, работающие на Windows. Такой C#–софт на фраймворках Microsoft запускается на любых устройствах, имеет высокую производительность, обеспечивает безопасность и безотказность действия серверов. C# разрабатывался, чтобы сделать разработку приложений более простой и эффективной при использовании новейших технологий. Название C# было выбрано за его сходство с музыкальным знаком решетка. Это символизирует поднятие на полтона и отражает цель создания языка – для улучшения программирования на языке C++. С тех пор, как C# был выпущен, он значительно изменил индустрию программного обеспечения. Сегодня он является одним из самых популярных языков программирования. Он используется для создания широкого спектра 27 приложений в различных областях: от веб-разработки и разработки приложений для мобильных устройств до научных расчетов и игр. C# является языком программирования, который используется разработчиками приложений для платформы Microsoft .NET Framework и платформы .NET Core, а также при разработке приложений для операционных систем Windows, Linux и macOS. Язык C# используется многими компаниями для создания корпоративных приложений, в том числе Microsoft, Amazon, Google, Intel. Приложения на языке программирования С# можно использовать для машинного обучения. Достаточно подключить специальные «обучающие» библиотеки «Майкрософта», и программы буду сами учиться распознавать лица, пользовательское поведение и приоритета человека в Интернете. Сегодня возможности C# активно используются в разработке корпоративных программ и сервисов для банков, крупных производственных и IT–компаний, складских комплексов, провайдеров связи и Интернет– коммуникаций, диджитал–агентств. На нем программируются игры, создаются виртуальные среды (Unity) и создается 3D–графика для метавселенных, программируется серверная логика и системы автоматизации продаж для коммерческих сайтов и интернет–магазинов. 1.5 Язык программирования C# как средство создания электронного учебника Электронный учебник нужен для: 1. Самостоятельной работы студентов, которая: 28 облегчает понимание изучаемого материала за счет иных, нежели в печатной учебной литературе, способов подачи материала: индуктивный подход, воздействие на слуховую и эмоциональную память и т.п.; допускает адаптацию в соответствии с потребностями учащегося, уровнем его подготовки, интеллектуальными возможностями и амбициями; освобождает от громоздких вычислений и преобразований, позволяя сосредоточиться на сути предмета, рассмотреть большее количество примеров и решить больше задач; предоставляет возможности для самопроверки на всех этапах работы; выполняет роль наставника, предоставляя неограниченное количество разъяснений, повторений, подсказок и прочее. 2. Для практических занятий, которые позволяют преподавателю проводить занятие в форме самостоятельной работы за компьютерами, оставляя за собой роль руководителя и консультанта; позволяют преподавателю с помощью компьютера быстро и эффективно контролировать знания учащихся, задавать содержание и уровень; позволяют выносить на лекции и практические занятия материл по собственному усмотрению, возможно, меньший по объему, но наиболее существенный по содержанию, оставляя для самостоятельной работы с ЭУ то, что оказалось вне рамок аудиторных занятий; позволяют оптимизировать соотношение количества и содержания примеров и задач, рассматриваемых в аудитории и задаваемых на дом; позволяют индивидуализировать работу со студентами, особенно в части, касающейся домашних заданий и контрольных мероприятий. Чтобы создавать приложения на C#, как и на любом другом языке программирования, надо иметь возможность записать в файл (или в файлы) сам текст программы, а затем этот текст откомпилировать с помощью компилятора, 29 создавая исполняемый файл, при запуске которого на выполнение получается результат работы разработанного приложения. Какие же средства целесобразнее использовать для создания приложений на C#? Лучшим средством для работы на языке программирования C# является интегрированная среда разработки Microsoft Visual Studio Enterprise 2019 (VSE 2019). Это последняя версия выпуска популярной и повсеместно используемой среды разработки профессионального программного обеспечения (ПО) производства компании Microsoft. Visual Studio – это набор инструментов для создания программного обеспечения: от планирования до разработки пользовательского интерфейса, от клиентских до серверных приложений, написания кода, тестирования, отладки, анализа качества кода и производительности, развертывания в средах клиентов и сбора данных телеметрии по использованию. Все эти инструменты предназначены для максимально эффективной совместной работы; все они доступны в IDE Visual Studio. Microsoft Visual Studio можно использовать для создания самых различных типов приложений, от простых приложений для магазина и игр для мобильных клиентов до больших и сложных систем, обслуживающих предприятия и центры обработки данных. Можно создавать: приложения и игры для самых разных платформ, веб–сайты, базы данных, расширения, Office, приложения Azure, ASP.NET, Web API, RESTful. Унифицируя в себе все положительные моменты предыдущих версий, данная обеспечивает возможность использования всех преимуществ технологии Microsoft.NET. В числе достоинств, можно отметить следующие моменты: Повышение продуктивности разработчиков ИСР Microsoft Visual Studio Enterprise 2019 традиционно продолжает путь развития корпорации Microsoft в области эффективных инструментальных средств для разработчиков сложного программного обеспечения. Тем самым обеспечивается среда разработки для всех языков программирования, в среде имеется набор окон с интуитивно понятным интерфейсом, полноценной справкой, IntelliTest (автоматическое 30 создание модульных тестов для кода) и автоматическим выполнением всесторонних задач разработки. Visual Studio Enterprise 2019 имеет возможность в короткие сроки проводить профессиональную разработку программ различного уровня и назначения. Авторы продолжают заботиться о повышение продуктивности разработчиков. Создаются все условия, которые позволяют обратить всё внимание только на написание кода. К примеру, улучшения возможностей в навигации кода, рефакторинга, автоматических исправлений и отладки для всех поддерживаемых языков. Новая версия позволяет быстрее выполнять командную разработку проверки тестирования и новыми real–time функциями модульного тестирования. Процесс установки инструмента – новый, облегчённый модульный тип позволяет установить только те компоненты среды, которые нужны вам, что позволяет ускорить установку от начала и до конца. Теперь имеется возможность не создавать новый проект или решение, для того, чтобы отладить фрагмент кода. Поддержка множества языков программирования – Большие, профессиональные группы разработчиков всегда используют несколько языков программирования. Для удовлетворения этих потребностей в Visual Studio Enterprise 2019 авторы обеспечили возможность использования сразу нескольких языков в рамках одной и той же среды. Это благодаря внедрения общего конструктора для компонентов, для формата XML и HTML, а также единый отладчик программы, VSE 2019 предоставляет разработчикам эффективные средства, независимые от языка программирования. Разработчикам программного обеспечения при использовании VSE 2019 нет нужды ограничивать себя лишь одним языком программирования, адаптируя свою работу к особенностям этого языка. Более того, Visual Studio 2019 разрешает программисту использование уже имеющихся у него наработок, а также навыков разработчика, создающего свои программы на различных языках программирования. 31 Отсутствие невоспроизводимых ошибок. Одна из главных проблем разработки заключается в то, что код работает на ПК (персональный компьютер), но не работает в тестовой или рабочей среде. И поиск этих ошибок занимает много времени – Просматривание исходного кода, сравнение среды и добавление точек останова. Тут и помогают инструменты диагностики Visual Studio Enterprise 2019, такие как IntelliTrace, вы имеете возможность просмотреть журнал выполнения кода в различных средах и переходить к проверенным данным сделанным в прошлом без задания точек останова вручную. Это избавит от уймы проблем и весьма сохранит ваше время, которые можно потратить более продуктивно. Единая модель программирования для всех типов приложений. Ранее, создаваемые приложения были зависимы от различных приёмов программирования, которые зависели от типа приложения – клиентское программное обеспечение, веб–приложения, программное обеспечение мобильных устройств и бизнес–логики промежуточного уровня имели различные значения между собой. Среда разработки Visual Studio Enterprise 2019 решает проблему, отдавая в распоряжение разработчика создание приложений единой моделью. Эта модель обладает простым и интуитивным интерфейсом, что позволяет разработчикам показать все свои навыки в создание всякого рода приложений. Поддержка жизненного цикла разработки. Среда Visual Studio Enterprise 2019 позволяет поддержать весь жизненный цикл разработки. Он начинается с планирования и проектирования, через разработку и тестирование и так до развёртывания и управление продуктом. Обеспечивается возможность подключения сторонних расширений для среды разработки независимых разработчиков. В Visual Studio Enterprise 2019 имеется адаптируемая среда для написания приложений и программ, так необходимых для современного мира. 32 Выводы по главе 1 Таким образом, рассмотрев теоретические основы разработки электронного учебника как средства организации самостоятельной работы студентов, мы пришли к выводам: 1. Электронное учебное пособие – это программно–методический обучающий комплекс, предназначенный для самостоятельного изучения студентом учебного материала по определенным дисциплинам, которое обеспечивает не только закрепление изученного материала, но и контроль уровня знаний. 2. Язык программирования С# в настоящее время является одним из наиболее распространенных объектноориентированного средств подхода. Язык разработки С#, как в рамках средство обучения программированию, обладает рядом несомненных достоинств. Он хорошо организован, строг, большинство его конструкций логичны и удобны. Развитые средства диагностики и редактирования кода делают процесс программирования приятным и эффективным. 3. Интегрированная среда разработки Microsoft Visual Studio Enterprise 2019 имеет множество преимуществ для разработки электронного учебника на языке С#: поддержка возможностей языка C#; популярная среди программистов в ОС Windows; имеются необходимые средства и инструменты для разработки любого приложения; создание эффективного кода; возможность использования готовых библиотек классов. . 33 ГЛАВА 2. ТЕХНОЛОГИЯ СОЗДАНИЯ ЭЛЕКТРОННОГО УЧЕБНИКА «ТЕОРИЯ ВЕРОЯТНОСТЕЙ И МАТЕМАТИЧЕСКАЯ СТАТИСТИКА» С ПОМОЩЬЮ ЯЗЫКА ПРОГРАММИРОВАНИЯ C# 2.1 Техническое задание электронного учебника «Теория вероятностей и математическая статистика» Наименование программного продукта – электронный учебник «Теория вероятностей и математическая статистика» Наименование темы разработки – язык программирования С# как средство создания электронного учебника «Теория вероятностей и математическая статистика» Основанием для разработки: Основанием для проведения разработки является создание программного продукта. Требования к организации входных данных: входные данные программного продукта должны быть организованы корректно. Требования к организации выходных данных: программный продукт должен соответствовать требованиям заказчика. Требования к обеспечению надежного (устойчивого) функционирования программного продукта: организовать корректную работу программного продукта; внешний вид; усвоение информации и оформление. Требования к надежности: 34 Электронный учебник «Теория вероятностей и математическая статистика» должна предусматривать базовую защиту от основных видов атак: межсайтового скриптинга (XSS), SQL– инъекций, CSRF–уязвимостей. Требования к составу и параметрам технических средств: в состав технических средств должен входить IBM–совместимый персональный компьютер (ПЭВМ), включающий в себя: процессор с тактовой частотой 800 ГГц; оперативную память объемом 256 мб; клавиатуру, мышь, монитор. Системные программные средства, которые будут использоваться, должны быть представлены лицензионной локализованной версией операционной системы. Требования к упаковке отсутствуют. Специальные требования: Должно быть обеспечено взаимодействие с пользователем (оператором) посредством графического пользовательского интерфейса. Предварительный состав программной документации: Состав программной документации должен включать в себя: техническое задание; листинг программы. Стадии разработки: Разработка должна быть проведена в три стадии: техническое задание; технический (и рабочий) проекты; внедрение. Этапы разработки: На стадии «Техническое задание» должен быть выполнен этап разработки, согласования и утверждения настоящего технического задания. 35 На стадии «Технический (и рабочий) проект» должны быть выполнены перечисленные ниже этапы работ: разработка программного продукта; разработка программной документации; апробация программного продукта. На стадии «Внедрение» должен быть выполнен этап разработки «Подготовка и передача программного продукта». Содержание работ по этапам: постановка задачи; определение и уточнение требований к техническим средствам; определение требований к программному продукту; определение стадий, этапов и сроков разработки программного продукта и документации на нее; 2.2 согласование и утверждение технического задания. Описание процесса создания электронного учебника «Теория вероятностей и математическая статистика» В основе работы программы «Теория вероятностей и математическая статистика» лежат различные компоненты и конструкции языка C# для реализации алгоритмов, обработки данных и взаимодействия с пользователем. На основе изучения и анализа литературы «Теория вероятностей и математическая статистика» нами была разработана программа электронного учебника «Теория вероятностей и математическая статистика» на языке программирования C#. Разработка этой программы прошла через несколько этапов: 1. Планирование и анализ требований. Определились с основными целями и функциональностью учебника, изучили литературу по теории вероятностей и 36 математической статистике для определения необходимых концепций и материалов. 2. Проектирование интерфейса. Разработали дизайн пользовательского интерфейса, определили структуру и организацию материала, выбрали необходимые элементы управления и функции для эффективного изучения тем. 3. Реализация модулей. Написали код для отображения теоретического материала, включая примеры, задачи и формулы. Воспользовались языком программирования C# и инструментами Microsoft Visual Studio для создания функциональности программы. 4. Визуализация данных: Если в учебнике предусмотрена визуализация данных, создали соответствующие функции, используя графические библиотеки или инструменты C# для создания графиков, диаграмм и визуальных элементов. 5. Тестирование: Провели тестирование программы для выявления ошибок и проблем, а также для проверки правильности работы всех функций и возможность эффективного использования учебника студентами. 6. Доработка и оптимизация: Оптимизировали программу, улучшили ее производительность и интерфейс, исправили выявленные ошибки и проблемы. Для начала работы необходимо установить Visual Studio (см.рис.1). Рисунок 1. Установка Visual Studio После установки Visual Studio, мы начинаем работу над учебником «Теория вероятностей программирования C#. и математическая статистика» на языке 37 Мы определяем основные цели и функциональность учебника, проводим анализ литературы по теории вероятностей и математической статистике, чтобы определить необходимые концепции и материалы. Мы также обращаем внимание на потребности целевой аудитории и учитываем их в процессе разработки. Затем определяем мы разрабатываем структуру и дизайн пользовательского организацию материала. Мы интерфейса, выбираем соответствующие элементы управления и функции, чтобы обеспечить эффективное изучение тем. Например, мы использовали вкладки, разделы, гиперссылки, чтобы пользователи могли легко навигировать по учебнику и быстро найти нужную информацию. Мы открываем Microsoft Visual Studio и начинаем создавать основные вкладки нашей формы. Для рабочей поверхности формы мы выбрали панель, которую мы переместили на форму и масштабировали. Далее мы пишем код для отображения теоретического материала, включая главы, подглавы и задачи. Мы используем язык программирования C# и инструменты Microsoft Visual Studio для создания функциональности программы. Далее мы проводим тестирование программы для выявления ошибок и проблем. Мы проверяем правильность работы всех функций и убеждаемся в возможности эффективного использования учебника студентами. На основе результатов тестирования мы дорабатываем программу, улучшаем ее производительность и интерфейс. Мы исправляем выявленные ошибки и проблемы, а также учитываем предложения пользователей для улучшения функциональности и удобства использования учебника. Путем последовательного выполнения этих шагов мы разработали электронный учебник «Теория вероятностей и математическая статистика» на языке программирования C# в среде разработки Microsoft Visual Studio, который обеспечивает доступ к материалам, примерам, задачам и тестам, помогая 38 студентам эффективно изучать и понимать основы теории вероятностей и математической статистики. Таким образом, программа электронного учебника «Теория вероятностей и математическая статистикв» была разработана на основе изучения литературы и прошла все необходимые этапы, чтобы обеспечить удобное и эффективное изучение теории вероятностей и математической статистики. 2.3 Руководство пользователя электронного учебника «Теория вероятностей и математическая статистика» Руководство пользователя электронного учебника, разработано с целью урегулирования вопросов, связанных с применением данного учебника. Для работы с электронным учебником пользователю необходимо запустить приложение на рабочем столе компьютера. При запуске электронного учебника пользователь попадает на начальный экран. (см. рис.2) Рисунок 2. «Начальный экран» 39 На рисунке 2 изображён начальный экран электронного учебника, на котором расположены 4 кнопки: 1. Кнопка «Предисловие»; 2. Кнопка «Оглавление»; 3. Кнопка «Об авторе»; 4. Кнопка «Выход». Кнопка «Предисловие». Предисловие - это вводная глава в начале книги, которая объясняет, почему автор написал ее, и предоставляет любую необходимую информацию, которой он хочет поделиться относительно методов или контекста. Предисловие не имеет никакого содержания, непосредственно связанного с содержанием книги, кроме объяснения того, почему автор решил написать об этой теме. (см. рис.3) Рисунок 3. «Предисловие» 40 Следующим шагом в использовании электронного учебника будет кнопка «Оглавление» (см. рис.4). В оглавлении находятся все разделы нашего электронного учебника. Рисунок 4. «Оглавление» После выбора темы, мы автоматически попадаем на ту тему, которую мы выбрали. Данную тему мы можем не только прочитать, но также и скачать. (см.рис.5) 41 Рисунок 5. «Теоретический материал электронного учебника» После изучения определенной темы необходимо будет пройти тест, с помощью которого программа определит, усвоил ли учащийся учебный материал или нет. (см. рис.6) Рисунок 6. «Тест» 42 По завершению теста, приходит сообщение, как учащийся освоил данный материал. (см. рис.7) Рисунок 7. «Результаты теста» Выводы по главе 2 В данной главе мы разработали техническое задание, в котором рассмотрели общие положения, эксплуатационное назначение, функциональное назначение, требования к хостингу, требования к надежности¸ также условия сдачи и приемки. Техническое оговаривающий задание набор – технический требований к документ системе и (спецификация), утверждённый как заказчиком/пользователем, так и исполнителем/производителем системы. Техническое задание устанавливает основное назначение разрабатываемого объекта, его технические характеристики, показатели качества и технико– экономические требования, предписание по выполнению необходимых стадий создания документации (конструкторской, технологической, программной и т. д.) и её состав, а также специальные требования, определяет порядок и условия работ, в том числе цель, задачи, принципы, ожидаемые результаты и сроки выполнения. Помимо этого, во второй главе мы подробно описали технологию создания электронного учебника «Теория вероятностей и математическая статистика» Также нами было разработано руководство пользователя с целью 43 урегулирования вопросов, связанных с использованием электронного учебника «Теория вероятностей и математическая статистика» 44 ЗАКЛЮЧЕНИЕ Цель вероятности дипломного и проекта, математическая создать электронный статистика» с учебник «Теория использованием языка программирования C#, была достигнута. Были решены следующие задачи: рассмотреть историю создания языка программирования С#; выявить достоинства и недостатки языка программирования С#; определить структуру языка программирования С#; определить сферы применения языка программирования С#; разработать техническое задание на проект; разработать электронный учебник «Теория вероятностей и математическая статистика»; разработать руководство пользователя электронного учебника. Итак, электронный учебник является универсальной и необходимой формой для обучения студентов. При помощи него каждый студент может заниматься индивидуально. Пропустив занятие, студент имеет возможность изучить ту или иную тему самостоятельно при помощи электронного учебника. Таким образом, компьютерный электронный учебник является одним из факторов совершенствования образовательного процесса. 45 СПИСОК ЛИТЕРАТУРЫ 1. А. И. Миков, Е.Б. Замятина. / Распределенные системы и алгоритмы./ А.И. Миков, Е.Б. Замятина. – Интуит, 2018. – 204 с. 2. Албахари,Дж.С#3.0. Справочник: Пер. с англ./ Дж. Албахари, В. Албахари. – 3–е изд. – Спб.: БХВ–Петербург, 2019. – 944 с.: ил. 3. Биллиг В. Основы программирования на C# / Интуит [2013].Дата обновления: 22.11.2005. 4. Вихтенко Э. М. Геометрические задачи в олимпиадах по про граммированию. Изд–во МИФ–2 №2. 2015 г. 5. Демин А. Ю., Дорофеев В. А. Программирование на C#: учебное пособие. Томский политехнический университет. − Томск: Изд–во Гомского политехнического университета, 2013. – 134 с. 6. Есипов А.С., Паньгина Н.Н., Громада М.И. Информатика. Сборник задач и решений для общеобразовательных учебных заведений. СПб.: Наука и техника, 2020. 368 с. 7. Ишкова Э. А. Самоучитель C#. Начала программирования [Текст]: учебное пособие / Э. А.Ишкова–2–е изд.–Санкт–Петербург: Наука и Техника, 2013.–496 с. 8. Катаев М.Ю. Объектно–ориентированное программирование: Учебное пособие. – Томск: Томский межвузовский центр дистанционного образования, 2020. – 145 с. 9. Коггзолл Д.PHP 5. Полное руководство / Коггзолл Д. – М.: Вильямс, 2016. – 749 с. 10. Коньков, К.А. Устройство и функционирование ОС Windows / К.А. Коньков. – М. : Интернет–Университет Информационных Технологий, 2018. – 208 с. – (Основы информационных технологий). 46 11. Котов О. М. Язык C#. Краткое описание и введение в технологии программирования [Текст]: учебное пособие / О. М. Котов–Екатеринбург: Урал. ун–та, 2014.–208 с. 12. Кристиансен Т. Perl. Сборник рецептов для профессионалов / Кристиансен Т. – СПб.: Питер, 2014. – 928 с. 13. Крэг Ларман. Применение UML и шаблонов проектирования. – М. Издательский дом "Вильямс", 2018 – 624 с. 14. Кулиненко И. М. Методика создания электронного учебника [Текст]: учебное пособие / И. МКулиненко–Челябинск: ЧМК, 2022.–11 с. 15. Липский В. Комбинаторика для программистов. – М.: Мир, 2015. 16. Окулов С.М. Программирование в алгоритмах. М.: Бином. Лабо ратория знаний, 2014. 341 с. 17. Петцольд Ч. Программирование для Microsoft Windows на С#. Пер. с англ.— М.: Издательско–торговый дом «Русская Редакция», 2022. – 576с. 18. Подбельский В. В. Язык C#. Базовый курс [Текст]: учебное пособие / В. В. Подбельский–2–е изд.–Москва: Финансы и статистика, 2023.–408 с. 19. Прохоренок Н. HTML, JavaScript, PHP и MySQl. Джентельменский набор Web–мастера / Прохоренок Н. – СПб.: БХВ–Петербург, 2019. – 840 с. 20. Путилин А. Б., Юрагов Е. А. Компонентное моделирование и программирование на языке UML. – М.: НТ Пресс, 2015.–662 с. 21. Рубанцев В. Тотальный тренинг по Си–шарпу [Текст]: учебное пособие / В. Рубанцев–RVGames, 2020.–205 с. 22. Румянцев П. В. Азбука программирования в Win32 API. – М: Горячая Линия – Телеком, 2021. – 310 с. 23. Румянцев П. В. Работа с файлами в Win32 API. – М: Горячая Линия – Телеком, 2022. – 197 с. 24. Сафонов, В.О. Основы современных операционных систем / В.О. Сафонов. – М. : ИнтернетУниверситет Информационных Технологий, 2021. – 584 с. – (Основы информационных технологий). 47 25. Смирнов, А.А. Технологии программирования: учебно– практическое пособие / А.А. Смирнов. – М. : Евразийский открытый институт, 2021. – 192 с. 26. Стиллмен Э. Изучаем C# [Текст]: учебное пособие / Э. Стиллмен, Дж. Грин–3–е изд.–Санкт–Петербург: Питер, 2020.–816 c. 27. Суслова И. А. МУ по выполнению и оформлению ВКР [Текст] / И. А. Суслова, Е. В. Чубаркова— Екатеринбург: ФГАОУ ВО «Рос. гос. проф.–пед. ун–т», 2020.–41 с. 28. Уотсон К. Visual C# 2010: полный курс [Текст]: учебник / К. Уотсон, К. Нейгел, Я. Х. Педерсен, Дж. Рид, М. Скинер–под. ред. Артеменко Ю. Н.– Москва: Вильямc, 2021.–955 c. 29. Фаронов В. В. Создание приложений с помощью C#: Руководство программиста [Текст]: учебник / В. В. Фаронов–Москва: Эксмо, 2018.–576 с. 30. Фаронов В. Программирование на языке C # / Фаронов В. – СПб.:Питер, 2017. – 240 с. 31. Финогенов, К.Г. Win32. Основы программирования / К.Г. Финогенов. – М. : Диалог–МИФИ, 2016. – 411 с. 32. Фленов М. Е. Библия С# [Текст]: учебное пособие / М. Е. Фленов–2– е изд.–Санкт–Петербург: БХВ–Петербург, 2022.–560 с. 33. Фленов М. Программирование на C++ глазами хакера / Фленов М. – СПб.: БХВ–Петербург, 2019. – 350 с. 34. Хайруллин Р.С. Программирование на C#: учебное пособие / Р.С. Хайруллин. – Казань: Изд–во Казанск. гос. архитект.–строит. ун–та, 2017. – 153 с. 35. Хорев П. Б. Объектно–ориентированное программирование с примерами на С# [Текст]: учебное пособие / П. Б. Хорев–3–е изд.–Москва: Форум, Инфра–М, 2016.–200 c. 36. Шилдт Г. Полное руководство С# 4.0 [Текст]: учебное пособие / Г. Шилдт–пер. с англ. Берштейн И. В.–Москва: Вильямс, 2022.— 1051 с.