//*************************************************************************// PROGRAM OBLICZA WARTOSC WIELOMIANU 4 STOPNIA DLA ZADANEJ
// WARTOSCI ARGUMENTU CZYLI DLA KONKRETNEGO X
// - w obliczeniach wykorzystuje schemat Hornera napisany ITERACYJNIE
// (jest tez rekurencyjny zapis)
// - z pliku pobiera wartosci dla wspolczynnikow przy x, jest ich 4 moga byc zera,
// oraz wyraz wolny jako piaty
// - te 5 danych wpisuje do tablicy jednowymiarowej
// - pobiera tez wartosc x, dla ktorej obliczamy wartosc wielomianu
//*************************************************************************
// UWAGA przypominam o sprawdzeniu pliku stopien_czwarty.txt i poprawnym go zapisaniu - kursor ustawic -zeby nie bylo pustego wiersza bo zle wyniki
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
int a[5]; // tablica do przechowywania wspolczynnikow wielomianu i wyrazu wolnego
// tablica jest piecioelementowa bo sa 4 wspolczynniki i 1 wyraz wolny
// pierwszy element to wspolczynnik przy najwyzszej potedze
// drugi element to wspolczynnik przy potedze o wykladniku 3 itd
// ostatni element to wyraz wolny
int x; //zmienna na wartosc argumentu, dla ktorego obliczam wartosc wielomianu
ifstream odczyt("stopien_czwarty.txt");
ofstream zapis("wynik_czwarty.txt");
while(!odczyt.eof())
{
for (int i=0; i<5; i++) // pobiera dane do tablicy a[5]
// te dane to wspolczynniki i wyraz wolny
{
odczyt>>a[i];
}
int wynik=a[0]; // deklaruje zmienna -wynik - jest to zmienna, w ktorej poczatkowo
// przechowuje wartosc wspolczynnika przy 4 potedze wielomianu
// dlatego przypisalam jej a[0]
// bo w tablicy a[5] na pierwszym miejscu jest ten wspolczynnik
// potem wartosc tej zmiennej bedzie inna jak wg. schematu Hornera bede dalej obliczac
// UWAGA jesli wspolczynniki sa duze to nalezy zadeklarowac zmienna - wynik- jako float
// PRZYKLAD: W(x)= 2x^4+ 7x^3 - 9x^2 + x +6 ^ to symbol potegi
// wspolczynniki: 2,7,-9,1 wyraz wolny 6
// zapisane wg schematu Hornera: W(x)= x (x (x (2x +7) -9) +1) +6
// czyli dla tego przykladu zmienna wynik=2 ,
// potem sie zmienia jej wartosc jak bede mnozyc przez x oraz dodawac
odczyt>>x; // pobiera wartosc x
for (int i=1; i<5; i++) // tutaj obliczenia czyli caly Horner w dwoch linijkach
{
wynik=wynik*x+a[i]; // rozpoczynam od srodkowego nawiasu
// czyli w naszym przykladzie od (2x+7)
}
zapis<<wynik<<endl; // zapisuje do pliku wartosc wielomianu
}
odczyt.close();
zapis.close();
return 0;
}