You are on page 1of 9

Тема: Покажчики.

Передача параметрів
Завдання для самостійної роботи 2
Завдання 1. Написати функцію, яка отримує покажчик на масив і
його розмір, і повертає суму і добуток його елементів у двох
параметрах-покажчиках.
#include <iostream>
using namespace std;

template<class T>
T* roz(T size) {
T* arr = new T[size];
return arr;
}

template<class T>
void Print(T* mas, size_t n) {
for (size_t i = 0; i < n; i++)
cout << "\t " << *(mas + i);
cout << endl;
}

template<class T>
T* CreateArr(size_t n) {
return new T[n]{};
}

double Rand(double a = -100, double b = 100) {


if (a > b) swap(a, b);
return a + (b - a) * rand() / RAND_MAX;
}

int Rand(int a = -100, int b = 100) {


if (a > b) swap(a, b);
return a + rand() % (b - a + 1);
}

template<class T>
void setArrayRandom(T* mas, size_t n, T a = -100, T b = 100) {
for (size_t i = 0; i < n; i++)
*(mas + i) = Rand(a, b);
}

void sumAndProduct(const int* arr, size_t n, int* sumr, int* dobr) {


if (!arr || n == 0) {
*sumr = 0;
*dobr = 0;
return;
}

int sum = 0;
int dob = 1;

for (size_t i = 0; i < n; i++) {


sum += arr[i];
dob *= arr[i];
}

*sumr = sum;
*dobr = dob;

cout << "sum = " << sum << endl;


cout << "dobutok = " << dob << endl;
}

int main()
{
size_t n;
cout << "n = "; cin >> n;
int* arr = CreateArr<int>(n);

cout << "arr" << endl;


setArrayRandom(arr, n, 0, 20);
Print(arr, n);

int sum, dob;

sumAndProduct(arr, n, &sum, &dob);

delete[] arr;
}

Завдання 2. Написати функцію, яка отримує покажчик на масив і


його розмір, і повертає кількість від’ємних, додатних і нульових
елементів масиву.
#include <iostream>
using namespace std;

template<class T>
T* roz(T size) {
T* arr = new T[size];
return arr;
}

template<class T>
void Print(T* mas, size_t n) {
for (size_t i = 0; i < n; i++)
cout << "\t " << *(mas + i);
cout << endl;
}

template<class T>
T* CreateArr(size_t n) {
return new T[n]{};
}

double Rand(double a = -100, double b = 100) {


if (a > b) swap(a, b);
return a + (b - a) * rand() / RAND_MAX;
}

int Rand(int a = -100, int b = 100) {


if (a > b) swap(a, b);
return a + rand() % (b - a + 1);
}

template<class T>
void setArrayRandom(T* mas, size_t n, T a = -100, T b = 100) {
for (size_t i = 0; i < n; i++)
*(mas + i) = Rand(a, b);
}

void count(const int* arr, size_t n, int& positive, int& negative, int& nuls) {

positive = 0;
negative = 0;
nuls = 0;

for (size_t i = 0; i < n; i++) {


if (arr[i] > 0) {
positive++;
}
else if (arr[i] < 0) {
negative++;
}
else {
nuls++;
}
}

cout << "positive = " << positive << endl;


cout << "negative = " << negative << endl;
cout << "nuls = " << nuls << endl;
}

int main()
{
size_t n;
cout << "n = "; cin >> n;
int* arr = CreateArr<int>(n);

cout << "arr" << endl;


setArrayRandom(arr, n, -10, 10);
Print(arr, n);

int positive, negative, nuls;

count(arr, n, positive, negative, nuls);

delete[] arr;
}

Завдання 3. Написати функцію, яка приймає як аргумент покажчики


на два масиви (А і В) і розміри масивів. Функція перевіряє, чи є
масив В підмножиною масиву А і повертає покажчик на початок
знайденого фрагмента або повертає 0 в іншому випадку.

Завдання 4. Написати функцію, яка отримує покажчик на


динамічний масив і його розмір. Функція має видалити з масиву всі
від’ємні числа та повернути покажчик на новий динамічний масив.
#include <iostream>
using namespace std;

template<class T>
T* roz(T size) {
T* arr = new T[size];
return arr;
}

template<class T>
void Print(T* mas, size_t n) {
for (size_t i = 0; i < n; i++)
cout << "\t " << *(mas + i);
cout << endl;
}

template<class T>
T* CreateArr(size_t n) {
return new T[n]{};
}

double Rand(double a = -100, double b = 100) {


if (a > b) swap(a, b);
return a + (b - a) * rand() / RAND_MAX;
}

int Rand(int a = -100, int b = 100) {


if (a > b) swap(a, b);
return a + rand() % (b - a + 1);
}

template<class T>
void setArrayRandom(T* mas, size_t n, T a = -100, T b = 100) {
for (size_t i = 0; i < n; i++)
*(mas + i) = Rand(a, b);
}

template <typename T>


T* del_negative(T* arr, size_t& n) {
size_t negative = 0;
for (size_t i = 0; i < n; i++) {
if (arr[i] < 0) {
negative++;
}
}

T* newArr = new T[n - negative];


size_t index = 0;
for (size_t i = 0; i < n; i++) {
if (arr[i] >= 0) {
newArr[index] = arr[i];
index++;
}
}

delete[] arr;
n = n - negative;

return newArr;
}

int main()
{
size_t n;
cout << "n = "; cin >> n;
int* arr = CreateArr<int>(n);
cout << "arr" << endl;
setArrayRandom(arr, n, -10, 10);
Print(arr, n);

int* resultArr = del_negative(arr, n);

delete[] arr;
}

