
- •Введение история разработки языков программирования
- •Структура программы
- •Основные понятия. Типы данных.
- •Организация ветвлений
- •Структуры данных. Массивы
- •Структура (struck)
- •Объединения. Строковые литералы
- •Функции
- •Рекурсия
- •Указатели
- •Динамические массивы.
- •Динамические массивы.
- •Полиморфизм
- •Конструкторы и деструкторы
- •Перегрузка операторов
- •Шаблоны. Стандартная библиотека шаблонов (stl).
- •Язык программирования с#
Функции
Модификатор inline – рекомендует компилятору вместо обращения к функции помещать её код непосредственно в каждую точку вызова. Модификатор inline ставится перед типом функции и она определена как встроенная. Применяется для коротких функций, чтобы снизить накладные расходы на вызов.
Рекомендует компилятору вместо обращения к функции помещать её код непосредственно в каждую точку вызова. Модификатор inline ставится перед типом функции и она определена как встроенная. Применяется для коротких функций, чтобы снизить накладные расходы на вызов.
Тип возвращаемого значения и типы параметров совместно определяют тип функции.
Для вызова функции в простейшем случае нужно указать её имя, за которым в круглых скобках через запятую перечисляются имена передаваемых аргументов. Вызов функции может находиться в любом месте программы, где по синтаксису допустимо выражение того типа, который формирует функция. Если тип возвращаемого функцией значения не void, она может входить в состав выражений или, в частном случае, располагаться в правой части оператора присваивания.
Пример1:
#include <iostream>
Using namespace std;
Int sum(int a, int b); // объявление функции
Int main() {
Int a=2, b=3,c,d;
C=sum(a,b); // вызов функции
Cin>>b;
Cout<<sum(c,d); // вызов функции
Return 0;
}
Int sum (int a, int b){ //определение функции
Return (a+b);
}
Пример 2:
#include <iostream>
Using namespace std;
Struct Worker {
Char fio[30];
Int date, code;
Double salary;
};
Void print_worker (worker); // объявление функции
Int main() {
Worker staff[100];
…/формирование массива staff/
For (int i=0; i<100; i++)
Print_worker(staff[i]); //вызов функции
Return 0;
}
Void print_worker (worker w) {
Cout<<w.fio<<’ ‘<<w.date<<’ ‘<<w.code<<’ ‘<w.salary<<endl;
}
Рекурсия
Рекурсивная функция – функция, вызывающая саму себя.
Линейная рекурсия, когда определение объекта включает в себя единственный аналогичный объект.
Ветвящаяся рекурсия, когда включаемых объектов.
Механизм параметров является основным способом обмена информацией между вызываемой и вызывающей функциями. Параметры, перечисленные в заголовке описания функции, называются формальными параметрами, а записанные в операторе вызова функции – фактическими параметрами, или аргументами.
При работе рекурсивной функции купируются части, связанные с локальными данными (формальные, фактические параметры, локальные переменные и точка возврата). Алгоритмическая часть (операторы, выражения) рекурсивной функции и глобальные переменные не меняются, поэтому они присутствуют в памяти компьютера в единственном экземпляре.
Этапы разработки рекурсивной функции:
Зацепить рекурсию – определить, что составляет шаг рекурсивного алгоритма.
Инварианты рекурсивного алгоритма. Основные свойства, соотношения, которые присутствуют на входе рекурсивной функции и которые сохраняют до следующего рекурсивного вызова, но уже в состоянии, более близком к цели.
Глобальные переменные – общие данные процесса в целом.
Начальное состояние шага рекурсивного алгоритма – формальные параметры рекурсивной функции.
Ограничения рекурсии – обнаруживайте “успеха” – достижения цели на текущем шаге рекурсии и отсечения “неудач” – заведомо неприемлемых вариантов.
Правила перебора возможных вариантов – способы формирования рекурсивного вызова.
Начальное состояние следующего шага – фактические параметры рекурсивного вызова.
Содержание и способ обработки результата – полный перебор с сохранением всех допустимых вариантов, первый возможный, оптимальный.
Условия первоначального вызова рекурсивной функции в main.
Линейная рекурсия
Простейшим примером рекурсии является линейная рекурсия, когда функция содержит единственный условный вызов самой себя. В таком случае рекурсия становится эквивалентной обычному циклу. Любой циклический алгоритм можно преобразовать в линейно-рекурсивный, и наоборот.
// рекурсивный алгоритм вычисления факториала
Int fact(int n)
{ if (n==1) return 1; return n*fact(n-1);}
//Циклический алгоритм вычисления факториала
Int fact(int n) {
For (int s=1; n!=0; n--) s*=n;
Return s:}
Типы данных
Способы комментирования
Структура программы
Библиотеки
Структуры
Массивы
Оператор ветвления
Операторы цикла
Функции