Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // przykladowe uruchomienie(należy dopisać -lm przy kompilacji)
- // gcc -Wall -o progst styczne.c -lm
- // ./progst
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<math.h>
- //wyliczenie wartości funkcji w punkcie x, r-maks potęga funkcji, arg-wartość x, tab-tablica współczynników funkcji
- float funcArg(int r, float arg, float tab[20])
- {
- float result = 0;
- int i;
- for(i=0; i<=r; i++)
- result += pow(arg,i)*tab[i];
- return result;
- }
- //wartość pierwszej pochodnej funkcji w x
- float deriv(int r, float arg, float tab[20])
- {
- float result = 0;
- int i;
- for(i=1; i<=r; i++)
- result += pow(arg,i-1)*tab[i]*i;
- return result;
- }
- //wartość drugiej pochodnej funkcji w x
- float deriv2(int r, float arg, float tab[20])
- {
- float result = 0;
- int i;
- for(i=2; i<=r; i++)
- result += pow(arg,i-2)*tab[i]*i*(i-1);
- return result;
- }
- int main()
- {
- float a, b, E, wsp[20], x, y, y1a, y1z,y2z,z;
- int i, n;
- printf("Jakiego rzędu ma być wielomian?:");
- scanf("%d",&n);
- for(i=0; i<=n; i++)
- {
- printf("Podaj współczynnik znajdujący się przy [%d] potędze: ",i);
- scanf("%f",&wsp[i]);
- }
- printf("Podaj granice przedziału:\n");
- printf("a = ");
- scanf("%f",&a);
- printf("b = ");
- scanf("%f",&b);
- printf("Dokładność ɛ: ");
- scanf("%f",&E);
- z = (a + b)/2;
- //obliczenie wartości pierwszej i drugiej pochodnej w punkcie z
- y1z = deriv(n,z,wsp);
- y2z = deriv2(n,z,wsp);
- //algorytm z instrukcji
- y = funcArg(n,a,wsp);
- y1a = deriv(n,a,wsp);
- x = a;
- if(y1z*y2z < 0)
- {
- while(fabs(y) > E) //fabs - wyznaczanie wartości bezwzględnej z liczby typu float
- {
- x = x - y/y1a;
- y = funcArg(n,x,wsp);
- y1a = deriv(n,x,wsp);
- }
- } else printf("Funkcja nie ma pierwiastków w zadanym przedziale");
- printf("Pierwiastek x: %0.3f\n", x);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement