Модульное программирование

Содержание

Слайд 2

Тема IV. Модульное программирование

§1. Функции
§2. Пользовательские типы данных
§3. Директивы препроцессора

Тема IV: Модульное

Тема IV. Модульное программирование §1. Функции §2. Пользовательские типы данных §3. Директивы
программирование

Слайд 3

Лекция 8:

Тема IV: Модульное программирование

§1. Функции
§1.1. Объявление функций
§1.2. Определение функций
§1.3. Вызов функций
§1.4.

Лекция 8: Тема IV: Модульное программирование §1. Функции §1.1. Объявление функций §1.2.
Передача параметров в функцию
§1.5. Передача массивов в функцию
§1.6. Функции с переменным числом параметров
§1.7. Рекурсивные функции
§1.8. Функция main()
§1.9. Перегрузка функций
§1.10. Шаблоны функций
§2. Пользовательские типы данных
§3. Директивы препроцессора

Слайд 4

§0. Введение в модульное программирование

Тема IV: Модульное программирование

☝ Определение

Модуль — отдельный файл,

§0. Введение в модульное программирование Тема IV: Модульное программирование ☝ Определение Модуль
в котором группируются функции и связанные с ними данные.

Достоинства модульного стиля программирования:
Алгоритмы отделены от данных;
Высокая степень абстрагирования проекта;
Модули конструируются и отлаживаются отдельно друг от друга.

Функциональная декомпозиция — это метод разработки программ, при котором задача разбивается на ряд легко решаемых подзадач, решения которых в совокупном виде дают решение исходной задачи в целом.

Слайд 5

§1. Функции

Тема IV: Модульное программирование

☝ Определение

Функция — это самостоятельный именованный алгоритм решения

§1. Функции Тема IV: Модульное программирование ☝ Определение Функция — это самостоятельный
некоторой законченной задачи.

Слайд 6

§1.1. Объявление функций

Тема IV: Модульное программирование

? При объявлении функции задается имя функции,

§1.1. Объявление функций Тема IV: Модульное программирование ? При объявлении функции задается
тип
возвращаемого значения (тип функции) и указывается список
передаваемых параметров:

[класс] тип имя_функции ([список_параметров]);

☝ Определение

Объявление функции — это создание её прототипа.

Слайд 7

[класс] — задает область видимости функции:

Тема IV: Модульное программирование

extern;
static.

[класс] тип

[класс] — задает область видимости функции: Тема IV: Модульное программирование extern; static.
имя_функции ([список_параметров]);

тип — определяет тип значения, возвращаемого функцией:

[класс] тип имя_функции ([список_параметров]);

имя_функции — имя функции, т.е. идентификатор.

[класс] тип имя_функции ([список_параметров]);

Слайд 8

список_параметров — определяет величины, которые требуется передать в
функцию при вызове.

Тема

список_параметров — определяет величины, которые требуется передать в функцию при вызове. Тема
IV: Модульное программирование

[класс] тип имя_функции ([список_параметров]);

элементы списка разделяются запятыми;
в списке указываются типы и имена.

? Примечание:

При объявлении функции имена в списке параметров, передаваемых в функцию, можно опустить.

Слайд 9

§1.2. Определение функций

Тема IV: Модульное программирование

? Формат определения (описания) функции:

[класс] тип

§1.2. Определение функций Тема IV: Модульное программирование ? Формат определения (описания) функции:
имя ([список_параметров])
{
тело функции;
}

☝ Определение

Определение функции содержит, кроме объявления, тело функции, представляющее собой последовательность операторов.

Слайд 10

Тема IV: Модульное программирование

[класс] тип имя ([список_параметров])[throw(исключения)]
{
тело функции;
}

Тема IV: Модульное программирование [класс] тип имя ([список_параметров])[throw(исключения)] { тело функции; }
исключения — список исключений, которые может порождать функция
(т.е. ошибки).

Слайд 11

§1.3. Вызов функций

Тема IV: Модульное программирование

? Формат вызова функций:

имя_функции ([список_параметров]);

? Замечания!

§1.3. Вызов функций Тема IV: Модульное программирование ? Формат вызова функций: имя_функции
При определении, объявлении и при вызове одной и той же функции типы и порядок следования параметров должны совпадать.
На имена параметров ограничений по соответствию не накладывается, т.к. функцию можно вызывать с различными аргументами.
В прототипах имена списка параметров игнорируются и служат исключительно для улучшения читаемости программы.

Слайд 12

Тема IV: Модульное программирование

