#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define e 2.71828
float fct(float x, int n)
{
float f=0;
switch(n){
case 1: f=(4*x-1); break;
case 2: f=(sin(3*x)); break;
case 3: f=((1.0/7.0)+(1.0/x)); break;
case 4: f=(pow(e,x)-2*x+3); break;
case 5: f=(pow((x-2),3)+2); break;
}
return f;
}
;
void nullstelle(float a, float b, float g, int n)
{
float fm, fa, fb, m;
int anzit=0;
fa=fct(a,n);
fb=fct(b,n);
while (b-a>g && fm!=0)
{
m=((a+b)/2);
fm=fct(m,n);
if (fa*fm < 0)
{
b=m;
fb=fm;
}
else
{
a=m;
fa=fm;
}
anzit++;
}
}
int main()
{
float a, b, g, m;
int n, anzit;
printf("Fuer n=1: f=(4*x-1)\n");
printf("Fuer n=2: f=(sin(3*x))\n");
printf("Fuer n=3: f=(1/7+1/x)\n");
printf("Fuer n=4: f=(pow(e,x)-2*x+3)\n");
printf("Fuer n=5: f=(pow((x-2),3)+2)\n");
printf("\nFunktionszahl n eingeben:\n");
scanf("%i", &n);
printf("Intervallgrenzen: Untere Grenze a und Obere Grenze b eingeben:\n");
scanf("%f %f", &a, &b);
printf("Benoetigte Genauigkeit g eingeben: [-g;0] [0;g]\n");
scanf("%f", &g);
printf("Nullstelle: %f\n", nullstelle(a, b, g, n));
printf("Anzahl der Iterationsschritte: %i\n", anzit);
if (fct(nullstelle(a,b,g,n), n)!=0)
printf("Keine genaue Nullstelle gefunden\n");
else
printf("ok\n");
return 1;
return 0;
}
これでデバッガはinvalid use of void expression
と表示されます。私は立ち往生している。もしあなたが手伝ってくれれば本当にいいだろう。 P .:私はvoidを使用する必要があります。void関数のエラーを解決する方法は知らない
if (fct(nullstelle(a,b,g,n), n)!=0)
nullstelle
は何も返さない関数であるが、fct
フロートパラメータと整数paramagerを必要とする関数であるに
思う返す: 'nullstelle(A、B、G、N)'式中の値が何であるかをif(fct(nullstelle(a、b、g、n)、n)!= 0) '? Cはこれをどのように評価するのですか? –
あなたはスペースを埋めるために約50回「こんにちは」を書くのではなく、それを使って問題が何であるか教えてくれます。 – George
コンパイラではなく、不平を言う*デバッガ*ですか?いつ?どこ?何してるの?また、[良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)をご覧ください。 –