You are on page 1of 5

Варіант 3

Теорія:
1) 1 варіант (за допомогою формули Паскаля):
C(n, k) = C(n-1, k-1) + C(n-1, k)
базові випадки: C(n, 0) = C(n, n) = 1
2 варіант (за допомогою факторіала):
C(n, k) = n! / (k! * (n-k)!)
3 варіант (За допомогою комбінаторного тлумачення):
C(n, k) = C(n-1, k) + C(n-1, k-1)
2)
а) int (*v)[5] означає, що v є вказівником на масив з 5 цілих чисел.
Таким чином, *v є масивом з 5 цілих чисел.

б) int *v[5] означає, що v є масивом з 5 вказівників на цілі числа.


Таким чином, v[i] є вказівником на ціле число.

в) int *(v[5]) означає те ж саме, що і int *v[5]. Тут v є масивом з 5


вказівників на цілі числа. Таким чином, v[i] є вказівником на ціле
число.

3)
#include <iostream>

const int MAX_ROWS = 20;

const int MAX_COLS = 30;

typedef int matrix[MAX_ROWS][MAX_COLS];

void process_matrix(int* matrix_ptr, int rows, int cols);

void process_matrix(matrix& matrix_ref, int rows, int cols);

int main() {

int my_matrix[MAX_ROWS][MAX_COLS];

int rows, cols;


std::cout << "Введіть кількість рядків (1-20): ";

std::cin >> rows;

std::cout << "Введіть кількість стовпців (1-30): ";

std::cin >> cols;

std::cout << "Введіть елементи матриці:\n";

for (int i = 0; i < rows; i++) {

for (int j = 0; j < cols; j++) {

std::cout << "[" << i << "][" << j << "]: ";

std::cin >> my_matrix[i][j];

process_matrix(&my_matrix[0][0], rows, cols);

process_matrix(my_matrix, rows, cols);

return 0;

void process_matrix(int* matrix_ptr, int rows, int cols) {

void process_matrix(matrix& matrix_ref, int rows, int cols) {

Задача 1:
<A>::= "a"
<B>::= "a"
<C>::= "a"
<S>::={<A> {<S|B>} <C>}
Задача 2:
n 3 5 7 2
1 x x x x x
Sn=∑ x 2 k= + 3 + 4 + 5 +…=S n−1 + n+1
k=0 2
2 k +1
(2 k +1) 2 2 ∗2 ! 2 ∗3! 2 ∗4 ! 2 n!
2
x 2 n−1 a ∗x x
a n= n+1 = n+1n−1 ; S 1= , a1=1
2 k ! 2 ( k−1 ) k 2

Система рекурентних співвідношень


Sn=S n−1+ an

x
S1 =
2

an−1∗x 2
a n=
2n+1 ( k−1 ) k
a 1=1

Задача 3:
#include <cmath>

#include <stdexcept>

double computeExpression(double x) {

if (x <= -1.0 || x >= 1.0) {

throw std::out_of_range("x must be in (-1, 1)");

double sum = 0.0;

double term = x;

double a = 1.0;

int k = 1;

while (std::fabs(term) > 1e-8) {

sum += term;

a *= 2 * k - 1;

term = std::pow(x, 2 * k - 1) / (std::pow(2, k + 1) * a);

k++;

return sum;

Задача 4:
#include <iostream>

#include <stdexcept>

void addNumbers(double* arr, int length, double* end)

int count = 0;
double x;

while (count < length) {

std::cout << "Enter a number: ";

std::cin >> x;

if (std::cin.fail()) {

std::cin.clear();

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

std::cerr << "Invalid input. Please enter a real number." << std::endl;

continue;

try {

double term = computeExpression(x);

*arr = term;

arr++;

count++;

} catch (const std::out_of_range& e) {

std::cerr << "Error: " << e.what() << std::endl;

return;

} catch (...) {

std::cerr << "An unexpected error occurred." << std::endl;

return;

if (arr == end) {

std::cerr << "Error: Array is full." << std::endl;

return;

Задача 5:
#include <iostream>

#include <stdexcept>

using namespace std;

const int MAX_SIZE = 10;

void add_numbers(double arr[], int len, double* end_ptr);

int main() {

double arr[MAX_SIZE];

double* end_ptr = arr;

try {

add_numbers(arr, MAX_SIZE, end_ptr);


}

catch (const exception& ex) {

cerr << ex.what() << endl;

if (end_ptr == arr) {

cout << "Empty array" << endl;

else {

for (double* ptr = arr; ptr < end_ptr; ++ptr) {

cout << *ptr;

if (ptr + 1 < end_ptr) {

cout << "$";

cout << endl;

return 0;

void add_numbers(double arr[], int len, double* end_ptr) {

int count = 0;

while (count < 5) {

double x;

cout << "Enter a number: ";

if (!(cin >> x)) {

throw runtime_error("Invalid input");

try {

double result = compute_expression(x);

*end_ptr = result;

++end_ptr;

catch (const exception& ex) {

cerr << ex.what() << endl;

++count;

You might also like