[C++] Całka oznaczona funkcji wielomianowej

matemaniak508
Użytkownik
Użytkownik
Posty: 37
Rejestracja: 15 gru 2011, o 16:11
Płeć: Mężczyzna
Lokalizacja: M-ce
Podziękował: 6 razy

[C++] Całka oznaczona funkcji wielomianowej

Post autor: matemaniak508 »

Jestem początkowym programistą, dlatego nie wiem w czym tkwi błąd w poniższym programie.(Mianowicie dlaczego FUNKCJA: "funkcja" nie zwraca wartości liczbowej). Prosiłbym o skompilowanie programu (najlepiej w Code::Blocku) i pomoc w odnalezieniu błędu. W funkcji MAIN na samym końcu zamieściłem FUNKCJĘ: "funkcja" o argumencie 1, więc powinna ona zwracać sumę współczynników podanego przez nas wielomianu, a zwraca wynik \(\displaystyle{ 4.19980e+06}\), który nie wiem jak interpretować...



Kod: Zaznacz cały

#include<iostream>
#include<cstdio>
#include<cmath>
#include<math.h>
#include<windows.h>

using namespace std;

double funkcja(double x, int tab[],int u)	//funkcja dla której liczymy calkę
{

double d=0;
double j;
j=1;

do{
    d=d+(tab[u-1]*j);
    j=j*x;
    u=u-1;

}while(u>=0);

return d;
}

double pole_obszaru(int n, double a, double b,int tab[],int u)
{
  double P = 0;			//zmienna która sumuje pola prostokątów
  double d = (b-a)/n;		//dlugość przedziałów na jakie dzielimy <a;b>
  double x;			//punkty pośrednie przedzialów
  for (int k=0; k<n; k++)
  {
    x = a+(d*k)+(d/2);
    P = P+d*fabs(funkcja(x,tab, u));	//suma pól prostokątów
  }
  return P;			//suma pól wszystkich prostokątów
}

int main()
{
  int ilosc;
  double a, b;
  cout << "Program oblicza pole obszaru ograniczonego"<<endl;
  cout << "wykresem funkcji w przedziale <a;b>" << endl;
  cout << "Podaj jakiego stopnia jest ta funkcja wielomianowa:\n" << endl;
  int u;
  cin>>u;

  u=u+1;
  int tab;
  cout <<"\nPodaj wspolczynniki wielomianu (zaczynajac od pierwszego 'a') za kazdym razem \nzatwierdzajac klawiszem ENTER" << endl;

  int i=0;
  do{
      cin>>tab;
      i++;
      }while(i<u);

  cout << "\npodaj wartosc lewego kranca przedzialu:  a ";
  cin >> a;
  cout << "\npodaj wartosc prawego kranca przedzialu:  b ";
  cin >> b;
  cout << "\nNa ile przedzialow podzielic wyjsciowy przedzial?: ";
  cin >> ilosc;
  cout << "\nWartosc pola : " << pole_obszaru(ilosc,a,b,tab,u)<<endl;



HANDLE kon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute (kon,14);

cout<<"\n\nSprawdzenie wartosci wielomianu dla jedynki: "<<funkcja(1,tab,u)<<endl;





  return 0;
}
Ostatnio zmieniony 22 mar 2012, o 18:16 przez Afish, łącznie zmieniany 1 raz.
Powód: Tgai code.
abc666

[C++] Całka oznaczona funkcji wielomianowej

Post autor: abc666 »

4.19980e+06 to kwestia wyświetlania i oznacza dokładnie

\(\displaystyle{ 4,19980 \cdot 10^{6}}\)

Ale nie wiem jak ci się to skompilowało. W linijce 50 definiujesz tab jako int, chociaż to pewnie miała być tablica.
matemaniak508
Użytkownik
Użytkownik
Posty: 37
Rejestracja: 15 gru 2011, o 16:11
Płeć: Mężczyzna
Lokalizacja: M-ce
Podziękował: 6 razy

[C++] Całka oznaczona funkcji wielomianowej

Post autor: matemaniak508 »

Wynik taki jak podałeś nie jest krańcem zakresu zmiennej double, ale choćby nawet to skąd taki wynik?
(dodam, że funkcja zwraca taką wartość dla każdego argumentu x )
abc666

[C++] Całka oznaczona funkcji wielomianowej

Post autor: abc666 »

Jeśli poprawisz błąd o jakim mówię to można się zastanowić. Jeśli jakiś kompilator skompilował ci kod który podałeś to proszę podaj jego nazwę.
matemaniak508
Użytkownik
Użytkownik
Posty: 37
Rejestracja: 15 gru 2011, o 16:11
Płeć: Mężczyzna
Lokalizacja: M-ce
Podziękował: 6 razy

[C++] Całka oznaczona funkcji wielomianowej

Post autor: matemaniak508 »

Code::Block
unK
Użytkownik
Użytkownik
Posty: 26
Rejestracja: 20 sty 2009, o 17:55
Płeć: Mężczyzna
Podziękował: 6 razy
Pomógł: 3 razy

[C++] Całka oznaczona funkcji wielomianowej

Post autor: unK »

Pewnie masz jakąś starożytną wersję gcc. W każdym razie jest tak jak napisał abc666, tj. ten program nie ma prawa działać poprawnie m.in. ze względu na to, że deklarujesz tab jako int, a potem przekazujesz go do funkcji, która z kolei interpretuje go jako adres pierwszego elementu tablicy. W ogóle dziwne jest to, że ten program zwraca jakikolwiek wynik (powinien się wywalać z błędem naruszenia ochrony pamięci).
matemaniak508
Użytkownik
Użytkownik
Posty: 37
Rejestracja: 15 gru 2011, o 16:11
Płeć: Mężczyzna
Lokalizacja: M-ce
Podziękował: 6 razy

[C++] Całka oznaczona funkcji wielomianowej

Post autor: matemaniak508 »

Błąd był lecz, ani ze strony języka, ani ze strony kompilatora. Błąd tkwił w merytorycznej części programu. Mianowicie w funkcji "funkcja" stopień wielomianu nie pokrywał się z przyporządkowanym mu "x". W 17 linijce wystarczy zmienić wyrażenie w tablicy z u-1 na u natomiast trzeba przed pętlą (w 15 linijce) zmienić wartość u na u-1. Program po skompilowaniu działa bez zarzutów, jest bardzo przydatny.Dziękuję za zaangażowanie w temacie
ODPOWIEDZ