Напишіть функцію "resizeArray", яка приймає вказівник на динамічний масив
цілих чисел, поточний розмір масиву та новий розмір. Функція повинна змінити
розмір масиву, перевиділивши пам'ять відповідно до нового розміру. Якщо
новий розмір більший за поточний, додаткові елементи масиву мають бути
ініціалізовані значенням 0. Якщо новий розмір менший за поточний, зайві
елементи масиву мають бути видалені.
будь поможіть!!!
Ответы на вопрос
Відповідь:
Задачу можна вирішити за допомогою функції realloc() в C++, яка змінює розмір вже виділеного блоку пам'яті. Ось приклад того, як це реалізувати:
#include <iostream>
#include <cstdlib> // для malloc, realloc і free
int* resizeArray(int* ptr, int oldSize, int newSize) {
ptr = (int*)realloc(ptr, newSize * sizeof(int));
if (ptr == NULL) {
std::cerr << "Пам'ять не може бути перевиділена";
return NULL;
}
// Ініціалізуємо нові елементи значенням 0
if (newSize > oldSize) {
for (int i = oldSize; i < newSize; i++) {
ptr[i] = 0;
}
}
return ptr;
}
int main() {
int oldSize = 5, newSize = 10;
int* arr = (int*)malloc(oldSize * sizeof(int));
// Ініціалізуємо старий масив
for (int i = 0; i < oldSize; i++) {
arr[i] = i + 1;
}
// Змінюємо розмір масиву
arr = resizeArray(arr, oldSize, newSize);
// Друк нового масиву
for (int i = 0; i < newSize; i++) {
std::cout << arr[i] << " ";
}
free(arr);
return 0;
}
Цей код перевиділяє пам'ять для масиву з новим розміром за допомогою realloc(). Якщо новий розмір більший за старий, то додаткові елементи ініціалізуються нулями.