Пример:

#include
// объявление функции:
int sum(int x, int y); //

Тема IV: Модульное программирование Пример: #include // объявление функции: int sum(int x,
<-- Вариант 1
//int sum(int, int); <-- Вариант 2
main()
{
int a = 2, b = 3, c, d;
c = sum(a, b); // вызов функции
cin >> d;
cout << sum(c, d); // вызов функции
cout << sum(a*10+5, b+3-a/2); // вызов функции
return 0;
}
// определение функции:
int sum(int x, int y)
{
return (x+y); // <-- Здесь x и y – локальные переменные
}

Слайд 13

§1.4. Передача параметров в функцию

Тема IV: Модульное программирование

☝ Определение

Параметры, перечисленные в заголовке

§1.4. Передача параметров в функцию Тема IV: Модульное программирование ☝ Определение Параметры,
описания функции, называют формальными, а записанные в операторе вызова функции — фактическими параметрами, или аргументами.

☝ Определение

Список аргументов в функции называется сигнатурой функций.

? Примечание:

В определении функции и в ее вызове сигнатуры параметры должны строго совпадать. Это означает, что формальные и фактические параметры должны соответствовать друг другу по количеству, типу и порядку следования.

Слайд 14

Тема IV: Модульное программирование

Пример:

float Avg(float a, float b, float c)
{ float S;

Тема IV: Модульное программирование Пример: float Avg(float a, float b, float c)
// локальная переменная
S=(a+b+c)/3.;
return S;} // тип совпадает с типом функции
void main(void){
float x1=2.5, x2=7, x3=3.5; float y;
y=Avg(x1, x2, x3); // фактические параметры – переменные
// обращение в присваивании
printf("x1=%f, x2=%f, x3=%f y=%f\n", x1, x2, x3, y);
y=Avg(2., 4., 7.);//фактические параметры–константы вещественного типа
printf("x1=%f, x2=%f, x3=%f y=%f\n", 2., 4., 7., y);
// фактические параметры – выражения
y=Avg(x1*2., x2+4., sin(PI/2.));
printf("x1=%f,x2=%f,x3=%f,y=%f\n",2*x1,x2+4.,sin(PI/2.),y);
// обращение в функции вывода, фактические параметры
// произвольные, то есть константы, переменные, выражения
printf("x1=%f,x2=%f,x3=%f,y=%f\n",2.,x2,x3+0.7,Avg(2.,x3+0.7));
// оператор-обращение может входить в другие выражения
y=(Avg(0.5, 1.7, 2.9)+Avg(x1,x1+2,x1+2.))*0.5;
printf("y=%f\n",y); }

Слайд 15

В стек заносятся копии адресов аргументов, а функция осуществляет доступ к ячейкам

В стек заносятся копии адресов аргументов, а функция осуществляет доступ к ячейкам
памяти по этим адресам;
Исходные значения аргументов могут быть изменены в ходе выполнения операторов функции.

В стек заносятся копии значений аргументов, и операторы функции работают с этими копиями;
Доступа к исходным значениям параметров функции нет, т.е. нет возможности изменить исходные значения аргументов.

Тема IV: Модульное программирование

Способы передачи параметров в функцию

По значению

По адресу

Слайд 16

Тема IV: Модульное программирование

Пример 1:

#include
void increm(int a, int *b, int &c);

Тема IV: Модульное программирование Пример 1: #include void increm(int a, int *b,
// объявление функции
main()
{
int a = 1, b = 2, c = 3;
cout << ”a b c\n”;
cout << a << ’ ’ << b << ’ ’ << c << ’\n’;
increm(a, &b, c); // вызов функции
cout << a << ’ ’ << b << ’ ’ << c << ’\n’;
return 0;
}
void increm(int a, int *b, int &c) // определение функции
{
a++; (*b)++; c++;
}

Слайд 17

Тема IV: Модульное программирование

Пример 2:

#include
#include
int Triangle(float a, float b, float

Тема IV: Модульное программирование Пример 2: #include #include int Triangle(float a, float
c, float &p, float &s)
{
// функция имеет два варианта выхода
// параметры a, b, c передаются по значению
// параметры p, s, по ссылке
float pp; // полупериметр
if(a+b<=c||a+c<=b||b+c<=a) // треугольник не существует
return 0;
else
{ // треугольник существует
p=a+b+с;
pp=0.5*p;
s=sqrt(pp*(pp–a)*(pp–b)*(pp–c));
return 1;
}
}

Слайд 18

Тема IV: Модульное программирование

