Cosmetify
Cosmetify

Reputation: 33

Randomizing/Modifing Arrays

So I'm trying to randomize an array of 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Then ask for the user to select a position in the array, and modify it. After that, it should display the number the user entered for all of the 10 values. Finally, it will need to get the original array that was randomized and reverse it.

So far, I have this

#include <iostream>

using namespace std;
int array [10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int rarray [10];

int main() {
    cout << "Random Array = ";
    for (int i = 0; i < 10; i++) {
        int index = rand() % 10;

        int temp = array[i];
        array[i] = array[index];
        array[index] = temp;
    }

    for (int i = 1; i <= 10; i++) {
        cout << array[i] << " "; //somehow, this display needs to be entered into another array
    }

    system("PAUSE");
}

But as stated in the comment, I'm stuck on as how to do this.

Upvotes: 0

Views: 294

Answers (1)

Captain Obvlious
Captain Obvlious

Reputation: 20063

You can accomplish this by using std::shuffle, std::copy, and std::reverse from the C++ Standard Library.

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int position;

    // Get the position to modify and make sure it's within our bounds.
    do
    {
        cout << "Select a position: ";
    }
    while (!(cin >> position) || position < 0 || position > 9);

    int array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int rarray[10];

    //  Shuffle the array. We use std::begin and std::end to get the bounds of
    //  of the array instead of guessing it's size.
    std::random_shuffle(std::begin(array), std::end(array));

    //  Copy it to the new array
    std::copy(std::begin(array), std::end(array), rarray);

    //  Modify the new array and display it. Add your own code here to get the
    //  value it is modified with.
    rarray[position] = 100;

    for (auto value : rarray)
        cout << value << " ";
    cout << endl;

    //  Reverse the original array and display it
    std::reverse(std::begin(array), std::end(array));

    for (auto value : array)
        cout << value << " ";
    cout << endl;

    system("PAUSE");
}

or if you are not allowed to use the C++ Standard Library you will need to handle everything manually. This is a tedious task but a great example of why the C++ Standard Library should be leveraged whenever possible. This is also more prone to errors, more difficult to maintain, and ugly to look at.

int main()
{
    int position;

    do
    {
        cout << "Select a position: ";
    } while (!(cin >> position) || position < 0 || position > 9);

    int array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    for (int i = 0; i < 10; i++)
    {
        int index = rand() % 10;

        int temp = array[i];
        array[i] = array[index];
        array[index] = temp;
    }

    //  Copy the array
    int rarray[10];
    for (int i = 0; i < 10; i++)
    {
        rarray[i] = array[i];
    }

    //  Modify the new array and display it
    rarray[position] = 100;
    for (int i = 0; i < 10; i++)
    {
        cout << rarray[i] << " ";
    }
    cout << endl;

    //  Reverse the old array and display it
    for (int i = 0; i < 10 / 2; i++)
    {
        int tmp = array[i];
        array[i] = array[9 - i];
        array[9 - i] = tmp;
    }
    for (int i = 0; i < 10; i++)
    {
        cout << array[i] << " ";
    }
    cout << endl;

    system("PAUSE");
}

Both implementations are close to your original request but you may need to expand on it a little to match your requirements exactly. They should get you moving along nicely though.

Upvotes: 2

Related Questions