登录 | 首页 -> 华新鲜事 -> 求学狮城 | 切换到:传统版 / sForum | 树形列表
Help! C programming...
<<始页  [1]  末页>> 

Help! C programming...#include <stdio.h>
#include <math.h>
#define NT double

NT f(NT x, NT y)
{
return x+y;
}

NT rkstep (NT (*func)(NT, NT), NT x, NT y[], NT h, int n, NT *err[])
{
NT k[n], y12[n], y1[n], k12[n];
k[n]=(*func)(x,y[n]);
y12[n]=y[n]+k[n]*h/2;
k12[n]=(*func)(x,y12[n]);
y1[n]=y[n]+k12[n]*h;
*err[n]=fabs(k[n]-k12[n])*h/2;
return y1[n];
}

int main ()
{
int n;
NT x, y[n], h, *err[n], result[n];
x=1;
y[0]=10;

for (n=0;n<4;n++)

{result[n]=rkstep(&f,x,y[n],h,n,&err[n]);

printf("n=%d\n", n);
printf("result=%lf\n\n", result[n]);
}


return 0;
}
[水鸭子 (4-23 4:49, Long long ago)] [ 传统版 | sForum ][登录后回复]1楼

跪求解释问题一直在这里:
result[n]=rkstep(&f,x,y[n],h,n,&err[n]);

incompatible type for argument 3 of 'rkstep'.

这个type到底哪里出问题了?
另外,我要是不要pass function f到rkstep里头,问题还是一样;
我要是不用array,问题还是一样……

已经弄了一天了,一直解决不了问题
[水鸭子 (4-23 4:53, Long long ago)] [ 传统版 | sForum ][登录后回复]2楼

(引用 水鸭子:跪求解释问题一直在这里: result[n]=rkstep(&f,x,y[n],h,n,&err[n]); incompatible type for argument 3 of 'rkstep'. 这个type到底哪...)rkstep(&f,x,y,h,n,&err[n]);试试, 感觉这里面的错误不止这个,你声明数组的时候,怎么用变量来定义数组的大小
NT x, y[n], h, *err[n], result[n];??? main function
NT k[n], y12[n], y1[n], k12[n]; /?? rkstep function

这编译器是怎么通过的?
[thinc (4-23 8:26, Long long ago)] [ 传统版 | sForum ][登录后回复]3楼

给你改了一下,可以编译了。不过计算数值的步骤可能有逻辑错误。你的程序里,变量 "h" 没有初始值,导致后面的结果为 0,
不过现在可以编译和运行了,检查一下是不是那些变量都设置对了。

good luck

程序如下
------------------------
#include <stdio.h>
#include <math.h>
#define NT double

NT f(NT x, NT y)
{
return x+y;
}

NT rkstep (NT x, NT y, NT h, NT *err_i)
{
NT k, y12, y1, k12;

k = f(x,y);

y12 = y + k*h/2;

k12 = f(x, y12);

y1 = y + k12*h;

*err_i = fabs(k-k12)*h/2;

return y1;
}

int main ()
{
int i = 0; // for loop index
NT x = 1;
NT h = 1; // what is the value of "h" ?

// dynamic sized arrays, (actually these are pointers)
NT *y;
NT *err;
NT *result;

int bound = 4; // "bound" is the size of your array

x=1;

// allocate memory for pointers
y = (NT*) malloc(bound*sizeof(NT));
err = (NT*) malloc(bound*sizeof(NT));
result = (NT*) malloc(bound*sizeof(NT));

// ensure memory allocation is successful
if(y == NULL || err == NULL || result == NULL)
{
printf("malloc() error: y, error or result!");
return 0;
}

y[0]=10;

for (i=0; i<bound; i++)
{
result[i]=rkstep(x, y[i], h, &err[i]);

printf("i=%d\n", i);
printf("result=%lf\n\n", result[i]);
}

y[0]=10;

for (i=0; i<bound; i++)
{
result[i]=rkstep(x, y[i], h, &err[i]);

printf("i=%d\n", i);
printf("result=%lf\n\n", result[i]);
}

// free the allocated memory space
free(y);
free(err);
free(result);

return 0;
}
[远帆 (4-23 13:51, Long long ago)] [ 传统版 | sForum ][登录后回复]4楼

