Помогите пожалуйста на языке С++. Даю 50 баллов

Ответы
Ответ:
Вот вариант для массива чисел.
Объяснение:
Правда, сейчас никто такое не делает. Если нужен массив, то пользуются вектором из STL или boost, где всё уже давно реализовано для объектов любого типа, и есть соответствующие функции. Если это просто учебная лаба на указатели и циклы, то примерно такое будет.... Кроме требуемых функций (add, delete, insert) добавлены еще функции (input, output и main) для отладки.
#include <new>
#include <iostream>
using namespace std;
void inputArr(int* pArr, int len)
{
// Функция для инициализации массива из стандартного потока ввода
// pArr - указатель на зарезервированную память (первый элемент массива)
// len - количество элементов массива
for (int i = 0; i < len; ++i)
{
cout << " Input a[" << i << "]:";
cin >> pArr[i];
}
}
void outPutArr(int *pArr, int len)
{
// Функция для вывода элементов массива
// pArr - указатель на первый элемент массива
// len - количество элементов массива
for (int i = 0; i < len; i++) {
cout << " a[" << i << "]=" << pArr[i] << '\n';
}
}
int addBlockToArr(int** pArr, int lenArr, const int* pBlock, int lenBlock)
{
// pArr - указатель на указатель на первый элемент массива
// pBlock - указатель на первый элемент блока
// lenArr, lenBlock - количество элементов массива
// функция возвращает длину нового массива
int lenNew = lenArr;
if (lenBlock > 0)
{
lenNew = lenArr + lenBlock;
int* resArr = new int[lenNew];
for (int i = 0; i < lenArr; ++i)
{
resArr[i] = (*pArr)[i];
}
for (int i = 0; i < lenBlock; ++i)
{
resArr[i + lenArr] = pBlock[i];
}
delete[] *pArr;
*pArr = resArr;
}
return lenNew;
}
int deleteBlock(int** pArr, int lenArr, int beginIdx, int endIdx)
{
// pArr - указатель на указатель на первый элемент массива
// beginIdx, endIdx - начальный и конечный индексы удаляемых элементов массива
// функция возвращает длину нового массива
int lenNew = lenArr;
int beg = beginIdx > 0 ? beginIdx : 0;
int end = endIdx < lenArr - 1 ? endIdx : lenArr - 1;
int lenDel = end - beg + 1;
if (lenDel > 0)
{
lenNew = lenArr - lenDel;
int* resArr = new int[lenNew];
int indNew = 0;
for (int i = 0; i < lenArr; ++i)
{
if ((i < beg) || (i > end))
{
resArr[indNew++] = (*pArr)[i];
}
}
delete[] *pArr;
*pArr = resArr;
}
return lenNew;
}
int insertBlock(int** pArr, int lenArr, int insIdx, const int* pBlock, int lenBlock)
{
// pArr - указатель на указатель на первый элемент массива
// lenArr, lenBlock - длина массива, длина блока
// insIdx - после, которого будет вставлен блок
// pBlock - указатель на начало блока
// функция возвращает длину нового массива
int lenNew = lenArr;
if (lenBlock > 0)
{
if (insIdx >= lenArr - 1)
{
lenNew = addBlockToArr(pArr, lenArr, pBlock, lenBlock);
}
else
{
int ins = insIdx < 0 ? 0 : insIdx;
lenNew = lenArr + lenBlock;
int* resArr = new int[lenNew];
for (int i = 0; i < ins + 1; ++i)
{
resArr[i] = (*pArr)[i];
}
for (int i = 0; i < lenBlock; ++i)
{
resArr[i + ins + 1] = pBlock[i];
}
for (int i = ins + 1; i < lenArr; ++i)
{
resArr[i + lenBlock] = (*pArr)[i];
}
delete[] * pArr;
*pArr = resArr;
}
}
return lenNew;
}
int main()
{
int lenArr = 0, lenBlock = 0;
int * arr = 0;
int * block = 0;
cout << "input array size \n";
cin >> lenArr;
arr = new int[lenArr];
inputArr(arr, lenArr);
cout << "You input array \n";
outPutArr(arr, lenArr);
cout << "input block size \n";
cin >> lenBlock;
block = new int[lenBlock];
inputArr(block, lenBlock);
cout << "You input block \n";
outPutArr(block, lenBlock);
int lenAdd = addBlockToArr(&arr, lenArr, block, lenBlock);
cout << "Add \n";
outPutArr(arr, lenAdd);
int lenDel = deleteBlock(&arr, lenAdd, 3, 5);
cout << "Delete from a[3] to a[5] \n";
outPutArr(arr, lenDel);
int lenInsert = insertBlock(&arr, lenDel, 2, block, lenBlock);
cout << "Insert after a[2] \n";
outPutArr(arr, lenInsert);
return 0;
}