piątek, 21 października 2011

Schemat Hornera


Program na obliczenie wartości wielomianu schematem Hornera iteracyjne i rekurencyjnie

#include <iostream>

using namespace std;


float horner_r (int stopien, int tablica_wsploczynnikow[], int argument)
{
    if (stopien==0)
        return tablica_wsploczynnikow[0];
    else
        return horner_r(stopien-1,tablica_wsploczynnikow,argument)*argument+tablica_wsploczynnikow[stopien];
}

float horner_i (int stopien, int tablica_wsploczynnikow[], int argument)
{
    float wynik=tablica_wsploczynnikow[0];
    for (int i = 1; i<= stopien; i++)
    {
        wynik = wynik * argument + tablica_wsploczynnikow[i];
        cout << i<<": "<<wynik<<endl;
    }
    return wynik;
}
int main()
{
    int stopien,argument;
    cout << "Podaj stopien wielomianu: " << endl;
    cin>> stopien;
    int tablica_wsploczynnikow[stopien];
    cout << "Podaj argument dla ktorego chcesz obliczyc wielomian: " << endl;
    cin >> argument;
    cout << "Podaj wsploczynniki: "<< endl;
    for(int i = 0; i <= stopien; i++)
    {
        cin >> tablica_wsploczynnikow[i];
    }

 cout <<"rekurencyjnie: " << horner_r(stopien,tablica_wsploczynnikow,argument)<<endl;
cout << "itercyjnie: " << horner_i(stopien,tablica_wsploczynnikow,argument);
    return 0;
}

Program na zmianę liczby o podstawie 2-9 na liczbę dziesiętną

#include <iostream>
#include <string>

using namespace std;

int main()
{
  string s;
  unsigned podstawa,L,c;

  cout << "Podaj podstawe (2 do 10):";
  cin >> podstawa;
  cout << "\nPodaj liczbe: ";
  cin>>s;
  L = s[0] - int('0');  // Od pierwszego znaku w ASCII w s[] odejmujemy znak ASCII zera (48)
  for(int i = 1; i < s.length(); i++)
  {
    c = s[i] - int('0');  //wczytujemy do c znak ASCII na i-pozycji i zmieniamy go na odpowiadaj¹ca mu liczbê
    L = L * podstawa + c; // stosujemy schemat hornera
  }
  cout << "\nLiczba " << s << "(" << podstawa << ") = " << L << "(10)";

    return 0;
}

1 komentarz:

  1. No też się przygotowuję do matury rozszerzonej, zobaczymy jak to pójdzie ;D

    OdpowiedzUsuń