3.2. Приклади програм Приклад 3.1
Обчислити площу кола, знайти максимум з двох чисел, використовуючи макроси піднесення до квадрата, виведення результатів, знаходження максимального значення. За допомогою директив умовної компіляції активізувати різні частини програми.
Алгоритм задачі 3.1
1. Якщо значення константи менше 10, то виконати дії:
1.1. Увести три цілих числа;
1.2. Вивести результат обчислення квадрата першого числа;
1.3. Вивести результат визначення квадрата суми другого числа та константи N;
1.4. Вивести результат знаходження максимуму між першим і другим квадратами чисел.
2. Якщо значення константи більше 10, то виконати дії:
2.1. Увести радіус кола;
2.2. Обчислити площу кола;
2.3. Вивести визначений результат.
3. Запит на повторне виконання програми.
4. Якщо дано згоду, то повторити п,п.1 - 3, інакше - кінець розрахунків.
Приклад коду
/*exlab3_1_2011. Обчислити площу кола, знайти максимум з двох чисел, використовуючи макроси піднесення до квадрата, виведення результатів, знаходження максимального значення. За допомогою директив умовної компіляції активізувати різні частини програми. */ #include <stdio.h> #include <conio.h> #define N 5 //директива препроцесора – макровизначення #define SQR(x) (x)*(x) //макрос з параметром – визначення квадрата числа //макрос визначення найбільшого з двох чисел #define MAX(y,z) ((y)>(z))?(y):(z) //макрос як умовний вираз //виведення повідомлення та значення цілого числа #define KTPR(w) puts("control output"); \ printf(#w"=%d\n",w) //використовується символ продовження макроса '\' //символ '#' використовується для об’єднання рядків #define REZPR(w) puts ("rezult :");\ printf (#w"=%f\n",(float)w) //виведення повідомлення //виведення значення дійсного числа #define SQCIRLE(r) (3.14*SQR(r)) //площа кола, укладені макроси //==================== основна програма ======================== void main() { puts("Lab3.Using macros and preprocessing directive"); int a, b, c, //змінні для розрахунків b_plus_N, //допоміжна змінна a_kvadr, //змінна для визначення квадрата числа maxim; //максимальне значення серед трьох чисел char ch; //відповідь на запитання про продовження програми float rad, s; //радіус і площа кола do { #if N<10 //якщо умова істинна, то розрахувати максимум з трьох чисел puts("define maximum of two numbers"); puts("Input 3 integer numbers"); scanf("%d",&a); //введення числа KTPR(a); //макрос иведення числа scanf("%d",&b); KTPR(b); scanf("%d",&c); KTPR(c); a_kvadr=SQR(a); //макрос визначення квадрата числа KTPR(a_kvadr); b_plus_N=SQR(b+N); KTPR(b_plus_N); maxim=MAX(a_kvadr,b_plus_N); //пошук найбільшого з двох чисел maxim=MAX(maxim,c); REZPR(maxim); //макрос виведення результату
#else //компілювати іншу частину програми, якщо задати N >=10 { puts("define area of a circle"); puts("Input radius of circle"); scanf("%f", &rad); s = SQCIRLE(rad); REZPR (s); } #endif //завершення умовної компіляції puts ("Repeat? y /n "); ch=getch(); } while (ch=='y'); }
Рис.3.1. Результати роботи програми застосування макросів та директив умовної\ компіляції
