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