C Helpdesk
Przykładowy programik, który oblicza wartość wielomianu f(x) w zależności od argumentu.
Wielomian oraz argument powinien być zapisany w pliku tekstowym "in.txt" w następującej postaci:
[PRZYKŁAD]
3x^3+2x^2-5x+7 3
- Zapis wielomianu jest bez spacji,
- Po spacji podajemy argument (x).
W tym przykładzie, poniższy programik powinien wypisać na ekranie:
f(3.00) = 91.00
horner.c
#include <stdio.h> #include <stdlib.h> /* Funkcja, ktora czyta wielomian z pliku *.txt. - a - tablica na wspolczynniki wielomianu, - n - stopien wielomianu, - x - argument funkcji, - name - nazwa pliku. -------------------------------------------------------------- Plik musi zawierac jedna linijke z wielomianem postaci: Ax^n+Bx^(n-1)+Cx^(n-2)+...+WYRAZ_WOLNY ARGUMENT -------------------------------------------------------------- - Wielomian nie moze zawierac spacji i powinien zawierac wszystkie elementy, - Po pojedynczej spacji znajduje sie argument wielomianu, */ void read_polynomial(float *a, int *n, float *x, const char *name) { FILE *fp_in; /* Uchwyt pliku */ char wielomian[201]; /* Przyjmujemy, ze wielomian nie zawiera wiecej niz 200 znakow */ char help[201]; /* Tablica pomocnicza */ /* Czytanie z pliku */ fp_in = fopen(name,"r"); fscanf(fp_in, "%s %f", wielomian, x); fclose(fp_in); /* Wydobywanie stopnia wielomianu */ int i=0; int j=0; while(wielomian[i]!='^') i++; i++; while(wielomian[i] != '+' && wielomian[i] != '-') { help[j] = wielomian[i]; i++; j++; } help[j]='\0'; *n = atoi(help); /* Wydobywanie wspolczynnikow wielomianu */ i=0; j=0; int k=0; while(wielomian[i] != ' ') { if(wielomian[i]=='x') { help[j]='\0'; j=0; a[k] = atof(help); k++; while(wielomian[i] != '+' && wielomian[i] != '-') i++; if (wielomian[i]=='+')i++; } help[j] = wielomian[i]; i++; j++; } a[k] = atof(help); } /* Funkcja liczaca wartosc funkcji f(x) na podstawie schematu Hornera. - a - tablica ze wspolczynnikami wielomianu f(x), - b - tablica ze wspolczynnikami wielomianu q(x), - x - wartosc argumentu, - s - wartosc funkcji f(x) <- to co liczy funkcja horner(), - n - stopien wielomianu. --------------------------------------------------------------------------- Po wykonanu sie funkcji, zmienna s przyjmie wartosc f(x) w zaleznosci od argumentu. */ void horner(float *a, float *b, float x, float *s, int n) { int i; b[0] = a[0]; for(i=1; i<=n; i++) b[i]=a[i]+b[i-1]*x; *s = b[n]; } int main() { float a[20]; /* Tablica ze wspolczynnikami wielomianu f(x) */ float b[20]; /* Tablica ze wspolczynnikami wielomianu q(x) */ int n; /* Stopien wielomianu */ float x; /* Argument wielomianu */ float s; /* Wartosc wielomianu */ int i; /* Zmienna iteracyjna */ read_polynomial(a, &n, &x, "in.txt"); horner(a, b, x, &s, n); printf("f(%.2f) = %.2f", x, s); getchar(); return 0; }
Offline