Я прошу вашей помощи, ребята, я не лучший кодер, и я потратил на это столько времени, я так устал и подавлен: [
В основном я хочу передать int
и 4 одномерных массива для функции, которая должна возвращать указатель на массив (вектор решения для моей цели), который я понял в C, я мог определить в функции через статический порядок.
В основном это говорит о том, что он не понимает, почему массив двойного типа передается функции, которая возвращает указатель на 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;
}
Ваш вызов функции неверен.
если у вас есть массив int a[N];
и функция void func(int a[])
вам нужно вызвать функцию как func(a);
,
В своем вызове вы передаете N-й элемент массива a[N]
следовательно, ошибка компиляции, так как она имеет тип double
и не double *
, (Это также вне доступа)
Правильный вызов функции будет:
p=thomas_algorithm(n, c, b, a, d);
Других решений пока нет …