Учебное пособие содержит теоретический материал и лабораторный практикум для изучения
дисциплины «Основы программирования». Представлен панорамный взгляд на предметную область,
с представлением не только традиционной императивной, но и функциональной, и логической парадигм программирования, исторической ретроспективы и связи с другими областями информатики. Приводится сравнение программирования на языках высокого и низкого уровней (ассемблер). Несмотря на обзорный характер, после прочтения и прохождения входящего в книгу лабораторного практикума студент будет способен писать программы средней сложности на языках С/С++. Книга содержит и специальные главы, посвященные жизненному циклу программных средств современной ИТ-индустрии, проблеме ошибок в программах и методах верификации программного обеспечения, стилю программирования. Учебное пособие адресовано студентам, обучающимся в ИТМО на кафедре КОТ по направлению 09.03.02 «Информационные системы и технологии»; преподавателям, ведущим теоретические и лабораторные занятия по курсу «Основы программирования». В то же время издание может представлять интерес для школьников, студентов средних специальных заведений и широкого круга читателей, заинтересованных в освоении основ программирования. Рекомендовано к печати Ученым советом факультета КТиУ 08.12.2015 г., протокол №10. Университет ИТМО – ведущий вуз России в области информационных и фотонных технологий, один из немногих российских вузов, получивших в 2009 году статус национального исследовательского университета. С 2013 года Университет ИТМО – участник программы повышения конкурентоспособности российских университетов среди ведущих мировых научно-образовательных центров, известной как проект «5 в 100». Цель Университета ИТМО – становление исследовательского университета мирового уровня, предпринимательского по типу, ориентированного на интернационализацию всех направлений деятельности. Университет ИТМО, 2016 А.А. Тюгашев, 2016 3 Оглавление Введение...............................................................................................................5 Базовые понятия ...............................................................................................8 История развития языков программирования................................................16 Императивное программирование...................................................................31 Описание фон-неймановской архитектуры.................................................31 Базовые понятия и конструкции императивных языков............................34 Условный оператор и оператор выбора ....................................................38 Повторное исполнение — рекурсия и итерация ......................................41 Структурное программирование................................................................45 Исключения..................................................................................................47 Процедурное программирование...............................................................48 Структуры данных в программировании.....................................................51 Простые типы данных.................................................................................53 Составные типы данных .............................................................................58 Структурирование программ, принцип модульности ...............................72 Язык программирования Си..........................................................................74 Основные понятия языка программирования Си.....................................82 Принципы ввода-вывода в языке Cи.........................................................87 Структурирование программ на языке Си................................................90 Структуры данных и управления языка программирования Си ............ 92 Обработка текстовых строк........................................................................99 Использование параметров функции main()...........................................101 Работа с файлами.......................................................................................102 Сумма нечетных на языке Си...................................................................106 Сортировка массивов .............................................................................. История развития языков программирования При формулировании понятия «программирование» мы упоминали о том, что здесь подразумевается подготовка программ для ЭВМ, или компьютера. Попробуем рассказать подробнее, что под этим понимается. Компьютер — некая машина, способная выполнять различные действия в соответствии с заложенной в нее программой. Именно программа определяет возможность полезного применения ЭВМ, без нее она остается практически ненужной грудой «железа» — проводов, микросхем, пластмассы. Благодаря возможности менять исполняемые программы, закладываемые в память машины без изменения ее электронной схемы, мы получаем удивительное и не характерное для ранее созданных человеком машин свойство — универсальность, то есть способность одной и той же машины выполнять разные функции. Программа представляет собой некую систематизированную совокупность инструкций (команд), которые входят в перечень доступных (исполнимых) для конкретной ЭВМ. Набор доступных команд (система команд) современного компьютера обычно довольно примитивен и состоит из элементарных действий, подобных сложению или пересылке данных, производимых над содержимым ячеек памяти ЭВМ. Потрясающе, но именно выполнение большого (действительно большого!) количества этих элементарных действий в нужном порядке позволяет современным ЭВМ вычислять траектории полета космических аппаратов к Юпитеру, весьма правдоподобно имитировать сражение на Курской дуге, обыгрывать чемпиона мира по шахматам, анализировать тайны мира элементарных частиц и выполнять иные столь же сложные задачи. Программист — человек, занятый программированием, иными словами — маг и чародей, который способен заставить компьютер выполнять все перечисленное (и еще то, что пока не заставили выполнить компьютер, но замысел чего уже появился в голове читателя). Но, конечно, любой маг должен знать нужные заклинания. В нашем случае заклинания — это языки программирования, на которых составляются программы. К какому моменту можно отнести появление первого программируемого компьютера (подчеркнем это слово, поскольку машины для автоматизации счета известны с глубокой древности — вспомним абак, но управление процессом вычислений производилось вручную)? Первым программистом в истории человечества часто называют леди Лавлейс, составившую для так называемой аналитической машины Чарльза Бэббиджа несколько предписаний, в том числе самое сложное, с вложенными циклами (причем 17 Ада Лавлейс, фактически, и ввела такое фундаментальное понятие программирования, как цикл!), по расчету чисел Бернулли. Справедливости ради отметим, что аналитическая машина существовала лишь в проекте. Основывалась она не на электричестве, а на механических узлах и должна была оснащаться паровым двигателем (да, именно это было вершиной техники в 1830-е годы, когда создавался этот выдающийся проект). Однако если бы машина была построена, она стала бы первым программируемым компьютером. Для ввода программы в машину предполагалось использовать карты с отверстиями (перфокарты), подобно тому, как программируются узоры, создаваемые на ткацком станке. Фактически, программа Ады Лавлейс (кстати, в честь этой хрупкой женщины назван язык программирования, разработанный по заказу министерства обороны США) представляет собой набор карт, а не некую запись в виде текста. Заметим, что к числу гениальных прозрений леди Лавлейс следует отнести и то, что она предвидела возможность машины оперировать не только числами, но и произвольными объектами, выраженными, например, алгебраически в символьной форме (то есть то, что ныне называется символическими вычислениями, или компьютерной алгеброй), и даже звуками, представляемыми нотами. Тем не менее машина Бэббиджа не была построена. В какой же стране и когда появился действительно функционировавший компьютер? Был он электронным или механическим? И какой язык программирования применялся? Из одной книги по информатике в другую кочует укоренившийся миф, гласящий, что страна — США, машина — электронная, а год — 1946-й. Это не соответствует действительности. Еще в 1938 году немецкий инженер Конрад Цузе построил Z1 — первую из трех модификаций своей вычислительной машины. Элементной базой служили списанные с телефонной станции реле — фактически, машина была электромеханической. Программа должна была задаваться с помощью ленты с отверстиями — перфоленты. Однако Цузе, как и леди Лавлейс за век до него, увлекла идея создания универсальной машины, способной решать задачи не только вычислительные, но и из других областей. Он назвал этот свой проект логической машиной. Жаль, что она, как и аналитическая машина Бэббиджа, так и не была построена (правда, по чертежам и записям Бэббиджа базовые части аналитической машины были реализованы энтузиастами позже, уже в XX веке). В 1945 году, по окончании Великой Отечественной войны, Цузе переехал из Берлина в Баварские Альпы, где и занялся определением языка для будущей логической машины. Язык, названный им Plankalkül (по-русски 18 произносится «планкалкюль», приблизительно означает «планирующее исчисление»), фактически, представляет собой языком программирования высокого уровня с такими современными чертами: наличие повторно вызываемых функций; встроенные типы данных; массивы; аналог условного оператора; аналог оператора assert; исключения; цикл ПОКА. Аналога оператора безусловного перехода GOTO в языке не был
Fatkov МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ РАБОТЫ СОВРЕМЕННЫХ ПОГЛОЩАЮЩИХ АППАРАТОВ АВТОСЦЕПКИ И РАЗРАБОТКА ПРОГРАММНОГО КОМПЛЕКСА ДЛЯ РАСЧЕТА ИХ ХАРАКТЕРИСТИК