// Torrez, Elaine CS1A Chapter 9, P. 539, #12
/********************************************************************************************
*
* ELEMENT SHIFTER
*
* ------------------------------------------------------------------------------------------
* This program demonstrates a function that accepts an integer pointer and its size and
* returns a NEW dynamically allocated array that is one element larger. The original array’s
* elements are shifted right by one position, and a 0 is stored at the first index.
*
* ------------------------------------------------------------------------------------------
* INPUT
* size : Number of integers
* arr : Original integers entered by the user
*
* OUTPUT
* New array with 0 at index 0 and all original elements shifted to the right
*
********************************************************************************************/
#include <iostream>
using namespace std;
// FUNCTION PROTOTYPE
int *shiftArray(int *arr, int size);
int main()
{
int size;
int *arr = nullptr;
int *shifted = nullptr;
// INPUT
cout << "Enter number of integers: ";
cin >> size;
while (size <= 0)
{
cout << "Error: Enter a number greater than 0: ";
cin >> size;
}
arr = new int[size];
for (int i = 0; i < size; i++)
{
cout << "Enter value #" << (i + 1) << ": ";
cin >> arr[i];
}
// Shift the array
shifted = shiftArray(arr, size);
// OUTPUT
cout << "\nShifted Array (size = " << size + 1 << "):\n";
for (int i = 0; i < size + 1; i++)
{
cout << "Element [" << i << "] = " << shifted[i] << endl;
}
delete [] arr;
delete [] shifted;
arr = nullptr;
shifted = nullptr;
return 0;
}
//*******************************************************************************
// shiftArray
//------------------------------------------------------------------------------
// Creates a new array one element larger.
// Stores 0 in the first element and shifts the rest of the values right by one.
//*******************************************************************************
int *shiftArray(int *arr, int size)
{
int *newArr = new int[size + 1];
newArr[0] = 0; // Insert 0 at beginning
for (int i = 0; i < size; i++)
newArr[i + 1] = arr[i]; // Shift values
return newArr;
}