Void main()
{
int n,*A;
clrscr();
cout<<”Введиразмерность->”;
cin>>n;
A=newint [n];
//ввод элементов массива
int k=kolich(n,A);
ifk<>0 cout<<”Количество элементов делящихся на 7=”<<k;
elsecout<<”Элементов делящихся на 7нет”;
getch(); //cin.get();
}
For (i=0; i<n-1; i++)
For (j=0;j<n-1;j++)
If (A[j]>A[j+1])
{
y=A[j];
A[j]=A[j+1];
A[j+1]=y;
}
int *z, y;
for (i=0;i<n-1;i++)
for (z=A; z<A+n; z++)
if (*z>*(2+1))
{
y=*z;
*z=*(z+1);
*(z+1)=y;
}
ВидыфункцийвC++
inline – встроенная функция
Функция с аргументами заданными по умолчанию
Функция с переменным количеством аргументов.
Рекурсивная функция
Перегруженная функция
Шаблон функции
Передача аргументов в функцию mainи возврат значений из неё.
Функция которая имеет описание inlineсчитается встроенной и компилятор в местах вызова функции вставляет её программный код. Такие функции должны быть небольшие по объёму.
inline float rast(float x1, float y1, float x2, float y2);
{returnsqrt(pow(x1-x2,2)+pow(y1-y2,2)); }
В заголовке функции в списке её аргументов можно задать значения некоторым аргументам. Эти аргументы должны быть последними в списке. При вызове функции такие аргументы могут быть опущены. Причем, если аргумент опущен, то и все стоящие за ним тоже должны быть опущены.
int f1(int x, int y=0, char z=’*’);
Вызовы функции f1()
1)k=f1(p);
2)k=f1(p,d);
3)k=f1(p,d,’+’);
Признаком такой функции является многоточие в списке аргументов заголовка фукции. Примерами таких функций являются printf(“управляющая строка”,…); , scanf(); Функция с переменным числом аргументов обязательно должна иметь, хотя бы один фиксированный элемент. Передача в функцию дополнительных аргументов, компилятору неизвестно какой тип аргументов будет использоваться, поэтому многоточие даёт команду прекратить контроль типов аргументов. Необходимое преобразование должен предусмотреть программист. Значение аргументов, при вызове функций помещаются в стек в соответствии с типами аргументов. Возможность передачи переменного списка аргументов, зависит от способа записи списка аргументов в стек и от очистки аргументов из стека. Аргументы записываются в стек с конца списка аргументов, и стек освобождает вызывающие функции. В паскале аргументы записываются в стек с начала списка, и очистку стека делает вызванный модуль. В C++ можно использовать оба этих способа. Для этого используется модификатор pascal. А по умолчанию используется модуль cdecl. Функция с переменным количеством аргументов должна иметь способ определения точного числа аргументов. Рекомендуется 2 способа задания количества аргументов в списке. Пересылка в функцию количества аргументов. Задание признака конца списка аргументов. f1(5,x1,x2,x3,x4); f1(x1,x2,x3,x4,0); Копии данных типа char передаются в функцию и передаются в стек как тип int, а для floatкак double. Реализацию с переменным числом аргументов можно сделать 3-мя способами.
1)использование указателя без типа void *p
2)использование указателя с соответствующим типом int *d; double *t;
3)Использование указателя определенного самой системой программирования т.е. с помощью специальных стандартных макросов для работы со списком переменной длины. Эти макросы описаны в заголовочном файле <stdarg.h>.
1)va_listопределяет переменную являющуюся указателем для фукциисос списком аргументов переменной длины
2)va_startустанавливает переменную описанную как va_list на первый аргумент списка. Этот макрос используют два аргумента 1-й имя, 2-й аргумент определяет имя последнего фиксированного аргумента в списке аргументов. f1(intx, intim, …); va_listp; va_start(p,im);
3)va_argизвлекает очередной элемент списка из стека и переустанавливает указатель описанный как va_listна следующий элемент списка.
4)va_endзавершает обработку списка аргументов.
Пример программы с использованием функции с переменным числом аргументов
Вводятся целые числа. Используя функцию с переменным числом аргументов найти среднее арифметическое.
#include <iostream.h>
doublesr(int k, …);