Wyjaśnienie paru rzeczy w programie

0

Witam. Niedawno napisalem program, chociaz nie do konca to ja napisalem bo pare linijek skopiowalem z wikipedii;) I wlasnie w tym jest problem ze paru rzeczy tu nie rozumiem:) Tutaj jest kod programu:
<code=c++>
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;

double f(double x)
{
return x*x-cos(x);
}

int main()
{

double EPS0= 0.0000000001;
double EPSX= 0.0000000001;
cout<<"Obliczanie pierwiastka rownania y=x*x-cos(x) \nPodaj wstepne punkty \nx1=";
double x0,x1,x2,f0,f1,f2;
cin>>x1;
cout<<"x2=";
cin>>x2;
int i=64;
f1=f(x1); f2=f(x2);
while(i>0&&fabs(x1-x2)>EPSX)
{
                         if(fabs(f1-f2)<EPS0)
                         {
                         cout<<"Zle punkty startowe";
                         i=0;
                         break;
                         }
                         x0=x1-f1*(x1-x2)/(f1-f2);
                         f0=f(x0);
                         if(fabs(f0)<EPS0) break;
                         x2=x1;f2=f1;x1=x0;f1=f0;
                         if(!(--i)) cout << "Przekroczony limit obiegow\n";
}
if(i) cout << "x0 = "<< x0 << endl;
system ("pause");
return 0;

}

Moglby mi ktos wytlumaczyc o co chodzi z linijkami
-setw(15)
- cout.precision(8);     
  cout.setf(ios::fixed);
- i biblioteka iomanip
0

iomanip udostępnia cuda do formatowania wypisywanie wyników

  • setw() ustawia na ilu znakach ma coś zostać wypisane (np. w ten sposób wypisując liczby masz ładne kolumny bo nawet jeśli liczba ma mniej cyfr to dopełnia ci to spacjami)
  • precision() ustawia ile liczb po przecinku ma być wypisanych
  • fixed ustawia notację zmiennoprzecinkową z kropką dziesiętną (w odróżnieniu od notacji scientific -> czyli notacji wykładniczej)
0

Ok dzieki za odpowiedzi;) CZyli w programie, ktory zajmuje sie obliczaniem pierwiastka rowanania ta biblioteka jak i komendy nie maja wplywu na wynik i program bez problemu powinien dzialac bez nich?

0

tak, one mają tylko wpływ na wygląd tego co wypisuje program, a nie na sposób liczenia

0

szybka odpowiedz, nie zdazylem nawet edytowac poprzedniego postu:) jeszcze jedno pytanko: po co jest dwa razy deklarowane EPS0 i EPSX skoro maja ta sama wartosc a pozniej nie jest ona zmieniana?

0

pytanie brzmi po co w ogóle jest EPS0, jeśli w ogóle nie jest używana więcej :D może ktoś planował to wykorzystać do czegoś kiedyś, albo zapomniał usunąć - trudno powiedzieć :) możesz wyrzucić :)

0

a tego juz nie rozumiem bo wklejam kod z EPS0 gdzie jest porownywany a w poscie juz tego nie widzi. Pierwszy post edytowalem bez tych komend do formatowanie i śmiga ladnie, zastanawia mnie tylko to EPS0...

Edit: To EPS0 mam uzyte 2 razy w petli while: if(fabs(f1-f2)<EPS0) i if(fabs(f0)<EPS0) break;

0

więc pewnie dlatego są dwa, że nie muszą być równe, tylko w tym akurat przykładzie są

0

no to wychodzi na to, ze wszystko ogarniam:) dzieki za pomoc ;)

0

Tutaj masz opisaną krok po kroku całą stosowaną przez Ciebie metodę: http://edu.i-lo.tarnow.pl/inf/alg/005_root/0011.php

Pozdrawiam

0

Witam, zeby nie zakladac nowego tematu podbijam ten. Musze napisac program obliczajacy pierwiastek rownania metodą iteracji prostej z tym ze ciezko jest znalezc cokolwiek na ten temat w internecie. Poki co udalo mi sie napisac taki program ale wcale sie nie dziwie ze dziala nieprawidlowo;)
<code=c++>
#include <iostream>
#include <math.h>
using namespace std;

double F(double x)
{
return 1/4xxxx+3/2xx;
}

int main()
{
double E=0.0000000001;
double x0,x1,F0,F1;
cout<<"Program do obliczania pierwiastka rownania y=xxx+3*x-1 \nPodaj punkt startowy \nx0=";
cin>>x0;
int i=64;
while (i>0)
{
F0=F(x0);
F0=x1;
if (fabs(x1-x0)<E)
{
cout<<x1;
goto koniec;
}
x0=x1;
i--;
}
if (i==0) cout<<"Przekroczony limit obiegow";
koniec:
system ("pause");
return 0;
}

dla wyjasnienie: F jest funkcja obliczajaca całke z tego rownania.
Macie pomysly co jest nie tak albo zaproponujecie nowy program? :)
0

Funkcja szukaj nie boli, sam miałem ten problem i opublikowałem rozwiązanie krok po kroku na tym forum ;]

0

no rzeczywiscie nie bolało i pomoglo ;) dzieki wielkie za pomoc.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.