    ББК 22.18 К96 УДК 519.6 (075.8) 
    Кушниренко А. Г., Лебедев Г. В. Программирование для мате» матиков: Учеб, 
пособие для вузов —М,: Наука. Гл. ред. физ.-мат, лит., 1988.- 384 с. 
    ISBN 5-02-014235-2   ! 
    Книга содержит расширенный вариант начального курса программирования, 
который читается на механико-математическом факультете МГУ с 1980 г, Цель 
курса — заложить фундамент общей программистской культуры слушателей и научить 
их грамотно программировать практически задачи объемом несколько тысяч строк. 
Основу курса составляют понятие исполнителя, технология программирования 
«сверху вниз» и развитые структуры данных. В числе изучаемых в курсе 
законченных программных систем — управление станком с ЧПУ и «луноходом», 
реализация простейшего компилятора арифметических формул, построение 
изображения полиэдра с удалением невидимых линий, ссылочная реализация списка, 
хеширование, двумерное хеширование по равномерной сетке, реализации 
виртуальной памяти, простейшей файловой системы и компонент экранного 
редактора текстов. 
    Изложение ведется в едином стиле с использованием понятия исполни* теля на 
учебном языке программирования с русской лексикой. 
    Для студентов математических факультетов  университетов и факультетов 
врикладной математики вузов. Табл. 11. Ил. 96. 
    Рецензенты: 
    кафедра прикладной математики МИЭМ, 
    доктор физико математических наук А. Л, Семенов 
    1702070000-158 
    053 (02)-88 ISBN 5-02-014235-2 
    КБ-14-63—88 
    © Издательство «Наука Главная редакция физико-математической литературы, 1988


    ПРЕДИСЛОВИЕ 

    Эта книга содержит расширенный вариант начального курса программирования, 
который читается на механико-математическом факультете МГУ с 1980 г. Основная 
цель курса—заложить фундамент общей программистской культуры слушателей, в 
частности научить их грамотно программировать задачи объемом до нескольких 
тысяч строк. Значительную часть курса составляет изучение мини-проектов, т, е. 
законченных программных систем объемом несколько сотен строк. В их числе 
управление станком с ЧПУ и «луноходом», реализация простейшего компилятора 
арифметических формул, построение изображения полиэдра с удалением невидимых 
линий, ссылочная реализация списка, хеширование, двумерное хеширование по 
равномерной сетке, реализации виртуальной памяти, простейшей файловой системы 
и компонент экранного редактора текстов. 
    Курс посвящен npoграммированию  как таковому: вычислительные методы, 
приближённье вычисления, операционные системы и т. п. в нём не затронуты 
вовсе; первые две трети курса пообще не связаны с ЭВМ; синтаксису языков 
программирования не уделяется почти никакого внимания. Основной методический 
прием курса — обучение на примерах. Любые технические детали изучаются лишь в 
процессе решения какой-нибудь содержательной задачи. 
    В основе курса лежат три «кита»: понятие исполнителя, технология 
программирования «сверху вниз», развитые структуры данных. Эти три кита в свою 
очередь опираются на «черепаху» — курс предполагает активное изучение 6—8 тыс, 
строк эталонных текстов программ и создание новых программ общим объемом 1—2 
тыс. строк. Курс можно изучать и без ЭВМ вообще, однако использование ЭВМ со 
специализированным программным обеспечением существенно повышает эффективность 
и качество обучения. 
    Центральное понятие курса — понятие исполнителя. Исполнителя можно 
представлять себе как робота с некоторой системой команд. Действия, 
выполняемые роботом по той или иной команде, могут зависеть от предыстории 
(состояния «памяти» робота) и от обстановки, в которой поступила команда. С 
программистской точки зрения исполнитель — это пакет программ, работающих над 
общими данными, т. е. информационно-прочный модуль в классификации  Майерса, 
Его аналогами являются экземпляр класса в языке 

    ПРЕДИСЛОВИЕ		7 

