Главная страница
Навигация по странице:

  • ПРОГРАММИРОВАНИЕ Учебное пособиеТомск«Эль Контент»2013 УДК004.42(075.8)ББК32.973.26-018я73З-981Рецензенты:Старченко А. В.

  • Потапова Е. А.

  • Введение 6 1 Введение в информатику 8

  • Заключение 181 Глоссарий 182

  • Соглашения, принятые в книге 7

  • 1.2 Понятие алгоритма 9

  • программирование тусур. Программирование учебное пособие. Учебное пособие Томск Эль Контент


    Скачать 0.93 Mb.
    НазваниеУчебное пособие Томск Эль Контент
    Анкорпрограммирование тусур
    Дата17.08.2022
    Размер0.93 Mb.
    Формат файлаpdf
    Имя файлаПрограммирование учебное пособие.pdf
    ТипУчебное пособие
    #647947
    страница1 из 16
      1   2   3   4   5   6   7   8   9   ...   16

    Министерство образования и науки Российской Федерации
    ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
    СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
    В. М. Зюзьков
    ПРОГРАММИРОВАНИЕ
    Учебное пособие
    Томск
    «Эль Контент»
    2013

    УДК
    004.42(075.8)
    ББК
    32.973.26-018я73
    З-981
    Рецензенты:
    Старченко А. В., докт. физ.-мат. наук, профессор, зав. кафедрой вычислительной математики и компьютерного моделирования Национального исследовательского
    Томского государственного университета;
    Потапова Е. А., старший преподаватель кафедры компьютерных систем в управлении и проектировании ТУСУРа.
    Зюзьков В. М.
    З-981
    Программирование : учебное пособие / В. М. Зюзьков. — Томск : Эль
    Контент, 2013. — 186 с.
    ISBN 978-5-4332-0141-5
    Учебное пособие содержит теоретический материал, изучение которо- го предусмотрено программами курсов «Программирование». Изложение ориентировано на использование языка программирования Паскаль. Рас- смотрены алгоритмы, методы программирования и вопросы полного цикла разработки программ.
    УДК
    004.42(075.8)
    ББК
    32.973.26-018я73
    ISBN 978-5-4332-0141-5
    ©
    Зюзьков В. М., 2013
    ©
    Оформление.
    ООО «Эль Контент», 2013

    ОГЛАВЛЕНИЕ
    Введение
    6
    1
    Введение в информатику
    8
    1.1
    Информация и ее представление . . . . . . . . . . . . . . . . . . . . . . .
    8 1.2
    Понятие алгоритма . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    9 1.2.1
    Примеры неформальных описаний алгоритмов . . . . . . . . .
    10 1.3
    Вычислительные структуры . . . . . . . . . . . . . . . . . . . . . . . . .
    13 1.3.1
    Основные вычислительные структуры . . . . . . . . . . . . . .
    14 1.4
    Алгоритмические языки . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    15 1.5
    Описание синтаксиса алгоритмических языков . . . . . . . . . . . . . .
    16 1.6
    Семантика программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    18 1.7
    Трансляция и выполнение . . . . . . . . . . . . . . . . . . . . . . . . . . .
    19 1.8
    Компьютеры фон Неймана . . . . . . . . . . . . . . . . . . . . . . . . . .
    21
    2
    Азы языка Паскаль
    24
    2.1
    Основные понятия языка Паскаль . . . . . . . . . . . . . . . . . . . . . .
    24 2.1.1
    Алфавит языка Паскаль . . . . . . . . . . . . . . . . . . . . . . .
    24 2.1.2
    Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    25 2.1.3
    Операторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    26 2.1.4
    Описания данных . . . . . . . . . . . . . . . . . . . . . . . . . . .
    26 2.1.5
    Правила записи текста программы . . . . . . . . . . . . . . . . .
    28 2.1.6
    Система типов языка . . . . . . . . . . . . . . . . . . . . . . . . .
    28 2.2
    Основные вычислительные структуры в Паскале . . . . . . . . . . . .
    30 2.2.1
    Целые типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    30 2.2.2
    Вещественные типы . . . . . . . . . . . . . . . . . . . . . . . . . .
    31 2.2.3
    Символьный (литерный) тип . . . . . . . . . . . . . . . . . . . .
    33 2.2.4
    Булевский (логический) тип . . . . . . . . . . . . . . . . . . . . .
    34 2.3
    Выражения и основные операторы . . . . . . . . . . . . . . . . . . . . .
    34 2.3.1
    Выражения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    34 2.3.2
    Оператор присваивания . . . . . . . . . . . . . . . . . . . . . . . .
    36 2.3.3
    Ввод-вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    38 2.3.4
    Последовательное выполнение и составной оператор . . . . .
    39 2.3.5
    Условный оператор . . . . . . . . . . . . . . . . . . . . . . . . . .
    39 2.3.6
    Оператор цикла с предусловием . . . . . . . . . . . . . . . . . .
    41 2.3.7
    Оператор цикла с постусловием . . . . . . . . . . . . . . . . . .
    42 2.3.8
    Оператор цикла с параметром . . . . . . . . . . . . . . . . . . . .
    43 2.4
    Пустой оператор и ограниченные типы . . . . . . . . . . . . . . . . . .
    45

    4
    Оглавление
    2.5
    Функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    47 2.6
    Примеры программ без массивов . . . . . . . . . . . . . . . . . . . . . .
    49
    3
    Процедурное программирование
    55
    3.1
    Синтаксис подпрограмм . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    55 3.1.1
    Понятие подпрограммы . . . . . . . . . . . . . . . . . . . . . . .
    55 3.1.2
    Общая структура подпрограмм . . . . . . . . . . . . . . . . . . .
    56 3.1.3
    Тело подпрограммы. Области действия имен . . . . . . . . . .
    57 3.2
    Семантика подпрограмм . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    58 3.2.1
    Использование процедур и функций . . . . . . . . . . . . . . . .
    58 3.2.2
    Механизм параметров . . . . . . . . . . . . . . . . . . . . . . . . .
    60 3.2.3
    Побочный эффект . . . . . . . . . . . . . . . . . . . . . . . . . . .
    64 3.2.4
    Распределение памяти для переменных . . . . . . . . . . . . . .
    64
    4
    Технология программирования
    67
    4.1
    Оператор перехода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    67 4.2
    Структурное программирование . . . . . . . . . . . . . . . . . . . . . . .
    68 4.3
    Решение задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    70 4.4
    Разработка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    72 4.4.1
    Метод пошаговой детализации . . . . . . . . . . . . . . . . . . .
    73 4.4.2
    Способы фиксирования результатов проектирования . . . . .
    74 4.4.3
    Пример разработки . . . . . . . . . . . . . . . . . . . . . . . . . .
    77 4.5
    Стиль программирования . . . . . . . . . . . . . . . . . . . . . . . . . . .
    83 4.6
    Тестирование и отладка . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    87 4.6.1
    Тестирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    87 4.6.2
    Отладка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    89
    5
    Массивы и строки
    92
    5.1
    Регулярные типы данных (массивы) . . . . . . . . . . . . . . . . . . . .
    92 5.1.1
    Определение регулярного типа . . . . . . . . . . . . . . . . . . .
    92 5.1.2
    Примеры программ для работы с массивами . . . . . . . . . .
    95 5.2
    Строковый тип . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    98 5.2.1
    Определение строкового типа . . . . . . . . . . . . . . . . . . . .
    98 5.2.2
    Строковые операции . . . . . . . . . . . . . . . . . . . . . . . . .
    99 5.2.3
    Стандартные процедуры и функции . . . . . . . . . . . . . . . . 101 5.3
    Сортировка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 5.3.1
    Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
    6
    Перечислимый тип, множества, файлы
    109
    6.1
    Перечислимый тип . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 6.1.1
    Определение перечислимого типа . . . . . . . . . . . . . . . . . 109 6.1.2
    Оператор варианта . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 6.2
    Множественный тип . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 6.2.1
    Определение множественного типа . . . . . . . . . . . . . . . . 112 6.2.2
    Операции с множествами . . . . . . . . . . . . . . . . . . . . . . 114 6.3
    Файловые типы и ввод-вывод . . . . . . . . . . . . . . . . . . . . . . . . 117 6.3.1
    Файловые переменные и типы . . . . . . . . . . . . . . . . . . . 117

    Оглавление
    5
    6.3.2
    Установочные и завершающие операции над файлами . . . . 118 6.3.3
    Операции ввода-вывода . . . . . . . . . . . . . . . . . . . . . . . 119 6.3.4
    Текстовые файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 6.3.5
    Примеры работы с файлами . . . . . . . . . . . . . . . . . . . . . 120
    7
    Рекурсия
    124
    7.1
    Понятие рекурсии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 7.2
    Как приходят к рекурсивным подпрограммам? . . . . . . . . . . . . . . 128 7.2.1
    Органически рекурсивные определения . . . . . . . . . . . . . . 128 7.2.2
    Извлечение рекурсии из постановки задачи . . . . . . . . . . . 128 7.2.3
    Вложение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 7.2.4
    Использование характеристических свойств . . . . . . . . . . . 130 7.2.5
    Разделяй и властвуй . . . . . . . . . . . . . . . . . . . . . . . . . . 130 7.3
    Рекурсия и итерация. Метод накапливающего параметра . . . . . . . 131 7.4
    Рекурсия в своем блеске и великолепии . . . . . . . . . . . . . . . . . . 133 7.4.1
    Ханойские башни . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 7.4.2
    Поиск маршрута — алгоритм с возвратом . . . . . . . . . . . . . 135 7.4.3
    Быстрая сортировка . . . . . . . . . . . . . . . . . . . . . . . . . . 136
    8
    Записи и динамические структуры данных
    139
    8.1
    Записи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 8.1.1
    Определение комбинированных типов . . . . . . . . . . . . . . 139 8.1.2
    Оператор над записями with (оператор присоединения) . . . . 141 8.2
    Динамические структуры данных . . . . . . . . . . . . . . . . . . . . . . 143 8.2.1
    Ссылочный тип . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 8.2.2
    Статические и динамические переменные . . . . . . . . . . . . 145 8.2.3
    Линейные списки . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 8.2.4
    Проблема потерянных ссылок . . . . . . . . . . . . . . . . . . . . 150 8.2.5
    Списки специального вида . . . . . . . . . . . . . . . . . . . . . . 151 8.2.6
    Стеки и очереди . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 8.2.7
    Деревья . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
    9
    Модули и графика
    161
    9.1
    Модули . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 9.1.1
    Модульное программирование . . . . . . . . . . . . . . . . . . . 161 9.1.2
    Стандартные модули . . . . . . . . . . . . . . . . . . . . . . . . . 164 9.2
    Графическое программирование . . . . . . . . . . . . . . . . . . . . . . . 166 9.2.1
    Аппаратная и программная поддержка графики . . . . . . . . . 166 9.2.2
    Инициализация графики . . . . . . . . . . . . . . . . . . . . . . . 167 9.2.3
    Базовые процедуры и функции . . . . . . . . . . . . . . . . . . . 170 9.2.4
    Построение графических фигур . . . . . . . . . . . . . . . . . . 174 9.2.5
    Простые анимационные алгоритмы . . . . . . . . . . . . . . . . 179
    Заключение
    181
    Глоссарий
    182

    ВВЕДЕНИЕ
    Знания достигаются не быстрым бегом,
    а медленной ходьбой.
    Томас Бабингтон Маколей (1800–1859)
    Предмет программирования, на наш взгляд, содержит много материала, не свя- занного с конкретным языком, на котором пишутся программы. Такие знания,
    несомненно, являются фундаментальными. Изложение материала построено по принципу от общего к частному. Основные понятия программирования вводятся в качестве исходных, вместо того чтобы выводить их из особенностей компьютера.
    Такое изложение не зависит от случайностей синтаксиса и семантики программи- рования.
    Но цель учебного пособия — научить практическому программированию, по- этому и выбор языка программирования важен. В первую очередь язык програм- мирования должен быть удобен для первоначального знакомства с программиро- ванием и хорош для обучения программированию. Именно для такой цели был и создан элегантный язык Паскаль.
    Остановимся на нескольких темах, рассматриваемых в пособии. Вторая глава
    «Введение в информатику» посвящена основным понятиям программирования,
    таким как алгоритмы, вычислительные структуры и программы. Содержание этой главы не зависит от конкретного языка программирования.
    После изучения главы 3 «Азы языка Паскаль» уже возможно создание неболь- ших и достаточно простых программ на Паскале. Дальнейшие главы расширяют наше знание Паскаля. Но преподавание основ программирования не ограничива- ется изучением синтаксиса и семантики программ. Вместе с освоением языковых конструкций обучаемый должен получить первые навыки разработки программ,
    трактуемые как процесс систематического и вполне познаваемого перехода от неал- горитмической постановки задачи к эффективной программе ее решения. Методо- логия такого перехода излагается в главе 5 «Технология программирования».
    В главе 8 рассматривается рекурсия. Можно, конечно, программировать на
    Паскале и без рекурсии. Но, по крайней мере, необходимо осознавать, что вы лишаетесь мощного и красивого инструмента программирования.
    Теоретическому обучению должна сопутствовать практика программирования.
    В частности, для контроля своего собственного понимания изученного вы должны ответить на вопросы после каждой главы и выполнить приведенные там задания.

    Соглашения, принятые в книге
    7
    И последнее замечание. Мы описываем стандарт Паскаля с некоторыми расши- рениями, принятыми в реализациях Паскаля: Турбо-Паскаль, Free-Pascal, PascalABC.
    Соглашения, принятые в книге
    Для улучшения восприятия материала в данной книге используются пикто- граммы и специальное выделение важной информации.
    Эта пиктограмма означает определение или новое понятие.
    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    Эта пиктограмма означает внимание. Здесь выделена важная ин- формация, требующая акцента на ней. Автор здесь может поде- литься с читателем опытом, чтобы помочь избежать некоторых ошибок.
    Эта пиктограмма означает совет. В данном блоке можно указать более простые или иные способы выполнения определенной за- дачи. Совет может касаться практического применения только что изученного или содержать указания на то, как немного повысить эффективность и значительно упростить выполнение некоторых задач.
    Пример
    Эта пиктограмма означает пример. В данном блоке автор может привести прак- тический пример для пояснения и разбора основных моментов, отраженных в тео- ретическом материале.
    Контрольные вопросы по главе
    Рекомендуемая литература к главе

    Глава 1
    ВВЕДЕНИЕ В ИНФОРМАТИКУ
    1.1 Информация и ее представление
    Информатика — это наука и техника, связанные с машинной
    обработкой, хранением и передачей информации. Цель состоит
    в разработке способов решения задач информационной обработ-
    ки на вычислительных машинах (компьютерах), а также в разра-
    ботке, организации и эксплуатации вычислительных систем.
    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    В информатике информация понимается как абстрактное значение выражений,
    графических изображений, указаний (операторов) и высказываний.
    Мы различаем в связи с информацией:
    • ее представление или изображение (внешняя форма);
    • ее значение (собственно «абстрактная» информация);
    • ее отношение к реальному миру (связь абстрактной информации с действи- тельностью).
    Информацией называют абстрактное содержание («содержа-
    тельное значение», «семантика») какого-либо высказывания, опи-
    сания, указания, сообщения или известия. Внешнюю форму изобра-
    жения называют представлением (конкретная форма сообщения).
    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    Виды представлений:
    • условные знаки («сигналы»),
    • произносимые слова («акустическое представление»),

    1.2 Понятие алгоритма
    9
    • рисунки (графическое представление, «пиктограммы», «иконки»),
    • последовательность символов («слова», «текст»), и т. д.
    Переход (часто только воображаемый, мыслимый) от представ-
    ления к абстрактной информации, т. е. к значению представления,
    называют интерпретацией.
    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    Только в том случае, когда существуют единые, согласованные интерпретации,
    системы представления могут использоваться для обмена информацией.
    1.2 Понятие алгоритма
    Под алгоритмом понимается способ преобразования представления информа- ции. Слово algorithm — произошло от имени аль-Хорезми — автора известного араб- ского учебника по математике.
    Алгоритм свод конечного числа правил, задающих последова-
    тельность выполнения операций при решении той или иной спе-
    цифической задачи.
    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    Алгоритмы типичным образом решают не только частные задачи, но и классы задач. Подлежащие решению частные задачи, выделяемые по мере надобности из рассматриваемого класса, определяются с помощью параметров. Параметры играют роль исходных данных для алгоритма.
    Пять важных особенностей алгоритма:
    Конечность (финитность). Алгоритм должен всегда заканчиваться после конечного числа шагов.
    Определенность. Каждый шаг алгоритма должен быть точно определен.
    Ввод. Алгоритм имеет некоторое (быть может, равное нулю) число входных данных, т. е. величин, заданных ему до начала работы.
    Вывод. Алгоритм имеет одну или несколько выходных величин, т. е. вели- чин, имеющих вполне определенное отношение к входным данным.
    Эффективность. Это означает, что все операции, которые необходимо про- извести в алгоритме, должны быть достаточно простыми, чтобы их можно было в принципе выполнить точно и за конечный отрезок времени с помо- щью карандаша и бумаги.
    Алгоритм должен быть практичным и хорошим с эстетической точки зрения.
    Для алгоритмов важно различать следующие аспекты:
    • постановку задачи, которая должна быть разрешена с помощью алгоритма;
    • специфичный способ, каким решается задача, при этом для алгоритма раз- личают:

    10
      1   2   3   4   5   6   7   8   9   ...   16


    написать администратору сайта