Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_Лаб_Гриф.doc
Скачиваний:
7
Добавлен:
14.11.2019
Размер:
2.81 Mб
Скачать

Приклад

/* ЗАНЯТТЯ N 16

Розробив Петров О.Д.

Оголосити задані функції і покажчик на функцію цього типу,

виконати визначення функцій. Оголосити масиви і покажчики

на них, виконати їх ініціалізацію відповідно до заданих

залежностей і з використанням покажчиків. Для одного з

масивів виділити пам'ять у купі. Вивести значення елементів

масивів на екран. Здійснити виклик функцій із застосуванням

покажчика. Вивести результати роботи функцій на екран. */

#include <stdio.h>

#include <math.h>

#include <conio.h>

#include <iostream.h>

const int kx = 6, ky = 6, kw = 8, a1 = 3, a2 = 9,\

b1 = 6, b2 = 5, c1 = 6, c2 = 10;

//Функція обчислює суму негативних елементів масиву

float summa ( int, float *);

//Функція обчислює добуток позитивних елементів масиву

float prois ( int, float *);

float ( *ps)( int, float *); //Оголошення покажчика на функцію

void main ( )

{ int і;

float y[ ky + 2 ]; //+2 елементи масиву для збереження

// результатів роботи функцій

float *px = new float [ kx + 2]; //Виділення пам'яті для масиву в "купі"

float *xptr;

clrscr( );

printf("Масив x[ ]\n");

for ( і = 0; і < kx; і ++)

{ *px = a1 * і * і - a2 * (5 - i); //Ініціалізація динамічного масиву

printf("x[%d] = %6.2f %p \n", i, *px, px);

px ++;

}

xptr = y;

gotoxy(25, 1); printf("Масив y[ ]\n");

for ( і = 0; і < ky; і ++)

{ *xptr = b1 * sin( 2 * і ) + b2 * exp( і - 5); //Ініціалізація масиву y[ ]

gotoxy(30, i + 2);

printf("y[%d] = %6.2f\n", i, *xptr);

xptr ++;

}

px - = kx; //Установка покажчика на нульовий елемент масиву

printf("Покажчик на дин. масив містить адресу рх = %p\n ", px );

ps = summa; //Зв'язування покажчика з функцією summa( )

printf("Покажчик на функцію містить адресу рs = %p\n ", ps );

printf("Сума: x[%d] = %6.2f ", kx, ( *ps )(kx, px) );

printf("Сума: y[%d] = %6.2f\n ", ky, ( *ps)(ky, y) );

ps = prois; //Зв'язування покажчика з функцією prois( )

printf("Покажчик на функцію містить адресу рs = %p\n ", ps );

printf("Добуток: x[%d] = %8.2f ", kx+1, ( *ps)(kx, px) );

printf("Добуток: y[%d] = %8.2f\n ", ky+1, ( *ps)(ky, y) );

delete [ ] px; //Звільнення пам'яті, виділеної в "купі" для масиву

getch( );

}

float summa( int kol, float *Arr ) //Визначення функції

{ float s = 0;

for ( int i = 0; i < kol; i ++ ) if (Arr[ i ] < 0) s += Arr[ i ];

return s;

}

float prois( int kol, float *Arr ) //Визначення функції

{ float s = 1;

for ( int i = 0; i < kol; i ++ ) if (Arr[ i ] > 0) s *= Arr[ i ];

return s;

}

/* Масив x[ ] Масив y[ ]

x[0] = -45.00 0AD0 y[0] = 0.03

x[1] = -33.00 0AD4 y[1] = 5.55

x[2] = -15.00 0AD8 y[2] = -4.29

x[3] = 9.00 0ADC y[3] = -1.00

x[4] = 39.00 0AE0 y[4] = 7.78

x[5] = 75.00 0AE4 y[5] = 1.74

Покажчик на дин. масив містить адресу рх = 0AD0

Покажчик на функцію містить адресу рs = 049C

Сума: x[6] = -93.00 Сума: y[6] = -5.29

Покажчик на функцію містить адресу рs = 04F3

Добуток: x[7] = 26325.00 Добуток: y[7] = 2.52 */