- •Понятие алгоритма. Свойства алгоритмов. Основные этапы решения задач
- •1. Формулировка задачи
- •2. Математическая постановка задачи
- •3. Разработка алгоритма
- •4. Написание текста и ввод программы
- •5. Выполнение программы. Поиск и устранение синтаксических ошибок
- •6. Тестирование программы. Поиск и устранение логических ошибок в программе
- •Этапы создания исполняемой программы (загрузочного модуля).
- •Структуры и формы написания программы
- •Внутреннее представление данных
- •Классы памяти
- •Обмен данными через внешние переменные
- •Статические переменные
- •Стандартный ввод/вывод данных через потоки
- •Ввод данных
- •Вывод данных
- •Специфические операции
- •Операции присваивания
- •Некоторые нетрадиционные (унарные) операции
- •Условные выражения
- •Операция условия ?:
- •Выражения (в том числе и условные). Порядок выполнения операций в выражении. Таблица приоритетов.
- •Условный оператор if и его применение при программировании. Сокращенная форма оператора if
- •Полная форма оператора if
- •Множественный выбор else-if
- •Оператор выбора switch и его применение при программировании.
- •Циклические вычислительные процессы
- •Оператор цикла while и его применение при программировании. Цикл while – цикл с предусловием.
- •Оператор цикла do while и его применение при программировании. Цикл do while – цикл с постусловием
- •Оператор цикла for и его применение при программировании. Цикл for – цикл с предусловием
- •Операторы break, goto, continue их применение при программировании. Операторы передачи управления
- •Оператор break
- •Оператор continue
- •Оператор goto
- •Вложенные циклы.
- •Указатели и адреса: описание, инициализация и операции с указателями. Применение указателей при программировании.
- •Статические строки
- •Динамические строки
- •Стандартный цикл обработки строки
- •Одномерные числовые массивы
- •Статические массивы
- •Динамические массивы
- •Динамические матрицы
- •Циклы перебора матрицы
- •Программирование с использованием функций пользователя. Принципы построения функций.
- •Механизм вывода функции
- •Передача значения простого аргумента в функцию. Способы передачи простых данных в функцию
- •Передача в функцию значения аргумента
- •Рекурсивная функция
- •Передача функции в другую функцию через указатель. Параметр функции. Указатель на функцию.
- •Перегрузка функций.
- •Функции с параметрами по умолчанию
- •Шаблоны функций.
- •Формат функции шаблона
- •Механизм шаблона
- •Особенности проекта с функциями-шаблонами
Перегрузка функций.
Удобно, когда функции, выполняющие одно и то же действие для разных типов данных, имели бы одно и то же имя.
Использование нескольких функций с одним и тем же именем, но с разными списками параметров(по типу или количеству) называется перегрузкой. . Тип функции не участвует в перегрузке.
Компилятор определяет, какая функция вызвана по набору аргументов.
Вызов функции должен быть однозначным.
Неоднозначность может возникнуть при:
1. Преобразовании типа
2. Использовании параметров ссылок
3. Использовании параметров по умолчанию
1.
float f(float a);
double f(double a);
int main (void)
{
int a =...;
float b =...;
double c =...;
f (b);
f (c);
f (a); // неоднозначность. возникнет ошибка компиляции
f ((double)a); // таким образом можно устранить неоднозначность
return 0;
}
2.
void f1(int a);
void f1(int&a);
int main (void)
{
int a =...;
f1(a); // неоднозначность
return 0;
}
3.
void f2 (int a);
int f2 (int a, int b=3);
int main (void)
{
int a =...;
f2(a); // неоднозначность
return 0;
}
Функции с параметрами по умолчанию
cin.getline(str,80);
cin.getline(str,80,’!’);
cin.getline(char*p, int n, char simv=’\n’);
// Иногда при объявлении функции, конкретное значение аргумента может быть известно заранее, тогда оно указывается в заголовке функции и не передается при вызове
//Функция может быть вызвана с двумя аргументами, при этом третий принимается по умолчанию. Или с тремя аргументами.
Параметры по умолчанию назначаются с конца списка параметров.
// параметр по умолчанию должен быть последним
+
Шаблоны функций.
Многие алгоритмы не зависят от типов используемых данных.
С помощью шаблона функции можно определить алгоритм, который будет применяться к параметризованному типу.
На этапе компиляции явно или по умолчанию передается конкретный тип для замены им параметризованного типа – после этого будет сформирован экземпляр функции, который компилируется и участвует в компоновке всей программы.
Шаблон необходим для формирования текста функции.
Формат функции шаблона
template <class Type>
имя функции
{
// тело функции
}
Type – имя параметризованного типа, который используется в качестве типа параметра или локальной переменной функции.
Параметризованных типов может быть несколько.
Пример: написать шаблон функции, вычисляющей максимальное значение в одномерном числовом массиве и вычислить максимум в целом и вещественном массиве.
Пример демонстрирует замену параметризованного типа по умолчанию.
Ставим цель: функция работает для массива любого типа. Тип массива параметризуем или обобщаем –Type.
Тип массива Type
Объявляя другие данные функции, смотрим, связаны ли они по типу с типом массива:
Если да, то их тип тоже Type
Если нет, можно задавать стандартный тип или создать другую параметризацию
#include<iostream>
using namespace std;
template<class Type>
Type MaxMas(type *p, int n)
{
int i;
Type max=p[0];
for (i=0; i<n; i++)
if (max<p[i])
max=p[i];
return max;
}
int main(void)
{
const int N=7;
int M1[N]={3;-2;7};
double M2[N]={3,25;1,7;5,6;7,8;…}; // 7 чисел
int max1;
double max2;
max1=MaxMas(M1,N);
max2=MaxMas(M2,N);
cout<<max1<<endl;
cout<<max2<<endl;
return 0;
}
