2017-01-10 5 views
-1
#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を必要とする関数であるに

+3

思う返す: 'nullstelle(A、B、G、N)'式中の値が何であるかをif(fct(nullstelle(a、b、g、n)、n)!= 0) '? Cはこれをどのように評価するのですか? –

+3

あなたはスペースを埋めるために約50回「こんにちは」を書くのではなく、それを使って問題が何であるか教えてくれます。 – George

+2

コンパイラではなく、不平を言う*デバッガ*ですか?いつ?どこ?何してるの?また、[良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)をご覧ください。 –

答えて

3

問題があります。

関数fctはfloatパラメータを受け取りません。あなたは機能を再検討する必要があります。

はまた、

printf("Nullstelle: %f\n", nullstelle(a, b, g, n)); 

フロートパラメータを期待するが、機能のみvoid

+0

関数 'nullstelle'自体には別の問題があります。変数 'fm'の値は、初期化される前に使用されます。私は 'nullstelle'が' fm'の最終的な値を返すと考えています。 –

+0

...または、むしろ、私は 'nullstelle'が' m'の最終値を返すはずであると推測しています。 –

関連する問題