#include /* Zadatak 2. Napisati funkciju koja kojoj su argumenti polje (niz) a cijelih brojeva i cijeli (nenegativni) broj n, koji zadaju polinom s neparnim potencijama oblika p(x) = suma_{0}^{n} a_i x^{2i+1}, i jos dva cijela broja x1, x2. Funkcija mora vratiti cijeli broj x iz [x1, x2] u kojem se dostize najmanja vrijednost p(x). Ako takvih brojeva ima vise, dovoljno je vratiti jednog. Ako takvih brojeva nema (x1 > x2 na ulazu) treba vratiti x1 - 1. */ /* Realizacija: Racunanje vrijednosti polinoma u tocki x radimo modifikacijom Hornerovog algoritma za neparne potencije. */ int p(unsigned n, int a[], int x) { int px = 0, xkvad = x * x; unsigned i; /* OPREZ: i NE SMIJE do 0 u unsigned, zbog --i. */ for (i = n; i >= 1; --i) px = px * xkvad + a[i]; px = (px * xkvad + a[0]) * x; /* Kad bi bilo: int i (a ne: unsigned i), onda bismo mogli napisati i ovako: for (i = n; i >= 0; --i) px = px * xkvad + a[i]; px = px * x; */ return px; } int tocka_min_p(unsigned n, int a[], int x1, int x2) { int x, p_x, x_min, p_min; if (x1 > x2) return x1 - 1; p_min = p(n, a, x1); x_min = x1; for (x = x1 + 1; x <= x2; ++x) { p_x = p(n, a, x); if (p_x < p_min) { p_min = p_x; x_min = x; } } return x_min; } /* Glavni program za demo. */ int main(void) { unsigned n = 2; int a[] = {1, -2, 1}; int x1 = -3, x2 = 4, x; printf("\n Vrijednosti polinoma:\n"); for (x = x1; x <= x2; ++x) printf(" x = %2d, p(x) = %5d\n", x, p(n, a, x)); printf("\n Najmanja vrijednost polinoma je u tocki x = %2d\n", tocka_min_p(n, a, x1, x2) ); return 0; }