This repository has been archived on 2025-01-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
MO_pracadomowa/horner/horner_class.cpp
hamx01 918246c55d Added template for Newton
And placed horner into horner/ folder
2024-11-06 13:45:02 +01:00

104 lines
2.0 KiB
C++

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
class Wielomian
{
public:
void readFromFile(string filename)
{
string str;
stopien = 0;
fstream file(filename);
if (!file)
{
cerr << "Nie udalo sie otworzyc pliku o nazwie: " << filename << "\n";
exit(EXIT_FAILURE);
}
while (getline(file, str))
{
a.insert(a.begin(), stof(str));
stopien++;
}
file.close();
}
void setX(float x)
{
this->x = x;
}
int getStopien() {
return this->stopien;
}
void oblicz()
{
b.resize(stopien);
for (int i = stopien - 1; i >= 0; i--)
{
if (i == stopien)
{
b[i] = a[i];
}
else if (i > 0)
{
b[i] = a[i] + b[i + 1] * x;
}
else if (i == 0)
{
b[i] = a[i] + b[i + 1] * x;
}
}
}
float oblicz_rekurencyjnie(int n) {
if (n == 0) {
return a[0];
}
return a[n] + x * oblicz_rekurencyjnie(n - 1);
}
void wyswietl_wynik()
{
for (int i = b.size() - 1; i >= 0; i--)
{
cout << "b" << i << ": " << b[i] << "\n";
}
cout << "Rozwiazaniem wielomianu jest: " << b[0] << endl;
}
void reverse_a() {
reverse(a.begin(), a.end());
}
private:
vector<float> a;
vector<float> b;
int stopien;
float x;
};
int main()
{
float x = 0;
Wielomian wielomian;
cout << "Program do obliczenia wielomianu schematem hornera\n";
cout << "Podaj x dla ktorego szukamy rozwiazania: ";
cin >> x;
wielomian.readFromFile("dane.txt");
wielomian.setX(x);
wielomian.oblicz();
wielomian.wyswietl_wynik();
wielomian.reverse_a();
cout << "\nWynik rekurencyjny: " << wielomian.oblicz_rekurencyjnie(wielomian.getStopien() - 1) << endl;
return 0;
}