C++
Задание 1. Написать функцию, получающую указатель на динамический массив и его размер. Функция должна удалить все простые числа из массива и повернуть указатель на новый динамический массив.
Задание 2. Написать функцию, получающую указатель на статический массив и его размер. Функция распределяет положительные, отрицательные и нулевые элементы в отдельных динамических массивах.
Answers & Comments
Відповідь:
Задание 1:
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int num) {
if (num <= 1) return false;
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) return false;
}
return true;
}
int* removePrimes(int* arr, int size) {
int newSize = 0;
for (int i = 0; i < size; i++) {
if (!isPrime(arr[i])) newSize++;
}
int* newArr = new int[newSize];
int j = 0;
for (int i = 0; i < size; i++) {
if (!isPrime(arr[i])) {
newArr[j] = arr[i];
j++;
}
}
delete[] arr;
return newArr;
}
int main() {
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int size = sizeof(arr) / sizeof(arr[0]);
int* newArr = removePrimes(arr, size);
for (int i = 0; i < size - 2; i++) {
cout << newArr[i] << " ";
}
cout << endl;
delete[] newArr;
return 0;
}
Задание 2:
#include <iostream>
using namespace std;
void sortElements(int* arr, int size) {
int* posArr = new int[size];
int* negArr = new int[size];
int* zeroArr = new int[size];
int posIndex = 0;
int negIndex = 0;
int zeroIndex = 0;
for (int i = 0; i < size; i++) {
if (arr[i] > 0) {
posArr[posIndex] = arr[i];
posIndex++;
}
else if (arr[i] < 0) {
negArr[negIndex] = arr[i];
negIndex++;
}
else {
zeroArr[zeroIndex] = arr[i];
zeroIndex++;
}
}
cout << "Positive elements: ";
for (int i = 0; i < posIndex; i++) {
cout << posArr[i] << " ";
}
cout << endl;
cout << "Negative elements: ";
for (int i = 0; i < negIndex; i++) {
cout << negArr[i] << " ";
}
cout << endl;
cout << "Zero elements: ";
for (int i = 0; i < zeroIndex; i++) {
cout << zeroArr[i] << " ";
}
cout << endl;
delete[] posArr;
delete[] negArr;
delete[] zeroArr;
}
int main() {
int arr[] = { 1, -2, 3, 0, 5, -6, 7, -8, 9 };
int size = sizeof(arr) / sizeof(arr[0]);
sortElements(arr, size);
return 0;
}
Задание 1:
```c++
#include <iostream>
using namespace std;
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
int* removePrimes(int* arr, int& size) {
int newSize = 0;
for (int i = 0; i < size; i++) {
if (!isPrime(arr[i])) newSize++;
}
int* newArr = new int[newSize];
int j = 0;
for (int i = 0; i < size; i++) {
if (!isPrime(arr[i])) {
newArr[j] = arr[i];
j++;
}
}
delete[] arr;
size = newSize;
return newArr;
}
int main() {
int size = 10;
int* arr = new int[size] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
arr = removePrimes(arr, size);
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
delete[] arr;
}
```
В этом примере функция `removePrimes` принимает указатель на динамический массив `arr` и его размер `size`. Функция создает новый динамический массив `newArr`, в который копируются все элементы исходного массива, кроме простых чисел. Затем функция удаляет исходный массив и возвращает указатель на новый массив. Размер массива обновляется с помощью ссылки.
Задание 2:
```c++
#include <iostream>
using namespace std;
void distribute(int* arr, int size, int*& posArr, int& posSize, int*& negArr, int& negSize, int*& zeroArr, int& zeroSize) {
posSize = negSize = zeroSize = 0;
for (int i = 0; i < size; i++) {
if (arr[i] > 0) posSize++;
else if (arr[i] < 0) negSize++;
else zeroSize++;
}
posArr = new int[posSize];
negArr = new int[negSize];
zeroArr = new int[zeroSize];
int j = 0, k = 0, l = 0;
for (int i = 0; i < size; i++) {
if (arr[i] > 0) {
posArr[j] = arr[i];
j++;
} else if (arr[i] < 0) {
negArr[k] = arr[i];
k++;
} else {
zeroArr[l] = arr[i];
l++;
}
}
}
int main() {
const int SIZE = 10;
int arr[SIZE] {1, -2, -3, -4, -5, -6, -7, -8, -9};
int* posArr;
int posSize;
int* negArr;
int negSize;
int* zeroArr;
int zeroSize;
distribute(arr, SIZE, posArr, posSize, negArr, negSize, zeroArr, zeroSize);
cout << "Positive: ";
for (int i = 0; i < posSize; i++) {
cout << posArr[i] << " ";
}