
- •Курс лекций по дисциплине “Основы программирования и алгоритмические языки” Бондарев в.М., Марченко ю.С. Введение
- •Основы алгоритмизации
- •1 Основные этапы решения задачи на эвм
- •1.1 Постановка задачи
- •1.2 Проектирование программы
- •1.3 Разработка алгоритма
- •1.4 Кодирование
- •1.5 Отладка и тестирование программы
- •2 Элементарные алгоритмические структуры
- •2.1 Последовательная алгоритмическая структура
- •2.2 Алгоритмическая структура выбора
- •2.3 Алгоритмическая структура повторения
- •2.4 Комбинация структур
- •2.5 Пошаговая детализация алгоритма
- •2.6 Разработка алгоритма вычисления Sin X
- •2.7 Разработка алгоритма подсчета простых чисел
- •3 Алгоритмы поиска
- •3.1 Поиск наибольшего среди вводимых чисел
- •3.2 Поиск наибольшего числа в массиве
- •3.3 Поиск заданного числа в массиве
- •3.4 Поиск с порогом
- •3.5 Двоичный поиск
- •4 Алгоритмы сортировки
- •4.1 Обменная сортировка
- •4.2 Сортировка слиянием
- •4.3 Сравнение двух алгоритмов сортировки
- •5 Рекурсивные алгоритмы
- •5.1 Простая рекурсия
- •5.2 Ханойские башни
- •5.3 Быстрая обменная сортировка
- •6.2 Простейшая программа
- •6.3 Составление простой программы
- •6.4 Программа сложение двух чисел
- •6.5 Организация повторений
- •6.6 Условный оператор
- •If (выражение) оператор [else оператор].
- •6.7 Оператор цикла for
- •7 Указатели и массивы
- •7.1 Указатели
- •7.2 Разыменование и разадресация
- •7.3 Операции new и delete
- •7.4 Массивы
- •7.5 Многомерные массивы
- •7.6 Связь между массивами и указателями
- •7.7 Массивы в динамической памяти
- •8 Строки и структуры
- •8.1 Встроенный тип char
- •8.2 Строки символов как массивы
- •8.3 Строковые библиотечные функции
- •8.4 Структуры
- •8.5 Объявление структур
- •8.6 Битовые поля
- •8.7 Объединения
- •9 Функции
- •9.1 Функция для сложения чисел
- •9.2 Ссылки
- •9.3 Выходные параметры функции
- •9.4 Ссылка — возвращаемое значение
- •9.5 Одномерные массивы как параметры
- •9.6 Двумерные массивы как параметры
- •10 Еще о функциях
- •10.1 Параметры по умолчанию
- •10.2 Произвольное число параметров
- •10.3 Неиспользуемые параметры
- •10.4 Перегруженные функции
- •10.5 Указатель на функцию
- •Void error(char* p) { /*тело ф-ции*/} ,
- •10.6 Спецификатор inline
- •Inline void error(char* p) { /*тело ф-ции*/}
- •10.7 Макросы
- •11 Ввод и вывод
- •11.1 Разновидности ввода и вывода
- •11.2 Открытие и закрытие потока
- •11.3 Ввод и вывод символов
- •11.4 Ввод и вывод строк
- •11.5 Ввод и вывод записей
- •11.6 Управление указателем файла
- •11.7 Состояние потока
- •11.8 Форматированный вывод
- •11.9 Форматированный ввод
- •11.10 Другие функции форматного ввода и вывода
- •12 Уточнение понятий языка
- •12.1 Объявление, определение, инициализация
- •12.2 Область видимости и время жизни
- •12.3 Типы
- •12.4 Производные типы
- •12.5 Числовые константы
- •12.6 Именные константы
- •12.7 Перечисление
- •12.8 Порядок вычисления выражений
- •13 Операции и операторы
- •13.1 Сводка операций
- •13.2 Сводка операторов
- •13.3 Оператор выражения
- •13.4 Оператор switch
- •13.5 Операторы break и continue
- •13.6 Оператор goto и метки
- •14 Классы
- •14.1 Определение класса
- •14.2 Инкапсуляция
- •14.3 Конструктор
- •14.4 Деструктор
- •14.5 Пример класса — список в динамической памяти
- •14.6 Указатель на себя
- •15 Производные классы
- •15.1 Простое наследование
- •15.2 Списки инициализации
- •15.3 Ключи доступа
- •15.4 Виртуальные функции
- •15.5 Реализация виртуальных функций
- •15.6 Полиморфизм
- •16 Еще о класcах
- •16.1 Статические элементы
- •16.2 Друзья класса
- •16.3 Перегрузка операций
- •16.4 Множественное наследование
- •17.1 Библиотека потоков
- •17.2 Предопределенные потоки
- •17.3 Операции помещения в поток и извлечения из потока
- •17.4 Форматирующие функции-элементы
- •17.5 Флаги форматирования
- •17.6 Манипуляторы
- •18 Еще о потоках
- •18.1 Ошибки потока
- •18.2 Опрос состояния потока
- •18.3 Файловый ввод-вывод с применением потоков
- •18.4 Конструкторы файловых потоков
- •18.5 Функции для открытия и закрытия файлов
- •18.6 Замена буфера потока
- •18.7 Текстовый и бинарный ввод-вывод
- •18.8 Бесформатный ввод и вывод
- •18.9. Часто применяемые функции потока
- •18.10 Форматирование в памяти
- •18.11 Дополнительные возможности ostrstream
- •19 Шаблоны
- •19.1 Шаблоны функций
- •19.2 Перегрузка и специализация шаблонов
- •19.3 Шаблоны классов
- •20 Директивы препроцесора
- •20.1 Директива #define
- •20.2 Директива #include
- •20.3 Условная компиляция
- •20.4 Директива #error
- •20.5 Директива #line
- •20.6 Директива #pragma
- •21.1 Адресация памяти
- •21.2 Модели памяти
- •21.3 Спецификация указателей
- •Int near* var_name;
- •Int* near var_name;
- •21.4 Макросы для указателей
- •21.5 Модификаторы переменных
- •21.6 Модификаторы функций
- •21.7 Соглашения о вызове
- •21.8 Встроенный код ассемблера
- •21.9 Псевдорегистры
- •Литература
- •Содержание
- •21.8 Встроенный код ассемблера ........................................................
- •21.9 Псевдорегистры ............................................................................
9 Функции
9.1 Функция для сложения чисел
З а д а ч а. Сложить 2 числа, результат вернуть в программу.
Р е ш е н и е.
#include <iostream.h>
float sum(float a, float b)
{
return a+b;
}
void main( )
{
сout << sum(3,5);
}
Параметры передаются функции только по значению.
Возврат из функции выполняется оператором return. Его необязательным операндом является выражение для возвращаемого значения. Оператор return без операндов просто возвращает управление вызывающей функции.
Передача параметров и возврат значения происходит по правилам инициализации переменных, а не присваивания. Это различие существенно для ссылок, о которых будет сказано ниже.
Объявление функции можно отделить от ее определения. В этом случае объявление может не содержать имен параметров, например
float sum(float, float);
Определения функций не могут быть вложенными.
Функция может не иметь параметров, может не возвращать значения. Например,
void Empty(void) {return;}
В С++ не существует специального оператора процедуры. Любое выражение становится оператором, если после него поставить знак “;”. Когда возвращаемое значение, нас не интересует, функцию можно вызвать так
sum (3,5);
9.2 Ссылки
Чтобы передавать параметры по имени, в С++ существуют ссылки. Ссылка — это разновидность указателя, который инициализируется только однажды, в момент своего определения.
Синтаксис определения ссылки следующий:
тип& имя = инициализирующее выражение;
Если инициализирующее выражение — адресное, то ссылка служит синонимом инициализирующего выражения. В противном случае создается временная переменная и ее адрес делается значением ссылки. Компилятор выдает предупреждение о том, что создается временный объект.
П р и м е р.
int n=5, &rn=n; // синоним
int n=5, &rn=n+2; // временная переменная
После инициализации ссылки-синонима все операции над ней фактически выполняются над переменной, которой она проинициализирована.
rn = 6; // равносильно n = 6
rn++; // равносильно n++
9.3 Выходные параметры функции
З а д а ч а. Определить функцию, которая меняет местами значения двух переменных.
Р е ш е н и е 1.
void swap(int *a, int*b)
{
int r;
r = *a; *a = *b; *b = r;
}
Передаются не переменные, а указатели на них. Функция вызывается так:
int x = 5, y = 3;
swap(&x,&y)
Р е ш е н и е 2.
void swap(int &a, int &b)
{
int r;
r = a; a = b; b = r;
}
Параметры являются ссылками, т.е. новыми именами аргументов. Функция вызывается так:
int x = 5, y = 3;
swap(x,y);
Параметры-ссылки полностью аналогичны параметрам-переменным Паскаля.
Р е ш е н и е 3. Типичное для для программирующих на С.
void swap(int &a, int &b) {a^= b^= a^= b;}
Если вы его пока не поняли, не отчаивайтесь.
Большие объекты следует передавать по ссылке, даже если их значение не изменяется функцией. Чтобы предотвратить их случайное изменение, передают ссылку на константу
void f(const large &a, const large *b);
Используйте const, где только это возможно, чтобы обезопасить программу от случайных изменений параметров.
З а м е ч а н и е.
const large *a — так определяют указатель на константу;
large * const a — так определяют постоянный указатель;
const large * const a — так определяют постоянный указатель на константу.