Массив как аргументы в функции - PullRequest
0 голосов
/ 16 декабря 2018

Я пишу программу на C для расчета скользящей средней (MA) цены акций.данные доступны в массиве datavalue [count], count = это количество значений данных.Теперь я пытаюсь написать функцию для MA .. но мне нужно передать три аргумента в функции следующим образом

  • int count = количество значений данных
  • int K =период скользящей средней
  • тип массива с плавающей точкой datavalue = массив, содержащий цены акций.

Я написал следующий код (как часть полного кода для расчета MA).он работает нормально.

float data[count], mag[count];
double avg, sum;

for (i=0; i<=count; i++)
   data[i] = numberArray[i];

for (i=0; i<k-1; i++) {
     mag[i-1] = 0;
     sum = sum + data[i];
}

for (i=k-1; i<=count; i++) {
    mag[i-1] = avg;
    sum = sum + data[i] - data[i-k];
    avg = sum / k;
}

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

float *mavg(int count, int k, float datavalue)
{
    float *mag = malloc(sizeof(float)*count);
    //float data[count];
    float avg=0, sum=0;
    int i;

    for (i=0; i<=count; i++) {
        for (i=0; i<k-1; i++) {
            mag[i-1] = 0;
            sum = sum + datavalue[i];
        }
    }

    for (i=k-1; i<=count; i++) {
        mag[i-1] = avg;
        sum = sum + datavalue[i] - datavalue[i-k];
        avg = sum/k;
    }
    return mag;
}

НО код выше не работает при вызове из основного файла.При компиляции он показывает ошибку

подписанное значение не является ни массивом, ни указателем, ни вектором

в следующих строках:

  • sum = sum + datavalue[i];
  • sum = sum + datavalue[i] - datavalue[i-k];

1 Ответ

0 голосов
/ 16 декабря 2018

Переменная datavalue является , а не массивом.Он определен здесь как один с плавающей точкой:

float *mavg(int count, int k, float datavalue)
                              ^^^^^
                              That is not an array

Поэтому вы получаете ошибку компилятора при выполнении datavalue[i]

Вы хотели сделать

float *mavg(int count, int k, float* datavalue)
                                  ^

Также эта частькажется странным:

for(i=0;i<=count;i++)     // Here you use variable i for the loop
    for(i=0;i<k-1;i++)    // and again here you use variable i for the loop
                          // Sure that is what you want?
    {
        mag[i-1]=0;       // When variable i is zero, you index with -1 which is wrong
                          // as you write outside the allocated memory

        sum=sum+datavalue[i];
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...