profile
Размещено 4 года назад по предмету Информатика от 1allcash1

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

  1. Ответ на вопрос
    Ответ на вопрос дан alexlar30

    Ответ:

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

    Объяснение:

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

    }

Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 6 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.