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

Рекурсия. Макросы. Уловная компиляция

Реализовать рекурсивную функцию в вычислении суммы элементов массива

Int sum(int n, int a[]);

Int I,n,a[100];

Void main()

{cout<<”kol-vo el:”;

Cin>>n;

Randomize();

For (i=0;i<n;i++)

{a[i]=-10+randomize(21);

Cout<<a[i];}

Cout<<”summa:”<<sum(n-1,a);

}

Int sum (int n,int a[100])

{if (n==0)

Retrn a[0]

Else

Return a[n]+sum(n-1,a);}

Макрос определяется директивой #define и представляет собой символическое имя некоторых операций до начала компиляции программы идентификатор заменяется на замещающий текст. Макросы могут быть определены с параметрами без них. Если определён макрос с параметрами, то сначала в замещающий текст подставляются значения параметров, а затем расширенный вариант макроса подставляется в место его имени.

#define Circle_area(x) (PI*(x)*(x));

Везде в файле, где появиться Circle_area(x) значение аргумента х будет использовано для замены икса в замещающем тексте и расширенный вариант макроса будет использоваться

Area= (3.1415*(4)*(4));

Круглые скобки вокруг каждого параметра включения х в тексте макроса и вокруг всего приложения применяется для того что бы обеспечить соответствующий порядок вычисления в том случае, когда аргументом макрос является выражение

Area=(3.1415*c+2*c+2)

Преимущество использования макроса состоят в то, что вычисления выполняемые макросом, непосредственно помещаются в текст программы и не приводят к дополнительным расходам связанным с вызовом функции . Определение макроса с помощью директивы #undef

Аналог макроса- функция in-line.

Условная компиляция даёт возможность вам управлять выполнением директив при процессах и компиляции программного кода для организации условной компиляции используются условные директивы .

#if !defined(NULL) (начало)

#define NULL 0

#end if (конец)

Эта директива определяет не была ли определена ранее константа NULL

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

# ifdef DEBUG

Cout<<”переменная х=”<<x<<endl;

#endif;

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

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

Указатель – переменная, которая хранит в качестве значения адрес памяти, с другой стороны указатель содержит адрес переменной, которая в свою очередь хранит какое-то значение в данном случае имя переменной отсылает значение непосредственно а указатель косвенно.

Ссылка на значение в виде указателя называется косвенной адресацией

Тип *имя указателя

Указатели должны быть проинициализированы, либо при своём объявлении, либо с помощью оператора присваивания в ходе работ

В качестве начальных значений указатель может принимать 0,NULL, АДРЕСС