problem z szukaniem pierwiatka

0

Hej, bylbym wdzieczny gdyby ktoś wskazał mi gdzie zrobiłem błąd. Program ma znajdowac pierwiastek metoda bisekcji.
Wyskakuje mi następujący błąd: Run-Time Check Failure #3 - The variable 'wynik' is being used without being initialized.

kod:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#define _USE_MATH_DEFINES
#include <math.h>

using namespace std;
void pisz(double pierwiastek)
{
cout << "\nSzukany pierwiastek wynosi: " << pierwiastek;
}

double f(double x)
{
return pow(M_E,(-1.5x))-0.3(x*x);
}

void licz(double a, double b, double e)
{
double wynik,c;
while(fabs(a-b)>e)
{

	if(f(a)==0)
		wynik = a;
	if(f(b)==0)
		wynik = b;
	c=(a+b)/2;

	if(f(c)==0)
			wynik = c;
			else 
			{
				if(f(a)*f(c)<0)
					b=c;
				else 
					a=c;
			}
}

pisz(wynik);
}

int main()
{
double a,b,e;
cout <<"Wprowadz a ";
cin >> a;
cout <<"Wprowadz b ";
cin >> b;
cout <<"Wprowadz dokladnosc ";
cin >> e;
licz(a,b,e);
_getch();
return 0;
}

0
       double ya=f(a),yb=f(b);
       if(ya==0) b=a;
       else if(yb==0) a=b;
       else if((ya>0)^(yb<0)) cout<<"Nie da się"<<endl;
       else while(fabs(a-b)>e)
         {
          wynik=(a+b)/2;
          double yw=f(wynik);
          if(yw==0) a=b=wynik;
          else if((yw>0)^(ya>0)) b=wynik;
          else a=wynik;
         }
      wynik=(a+b)/2;

Nie jestem pewien czy dokładność ma dotyczyć osi X, wg mnie powinna dotyczyć osi Y.

0

Nie sprawdzałem czy to dobrze liczy itd, program się kompiluje i uruchamia: http://ideone.com/OjZIIS

Ten "błąd" jest pewnie spowodowany tym, że nie inicjalizujesz niczym zmiennej wynik. Jeżeli pętla while nie wykona się ani razu to wtedy zmienna wynik w pisz(wynik) nie będzie miała żadnej rozsądnej wartości. Zapewne pozbędziesz się tego robiąc np. tak: double wynik = 0.0. (Chociaż może to nie być najlepsze rozwiązanie)

0

wielkie dzięki za pomoc, problem rozwiązany

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