Краткие теоретические сведения

Перегрузка функции

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

Пример:

#include <iostream>

int max_element ( int n, int a[ ])

// находит максимальный элемент для массива типа int

{

int max=a[0];

for ( i=1; i<n; i++)

if (a[i]>max) max=a[i];

return max;

}

 

long max_element ( int n, long a[ ])

// находит максимальный элемент для массива типа long

{

long max=a[0];

for ( i=1; i<n; i++)

if (a[i]>max) max=a[i];

return max;

}

double max_element ( int n, double a[ ])

// находит максимальный элемент для массива типа double

{

double max=a[0];

for ( i=1; i<n; i++)

if (a[i]>max) max=a[i];

return max;

}

 

float max_element ( int n, float a[ ])

// находит максимальный элемент для массива типа float

{

float max=a[0];

for ( i=1; i<n; i++)

if (a[i]>max) max=a[i];

return max;

}

 

void main ( )

{

int x[]={10, 20, 30, 40, 50, 60};

long y[]={12L, 44L, 22L, 37L,30L};

......

int m1=max_element(6, x );

long m2=max_element(5, y);

.....

}

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

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

Определение функции с переменным числом параметров:

<тип><имя>(<явные параметры>,... )

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

· известен признак конца списка переменных параметров;

· известно количество параметров, которое передается как обязательный параметр.

Пример:

#include <iostream.h>

int sum (int k,...)

{

int *p = &k; //настроили указатель на параметр k

int s=0;

for (; k!=0;k--)

s+=*(++p);

return s;

}

void main( )

{

cout<<”\nСумма(2,4,6)= ”<<sum(2,4,6);

cout<<”\nСумма(4,1,2,3,4)=”<<sum(4,1,2,3,4);

}

Для доступа к списку параметров используется указатель *p типа int. Он устанавливается на начало списка параметров в памяти, а затем p перемещается по адресам фактических параметров (++p).

Постановка задачи

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

Варианты

1. Перегруженную функцию для сложения:

· целых чисел;

· комплексных чисел.

Написать функцию sum с переменным числом параметров, которая находит сумму чисел типа int. Написать вызывающую функцию main, которая обращается к функции sum не менее трех раз с количеством параметров 3, 7, 11.

 

2. Перегруженную функцию для сложения:

· вещественных чисел;

· комплексных чисел.

Написать функцию sum с переменным числом параметров, которая находит сумму чисел типа int по формуле:

S=a1*a2+a2*a3+a3*a4+.....

Написать вызывающую функцию main, которая обращается к функции sum не менее трех раз с количеством параметров 5, 10, 12.

 

3. Перегруженную функцию для умножения:

· целых чисел;

· комплексных чисел.

Написать функцию mult с переменным числом параметров, которая находит произведение чисел типа float. Написать вызывающую функцию main, которая обращается к функции mult не менее трех раз с количеством параметров 3, 7, 11.

 

 

4. Перегруженную функцию для вычитания:

· целых чисел;

· комплексных чисел.

Написать функцию min с переменным числом параметров, которая находит минимальное из чисел типа int. Написать вызывающую функцию main, которая обращается к функции min не менее трех раз с количеством параметров 5, 10, 12.

 

5. Перегруженную функцию для умножения:

· вещественных чисел;

· комплексных чисел.

Написать функцию max с переменным числом параметров, которая находит минимальное из чисел типа int. Написать вызывающую функцию main, которая обращается к функции min не менее трех раз с количеством параметров 5, 10, 12.

 

6. Перегруженную функцию для деления:

· целых чисел;

· комплексных чисел.

Написать функцию kvadr с переменным числом параметров, которая определяет количество чисел, являющихся точными квадратами (2, 4, 9, 16,... ) типа int. Написать вызывающую функцию main, которая обращается к функции kvadr не менее трех раз с количеством параметров 3, 7, 11.

 

7. Перегруженную функцию для сложения:

· десятичных дробей;

· обыкновенных дробей.

Написать функцию max с переменным числом параметров, которая находит минимальное из чисел типа int или из чисел типа double, тип параметров определяется с помощью первого параметра функции. Написать вызывающую функцию main, которая обращается к функции min не менее трех раз с количеством параметров 5, 10, 12.

 

8. Перегруженную функцию для преобразования:

· десятичной дроби в обыкновенную;

· обыкновенной дроби в десятичную.

