ожидается 'double *', но аргумент имеет тип 'double' и несовместимый тип для аргумента 2/3/4/5 функции - PullRequest
0 голосов
/ 09 ноября 2018

Я прошу вашей помощи, ребята, я не лучший программист, и я потратил на это столько времени, я так устал и подавлен: [

По сути, я хочу передать int и 4 одномерных массива в функцию, которая будет возвращать указатель на массив (вектор решения для моей цели), который, как я понял в CI, можно определить в функции через статический порядок .

В основном это говорит о том, что он не понимает, почему массив двойного типа передается в функцию, которая возвращает указатель на double, и по какой-то причине он ожидает, что указатель будет аргументом, как я понял. и я думаю, что он перетянулся на жирную линию, потому что есть проблема совместимости, по крайней мере, я думаю, что это причина этой ошибки. Пожалуйста, помогите мне, ребята:]

#include <stdio.h>
#define N 4

double* thomas_algorithm(int n, double c[], double b[], double a[], double 
d[]);

int main()
{

int i, n;
double* p;
double a[N-1]={0}, b[N]={0}, c[N-1]={0}, d[N]={0};

printf("please enter the order of the coefficient matrix:\n");

scanf("%d", &n);

printf("please insert the vector c:\n");

for(i=0; i<N-1; i++)
{
    scanf("%lf", &c[i]);
}

printf("please insert the vector b:\n");

for(i=0; i<N; i++)
{
    scanf("%lf", &b[i]);
}

printf("please insert the vector a:\n");

for(i=0; i<N-1; i++)
{
    scanf("%lf", &a[i]);
}

printf("please insert the vector d:\n");

for(i=0; i<N; i++)
{
    scanf("%lf", &d[i]);
}

**p=thomas_algorithm(n, c[N-1], b[N], a[N-1], d[N]);**

for(i=0; i<N; i++)
{
    printf("x(%d)=%f", i+1, p+i);
}

return 0;
}

double* thomas_algorithm(int n, double c[], double b[], double a[], double 
d[]) {

int i;
static double x[N]={0};

for(i=1; i<n-1; i++) /*factorization phase*/
{
    b[i]=b[i]-(a[i]/b[i-1])*c[i-1];
    d[i]=d[i]-(a[i]/b[i-1])*d[i-1];

}
/*backward substitution*/

x[N-1]=d[N-1]/b[N-1];

for(i=n-2; i>-1; i++)
{
    x[i]=(d[i]-c[i]*x[i+1])/b[i];
}
    return x;
}

1 Ответ

0 голосов
/ 09 ноября 2018

Ваш вызов функции неправильный.

если у вас есть массив int a[N]; и функция void func(int a[]), вам нужно вызывать функцию наподобие func(a);.

В своем вызове вы передаете N-й элемент массива a[N], следовательно, ошибка компиляции, поскольку он имеет тип double, а не double *. (Это также вне доступа)

Правильный вызов функции:

p=thomas_algorithm(n, c, b, a, d);
...