/*********************************************************************/ /* V programskem jeziku C napisite program za izracun nicle polinoma */ /* p(x) = a0xn + a1xn-1 + ... + an-1x + an po tangentni metodi. */ /* Stopnjo polinoma, koeficiente polinoma, zacetni priblizek */ /* in natancnost iskanja vpisemo na zacetku programa. */ /*********************************************************************/ #include #include float funkcija(int polje[], int stopnja, float x) //funkcija racuna vrednost za dan x { int i = 0; float REZULTAT = 0; while(stopnja >= 0) { float a = pow(x, stopnja); //potenciramo float funk = a * polje[i]; //mnozimo potenco s koeficientom stopnja--; i++; REZULTAT = REZULTAT + funk; //dobljeno pristejemo k rezultatu } return(REZULTAT); //funkcija vrne koncen rezultat pri podanem x-u } main() { int koef; int stopnja; printf("\n Vnesi stopnjo polinoma: "); scanf("%d",&stopnja); //shranimo stopnjo int polje[stopnja + 1]; ///koeficientov je eden vec kot je stopnja, ker je zadnji lahko brez x (5x^2+3x+6) int i=0; while(i <= stopnja) { printf("\n Vnesi koeficient: "); scanf("%d",&koef); //shranimo koeficient polje[i] = koef; i++; } int ST = stopnja; int odvod[stopnja]; //ustvarimo novo polje, v katerega bomo shranili koeficiente odvoda int k = 0; while(k < ST) //koeficientov odvoda bo tocno toliko kot je stopnja polinoma (3x^3+3x^2+3x+2 --> 9x^2+6x+3) { odvod[k] = polje[k] * stopnja; k++; stopnja--; } float natancnost; printf("\n Vnesi natancnost: "); scanf("%f",&natancnost); //shranimo natancnost float priblizek; printf("\n Vnesi priblizek: "); scanf("%f",&priblizek); //shranimo priblizek (to je zacetni x ?!??) float X = priblizek; float a = 10 + natancnost; while(fabs(a) > natancnost) //ponavljamo tako dolgo dokler absolutna vrednost funkcije ni manjsa od natancnosti { a = funkcija(polje, ST, X); //racunamo vrednost polinoma pri X float b = funkcija(odvod, ST - 1, X); //racunamo vrednost odvoda pri X --> stopnja (ST-1) je pri //odvodu za ena manjsa kot pri polinomu X = X - (a / b); //dolocimo nov X } printf("\n Nicla polinoma je: %f\n",X); //izpisemo tisti x, pri katerem je absolutna vredno polinoma < natancnosti return 0; }