2015-05-11 7 views
2

Я хочу создать массив, в котором каждый элемент суммирует результат функции «CosineEffect». Например, если «heliostatNumber» равен 3, каждый элемент в массиве «Косинус» должен быть суммой трех результатов funcion «CosineEffect».Подведение итогов функции для каждого элемента массива

Но когда я печатаю результат, кажется, что они не складываются. Вместо этого каждый элемент является значением только одного результата, а не трех результатов.

float Cosine[10]; 

    for(int i=0;i<11;i++) 
    { 
     float sum=0; 
     for(int j=0; j<heliostatNumber;j++) 
     { 
      Cosine[i]=sum+CosineEffect(SunRay[i], ReflectedRay[j]); 
     } 
     cout<<"Cosine Effect = "<<Cosine[i]<<endl; 
    } 
+0

Пожалуйста, укажите язык в заголовке вопроса (и в тегах). –

+0

Я исправил их! – hoffnung

+0

Ваша петля выходит за пределы массива 'Cosine'. Он пишет «Косинус [10]», когда единственными действительными индексами являются «Косинус [0]» на «Косинус [9]». – PaulMcKenzie

ответ

1

Пробуди свой код и думая о значениях каждой переменной на каждом шагу.

В частности, посмотрите на sum.

float sum = 0; 
for(int j=0; j < heliostatNumber; j++) 
{ 
    sum = sum + CosineEffect(SunRay[i], ReflectedRay[j]); 
} 

Cosine[i] = sum; 
+0

В этом вопросе нет ничего, чтобы указать, что 'Consine [i]' инициализирован (хотя он может быть статическим, если он появляется вне функции). Если вы не инициализированы, ваша предложенная 'Косинус [i] = Косинус [i] + sum;' имеет * неопределенное поведение *, потому что она читает с косинуса [i] перед назначением ему. Добавление начального 'Cosine [i] = 0;' pre-loop исправило бы это. –

+0

@TonyD это хороший пункт. Обновлено - спасибо :) –

1

Трудно сказать точную проблему без остальной части кода, но, как я вижу, что проблема в этой строке

Cosine[i]=sum+CosineEffect(SunRay[i], ReflectedRay[j]) 

Это должно быть

Cosine[i]+=CosineEffect(SunRay[i], ReflectedRay[j]) 

Вы дон 't изменить sum переменная в вас код, это всегда 0.

Если вам нужно sum где-то в коде, вы должны делать это, как этот

sum += CosineEffect(SunRay[i], ReflectedRay[j]); 
Cosine[i] = sum; 

Также условие в for цикле должно быть 10 не 11, потому что у вас есть массив из 10 элементов.

+0

Нет, этого не должно быть. OP явно создает переменную для хранения 'sum' между итерациями - вы не знаете, что еще он/она хочет сделать с этой переменной. –

+0

@AlexMcMillan Ну, из этой части кода я могу заключить, что 'sum' не требуется. Однако я обновил свой ответ, если вы правы. Спасибо за ваш комментарий! – NikolayKondratyev

+0

О, я думал, когда создаю массив [10], есть 11 элементов .. от 0 до 10. Спасибо! Позвольте мне исправить это первым – hoffnung

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