2015-02-01 2 views
0

Я разработал алгоритм, и я хотел что-то спросить. Есть ли способ установить диапазон значений внутри массива?Диапазон в массиве в C

Например

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

и с помощью цикла, чтобы увеличить начальное значение с каждым проходом.

for (int A = 1; A < N - 2; A++) { 
    for (int B = 1; B < N - 1; B++) { 
     int ProfitA = Sum(array[0...A-1]); 
     int ProfitB = Sum(array[A...A+B-1]); 
     int ProfitC = Sum(array[A+B...N-1]); 
    } 
} 

Итак, есть ли способ установить диапазон значений в каждом массиве, используя приведенный выше C-псевдокод?

+1

Нет, вам придется написать свою собственную функцию суммирования и предоставить ей массив и диапазон индексов. – lared

+0

Как сказал @lared, вам нужно будет заменить каждую сумму в вашем псевдокоде на цикл for –

+0

, вы имеете в виду waht точно? Есть ли другой путь? Пожалуйста, объясни. –

ответ

2

Нет, C не имеет встроенных функций. Кроме того, нет возможности получить верхнюю границу массива, как только вы передадите ее функции (так называемые «затухающие указатели»).

Есть два стандартных решений этой проблемы:

  • передать указатель на первый элемент массива и подсчет элементов или
  • передать указатель на весь массив, индекс, чтобы начальный элемент, а индекс последнего элемента

Первый подход будет выглядеть следующим образом:

int sum_array(int* array, size_t len) { 
    int res = 0; 
    for (size_t i = 0 ; i != len ; i++) { 
     res += array[i]; 
    } 
    return res; 
} 
... 
int ProfitA = sum_array(array, A); 
int ProfitB = sum_array(array+A, B); 
int ProfitC = sum_array(array+A+B, N-A-B); 

второй подход будет выглядеть следующим образом:

int sum_array(int* array, int first, int last) { 
    int res = 0; 
    for (int i = first ; i <= last ; i++) { 
     res += array[i]; 
    } 
    return res; 
} 
... 
int ProfitA = sum_array(array, 0, A-1); 
int ProfitB = sum_array(array, A, A+B-1); 
int ProfitC = sum_array(array, A+B, N-1); 
+0

, поэтому мне нужна функция sum_array. И больше вложенных для циклов. –

+0

@NikosKLon Я не знаю, что вы подразумеваете под «более вложенными циклами», но функция 'sum_array' делает трюк. Вы можете переписать алгоритм таким образом, чтобы избежать цикла при вычислении сумм, но это был бы другой алгоритм. – dasblinkenlight

+0

@dasbblinklight вы можете задать мне идею «другого алгоритма»? –

1

Существует не способ с использованием стиля синтаксиса вы использовали, чтобы описать то, что вы после этого.

два очевидных способа было бы обеспечить массив и диапазон индексов (как Lared упоминалось) или указать диапазон, используя два указателя

int ProfitB = Sum(array + A, array + A+B-1); /* sum array[A] ... array[A+B-1] */ 

Какой бы подход вы используете, ваш код вызова необходимо будет обеспечить это обеспечивает допустимый диапазон.

Смежные вопросы