РАБОЧАЯ ПРОГРАММА лекционного курса «Программирование и алгоритмические языки» (1-й семестр, 54 часа) ЦЕЛЬ И ЗАДАЧИ КУРСА. Цель курса - ввести в круг понятий и задач, связанных с использованием языков программирования, с тем, чтобы студенты могли самостоятельно создавать программы на языках высокого уровня. Задача курса состоит в выработке у студентов навыков использования языков программирования для создания систем обработки данных и обоснованного выбора средств программирования. Курс поддерживается соответствующей учебной (аудиторной) практикой и практикумом на ЭВМ. От составителей. 1. Наиболее важной и «тонкой» составителям представляется проблема мотивации курса. Составители исходят из того, что деятельность программиста – это практическая математическая деятельность людей для людей. В практике программирования неизбежно используются методы абстрагирования-конкретизации и не просто выгодно, а неизбежно необходимо опираться на прагматично понимаемые (соответственно представленные и изложенные...) математические методы, модели, их свойства и пределы их применимости. Это представляется надежной основой мотивации курса. 2. В первом разделе «Основные понятия процедурного программирования» сформулированы почти все базовые понятия, которые составляют основное содержание курса. Однако не следует это понимать, как установку на полное и полноценное изложение всего, что связано с этими понятиями, уже в самом начале курса. Что из этого материала, и в каком виде лектор фиксирует в начале, а что и каком виде он разворачивает впоследствии, определяет лектор. Раздел на содержательном уровне фиксирует «опорные точки» языка описания, возможность и необходимость его формализации. 3. В третьем разделе «Алгоритмизация задач» приведены классы задач, на основе которых в курсе рассматриваются методы и приемы алгоритмизации. Также, не следует это понимать, как установку на вынесение этого материала именно в завершающий период курса. Естественно, в изложении материала предыдущих двух разделов обязательно присутствуют задачи и их решения на основе соответствующих методов и приемов алгоритмизации. Еще раз отметим, лектор самостоятельно определяет, в каком порядке разворачивать материал курса и как мотивировать свой порядок изложения. Цель раздела - представить базовые, изначально и естественно возникающие на практике проблемы, мотивирующие математические методы и, в свою очередь, являющиеся сферой их приложения. Введение. Автоматизация рутинной деятельности как гуманитарная цель программирования. Программирование как математическая деятельность. Средства – информационное моделирование, последовательное определение строения и поведения больших и сложных систем. 1 1. Основные понятия процедурного программирования. 18 час. Поведение объектов - динамические процессы и их математическое информационное моделирование. Специфика и специализация математических языков описания моделей. Внешняя среда процесса, входные и выходные информационные потоки. Цель и точность модели. Спецификация как однозначная постановка целевой задачи, формальное определение преобразования входных потоков в выходные на некотором языке. Программа как решение задачи в виде определения того же преобразования на заданном языке. Внутренние состояния процесса, действия по преобразованию состояний и порядок выполнения действий. Многоуровневое иерархическое описание информационной модели на языке блок-схем. Данные. Тип данных (T) как множество возможных значений и набор допустимых операций над ними. Базовые и производные типы данных. Константы (C), переменные (V) и выражения (E), их значения и обозначения. Переменные как хранилища данных. Состояния программы как именованный набор хранимых значений. Действия (S). Семантика действий как операторов преобразования состояний программы. Базовые действия ввод данных (прием информации), вывод данных (передача информации) и присваивание, как элементарное преобразование информации. Структуры управления порядком выполнения действий. Группировка действий - последовательная, условная и циклическая. Семантика структур управления как операций определяющих новые преобразования состояний на основе ранее определенных. Связь по управлению (логическая связь) и информационная связь между действиями. Процесс выполнения программы как дискретный детерминированный процесс преобразования состояний, трассировка программы. Структуры данных. Группировка данных – конструкторы структурных типов данных и операций доступа и записи значений компонентов. Именованное (индексное) декартово произведение как базовая семантика структурных типов. Технология программирования. Структуры управления и структуры данных как средство преодоления сложности анализа больших систем и синтеза их информационных моделей. Уровни абстрагированияконкретизации действий и данных. Компоновка программы – процесс определения все более сложных действий на основе ранее определенных, последовательное восхождение к целевому действию. Проектирование программы - нисходящий процесс пошаговой декомпозиции целевого действия на все более простые и конкретные. Цикл жизни программных систем. 2 2. Базовый Паскаль. 18 час. Особенности формальных языков. Синтаксис и основные классы понятий (T,C,V,E,S), семантика и прагматика языков программирования. Данные в языке Паскаль. Классификация типов данных – скалярные (базовые) и структурные (составные), стандартные (предопределенные) и пользовательские (определяемые программистом). Определение типа. Описание переменных. Константы, операции, стандартные функции и выражения. Стандартные скалярные типы integer, real, char, boolean. Пользовательские скалярные типы - перечислимый и ограниченный (отрезок). Упорядоченность и порядковые типы. Действия в языке Паскаль. Базовые операторы – присваивание, оператор процедуры и процедуры стандартного ввода (READ) и вывода (WRITE). Структурные операторы. Структура Паскаль-программы. Разделы описаний и раздел операторов. Правила использования имен. Структурные типы в языке Паскаль. Селектор компонента и компонентная переменная. Массив - определение типа, переменная с индексами. Стандартный строковый тип данных. Запись - определение типа, переменная указатель поля. Множество - определение типа, операции и выражения. Типизированный файл - определение типа и средства доступа к компонентам файла. Стандартный тип TextFile (текстовые файлы) и средства форматирования выходных данных. Процедуры и функции в языке Паскаль как средство определения сложных действий, выделения и пользовательского именования подзадач. Описание процедур и функций, оператор процедуры и указатель функции. Организация информационной связи между вызывающей и вызываемой процедурой. Параметры-переменные, параметрызначения и параметры-процедуры (функции). Локальные и глобальные объекты. Операциональная семантика оператора процедуры как модификация тела процедуры. 3. Алгоритмизация задач. 18 час. Последовательные рекуррентные вычисления и вычисления разбором случаев. Разработка рекуррентных соотношений (информационных связей) и уровней управления вычислениями (вложений структур управления). Повторные (пере)вычисления и сохранение результатов вычислений для их повторного использования. Управление обработкой последовательностей – просмотр, порождение и синхронизация обработки. Язык логики предикатов и решетка множеств. Полное и быстрое вычисление логических выражений. Спецификация и 3 вычисление сложных свойств. Представление множеств массивами и алгоритмы основных операций с множествами. Упорядоченные массивы и файлы. Простые алгоритмы сортировки, поиск и основные операции. Алгоритмы основных операций текстовой обработки. Символьный тип как универсальный тип данных. Задача преобразования типов - символьное представление числовых значений. Технология программирования в терминах задачи с использованием процедур-функций и многоуровневой группировки данных. Моделирование объектов предметной области как содержательных типов. Выделение и реализация подзадач. ЛИТЕРАТУРА. 1. В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова. Введение в язык Паскаль. М.: Наука, 1988. - 318 с. 2. Вирт Н. Систематическое программирование. Введение. М.: Мир, 1977. - 183 с. 3. Грогоно П. Программирование на языке Паскаль. М.: Мир, 1982. 4. К. Йенсен, Н. Вирт. ПАСКАЛЬ. Руководство для пользователя и описание языка. М. Финансы и статистика, 1982. - 151 с. 5. А.И. Марченко, Л.А. Марченко. Программирование в среде Turbo Pascal. М.:Бином Универсал,1997. – 496 с. 6. Вирт Н. Алгоритмы+структуры данных = программы. М.: Мир, 1985. Алгоритмы и структуры данных. М: Мир, 1989. – 360 с. 7. У. Дал, Э. Дейкстра, К. Хоор. Структурное программирование. М.: Мир, 1975. - 248 с. 8. Задачи для программирования по теме «Сортировка данных». Методическая разработка под ред. В.С. Кугуракова. Казань, КГУ, 1987. ДОПОЛНИТЕЛЬНАЯ ЛИТЕРАТУРА. 1. С.А. Абрамов. Математические построения и программирование. М.: Наука ГРФМЛ, 1978.- 192. 2. Д. Грис. Наука программирования. М:Мир,1984. – 416 с. 3. Дейкстра Э. Дисциплина программирования. М.:Мир,1978. 4. С. Лавров. Программирование. Математические основы, средства, теория. СПб.: БХВ-Петербург, 2001. - 320 с. 5. Б. Мейер, К. Бодуен. Методы программирования. т1-2. М.: Мир, 1982. Составители доц. Бухараев Н.Р., ст.пр. Самитов Р.К. Обсуждена на заседании кафедры теоретической кибернетики. 4