основа для логики цикла, когда дело доходит до массивов? - PullRequest
0 голосов
/ 25 июня 2019

У меня проблемы с тем, чтобы обернуть голову вокруг простой логики, потому что массивы начинаются с 0. Я собираюсь массивнее упростить мою проблему:

У меня есть массив размера 5. Индексы идут следующим образом [0], [1], [2], [3], [4].Инкремент равен 2. Мне нужно проверять разницу между элементами при каждом увеличении.

//So the result I want:
var1 = a[2] - a[0]
var2 = a[4] - a[2].
//My for loop:
incr = 2;
size = 5;
for (x = 0; x + incr < size; x+= incr)
    var[] = a[x + incr] - a[x]

Эта операция для циклов не выполняется из-за того, что a[x + incr] выходит за пределы.Как мне правильно это структурировать?

Ответы [ 4 ]

2 голосов
/ 25 июня 2019

Это не будет за пределами.Если когда-либо x + incr действительно >= size, то условие for не выполнится и оператор не будет выполнен в пределах.

1 голос
/ 25 июня 2019

Обычно size должен быть рассчитан с использованием метода len или свойства length (или того, что поддерживает ваш язык программирования), однако в этом случае я вижу, что вы указали его вручную, задав size = 5, поэтому в случае, если фактическая длина массива a меньше, чем 5 и x + incr >= 5, это должно вызвать ошибку выхода за границу

0 голосов
/ 25 июня 2019

Возможно, вы используете компилятор с необычными расширениями, который поддерживает случайные вещи, но var[] = a[x + incr] - a[x] это недопустимый стандартный синтаксис.Поскольку вы не объяснили, что на самом деле не удалось, я предполагаю, что сбой на этой линии.Для начала определите var как размер и тип, который вы хотите получить.В этом случае я предполагаю, что вам нужен целочисленный массив размера 2, поскольку для массива размера 5 нужно вычислить 2 экземпляра.

int var[2];

Затем в массиве используйте индекс для помещения значений в varгде они принадлежат, не забывайте увеличивать свое место размещения.

int place_index = 0;
for (x = 0; x + incr < size; x+= incr){
    var[place_index] = a[x + incr] - a[x];
    place_index++;
}

Затем вы можете отобразить результаты

for (x = 0; x < 2; x++)
    std::cout << var[x] << ' ';

Учитывая a[5] = {0,1,2,3,4}, это печатает 2 2.Учитывая a[5] = {0,2,4,6,8}, это печатает 4 4.Учитывая a[5] = {0, 2, 8, 32, 128}, это печатает 8 120.

Существуют и другие способы решения этой проблемы с использованием итераторов, преобразований, стандартной библиотеки и т. Д.

0 голосов
/ 25 июня 2019

Как это правильно структурировать?

Нет необходимости писать цикл, если вы использовали std ::acent_difference :

#include <numeric>
#include <iostream>

int main()
{
   int a[5] = {1,7,9,2,5};
   int b[5];
   std::adjacent_difference(a, a + 5, b);
   for (auto i : b)
     std::cout << i << " ";
}

Вывод:

1 6 2 -7 3 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...