Как изменить порядок набора массивов - PullRequest
3 голосов
/ 08 апреля 2020

Это упражнение для моего класса, и я не уверен, как go узнать о функции, которую нужно сделать, чтобы изменить порядок.

#include <iostream>
#include <iomanip>

void reverseorder(int[], int);
void printout(int[], int);

const int SIZE = 10;

int main()
{
int number[SIZE] = {10, 15, 20, 25, 30, 35, 40, 45, 50, 55};

reverseorder(number, SIZE);
printout(number, SIZE);
}

void reverseorder(int number[], int SIZE)
{
    for (int i = 0; i < SIZE; i++)
    {

        number[i] = number[SIZE - i];
        return;
    }
}

void printout(int number[], int SIZE)
{
    for (int i = 0; i < SIZE; i++)
    {
        std::cout << number[i] << std::setw(5);
    }
    std::cout << std::endl;
}

Я точно знаю, что fn c void reverseorder (int number [], int SIZE) неверен, потому что это единственное, что нужно сделать. Если вы знаете ответ, но не хотите давать его мне прямо сейчас, то любые советы будут очень полезны! Спасибо, ребята

РЕДАКТИРОВАТЬ: В настоящее время вывод: SalvGis-MBP: программирование на C ++ $ ./a.out 503709838 15 20 25 30 35 40 45 50 55

Но я хочу, чтобы это было 55 50 45 40 35 30 25 20 15 10

Не уверен, почему производится 503709838. Кто-то упоминал, что первая итерация была нарушена, что, вероятно, объясняет это.

Ответы [ 4 ]

2 голосов
/ 08 апреля 2020

Для обращения к массиву вам нужно либо использовать стандартную функцию std::swap, либо написать такую ​​функцию самостоятельно.

Эта функция

void reverseorder(int number[], int SIZE)
{
    for (int i = 0; i < SIZE; i++)
    {

        number[i] = number[SIZE - i];
        return;
    }
}

не меняет местами элементы массив. Так, например, в первой итерации из-за этого оператора

    number[i] = number[SIZE - i];

значение элемента number[0] будет просто потеряно. И более того, здесь используется несуществующий элемент массива [SIZE - i], когда i равен 0.

Вам необходимо поменять местами две половины массива.

Также вызов std :: setw в этом утверждении

std::cout << number[i] << std::setw(5);

не имеет смысла. Этот вызов должен быть помещен перед выводимым выражением number[i].

Обратите внимание, что обе функции должны иметь второй параметр типа size_t, а первый параметр функции, которая выводит массив, должен иметь квалификатор const потому что внутри функции используемый массив не изменяется.

Вот и вы.

#include <iostream>
#include <utility>

void reverseorder( int a[], size_t n )
{
    for ( size_t i = 0; i < n / 2; i++ )
    {
        std::swap( a[i], a[n-i-1] );
    }
}

std::ostream & printout( const int a[], size_t n, std::ostream &os = std::cout )
{
    for ( size_t i = 0; i < n; i++ )
    {
        os << a[i] << ' ';
    }

    return os;
}


int main() 
{
    int number[] = {10, 15, 20, 25, 30, 35, 40, 45, 50, 55};
    const size_t N = sizeof( number ) / sizeof( *number );

    printout( number, N ) << '\n';

    reverseorder( number, N );

    printout( number, N ) << '\n';

    return 0;
}

Вывод программы:

10 15 20 25 30 35 40 45 50 55 
55 50 45 40 35 30 25 20 15 10 

Если вы не можете использовать std :: swap затем в l oop напишите например

    for ( size_t i = 0; i < n / 2; i++ )
    {
        int tmp = a[i];
        a[i] = a[n-i-1];
        a[n-i-1] = tmp;
    }
2 голосов
/ 08 апреля 2020

Если вам разрешено использовать STL, вы можете просто сделать

void reverseorder(int number[], int SIZE)
{
    std::reverse(number, number + SIZE);
}
1 голос
/ 08 апреля 2020

В этой строке:

number[i] = number[SIZE - i];

Это не меняет направление, оно фактически заменяется пошаговым числом перед ним. К тому времени, когда индекс i достигнет середины массива, он снова начнет повторять последнюю половину массива.

0 голосов
/ 09 апреля 2020
void reverse(int *num,int size){
    for(int i = 0;i<(size)/2;i++){
        const int temp = num[i];
        num[i] = num[size-i-1];
        num[size-i-1] = temp;
    }
}

num - это указатель, который указывает на массив, size - это размер массива, temp - это переменная, которая содержит значение для замены первого элемента последним и второго элемента last-1. ... нам нужно повторить это (размер массива) / 2 раза

...