fork download
  1. #include <stdio.h>
  2.  
  3. double voltage(double v) {
  4. return v;
  5. }
  6. double hdot(double h) {
  7. return h * 2;
  8. }
  9. double ndot(double n) {
  10. return n * 3;
  11. }
  12.  
  13. typedef double(*eqpointer)(double);
  14.  
  15. int main() {
  16. eqpointer ODE[] = { voltage, hdot, ndot };
  17. int eq_num = sizeof(ODE)/sizeof(*ODE);
  18.  
  19. // declared only for this examle
  20. double result;
  21. double k1 [eq_num], oneloop[eq_num], midvalues[eq_num];
  22. // or best malloc(eq_num * sizeof(double));
  23.  
  24. for (int j = 0; j < eq_num; j++) {
  25.  
  26. k1[j] = (*ODE[j])((j + 1) * 10); // random arguments ODE for example only
  27. oneloop[j] =20 * (*ODE[j])((j + 1));
  28. midvalues[j] = (k1[j] + oneloop[j]) / 2;
  29. result = (*ODE[j])(midvalues[j]);
  30.  
  31. printf("*** %d) k1[]: %f, oneloop[]: %f, midvalues[]: %f result: %f\n",
  32. j, k1[j], oneloop[j], midvalues[j], result);
  33. }
  34. return 0;
  35. }
Success #stdin #stdout 0s 9432KB
stdin
Standard input is empty
stdout
*** 0) k1[]: 10.000000, oneloop[]: 20.000000, midvalues[]: 15.000000 result: 15.000000
*** 1) k1[]: 40.000000, oneloop[]: 80.000000, midvalues[]: 60.000000 result: 120.000000
*** 2) k1[]: 90.000000, oneloop[]: 180.000000, midvalues[]: 135.000000 result: 405.000000