Program dotyczący pierwiastkowania (Newton Raphson).

0

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 ;).

1

o_O to jakiś żart? Wczytujesz w funkcji "dane" wartości do LOKALNYCH KOPII zmiennych. Po wyjściu z tej funkcji wartości NIE SĄ USTAWIONE. Dodaj &...

void dane (double& p, double& E, int& L)

dalej nie czytałem

0

Nie to nie żart, ale wielkie dzięki za pomoc ;). Niedawno zacząłem programować (2 liceum) i stąd brak wprawy/wiedzy.

1

To lekcja na przyszłość: naucz się jak używa się debugera.

0

Po zmienieniu każdy program działa jak powinien :) :). Temat można zamknąć. Jeszcze raz dzięki za pomoc w wyjściu z opresji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1