
- •Лекция 1 Основы алгоритмизации
- •1.1 Языки программирования
- •1.2 Этапы решения задач на компьютере
- •1.3 Понятие алгоритма и его свойства
- •1.4 Графическое описание алгоритмов. Схемы алгоритмов
- •Блоки для изображения схем алгоритмов и программ
- •1.5 Типы алгоритмов
- •Лекция 2 Начальные сведения о языке
- •2.3 Компиляция и выполнение программы
- •Лекция 3 Имена, переменные и константы
- •3.1 Имена
- •3.2 Переменные
- •3.3 Константы
- •Лекция 4 Операции и выражения
- •4.1 Выражения
- •4.2 Операция присваивания
- •4.3.1 Арифметические операции
- •4.3.2 Операции сравнения
- •4.4 Порядок вычисления выражений
- •Лекция 5 Операторы
- •5.1 Что такое оператор
- •5.1.1 Операторы-выражения
- •5.1.2 Объявления имен
- •5.1.3 Операторы управления
- •5.1.3.1 Условные операторы
- •5.1.3.2 Операторы цикла
- •5.1.3.3 Оператор возврата
- •5.1.3.4 Оператор перехода
- •Лекция 6 Функции
- •6.1 Вызов функций
- •6.2 Имена функций
- •6.3 Необязательные аргументы функций
- •6.4 Рекурсия
- •Лекция 7 Встроенные типы данных
- •7.1 Общая информация
- •7.2 Целые числа
- •7.3 Вещественные числа
- •7.4 Логические величины
- •7.5 Символы и байты
- •7.6 Кодировка, многобайтовые символы
- •7.7 Наборы перечисляемых значений
- •Лекция 8 Классы и объекты
- •8.1 Понятие класса
- •8.2 Определение методов класса
- •8.3 Переопределение операций
- •8.4 Подписи методов и необязательные аргументы
- •8.4.1 Запись классов
- •Лекция 9 Производные типы данных
- •9.1 Массивы
- •9.2 Структуры
- •9.2.1 Битовые поля
- •9.3 Объединения
- •9.4 Указатели
- •9.4.1 Адресная арифметика
- •9.4.2 Связь между массивами и указателями
- •9.4.3 Бестиповый указатель
- •9.4.4 Нулевой указатель
- •9.5 Строки и литералы
- •Лекция 10 Распределение памяти
- •10.1 Автоматические переменные
- •10.2 Статические переменные
- •10.3 Динамическое выделение памяти
- •10.4 Выделение памяти под строки
- •10.5 Рекомендации по использованию указателей и динамического распределения памяти
- •10.6 Ссылки
- •10.6 Распределение памяти при передаче аргументов функции
- •10.6.1 Рекомендации по передаче аргументов
- •Лекция 11 Производные классы, наследование
- •11.1 Виртуальные методы
- •11.1.1 Виртуальные методы и переопределение методов
- •11.2 Преобразование базового и производного классов
- •11.3 Внутреннее и защищенное наследование
- •11.4 Абстрактные классы
- •11.5 Множественное наследование
- •11.5.1 Виртуальное наследование
- •15.2 Проблема использования общих функций и имен
- •15.3 Использование включаемых файлов
- •15.4 Препроцессор
- •15.4.1 Определение макросов
- •Условная компиляция
- •15.4.2 Дополнительные директивы препроцессора
- •Лекция 16 Определение, время жизни и области видимости переменных в больших программах
- •16.1 Файлы и переменные
- •16.1.1 Общие данные
- •16.1.2 Глобальные переменные
- •16.1.3 Повышение надежности обращения к общим данным
- •16.2 Область видимости имен
- •16.3 Оператор определения контекста namespace
- •Лекция 17 Обработка ошибок
- •17.1 Виды ошибок
- •17.2 Возвращаемое значение как признак ошибки
- •17.3 Исключительные ситуации
- •17.3.1 Обработка исключительных ситуаций
- •17.3.2 Примеры обработки исключительных ситуаций
- •Лекция 18 Bвод-вывод
- •18.1 Потоки
- •18.3 Манипуляторы и форматирование ввода-вывода
- •18.4 Строковые потоки
- •18.5 Ввод-вывод файлов
- •Лекция 19 Шаблоны
- •19.1 Назначение шаблонов
- •19.2 Функции-шаблоны
- •19.3 Шаблоны классов
- •19.3.1 "Интеллигентный указатель"
- •19.3.2 Задание свойств класса
- •Список использованных источников
- •Содержание
Академия маркетинга и социально-информационных технологий
Конспект лекций
по дисциплине
Информатика и программирование
Часть II. Программирование на ЯВУ (С++)
Краснодар 2009
Лекция 1 Основы алгоритмизации
1.1 Языки программирования
Языки программирования делятся на 3 основных класса, как показано на рис. 1.1.
1. Языки низкого уровня исторически появились первыми. Команды этих языков выполняют простейшие операции по обработке информации: сложение, вычитание, умножение, деление и т.д. Программы для решения большинства даже самых простых задач состоят из нескольких десятков или сотен таких команд. Работать с такой программой человеку очень трудно. В то же время языки низкого уровня позволяют писать наиболее эффективные программы.
2. Языки высокого уровня близки к языку математики и разговорному (традиционно - английскому).
В этих языках:
1) формулы записываются на языке, близком к математическому (в одну строку, с явным указанием всех операций и т.д.);
2) используется ограниченное количество типовых конструкций (вычисление по формулам; принятие решения; повторение; цикл; процедуры);
3) для выполнения на ЭВМ программы преобразуются на машинный язык с помощью самой ЭВМ, при этом используются так называемые компиляторы и интерпретаторы с языков высокого уровня.
Итак, выполнение на ЭВМ программ, написанных на языках высокого уровня, состоит из следующих этапов (рис. 1.2):
1) ввод текста программы в ЭВМ (исходный модуль);
2) компиляция и получение текста на машинном языке (объектный модуль);
3) загрузка объектного модуля и стандартных процедур и функций в память ЭВМ и выполнение программы.
1.2 Этапы решения задач на компьютере
Решение задач на ЭВМ – сложный процесс, состоящий из следующих этапов.
1. Постановка задачи. Уяснение проблемы, определение целей решения и области применения результатов. На этом этапе при разработке больших программных систем составляется техническое задание.
2. Математическое описание. Выбор математических методов и моделей, запись формул, обеспечивающих решение задачи. Составление плана решения.
3. Программирование задачи. Оно состоит из трех частей:
1) графическое изображение метода решения (составление схемы алгоритма);
2) написание программы на языке программирования (кодирование);
3) ввод текста программы в ЭВМ.
4. Отладка программы. Выявление ошибок (кодирования и методов решения), проверка правильности результатов.
5. Обработка реальных данных и получение результатов. Выполнение готовой программы на ЭВМ, выдача результатов.
Из этих этапов первые три не требуют ЭВМ, наиболее сложные - первые два, а наиболее трудоемкий – четвертый. Все они сопровождаются соответствующей документацией, состав которой определяется стандартами.
1.3 Понятие алгоритма и его свойства
Алгоритм – это точное предписание о выполнении в определенном порядке некоторых операций, приводящих к решению всех задач данного класса.
Свойства алгоритма:
1) определенность (точность предписаний и однозначность результата);
2) массовость (ориентирован на класс задач, например решение системы произвольного количества уравнений при любых исходных данных);
3) дискретность (деление процесса решения на этапы, понятные человеку и ЭВМ);
4) результативность (результат должен быть обязательно – даже если его нет, должно быть сообщение об этом).
Способы описания алгоритмов:
1) словесный (описание действий, которые должны привести к решению задачи, например построение треугольника по трем его сторонам);
2) математический (в виде формул, например формула для нахождения корней квадратного уравнения);
3) графический (схемы алгоритмов);
4) на языке программирования.
Первые два способа описания известны из школы и в данном курсе будут, в основном, использоваться совместно – для составления плана решения при математической постановке задачи. При составлении плана решения мы будем руководствоваться наиболее перспективным методом программирования – сверху вниз (от общей постановки задачи – к отдельным шагам ее решения). План решения учитывает:
1) особенности задачи, математические методы ее решения;
2) возможности языка программирования и его основные конструкции:
– ввод / вывод данных и вычисление по формулам;
– принятие решения (в зависимости от некоторого условия);
– повторение некоторых команд (групп команд);
– выделение общих частей алгоритма в одну общую часть и обращение к ней в случае необходимости.
Рассмотрим, как составляется план решения на примере алгоритма определения всех делителей нескольких целых чисел. Напомним, что делителем называют число, на которое нацело делится исходное.
Условие задачи. Последовательность чисел вводится в ЭВМ с клавиатуры; в конце ее вводится признак конца последовательности (например, "0" или отрицательное число).
План будем разрабатывать по методу сверху вниз: постепенно уточняя отдельные шаги.
План 1 (укрупненный).
1. Ввести в ЭВМ первое число.
2. Пока нет признака конца последовательности
обработать число и
прочитать следующее число.
3. Выдать сообщение, что программа закончила свою работу.
Пункты 1 и 3 очевидные и реализуются просто, а пункт 2 - надо уточнить, как обработать число. Так, число может быть:
1) простым;
2) составным.
Если число простое, то множитель у него один – оно само, если составное, то оно должно делиться на делитель без остатка. Значения делителя могут быть любые в пределах от 2 до ]число/2[. Здесь запись ] X [ означает целую часть от X.
Уточним пункт 2.
2.1. Предположить, что число – простое.
2.2. Изменять делитель от 2 до ]число/2[ и выполнять:
если число делится на делитель, то
а) вывести значение делителя и
б) изменить предположение, что число простое, на противоположное.
2.3. Если число простое, то
выдать сообщение 'Простое число'.
2.4. Прочитать следующее число.
Чтобы убедиться, что пункт 2 выполняется верно, проверим его вручную.
Пусть число равно 12.
Делители должны быть: 2, 3, 4 и 6.
Проверяя работу пунктов 2.1 – 2.3, получаем в результате:
2 3 4 6
Теперь план, в котором описаны пункты 1, 2.1 – 2.4 и 3, может быть запрограммирован. Он содержит только типовые конструкции. Программу составим позднее.