Алгоритмизация и программирование на языке С++. Часть 1
Покупка
Новинка
Тематика:
Программирование на C и C++
Издательство:
Издательский Дом НИТУ «МИСиС»
Год издания: 2023
Кол-во страниц: 219
Дополнительно
Вид издания:
Учебник
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-907560-77-2
Артикул: 831536.01.99
Содержит материал для изучения основ алгоритмизации и начального знакомства с программированием на языке С++ в рамках курса «Алгоритмизация и программирование». Многочисленные примеры в учебнике написаны и отлажены в трех средах разработки С++. Предназначен для студентов 1-го курса института ИТКН, а так же для самостоятельного изучения студентами других специальностей.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 10.03.01: Информационная безопасность
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Москва 2023 МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РФ Университет науки и технологий МИСИС ИНСТИТУТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И КОМПЬЮТЕРНЫХ НАУК Кафедра инженерной кибернетики О.В. Андреева А.И. Широков АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++ Учебник Рекомендовано редакционно-издательским советом университета № 4700
УДК 004.438 А65 Р е ц е н з е н т ы : канд. техн. наук, доц. кафедры моделирования в экономике и управлении С.В. Никифоров (РГГУ); канд. техн. наук, доц. НИТУ МИСИС С.В. Громов Андреева, Ольга Владимировна. А65 Алгоритмизация и программирование на языке С++. Часть 1 : учебник / О.В. Андреева, А.И. Широков. – Москва : Издательский Дом НИТУ МИСИС, 2023. – 219 с. ISBN 978-5-907560-77-2 Содержит материал для изучения основ алгоритмизации и начального знакомства с программированием на языке С++ в рамках курса «Алгоритмизация и программирование». Многочисленные примеры в учебнике написаны и отлажены в трех средах разработки С++. Предназначен для студентов 1-го курса института ИТКН, а также для самостоятельного изучения студентами других специальностей. УДК 004.438 Андреева О.В., Широков А.И., 2023 ISBN 978-5-907560-77-2 НИТУ МИСИС, 2023
СОДЕРЖАНИЕ Введение ......................................................................5 1. История и стандарты С++ ..........................................6 2. Среды разработки С++ и написание первой программы ...................................................................9 2.1. Начало разработки программ в среде Dev C++ ....... 11 2.2. Начало разработки программ в среде Visual Studio 2022 .................................................... 15 2.3. Начало разработки программ в среде OnlineGDB ... 26 3. Переменные и типы данных ..................................... 29 3.1. О понятии «переменная» .................................... 29 3.2. Основные типы данных С++ ............................... 31 3.3. Литералы ......................................................... 42 4. Операции (выражения) ............................................ 47 5. Ввод-вывод данных ................................................. 54 5.1. Ввод-вывод с использованием потоков STL ........... 54 5.2. Ввод-вывод с использованием функций в стиле С ... 60 6. Инструкции выбора ................................................ 63 7. Циклы .................................................................. 76 8. Массивы .............................................................. 102 8.1. Указатели, ссылки и массивы ........................... 102 8.2. Алгоритмы обработки одномерных массивов ...... 106 8.3. Обработка двухмерных массивов ....................... 125 8.3.1. Ввод-вывод двумерных массивов ................. 125 8.3.2. Типовые алгоритмы двухмерного массива..... 129 9. Функции ............................................................. 154 Задания для самостоятельного выполнения .................. 168 Заключение ............................................................. 184 Библиографический список ........................................ 185
АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++ Приложение 1. Директивы препроцессора .................. 189 Приложение 2. Типизация языков программирования ... 198 Приложение 3. Приоритет и ассоциативность операций С++ ........................................................... 209 Приложение 4. Использование функции вычисления степени и сравнение алгоритмов по эффективности (времени выполнения) ............................................... 212
ВВЕДЕНИЕ Развитие общества сегодня определяется внедрением компьютерных технологий в разнообразных областях деятельности человека. Навыки использования таких технологий обеспечивают конкурентоспособность специалистов самых разных специальностей. Знакомство с современными технологиями разработки и реализации программно-алгоритмического обеспечения делают более осознанным участие в реализации компьютерных систем на всех этапах жизненного чикла. Очевидно, что у специалистов, непосредственно занятых в разработке и внедрении компьютерных технологий, навыки программирования и алгоритмизации должны быть освоены на высоком уровне. Настоящий учебник содержит описание методов и средств языка программирования С++, являющегося сегодня одним из самых применяемых при разработке приложений широкой направленности. Материал учебника ориентирован на обучающихся в области компьютерных технологий и, желательно, уже имеющих хотя бы начальные навыки программирования на алгоритмических языках. В учебнике приведено описание базовых конструкций языка С++ (без претензий на полное освещение вопроса). Но в учебниках по языкам программирования, например в [1], часто содержится такая мысль: «Язык программирования нельзя изучать «линейно», то есть от аксиом к теоремам, задачам, выводам». Исходя из этого, многие конструкции будут введены сначала в примерах, а затем приведено их строгое формальное описание. Примеры, содержащиеся в учебнике, написаны и отлажены в трех средах разработки С++: Visual Studio 2022, Dev C++ и OnlineGDB.
1. ИСТОРИЯ И СТАНДАРТЫ С++ От каких языков произошел С++? Конечно, прежде всего от С. Вот что пишет об этом Б. Страуструп, создатель С++, в одной из своих книг: «С++ – язык общего назначения и задуман для того, чтобы настоящие программисты получили удовольствие от самого процесса программирования. За исключением второстепенных деталей он содержит язык С как подмножество» [2]. Далее он добавляет, что С++ дополнен расширением, связанным, прежде всего, с появлением новых типов. Первый из них – класс, являющийся, по словам Б. Страуструпа, «ключевым понятием». Среди добавлений в С++ он в упомянутой книге называет еще и такие: «… символические константы, функции-подстановки, стандартные значения параметров функций, перегрузка имен функций, операции управления свободной памятью и ссылочный тип». Следует добавить, что автор языка работал над его совершенствованием не один десяток лет, и эта работа продолжается. Язык программирования С, «предшественник» рассматриваемого здесь С++, был разработан в 1969–1973 годах сотрудником Bell Labs Деннисом Ритчи. Первым стандартом этого языка является книга Б. Кернигана и Д. Ритчи [3]. Вот что еще пишет Б. Страуструп об идее построения С++ на основе С: «В С существуют свои проблемы, но в языке, разрабатываемом « с нуля», они появились бы тоже, а проблемы С, по крайней мере, хорошо известны. Более важно то, что ориентация на С позволила использовать язык «С с классами» как полезный (хотя и не очень удобный) инструмент в течение первых месяцев раздумий о введении в С классов в стиле Симулы [4]». В этой же книге приводятся и другие языки, идеи которых использованы при создании С++. Это, в частности, такие как: • Алгол 68 [5] (перегрузка операций и свобода размещения операций всюду); • Ада [6]; • CLU [7] (механизм обработки особых ситуаций).
1. История и стандарты С++ О названии языка С++ ее автор говорит следующее: «Название C++ было придумано Риком Маскитти (Rick Mascitti) летом 1983 года. Имя отражает природу изменений в языке по сравнению с C. «++» – это оператор инкремента в C» [8]. На странице Википедии [9] приводится схема, названная «Генеалогия и взаимовлияние версий C и C++». На рис. 1.1 эта схема дополнена версиями С++03 и С++20. Рис. 1.1. Генеалогия и взаимовлияние версий C и C++ Приведем выдержки из главы «История и совместимость» книги автора С++ [10], один из разделов которой называется « Временная диаграмма развития». Вот кратко несколько фрагментов оттуда.
АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++ 1979 год. Начата работа над «С с классами». 1984 год. «С с классами» переименован в С++. 1985 год. Первый коммерческий выпуск С++ (14 октября). 1998 год. Стандарт ISO С++. 2011 год. Стандарт ISO С++11. 2013 год. Первая полная реализация С++11. 2014 год. Стандарт ISO С++14. 2020 год. Стандарт ISO С++20. Здесь видно, как развитие языка С++ сопровождалось и продолжает сопровождаться выпуском стандартов, в которых учитывается мнение множества специалистов. Это делает его отвечающим современным требованиям. Все подробности можно получить от автора в упомянутой книге, и, конечно, изучая стандарты, начиная от первого (1998) и включая последний ( 2022). Но совершенствование языка продолжается. Сейчас анонсирован стандарт 2023. Там же Страуструп пишет: «Я изобрел С++, написал его первые определения и создал его первую реализацию. Я выбрал и сформулировал критерии проектирования для С++, разработал основные языковые функции, разработал или помогал разрабатывать многие ранние библиотеки и в течение 25 лет отвечал за обработку предложений по расширению в комитете по стандартам С++». Из этих слов становится понятно, что этот язык программирования, созданный более 30 лет назад, постоянно совершенствуется, приобретая новые возможности, диктуемые потребностями современного состояния компьютерных технологий. Многие годы язык программирования С++ занимает места в первой пятерке рейтингов популярности языков программирования. Это делает важным изучение этого языка для специалистов в области компьютерных технологий. Переходим к описанию инструментов, позволяющих изучать методы и средства разработки программ на С++. Таких инструментов множество, но в учебнике используется только три.
2. СРЕДЫ РАЗРАБОТКИ С++ И НАПИСАНИЕ ПЕРВОЙ ПРОГРАММЫ Для написания и отладки программы на языке программирования ( реализации алгоритма решения задачи) необходимы программные средства. Прежде всего, это тестовый редактор. Он используется для подготовки исходного текста. Далее потребуется транслятор (для формирования программы в терминах машинных команд). И на последнем этапе в действие вступает средство формирования программы в виде исполнимого файла (готовой для выполнения программы). На последнем этапе к программе подключаются библиотечные модули (это заранее созданные часто используемые алгоритмы, например, выполняющие операции ввода-вывода). Эти средства (редактор, транслятор) могут существовать отдельно ( так часто бывает при работе в Unix-подобных операционных системах) или объединяться в единый программный комплекс, называемый интегрированной средой разработки (IDE – Integrated Development Environment). Такие программы появились давно. Первая была создана в Дартмутском колледже в мае 1964 года [11]. Ее создали два профессора Дартмутского колледжа Джон Г. Кемени и Томас Э. Курц – авторы языка программирования BASIC. Она обеспечивала интерактивную разработку программ для версии Dartmouth BASIC. В процессе своего развития IDE приобрели множество новых возможностей. Первой из таких возможностей являются средства, помогающие при отладке программы. Но сегодня такие комплексы включают «… также средства для интеграции с системами управления версиями и разнообразные инструменты для упрощения конструирования графического интерфейса пользователя. Многие современные среды разработки также включают браузер классов, инспектор объектов и диаграмму иерархии классов – для использования при объектноориентированной разработке ПО. IDE обычно предназначены для нескольких языков программирования …» [12].
АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++ Например, Visual Studio 2020 обеспечивает написание программ на таких языках, как С++, C#, F#, Python, JavaScript, TypeScript, Visual Basic [13]. Но эта среда также содержит множество встроенных инструментов, например редактор пользовательских форм для создания графического интерфейса, дизайнер классов, дизайнер схемы базы данных и др. Существует множество сред разработки для С++. Информация о некоторых из них приведена в табл. 2.1 [14]. Таблица 2.1 Сравнение средств разработки для С++ Visual Studio Code Тип: IDE Цена: бесплатно Поддерживаемые платформы: Windows, Linux, macOS Microsoft Visual C++ Тип: IDE Стоимость: сommunityверсия распространяется бесплатно Поддерживаемые платформы: Windows Xcode Тип: IDE Стоимость: бесплатно Поддерживаемые платформы: macOS g++ Тип: компилятор Стоимость: бесплатно Поддерживаемые платформы: Linux, macOS Dev C++ Тип: IDE Стоимость: бесплатно Поддерживаемые платформы: Windows Intel C++ Тип: компилятор Стоимость: бесплатно Поддерживаемые платформы: Windows, Linux Mingw-w64 Тип: компилятор Стоимость: бесплатно Поддерживаемые платформы: Windows Clang C++ Тип: компилятор Стоимость: бесплатно Поддерживаемые платформы: macOS, Linux, FreeBSD Clion Тип: IDE Стоимость: от 14 100 руб. Поддерживаемые платформы: A cross-platform IDE for C and C++ Следует сказать, что представленный список далеко не исчерпывает возможности разработки программ на С++. В настоящем пособии приводятся примеры реализации алгоритмов в трех IDE: Dev C++ (v. 5.11 и v. 6.3), Visual Stu
2. Среды разработки С++ и написание первой программы dio 2019 и среде онлайн-разработки Online GDB [15]. Заметим, что Online GDB поддерживает разработку программ на более чем 20 языках программирования. В текст практически любой программы, написанной на С-подобном языке программирования, должны быть включены так называемые директивы препроцессора. Они, например, содержат описания библиотек. В С++ нет инструкции языка, обеспечивающей ввод и вывод информации. Для этого надо использовать библиотечные модули, а значит, директиву предпроцессора. Краткое описание последних содержится в прил. 1. 2.1. Начало разработки программ в среде Dev C++ При запуске среды разработки Dev C++ (v. 5.11) командой File-NewProject открывается окно для выбора типа проекта ( рис. 2.1). Рис. 2.1. Окно выбора типа проекта в Dev C++ Выбираем тип проекта – Console Application. Следующий шаг – изменение имени проекта (в нашем случае по умолчанию задано Project1). Откроется окно редактора исходного текста программы (рис. 2.2).
АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++ Рис. 2.2. Окно исходного текста проекта Dev C++ Как комментарий в тексте предложено добавить строку с функцией getch() или обращение к функции system() с параметром pause. В обоих случаях завершение работы программы будет задержано до нажатия любой клавиши на клавиатуре. Тем самым окно с результатом выполнения отлаживаемой программы не закроется мгновенно. Теперь попробуем добавить в текст программы такую строку: cout << "Hello World!\n"; Но до выполнения программы потребуется задать имя исходного текста. Будет предложено main.cpp. Обратим внимание на папку, где сохранится файл исходного текста программы. Ее имя – Документы (полный путь к папке – C:\Users\ais49\ OneDrive\Документы). Он был выбран при установке программы. Там же сохранится и исполнимый файл (с расширением *.exe) после компиляции и сборки программы, перед ее выполнением. Каталог, куда будут сохраняться эти файлы, определен в среде Dev C++ после выбора таких команд – Tools-Environment_ Options, и далее строка ввода – User’s default directory. Естественно, его можно заменить на другой. Многие учебники по программированию начинаются этой программой. Она выводит в консоль сообщение Hello World!