Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Yazyki_programmirovania.docx
Скачиваний:
3
Добавлен:
10.07.2019
Размер:
107.5 Кб
Скачать

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++

  1. inline – встроенная функция

  2. Функция с аргументами заданными по умолчанию

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

  4. Рекурсивная функция

  5. Перегруженная функция

  6. Шаблон функции

  7. Передача аргументов в функцию mainи возврат значений из неё.

  1. Функция которая имеет описание inlineсчитается встроенной и компилятор в местах вызова функции вставляет её программный код. Такие функции должны быть небольшие по объёму.

inline float rast(float x1, float y1, float x2, float y2);

{returnsqrt(pow(x1-x2,2)+pow(y1-y2,2)); }

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

int f1(int x, int y=0, char z=’*’);

Вызовы функции f1()

1)k=f1(p);

2)k=f1(p,d);

3)k=f1(p,d,’+’);

  1. Признаком такой функции является многоточие в списке аргументов заголовка фукции. Примерами таких функций являются 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, …);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]