Написать функцию с переменным числом параметров для перевода чисел из десятичной системы счисления в троичную. Написать вызывающую функцию main, которая обращается к этой функции не менее трех раз с количеством параметров 3, 4, 7.

 

9. Перегруженную функцию для вычисления:

· натурального логарифма;

· десятичного логарифма.

Написать функцию с переменным числом параметров для перевода чисел из десятичной системы счисления в восьмеричную. Написать вызывающую функцию main, которая обращается к этой функции не менее трех раз с количеством параметров 3, 5, 8.

 

10. Перегруженную функцию, которая:

· целые числа возводит в степень n;

· из десятичных чисел извлекает корень степени n.

Написать функцию, которая определяет можно ли из чисел x, y, z построить треугольник. Написать функцию triangle с переменным числом параметров, которая определяет сколько троек рядом расположенных чисел типа int могут быть длинами сторон треугольника. Написать вызывающую функцию main, которая обращается к функции triangle не менее трех раз с количеством параметров 3, 9, 11.

 

11. Перегруженную функцию для:

· перевода часов и минут в минуты;

· перевода минут в часы и минуты.

Написать функцию (или макроопределение), которая определяет принадлежит ли точка с координатами (х, у) окружности с заданным радиусом R. Написать функцию belong с переменным числом параметров, которая определяет сколько точек с координатами (х, у) принадлежат заданной окружности. Написать вызывающую функцию main, которая обращается к функции belong не менее трех раз с количеством параметров 3, 9, 11.

12. Перегруженную функцию, которая:

· для массива целых чисел находит среднее арифметическое;

· для строки находит количество букв, содержащихся в ней.

Написать функцию (или макроопределение), которая находит площадь треугольника по его сторонам. Написать функцию square c переменным числом параметров, которая находит площадь n-угольника по заданным сторонам. Написать вызывающую функцию main, которая обращается к функции square не менее трех раз с количеством параметров 3, 5, 8.

 

13. Перегруженную функцию, которая:

· для массива целых чисел находит максимальный элемент;

· для строки находит длину самого длинного слова.

Написать функцию с переменным числом параметров для перевода чисел из двоичной системы счисления в троичную. Написать вызывающую функцию main, которая обращается к этой функции не менее трех раз с количеством параметров 3, 6, 7.

 

14. Перегруженную функцию, которая:

· для массива целых чисел находит количество четных элементов;

· для строки находит количество слов, начинающихся на букву «а».

Написать функцию sum с переменным числом параметров, которая находит сумму заданных обыкновенных дробей. Написать вызывающую функцию main, которая обращается к функции sum не менее трех раз с количеством параметров 5, 10, 12.

 

15. Перегруженную функцию, которая:

· для массива целых чисел находит количество отрицательных элементов;

· для строки находит количество слов, заканчивающихся и начинающихся на одну и ту же букву.

Написать функцию min с переменным числом параметров, которая находит минимальное из чисел типа int или из чисел типа double, тип параметров определяется с помощью первого параметра функции. Написать вызывающую функцию main, которая обращается к функции min не менее трех раз с количеством параметров 5, 10, 12.

 

16. Перегруженную функцию, которая:

· для массива целых чисел находит количество нечетных элементов;

· для строки находит количество слов в ней.

Написать функцию (или макроопределение), которая находит угол треугольника по его сторонам. Написать функцию angles c переменным числом параметров, которая находит углы n-угольника по заданным сторонам. Написать вызывающую функцию main, которая обращается к функции angle не менее трех раз с количеством параметров 3, 9, 11.

 

17. Перегруженную функцию, которая:

· для массива целых чисел удаляет все четные элементы из массива;

· для строки удаляет все четные слова.

Написать функцию (или макроопределение), которая находит длину стороны по координатам его точек. Написать функцию square, которая вычисляет площадь треугольника, заданного координатами вершин. Написать функцию squaren c переменным числом параметров, которая определяет площадь выпуклого многоугольника, заданного координатами своих вершин.

 

25. Перегруженную функцию, которая:

· а) для двумерного массива удаляет все четные строки;

· б) для одномерного массива удаляет все элементы, заключенные между двумя нулевыми элементами.

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

(НОД ‑ наибольший общий делитель)

Написать вызывающую функцию main, которая обращается к функции nok не менее трех раз с количеством параметров 3, 5, 6.


Лабораторная работа №6
“Работа со структурами”

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