Предмет: Информатика, автор: 1allcash1

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

Приложения:

Ответы

Автор ответа: alexlar30
1

Ответ:

Вот вариант для массива чисел.

Объяснение:

Правда, сейчас никто такое не делает. Если нужен массив, то пользуются вектором из 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;

}

Похожие вопросы