Завдання 5. Створити функцію, яка дає змогу додавати блок


елементів у кінець масиву
#include <iostream>
using namespace std;

template<class T>
T* roz(T size) {
T* arr = new T[size];
return arr;
}

template<class T>
void Print(T* mas, size_t n) {
for (size_t i = 0; i < n; i++)
cout << "\t " << *(mas + i);
cout << endl;
}

template<class T>
T* CreateArr(size_t n) {
return new T[n]{};
}

double Rand(double a = -100, double b = 100) {


if (a > b) swap(a, b);
return a + (b - a) * rand() / RAND_MAX;
}

int Rand(int a = -100, int b = 100) {


if (a > b) swap(a, b);
return a + rand() % (b - a + 1);
}

template<class T>
void setArrayRandom(T* mas, size_t n, T a = -100, T b = 100) {
for (size_t i = 0; i < n; i++)
*(mas + i) = Rand(a, b);
}

template <typename T>


void input(T*& arr, size_t& n, const T* arr2, size_t n2) {
size_t newSize = n + n2;

T* newArr = new T[newSize];

for (size_t i = 0; i < n; i++) {


newArr[i] = arr[i];
}

for (size_t i = 0; i < n2; i++) {


newArr[n + i] = arr2[i];
}

arr = newArr;
n = newSize;
}

int main()
{
size_t n, n2;
cout << "n = "; cin >> n;
int* arr = CreateArr<int>(n);

cout << "n2 = "; cin >> n2;


int* arr2 = CreateArr<int>(n2);

cout << "arr" << endl;


setArrayRandom(arr, n, -10, 10);
Print(arr, n);

cout << "arr2" << endl;


setArrayRandom(arr2, n2, -10, 10);
Print(arr2, n2);

input(arr, n, arr2, n2);


Print(arr, n);

delete[] arr;
}

Завдання 6. Створити функцію, яка дає змогу вставляти блок


елементів, починаючи з довільного індексу масиву.
#include <iostream>
using namespace std;

template<class T>
T* roz(T size) {
T* arr = new T[size];
return arr;
}

template<class T>
void Print(T* mas, size_t n) {
for (size_t i = 0; i < n; i++)
cout << "\t " << *(mas + i);
cout << endl;
}

template<class T>
T* CreateArr(size_t n) {
return new T[n]{};
}

double Rand(double a = -100, double b = 100) {


if (a > b) swap(a, b);
return a + (b - a) * rand() / RAND_MAX;
}
int Rand(int a = -100, int b = 100) {
if (a > b) swap(a, b);
return a + rand() % (b - a + 1);
}

template<class T>
void setArrayRandom(T* mas, size_t n, T a = -100, T b = 100) {
for (size_t i = 0; i < n; i++)
*(mas + i) = Rand(a, b);
}

template<typename T>
void input_by_index(T*& arr, size_t& n, const T* arr2, size_t n2, size_t index) {

size_t newSize = n + n2;


T* newArr = new T[newSize];

for (size_t i = 0; i < index; i++) {


newArr[i] = arr[i];
}

for (size_t i = 0; i < n2; i++) {


newArr[index + i] = arr2[i];
}

for (size_t i = index; i < n; i++) {


newArr[index + n2 + (i - index)] = arr[i];
}

delete[] arr;
arr = newArr;
n = newSize;
}

int main()
{
size_t n, n2, index;
cout << "n = "; cin >> n;
int* arr = CreateArr<int>(n);

cout << "n2 = "; cin >> n2;


int* arr2 = CreateArr<int>(n2);
cout << "index = "; cin >> index;

cout << "arr" << endl;


setArrayRandom(arr, n, -10, 10);
Print(arr, n);

cout << "arr2" << endl;


setArrayRandom(arr2, n2, -10, 10);
Print(arr2, n2);

input_by_index(arr, n, arr2, n2, index);


Print(arr, n);

delete[] arr;
}
Завдання 7. Створити функцію, яка дає змогу видаляти блок
елементів, починаючи з довільного індексу масиву.
#include <iostream>
using namespace std;

template<class T>
T* roz(T size) {
T* arr = new T[size];
return arr;
}

template<class T>
void Print(T* mas, size_t n) {
for (size_t i = 0; i < n; i++)
cout << "\t " << *(mas + i);
cout << endl;
}

template<class T>
T* CreateArr(size_t n) {
return new T[n]{};
}

double Rand(double a = -100, double b = 100) {


if (a > b) swap(a, b);
return a + (b - a) * rand() / RAND_MAX;
}

int Rand(int a = -100, int b = 100) {


if (a > b) swap(a, b);
return a + rand() % (b - a + 1);
}

template<class T>
void setArrayRandom(T* mas, size_t n, T a = -100, T b = 100) {
for (size_t i = 0; i < n; i++)
*(mas + i) = Rand(a, b);
}

template<typename T>
void del_by_index(T*& arr, size_t& n, size_t index, size_t count) {
if (count > n - index) {
count = n - index;
}

size_t size = n;

for (size_t i = index + count; i < size; i++) {


arr[i - count] = arr[i];
}
n -= count;

T* newArr = new T[n];


for (size_t i = 0; i < n; i++) {
newArr[i] = arr[i];
}
delete[] arr;
arr = newArr;
}

int main()
{
size_t n, count, index;
cout << "n = "; cin >> n;
int* arr = CreateArr<int>(n);

cout << "index = "; cin >> index;


cout << "count = "; cin >> count;

cout << "arr" << endl;


setArrayRandom(arr, n, -10, 10);
Print(arr, n);

del_by_index(arr, n, index, count);


Print(arr, n);

delete[] arr;
}

You might also like