void main(void)
{
float A, B, C;
// длины сторон – фактические

Тема IV: Модульное программирование void main(void) { float A, B, C; //
параметры
float Perim, Square;
// периметр и площадь – фактические параметры
// пример обращения
printf("Введите длины сторон треугольника\n");
scanf("%f%f%f", &A, &B, &C);
if(Triangle(A, B, C, Perim, Square)==1)
printf("Периметр = %6.2f, площадь = %6.2f\n", Perim,
Square);
else
printf("Треугольник не существует\n");
}

Слайд 19

§1.5. Передача массивов в функцию

Тема IV: Модульное программирование

При использовании массива в качестве

§1.5. Передача массивов в функцию Тема IV: Модульное программирование При использовании массива
параметра функции, в функцию передается указатель на тип элемента массива, а точнее — на первый элемент массива.

Слайд 20

Тема IV: Модульное программирование

Пример:

/* Передача одномерного массива в функцию */
#include
int sum(const

Тема IV: Модульное программирование Пример: /* Передача одномерного массива в функцию */
int *mas, const int n); //объявление функции
const int n=10;
main()
{
int marks[n] = {1, 2, 3, 4, 5, 6};
cout << ”Сумма эл-тов массива: ” << sum(marks, n);
return 0;
}
int sum(const int *mas, const int n) //определение функции
{ // или int sum(int mas[], int n)
// или int sum(int mas[n], int n)
int s=0;
for (int i = 0; i < n; i++) s += mas[i];
return s;
}

Результат выполнения программы:

Слайд 21

Тема IV: Модульное программирование

Пример:

/* Передача двумерного массива в функцию */
#include
int sum(int

Тема IV: Модульное программирование Пример: /* Передача двумерного массива в функцию */
**a, const int n_str, const int n_slb); // 1
// или int sum(int **, const int, const int);
main(){
int n_str, n_slb;
int **a, i, j;
cout << "Кол-во строк: "; cin >> n_str; // 2
cout << "Кол-во столбцов: "; cin >> n_slb; // 2
a = new int *[n_str]; // 3
for (i = 0; i < n_str; i++) a[i] = new int [n_slb]; // 3
for (i = 0; i < n_str; i++) // 4
for (j = 0; j < n_slb; j++){ // 4
cout << "a[" << i << ", " << j << "] = "; // 4
cin >> a[i][j]; } // 4
cout << "Сумма эл-тов массива: "<< sum(a, n_str, n_slb); // 5
...
return 0;
}
int sum(int **a, const int n_str, const int n_slb){ // 6
for (int s = 0, i = 0; i < n_str; i++) // 7
for (int j = 0; j < n_slb; j++) s += a[i][j]; // 7
return s; } // 8

Слайд 22

Тема IV: Модульное программирование

? Примечания к примеру:

Объявление функции. Модификатор const указывает на

Тема IV: Модульное программирование ? Примечания к примеру: Объявление функции. Модификатор const
то, что параметры в функции не изменяются.
Ввод размерности массива.
Выделение памяти под динамический массив.
Ввод значений элементов массива.
Вызов функции и вывод результата выполнения функции на экран.
Определение функции.
Суммирование элементов массива.
Передача результата суммирования в точку вызова функции.

Результат выполнения программы:

Слайд 23

§1.6. Функции с переменным числом параметров

Тема IV: Модульное программирование

В функциях с переменным

§1.6. Функции с переменным числом параметров Тема IV: Модульное программирование В функциях
числом параметров список формальных параметров заканчивается троеточием.
Для доступа к необязательным параметрам внутри функции используются следующие макросы библиотеки :

va_start — инициализирует указатель;
va_list — хранит указатель на очередной аргумент;
va_arg — возвращает значение очередного аргумента;
va_end — после перебора всех элементов необходимо
обратиться к этому макросу до выхода из
функции.

Слайд 24

Тема IV: Модульное программирование

Пример:

/* Функция с переменным числом параметров */
#include
#include
main(){

Тема IV: Модульное программирование Пример: /* Функция с переменным числом параметров */

int n;
int sred_znach(int,...); // объявление функции
n = sred_znach(2,3,4,-1); // вызов с четырьмя параметрами
printf("n = %d",n);
n = sred_znach(5,6,7,8,9,-1); // вызов с шестью параметрами
printf("\n n = %d",n);
return 0; }
int sred_znach(int x,...){ // определение функции
int i = 0, j = 0, sum = 0;
va_list uk_arg; // объявление указателя uk_arg на эл-ты
// списка необязательных параметров
va_start(uk_arg,x); // установка указателя uk_arg на
// первый необязательный параметр x
/* выборка очередного параметра и проверка на конец списка: */
while ((i = va_arg(uk_arg,int)) != -1){
sum += i; // сумма эл-тов
j++; } // кол-во эл-тов
va_end(uk_arg); // закрытие списка параметров
return (sum / j); } // передача сред. знач. в точку вызова

Слайд 25

Тема IV: Модульное программирование

? Примечание к примеру:

Функция в данном примере имеет один

Тема IV: Модульное программирование ? Примечание к примеру: Функция в данном примере
обязательный параметр, который обязательно должен быть равен ‘-1’ и является признаком (флагом) окончания списка передаваемых в функцию параметров.

Результат выполнения программы:

Слайд 26

§1.7. Рекурсивные функции

Тема IV: Модульное программирование

☝ Определение

Рекурсивная функция — функция, вызывающая сама

§1.7. Рекурсивные функции Тема IV: Модульное программирование ☝ Определение Рекурсивная функция —
себя.

? Замечание!

В коде обязательно должна быть предусмотрена проверка условия завершения рекурсии.
Рекурсивная функция должна иметь хоть одну нерекурсивную ветвь, заканчивающуюся оператором возврата.

Хвостовой или концевой рекурсией называется функция, рекурсивный вызов которой производится в конце , непосредственно перед оператором return или в самом операторе return.

Слайд 27

Тема IV: Модульное программирование

Пример:

/* вычисление факториала (n!): */
long factorial(long n){
if (n

Тема IV: Модульное программирование Пример: /* вычисление факториала (n!): */ long factorial(long
== 0 || n == 1) return 1;
return (n * factorial(n - 1)); } // n!=n*(n-1)! (5!=5*4!)

? Примечания:

Рекурсия часто может применяться там, где используется цикл.
Рекурсивные функции позволяют получить компактный программный код.
Расход памяти, времени и опасность переполнения стека требуют внимательности при использовании рекурсивных функций.

Слайд 28

§1.8. Функция main()

Тема IV: Модульное программирование

? Существует два формата записи функции main:

§1.8. Функция main() Тема IV: Модульное программирование ? Существует два формата записи
тип main () {...} //без параметров

? Примечания:

Функции main передается управление после запуска программы.
Функция main может передавать значение в вызывавшую ее систему и принимать параметры из внешнего окружения.

тип main (int argc, char *argv[]) {...} //с двумя пар-ми

Слайд 29

Тема IV: Модульное программирование

? Примечания:

Функция main без параметров
В «типе» описывается информационный поток,

Тема IV: Модульное программирование ? Примечания: Функция main без параметров В «типе»
поступающий из функции обратно к той функции, которая произвела к ней обращение.
В «списке параметров» описывается информационный поток, который поступает из функции, производящей обращение, к вызываемой функции.
В заголовке функции main описывается интерфейс между функцией и ОС.

Слайд 30

Тема IV: Модульное программирование

? Примечания:

Функция main с двумя параметрами
Идентификаторы параметров могут быть

Тема IV: Модульное программирование ? Примечания: Функция main с двумя параметрами Идентификаторы
любыми, но общепринятыми являются указанные ниже:
argc — определяет количество параметров, передаваемых функции;
argv — является указателем на массив указателей типа char;
каждый элемент массива содержит указатель на отдельный
параметр командной строки, хранящейся в виде строки.
Указатели массива argv[] ссылаются на полное имя запускаемого на исполнение файла;

Слайд 31

Тема IV: Модульное программирование

Пример:

#include
void main (int argc, char *argv[])
{
for (int

Тема IV: Модульное программирование Пример: #include void main (int argc, char *argv[])
i = 0; i < argc; i++)
{
cout << argv[i] << “\n”;
}
}

Результат выполнения программы:

Слайд 32

§1.9. Перегрузка (полиморфизм) функций

Тема IV: Модульное программирование

☝ Определение

Использование нескольких функций с одним

§1.9. Перегрузка (полиморфизм) функций Тема IV: Модульное программирование ☝ Определение Использование нескольких
и тем же именем, но с различными типами параметров называется перегрузкой функций.

? Примечания:

Компилятор по типу и количеству фактических параметров (аргументов) определяет, какую именно функцию следует вызывать.
Если соответствие на одном этапе получается более чем одним способом, то возникает неоднозначность вызова.
Избежать неоднозначности можно используя явное преобразование типов аргументов.

Слайд 33

Тема IV: Модульное программирование

☝ Определение

Список аргументов в функции называется сигнатурой функций.

? Примечания:

Имена

Тема IV: Модульное программирование ☝ Определение Список аргументов в функции называется сигнатурой
переменных не имеют значения.
Сигнатуры могут различаться по количеству аргументов или по их типам, либо по тому и другому.

Слайд 34

Тема IV: Модульное программирование

Пример:

/* Перегрузка функций */
...
/*Имеется набор функций print( ) со

Тема IV: Модульное программирование Пример: /* Перегрузка функций */ ... /*Имеется набор
следующими прототипами:*/
void print(const char * str, int width); // #1
void print(double d, int width); // #2
void print(long l, int width); // #3
void print(int i, int width); // #4
void print(const char * str); // #5
print("Pancakes", 15);
print("Syrup");
print(1999.0, 10);
print(1999, 12);
print(1999L, 15);

Слайд 35

Тема IV: Модульное программирование

Пример:

/* Перегрузка функций */
...
/* Имеется 4-е варианта функции, определяющей

Тема IV: Модульное программирование Пример: /* Перегрузка функций */ ... /* Имеется
наибольшее
значение : */
int max(int, int); // (1) наибольшее из двух целых
char* max(char*, char*); // (2) наиболее длинная из двух строк
int max(int, char*); // (3) наибольшее из первого
// и длины второго
int max(char*, int); // (4) наибольшее из длины первого
// и второго
...
void func(int a, int b, char* c, char* d)
{
cout << max(a,b) << max(d,b) << max(a,c) << max(c,d);
} ...

Слайд 36

Тема IV: Модульное программирование

? Примечания к примеру:

Выбор варианта функции max осуществляется на

Тема IV: Модульное программирование ? Примечания к примеру: Выбор варианта функции max
этапе компиляции программы в соответствии с типом фактических параметров (аргументов).
В данном примере все четыре варианта функции вызываются последовательно.

Слайд 37

Тема IV: Модульное программирование

Пример:

/* Перегрузка функций */
/*функция, которая возвращает наибольшее из своих

Тема IV: Модульное программирование Пример: /* Перегрузка функций */ /*функция, которая возвращает
параметров*/
int max(int, int); // функция получает два параметра
int max(int, int, int); // функция получает три параметра
int max(int x,int y)
{return x>y?x:y;
}
int max(int x,int y,int z)
{return x>y?(x>z?x:z):(y>z?y:z);
}
int Angle1, Angle2, Angle3;
// вызов функции с двумя параметрами
int Angle_max=max(Angle1, Angle2);
// вызов функции с тремя параметрами
Angle_max=max(Angle1, Angle2, Angle3);

Слайд 38

Тема IV: Модульное программирование

Пример:

/* Перегрузка функций */
/* Функцию max() находит наибольшее значение

Тема IV: Модульное программирование Пример: /* Перегрузка функций */ /* Функцию max()
из элементов мас-
сива.*/
int max(int *,int); // функция получает два параметра
int max(int x[],int n)
{
int m=x[0];
for(int i=0;i if(x[i]>m) m=x[i];
return m;
}
int a[10];
int Angle_max;
Angle_max=max(Angle1,Angle2); // найдет наибольший угол
int Max_value;
Max_value=max(a, 10); // найдет наибольший элемент массива

Слайд 39

Тема IV: Модульное программирование

Пример:

/* Перегрузка функций (неоднозначность) */
#include
float f(float i) {

Тема IV: Модульное программирование Пример: /* Перегрузка функций (неоднозначность) */ #include float
cout << "Function float f(float i)" << endl;
return i; }
double f(double i) {
cout << "Function double f(double i)" << endl;
return i * 2; }
int main()
{
float x = 10.09;
double y = 10.09;
cout << f(x) << endl; // вызывается f(float)
cout << f(y) << endl; // вызывается f(double)
cout << f(10) << endl; // возникает неоднозначность
// преобразовать 10 во float
return 0; // или double
}

Слайд 40

Тема IV: Модульное программирование

? Примечания к примеру:

При вызове функции f(10) возникает неоднозначность

Тема IV: Модульное программирование ? Примечания к примеру: При вызове функции f(10)
и компилятор выдает ошибку:

Для устранения неоднозначности в примере требуется ’10’ преобразовать явным образом к требуемому типу: f(float(10)) или f(double(10))

Слайд 41

Тема IV: Модульное программирование

? Замечания! (правила описания перегруженных функций)

Перегруженные функции должны находиться

Тема IV: Модульное программирование ? Замечания! (правила описания перегруженных функций) Перегруженные функции
в одной области видимости, иначе произойдет сокрытие функций аналогично одинаковым именам переменных во вложенных блоках (в операторах, функциях и т.п.).
Функции не могут быть перегружены, если описание их параметров отличается только модификатором const или использованием ссылки:
int и const int,
или
int и int&.

Слайд 42

§1.10. Шаблоны функций

Тема IV: Модульное программирование

☝ Определение

Шаблон функции — это программно расписанный

§1.10. Шаблоны функций Тема IV: Модульное программирование ☝ Определение Шаблон функции —
алгоритм, применяемый к данным различных типов.
Шаблон определяет функцию на основе обобщенного типа, вместо которого может быть подставлен определенный тип данных.
Передавая шаблону тип в качестве параметра, можно заставить компилятор сгенерировать функцию для этого типа данных.

Шаблоны функций предназначены:
для повышения эффективности программы, содержащей однотипную обработку данных различных типов;
чтобы не возникало необходимости создавать несколько перегружаемых функций с полностью одинаковыми алгоритмами обработки данных.

Слайд 43

Тема IV: Модульное программирование

☝ Определение

Вызов функции, который использует конкретный тип данных, приводит

Тема IV: Модульное программирование ☝ Определение Вызов функции, который использует конкретный тип
к созданию компилятором кода для соответствующей версии функции. Этот процесс называется созданием экземпляра (instantiation) шаблона.

☝ Определение

Поскольку шаблоны позволяют программировать
на основе обобщенного типа вместо определенного типа данных, этот процесс называют обобщенным программированием.

☝ Определение

Поскольку типы представлены параметрами, шаблоны функций иногда называют параметризированными типами.

Слайд 44

Тема IV: Модульное программирование

? Формат определения шаблона функции:

template

Тема IV: Модульное программирование ? Формат определения шаблона функции: template имя_функции(список параметров)

имя_функции(список параметров)
{
/* тело функции */
}

список_типов — список обобщенных типов, которые определяются при вызове функции.

список параметров — список параметров, передаваемых в функцию.

Слайд 45

Тема IV: Модульное программирование

? Примечания:

Конкретный тип данных передается функции в виде параметров

Тема IV: Модульное программирование ? Примечания: Конкретный тип данных передается функции в
на этапе компиляции. Компилятор автоматически генерирует правильный код, соответствующий переданному в функцию типу, т.е. создается функция, которая автоматически перегружает сама себя.
В общем случае шаблон функции может содержать несколько параметров, каждый из которых может быть не только типом, но и просто переменной:
template
void f(TypeA x, TypeB y, int i) {...}
При вызове шаблона функции на месте параметра шаблона, являющегося не типом, а переменной, должно указываться константное выражение.
Применение шаблонов функций не сокращает размер исполняемого кода.

Слайд 46

Тема IV: Модульное программирование

Пример:

/* Сортировка целочисленного и вещественного массивов */
#include
template

Тема IV: Модульное программирование Пример: /* Сортировка целочисленного и вещественного массивов */
Type> void SortVybor(Type *b, int n);
main() { const int n=20;
int i, b[n];
double a[n];
for (i = 1; i < n; i++) cin >> b[i];
SortVybor(b, n); // сорт-ка целочисленного массива
for (i = 1; i < n; i++) cin >> a[i];
SortVybor(a, n); // сорт-ка вещественного массива
return 0; }
/* Шаблон функции сортировки методом прямого выбора : */
template void SortVybor(Type *b, int n){
Type a; // буферная переменная для обмена эл-тов
int imin; // номер наименьш. эл-та в исходн. масс.
for (int i = 0; i < n-1; i++) {
for (int j = i+1; j < n; j++) // выбор
if (b[j] < b[i]) // наименьшего
a = b[j]; b[j] = b[i]; b[i] = a; } } // и обмен

Слайд 47

Тема IV: Модульное программирование

Пример:

/* Принудительное определение типа параметров функции */
// Шаблон функции

Тема IV: Модульное программирование Пример: /* Принудительное определение типа параметров функции */
определен как
template void Func(Y, Z);
// Вызовы функции:
Func (“University”, 3.3); // 1
Func (“University”, 3.3); // 2
Func (“University”, 3.3); // 3
Func (“University”, 3.3); // 4
Имя файла: Модульное-программирование.pptx
Количество просмотров: 39
Количество скачиваний: 0