You are on page 1of 5

ЛАБОРАТОРНА РОБОТА 15

Передача імен функцій в якості фактичних параметрів при виклику функції


Варіант 6
Завдання 1
Дано чотири одновимірні масиви x[nx], y[ny], z[nz], q[nq] із довільною
кількістю елементів кожний.
Обчислити:
A=∑ x i sin ( x i ) + ∑ x i cos( x i );
2

i i

B=∑ yi cos ( y i) + ∑ y i sin ( y i) ;


2

i i

C=∑ z i sin ( zi ) + ∑ z i sin(z i );


2

i i

D=∑ qi cos ( qi ) + ∑ q i cos(qi) .


2

i i

Передбачити функцію для введення елементів окремого масиву, а також


функцію для обчислення A, або B, або C, або D. У цю функцію необхідно
елементів у ньому передавати масив, кількість і дві функції (відповідних –
тригонометричних). Кількість елементів для кожного масиву вводити із
клавіатури під час роботи програми.
#include <iostream>
#include <stdio.h>
#include <math.h>
#define N 10

void input(int x[], int n, char q);


void output(int x[], int n, char q);
double calcul(int x[], int n, double f1(double), double f2(double));
//прототипи функцій

int main() {
setlocale(LC_ALL, "Ukrainian");
int x[N], y[N], z[N], q[N];
int nx, ny, nz, nq;
double A, B, C, D;// оголошення змінних
puts("Введiть розмiр масиву X <= 10");
scanf_s("%d", &nx);//введення розмірності масиву Х
input(x, nx, 'X');//звернення до функції введення
puts("Введiть розмiр масиву Y <= 10");
scanf_s("%d", &ny);//введення розмірності масиву Y
input(y, ny, 'Y');//звернення до функції введення
puts("Введiть розмiр масиву Z <= 10");
scanf_s("%d", &nz);//введення розмірності масиву Z
input(z, nz, 'Z');//звернення до функції введення
puts("Введiть розмiр масиву Q <= 10");
scanf_s("%d", &nq);//введення розмірності масиву Q
input(q, nq, 'Q');//звернення до функції введення
output(x, nx, 'X');
puts("\n");
output(y, ny, 'Y');
puts("\n");
output(z, nz, 'Z');
puts("\n");
output(q, nq, 'Q');//звернення до функцій виведення
puts("\n");
A = calcul(x, nx, sin, cos);
B = calcul(y, ny, cos, sin);
C = calcul(z, nz, sin, sin);
D = calcul(q, nq, cos, cos);//звернення до функції розрахунку
printf("Результати обчислень для масиву X %.3f\n", A);
printf("Результати обчислень для масиву Y %.3f\n", B);
printf("Результати обчислень для масиву Z %.3f\n", C);
printf("Результати обчислень для масиву Q %.3f\n", D);//виведення
результатів
return 0;
}

void input(int x[], int n, char q) {


printf("Введiть масив %c\n", q);
for (int i = 0; i < n; i++) {
scanf_s("%d", &x[i]);
}//введення масиву
}
void output(int x[], int n, char q) {
printf("Отриманий масив %c\n", q);
for (int i = 0; i < n; i++) {
printf("%d ", x[i]);
}//виведення масиву
}
double calcul(int x[], int n, double f1(double), double f2(double)) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += x[i] * f1(x[i]);
sum += pow(x[i], 2) * f2(x[i]);
}//обрахунки
return sum;
}
Завдання 2
1. Дано масиви Х(10), У(7). Знайти

s=∑ ( x i *ln|x i |)+ ∑ sin y i

Суму обчислити за допомогою функції.


#include <iostream>
#include <stdio.h>
#include <math.h>
#define N 10
#define M 7
void input(int x[], int n, char q);
void output(int x[], int n, char q);
double calcul(int x[], int y[], int n, int m, double f1(double), double f2(double));
//прототипи функцій
int main() {
setlocale(LC_ALL, "Ukrainian");
int x[N], y[M];
double result;// оголошення змінних
input(x, N, 'X');//звернення до функції введення
input(y, M, 'Y');//звернення до функції введення
output(x, N, 'X');
puts("\n");
output(y, M, 'Y');//звернення до функцій виведення
puts("\n");
result = calcul(x, y, N, M, log, sin);
printf("Результат обчислень %f", result);//виведення результату
return 0;
}

void input(int x[], int n, char q) {


printf("Введiть масив %c\n", q);
for (int i = 0; i < n; i++) {
scanf_s("%d", &x[i]);
}//введення масиву
}
void output(int x[], int n, char q) {
printf("Отриманий масив %c\n", q);
for (int i = 0; i < n; i++) {
printf("%d ", x[i]);
}//виведення масиву
}
double calcul(int x[], int y[], int n, int m, double f1(double), double f2(double)) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += x[i] * f1(abs(x[i]));
}
for (int i = 0; i < m; i++) {
sum += f2(y[i]);
}//обчислення
return sum;
}

You might also like