Sprawdzenie poprawności kodu w C

0

Hej :) Czy mógłby ktoś sprawdzić czy kod jest dobrze napisany ? Z góry dziękuję :)

0
1.  #include<stdio.h>
2.  #include<math.h>
3.   
4.  //typedef enum {false=0, true=1} bool;//
5.   
6.  double sumaszer(double x, double eps, int M, int *licz, bool *dokladnosc);
7.  double Newton(double r, int n);
8.   
9.   
10. int main(void)
11. {
12.     double a,b,dx,eps,wart_szer,wart_dokl;
13.     int M,licznik;
14.     bool dokl;
15.     printf("Podaj liczby a, b, dx, eps, M:\n");
16.     scanf("%lf %lf %lf %lf %d",&a,&b,&dx,&eps,&M);
17.  
18.     double x;
19.  
20.     for(x=a;x<=b;x+=dx)
21.     {
22.         wart_szer=sumaszer(x,eps,M,&licznik,&dokl);
23.         wart_dokl=pow(1+x,1.0/3.0);
24.  
25.  
26.         printf("%3lf %3lf %3lf %3d %3d\n\n\n",x,wart_szer,wart_dokl,licznik+1,dokl);
27.     }
28.  
29.     return 0;
30. }
31.  
32.  
33. double Newton(double r, int n)
34. {
35.     if(n>1)
36.         return (r-n+1)/n*Newton(r,n-1);
37.     else
38.         return r;
39.  
40. }
41.  
42. double sumaszer(double x, double eps, int M, int *licz, bool *dokladnosc)
43. {
44.     double suma=0;
45.     double wyrazy[M+1]; //jak sprawdzam w Visual Studio to podkreśla mi tutaj M -że jest bład, ale nie wiem dlaczego//
46.  
47.     int i=0;
48.     for(i=0;i<=M;i++)
49.     {
50.         if(i==0)
51.             wyrazy[i]=1;
52.         else
53.         {
54.             wyrazy[i]=Newton(1.0/3.0, i)*x;
55.         }
56.  
57.         if(wyrazy[i]<eps)
58.         {
59.             break;
60.         }else
61.                 {
62.                 suma+=wyrazy[i];
63.             *licz=i;
64.                 }
65.     }
66.     if(i==M)
67.         *dokladnosc=false;
68.     else
69.         *dokladnosc=true;
70.  
71.     return suma;
72. } 
1

Używasz C99, masz <stdbool.h>, nie musisz deklarować własnego enuma.

Linia 45: VC nie wspiera C99 ani C11, VLA to element C99. Użyj tablicy o stałej wielkości lub pary malloc/free. (wtedy nie masz też stdbool.h)

W ogóle tablica wyrazy jest zbędna - wystarczy Ci jedna zmienna.

Funkcję Newton możesz zamienić na iteracyjną.

Ale plus całkiem zwięzły kod, sensowną indentację i nazewnictwo (pomijając jedną nazwę z wielkiej, a inną bez potrzeby skróconą i w złym języku)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0