Симула-67, объект в языке Smalltalk-80, пакет программ в языка Ада, модуль 
в языке Модула. Понятие исполнителя, однако, является в курсе первичным и не 
сводится просто к объединению программ, Одна из важнейших задач курса — 
научить слушателей мыслить именно в терминах исполнителей, а не отдельных 
программ: сначала придумывать исполнителя в целом, а уж потом решать, какие 
действия он будет уметь выполнять, какими программами эти действия будут 
реализованы и какая информация будет храниться в его памяти. Технология 
«сверху вниз» и структуры данных также излагаются в терминах исполнителей. 
    Книга состоит из пяти глав. Глава 1 — «Начала программирования»— содержит 
изложение основных понятий программирования, технологии «сверху вниз», 
управляющих конструкций и структур данных. Этот материал доступен даже 
школьнику и не требует никакого предварительного знакомства с 
программированием. Кроме того, в гл. 1 входит материал по базисным схемам 
обработки информации: рекурсия, итерация, проектирование цикла с помощью 
инварианта, вычисление инвариантной функции, индуктивное вычисление функций на 
пространстве последовательностей. Этот материал мог бы составить предмет 
отдельного небольшого курса, читаемого параллельно с курсом программирования, 
а его изложение предполагает наличие у читателя минимальной математической культуры. 
    Глава 2 посвящена решению трех задач: построению выпуклой оболочки 
последовательно поступающих точек плоскости; реализаций простейшего компилятора 
с языка арифметических формул; построению изображения полиэдра о удалением 
невидимых линий. Выбор задач и стиль их изложения предполагают, по крайней 
мере, знание того, что такое выпуклая оболочка, ориентированная площадь, 
нормаль, полупространство и т. п. Глава не является обязательной для понимания 
следующих глав и, за исключением специальных вопросов, связанных с компиляцией 
(язык и грамматика), не содержит нового теоретического материала. 
    Глава 3 посвящена cтруктурам данных (стек, дек, очередь, список, 
последовательность, множество и др.) и методам их реализации на базе линейной 
памяти. Изучаются непрерывные и ссылочные реализации, последовательный и 
бинарный поиск, хеширование, двумерное хеширование по равномерной сетке, 
реализации виртуальной памяти и простейшей файловой системы. Весь этот 
материал изложен в едином стиле с использованием понятия исполнителя. 
    В главах 1—3 программы записываются на учебном языке программирования с 
русской лексикой. Неформальное описание, этого языка приведено в приложении 1. 

    8 ПРЕДИСЛОВИЕ

    Глава 4 является традиционной и посвящена устройству ЭВМ (на примере ЭВМ 
архитектуры PDP-11). Она содержит примеры программ в «кодах» и описание 
основных компонент базового программного обеспечения. Основное назначение этой 
главы — дать представление об устройстве современных ЭВМ и завершить 
формирование программистской «картины мира». 
    Глава 5 демонстрирует, как при работе на Фортране можно применить стиль и 
методы программирования первых трех глав. Излагается язык программирования 
Фортран, правила перекодировки программ на язык Фортран, методика реализации 
исполнителей, а также некоторые вопросы устройства Фортран-машины. Выбор языка 
объясняется тем, что Фортран является наиболее распространенным языком для 
научно-технических расчетов и различных систем автоматизации. 
    Авторы благодарны заведующему лабораторией вычислительных методов А. В. 
Михалеву, ст. н. с. В. Б. Бетелину, а также Д. В. Варсапофьеву, А. Г. 
Дымченко, Г. В. Маслову, Н. Н. Молчанову и многим другим сотрудникам, 
аспирантам и студентам механико-математического факультета МГУ, участвовавшим 
в начальной постановке, организации и дальнейшем проведении описанного в книге 
курса программирования, в создании специализированного программного 
обеспечения этого курса. 
