Cześć,
Nigdzie nie mogłem znaleźć konkretnej odpowiedzi więc pomyślałem, że może ktoś z was zobaczyłby gdzie znajduje się błąd w programie mającym obliczać pierwiastek 2-giego stopnia metodą numeryczną. Przy uruchomieniu pole zawsze wychodzi = nan. Program tworzyłem zgodnie z listą kroków i schematem blokowym jednak nigdzie nie mogę doszukać się błędu :/. Na poziomie code::block-a żaden błąd nie wyskakuje, po prostu wynik jest nieprawidłowy.
A to ten nieszczęsny program:
#include <iostream>
#include <cmath>
using namespace std;
void dane (double p, double E, int L)
{
cout << "Podaj liczbe pierwiastkowana.\n";
cin >> p;
cout << "Podaj liczbe iteracji.\n";
cin >> L;
cout << "Podaj dokladnosc wyniku.\n";
cin >> E;
}
void pierwiastek (double p, double E, int L)
{
int i =0;
double a = p;
while (abs(a - p/a) > E && i < L)
{
a = (a + p/a)/2;
i++;
};
cout << "Pierwiastek jest rowny: " << a;
}
int main()
{
int L;
double p, E;
dane(p,E,L);
pierwiastek (p,E,L);
return 0;
}
Taki sam problem mam z obliczeniem pola pod wykresem metodą numeryczną (prostokąty i trapezy):
#include <iostream>
#include <cmath>
using namespace std;
void dane (double p, double q, int n)
{
cout << "Podaj przedzial [p,q]\n";
cin >> p >> q;
cout << "Podaj lczbe prostokatow.\n";
cin >> n;
}
double F(double x)
{
return abs(-pow(x,3) +pow(x,2) +5*x);
}
void pole (double p, double q, int n)
{
double dl = (q-p)/n, s=0;
for(int i=0; i <n; i++)
s+= F(p+ i*dl + dl/2);
double pole = dl *s;
cout << "Pole: " << pole << endl;
}
int main()
{
double p, q;
int n;
dane(p,q,n);
pole(p,q,n);
return 0;
}
a tutaj funkcja z trapezów:
void pole (double p, double q, int n)
{
double dl = (q-p)/n, s=0;
for(int i=1; i <n; i++)
s+= F(p+ i*dl );
double pole = dl/2 *(F(p) + F(q) + 2*s);
cout << "Pole: " << pole << endl;
}
Każda pomoc się przyda, z góry dzięki ;).