//Zadanie I od Rokickiego //program oczywiście nie policzy nic dopóki nie stworzycie pliku interp.txt #include <stdio.h> #include <math.h> double intlagr(double x[10], double y[10], int n, double t); void main() { double t,w, x[10], y[10]; int n, i; FILE *plik; plik = fopen ("interp.txt","r"); fscanf(plik,"%d\n",&n); for(i=0;i<=n;i++) { fscanf(plik,"%lf %lf\n",&x[i],&y[i]); } printf("Podaj argument dla ktorego chcesz znalezc wartosc wielomianu interp. :"); scanf("%lf",&t); w=intlagr(x,y,n,t); printf("w(%lf) = %lf\n",t,w); fclose(plik); } double intlagr(double x[50], double y[50], int n, double t) { double l, yy; int i, k; yy=0.0; for(i=0;i<=n;i++) { l=1.0; for(k=0;k<=n;k++) { if(i!=k) l=l*((t-x[k])/(x[i]-x[k])); } yy=yy+l*y[i]; } return yy; } //Zadanie 2 od Rokickiego (nie mozna przeprowadzić wielomianu przez te punkty poniewaz każdy wielomian jest funkcjąa z definicji funkcji wynika ze dla jednego argumentu nie moze być więcej niż jedna wartość czyli nie może być (2,3) i (2,5) ) //Zadanie 3 od Rokickiego #include <stdio.h> #include <math.h> double alfa; double f(double x) { double p; p=pow((pow(2.0,alfa)+cos(alfa*x)),1.0/3.0); return p; } double simpson(double a, double b, double (*f)(double x), int n); void main() { double cn, a, b, alfak, alfa0, dalfa; int n; printf("Podaj a, b, alfa0, alfak, dalfa,n:"); scanf("%lf %lf %lf %lf %lf %d",&a,&b,&alfa0,&alfak,&dalfa,&n); alfa = alfa0; while(alfa<=alfak) { cn = simpson(a,b,f,n); printf("cn(%lf) = %lf\n",alfa,cn); alfa = alfa + dalfa; } } double simpson(double a, double b, double (*f)(double x), int n) { double value; double h, x, sum; int i; int nc; // oznaczenie dla liczby wezlow wewnetrznych nc = abs( n / 2 ) * 2; h = (b - a) / (float) nc; // krok calkowania sum = 0.0; for( i=1; i<nc-1; i+=2 ) { x = a + (float) i * h; sum += 4.0*f(x) + 2.0*f(x+h); } value = ( f(a) + sum + 4.0*f(b-h) + f(b) ) * h / 3.0; return value; } //Zadanie 4 od Rokickiego #include <stdio.h> #include <math.h> double alfa; double f(double x) { double p; p=exp( -sin(x) * sin(x) - (alfa *x) ); return p; } double simpson(double a, double b, double (*f)(double x), int n); void main() { double cn, a, b, alfak, alfa0, dalfa; int n; printf("Podaj a, b, alfa0, alfak, dalfa,n:"); scanf("%lf %lf %lf %lf %lf %d",&a,&b,&alfa0,&alfak,&dalfa,&n); alfa = alfa0; while(alfa<=alfak) { cn = simpson(a,b,f,n); printf("cn(%lf) = %lf\n",alfa,cn); alfa = alfa + dalfa; } } double simpson(double a, double b, double (*f)(double x), int n) { double value; double h, x, sum; int i; int nc; // oznaczenie dla liczby wezlow wewnetrznych nc = abs( n / 2 ) * 2; h = (b - a) / (float) nc; // krok calkowania sum = 0.0; for( i=1; i<nc-1; i+=2 ) { x = a + (float) i * h; sum += 4.0*f(x) + 2.0*f(x+h); } value = ( f(a) + sum + 4.0*f(b-h) + f(b) ) * h / 3.0; return value; } //Zadanie 5 od Rokickiego //program oczywiście nie policzy nic dopóki nie stworzycie pliku aa.txt zawierającego 50 węzłów :> #include <stdio.h> #include <math.h> double trapez(double x[50], double y[50], int n); void main() { double cn, x[50], y[50]; int n,i; FILE *plik; plik = fopen ("wezly","r"); fscanf(plik,"%d",&n); for(i=1;i<=n;i++) { fscanf(plik,"%lf %lf\n",&x[i],&y[i]); } cn = trapez(x,y,n); printf("cn=%lf\n",cn); fclose(plik); } double trapez(double x[50], double y[50], int n) { double sum0, sum; int i; sum0 = 0.0; for (i=1;i<n;i++) { sum = ( y[i] + y[i+1] )*( x[i+1] - x[i] ) / 2.0; sum = sum0 +sum; } return sum; }
cyberzaku