
- •Лекция 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 Задание свойств класса
- •Список использованных источников
- •Содержание
1.5 Типы алгоритмов
Все алгоритмы традиционно можно разделить на три основных типа:
1. Линейный, который предполагает естественный порядок выполнения (следования) блоков ввода, процесса и вывода.
На рис. 1.4 приведена схема линейного алгоритма для решения следующей задачи.
Задача. Ввести длины a, b, c трех сторон треугольника. Вычислить его площадь, используя формулу Герона:
S=(p*(p-a)(p-b)(p-c))½,
где p – полупериметр треугольника.
2. Разветвляющийся, который задает выполнение вычислений по одному из возможных направлений в зависимости от исходных данных или промежуточных результатов.
На рис. 1.5 приведена схема разветвляющегося алгоритма для решения следующей задачи.
Задача. На плоскости с центром в начале координат проведена окружность радиусом R. Пользователь вводит координаты (X, Y) некоторой точки. Следует вывести на дисплей ответ: находится ли эта точка внутри (в том числе и на границе) круга, или вне его.
3. Циклический, который содержит многократно повторяющиеся участки (циклы). На рис. 1.6 приведена схема циклического алгоритма для решения следующей задачи.
Задача. Вычислить значение функции
Y=sin(X)
для аргумента, изменяющегося в некотором диапазоне
Xn ≤ X ≤ Xk.
Границы диапазона и шаг его прохождения вводить с клавиатуры. Выводить на экран соответствующие значения аргумента и функции.
Лекция 2 Начальные сведения о языке
2.1 История и назначение языка C++
Разработчиком языка C++ является Бьерн Страуструп. В своей работе он опирался на опыт создателей языков Симула, Модула 2, абстрактных типов данных. Основные работы велись в исследовательском центре компании Bell Labs.
Непосредственный предшественник C++ – язык Си с классами – появился в 1979 году, а в 1997 году был принят международный стандарт C++, который фактически подвел итоги его 20-летнего развития. Принятие стандарта обеспечило единообразие всех реализаций языка C++. Не менее важным результатом стандартизации стало то, что в процессе выработки и утверждения стандарта язык был уточнен и дополнен рядом существенных возможностей.
На сегодня стандарт утвержден Международной организацией по стандартизации ISO. Его номер ISO/IEC 14882. ISO бесплатно не распространяет стандарты. Его можно получить на узле американского национального комитета по стандартам в информационных технологиях:
www.ncits.org
В России следует обращаться в ВНИИ Сертификации:
http://www.vniis.ru
Проекты стандарта имеются в свободном доступе:
ftp://ftp.research.att.com/dist/c++std/WP/CD2/
http://www.research.att.com/~bs/bs_faq.html
Язык C++ является универсальным языком программирования, в дополнение к которому разработан набор разнообразных библиотек. Поэтому, строго говоря, он позволяет решить практически любую задачу программирования. Тем не менее, в силу разных причин (не всегда технических) для каких-то типов задач он употребляется чаще, а для каких-то – реже.
C++ как преемник языка Си широко используется в системном программировании. На нем можно писать высокоэффективные программы, в том числе операционные системы, драйверы и т.п. Язык C++ – один из основных языков разработки трансляторов.
Поскольку системное программное обеспечение часто бывает написано на языке Си или C++, то и программные интерфейсы к подсистемам ОС тоже часто пишут на C++. Соответственно, те программы, даже и прикладные, которые взаимодействуют с операционными системами, написаны на языке C++.
Распределенные системы, функционирующие на разных компьютерах, также разрабатываются на языке C++. Этому способствует то, что у широко распространенных компонентных моделей CORBA и COM есть удобные интерфейсы на языке C++.
Обработка сложных структур данных – текста, бизнес-информации, Internet-страниц и т.п. – одна из наиболее распространенных возможностей применения языка. В прикладном программировании, наверное, проще назвать те области, где язык C++ применяется мало.
Разработка графического пользовательского интерфейса на языке C++ выполняется, в основном, тогда, когда необходимо разрабатывать сложные, нестандартные интерфейсы. Простые программы чаще пишутся на языках Visual Basic, Java и т.п.
Программирование для Internet в основном производится на языках Java, VBScript, Perl.
В целом надо сказать, что язык C++ в настоящее время является одним из наиболее распространенных языков программирования в мире.
2.2 Простейшая программа на языке C++
Самая короткая программа на языке C++ выглядит так:
// Простейшая программа
int main() { return 1; }
Первая строчка в программе – комментарий, который служит лишь для пояснения. Признаком комментария являются два знака деления подряд (//).
main – это имя главной функции программы. С функции main всегда начинается выполнение. У функции есть имя (main), после имени в круглых скобках перечисляются аргументы или параметры функции (в данном случае у функции main аргументов нет). У функции может быть результат или возвращаемое значение. Если функция не возвращает никакого значения, то это обозначается ключевым словом void. В фигурных скобках записывается тело функции – действия, которые она выполняет. Оператор return 1 означает, что функция возвращает результат – целое число 1.
Если мы говорим об объектно-ориентированной программе, то она должна создать объект какого-либо класса и послать ему сообщение. Чтобы не усложнять программу, мы воспользуемся одним из готовых, предопределенных классов – классом ostream (поток ввода-вывода). Этот класс определен в файле заголовков "iostream.h". Поэтому первое, что надо сделать – включить файл заголовков в нашу программу:
#include <iostream.h>
int main() { return 1; }
Кроме класса, файл заголовков определяет глобальный объект этого класса cout. Объект называется глобальным, поскольку доступ к нему возможен из любой части программы. Этот объект выполняет вывод на консоль. В функции main мы можем к нему обратиться и послать ему сообщение:
#include <iostream.h>
int main()
{
cout << "Hello world!" << endl;
return 1;
}
Операция сдвига << для класса ostream определена как "вывести". Таким образом, программа посылает объекту cout сообщения "вывести строку Hello world!" и "вывести перевод строки" (endl обозначает новую строку). В ответ на эти сообщения объект cout выведет строку "Hello world!" на консоль и переведет курсор на следующую строку.