(引用 远帆:给你改了一下,可以编译了。不过计算数值的步骤可能有逻辑错误。你的程序里,变量 "h" 没有初始值,导致后面的结果为 0, 不过现在可以编...)copy paste 的时候 有问题,再改一下#include <stdio.h>
#include <math.h>
#define NT double

NT f(NT x, NT y)
{
return x+y;
}

NT rkstep (NT x, NT y, NT h, NT *err_i)
{
NT k, y12, y1, k12;

k = f(x,y);

y12 = y + k*h/2;

k12 = f(x, y12);

y1 = y + k12*h;

*err_i = fabs(k-k12)*h/2;

return y1;
}

int main ()
{
int i = 0; // for loop index
NT x = 1;
NT h = 1; // what is the value of "h" ?

// dynamic sized arrays, (actually these are pointers)
NT *y;
NT *err;
NT *result;

int bound = 4; // "bound" is the size of your array

x=1;


// allocate memory for pointers
y = (NT*) malloc(bound*sizeof(NT));
err = (NT*) malloc(bound*sizeof(NT));
result = (NT*) malloc(bound*sizeof(NT));

// ensure memory allocation is successful
if(y == NULL || err == NULL || result == NULL)
{
printf("malloc() error: y, error or result!");
return 0;
}

y[0]=10;


for (i=0; i<bound; i++)
{
result[i]=rkstep(x, y[i], h, &err[i]);

printf("i=%d\n", i);
printf("result=%lf\n\n", result[i]);
}

// free the allocated memory space
free(y);
free(err);
free(result);

return 0;
}


[远帆 (4-23 13:55, Long long ago)] [ 传统版 | sForum ][登录后回复]5楼

Runge-Kuta for solving ODE?[hash (4-23 16:48, Long long ago)] [ 传统版 | sForum ][登录后回复]6楼

太感谢了!hash眼睛真厉害……
不过我没有编完
谢谢远帆

不过我自己做出来了,两个小时以后……
不过我做的还是不完整,还要继续修改……
[水鸭子 (4-25 2:42, Long long ago)] [ 传统版 | sForum ][登录后回复]7楼

(引用 thinc:rkstep(&f,x,y,h,n,&err[n]);试试, 感觉这里面的错误不止这个,你声明数组的时候,怎么用变量来定义数组的大小 NT x, y[n], h, *err[n],...)不知道……反正编译器是通过了……不过后来还是改正了#define N 10之类的 ……
但是这个不是我要的……

很久很久没有编程了,都还给cs1101了
[水鸭子 (4-25 2:45, Long long ago)] [ 传统版 | sForum ][登录后回复]8楼

(引用 远帆:copy paste 的时候 有问题,再改一下#include #include #define NT double NT f(NT x, NT y) { return x+y; } NT rkstep (NT x, ...)奇怪……malloc and free需要include什么library么?[水鸭子 (4-25 2:53, Long long ago)] [ 传统版 | sForum ][登录后回复]9楼

(引用 水鸭子:奇怪……malloc and free需要include什么library么?)malloc 和 free 是C 自带的,不用另外连接 library。[远帆 (4-26 13:16, Long long ago)] [ 传统版 | sForum ][登录后回复]10楼

(引用 远帆:malloc 和 free 是C 自带的,不用另外连接 library。)#define MAX 100 对我来说比较容易理解一些[水鸭子 (4-26 17:17, Long long ago)] [ 传统版 | sForum ][登录后回复]11楼

(引用 thinc:rkstep(&f,x,y,h,n,&err[n]);试试, 感觉这里面的错误不止这个,你声明数组的时候,怎么用变量来定义数组的大小 NT x, y[n], h, *err[n],...)shit.. 才刚刚想起来array就是point..rkstep(&f, x, y, h, err)[水鸭子 (4-26 17:31, Long long ago)] [ 传统版 | sForum ][登录后回复]12楼


<<始页  [1]  末页>> 
登录 | 首页 -> 华新鲜事 -> 求学狮城 | [刷新本页] | 切换到:传统版 / sForum