Zadanie z C# (lub C++): Stwórz program, który obliczy deltę oraz miejsca zerowe funkcji kwadratowej. Na początku wypisz do czego służy program i podaj wzór funkcji, następnie poproś użytkownika o wprowadzenie danych (dane liczbowe mają mieć typ double), poinformuj o następnych krokach i wzorach, które wykorzystujesz. Wartości miejsc zerowych zaokrąglij do dwóch miejsc po przecinku. Pamiętaj, aby zachować własności funkcji kwadratowej i rozpatrz różne przypadki delty.
Wyświetla pierwiastki zgodnie z poleceniem, ale to nie jest dobra droga. Może się zdarzyć, że pierwiastek jest mniejszy od 0.01 i wtedy mamy już poważny błąd zaokrąglenia. Lepiej jest trzymać np. dwie cyfry znaczące (a najlepiej 15 :))
pozdrawiam
3 votes Thanks 2
HeezQ
Super! :) Oczywiście zaokrąglenie było wykonane na potrzeby tego zadania, oczywiście lepiej zostawić więcej cyfr, aby wynik był bardziej precyzyjny. Dziękuję za odpowiedź!
platon1984
Naturalnie fragment z complexami można zamienić komunikatem o braku rozwiązań rzeczywistych, jeśli tylko rzeczywiste mają sens fizyczny.
Moja propozycja programu:
#include <iostream>
#include <iomanip>
#include <math.h>
#include <complex>
using namespace std;
int main()
{
double a=0.,b,c;
complex<double> delta;
complex<double> x1,x2;
cout<<"Program oblicza pierwiastki funkcji kwadratowej"<<endl;
cout<<"o wzorze ogólnym: f(x)=ax^2+bx+c"<<endl;
while(a==0.){
cout<<"Podaj a różne od zera:\t";
cin>>a;
}
cout<<"Podaj b:\t";
cin>>b;
cout<<"Podaj c:\t";
cin>>c;
cout<<"obliczam deltę ze wzoru: b^2-4ac\n";
delta=pow(b,2.)-4.*a*c;
cout<<"Delta jest równa:"<<real(delta)<<endl;
cout<<"Obliczam miejsca zerowe ze wzoru:"<<endl;
cout<<"x1=(-b-sqrt(delta))/(2a)"<<endl;
cout<<"oraz"<<endl;
cout<<"x2=(-b+sqrt(delta))/(2a)"<<endl;
x1=(-b+sqrt(delta))/(2.*a);
x2=(-b-sqrt(delta))/(2.*a);
cout.setf(std::ios_base::fixed, std::ios_base::floatfield);
cout.precision(2);
if(real(delta)>0.){
cout<<"x1="<<real(x1)<<endl;
cout<<"x2="<<real(x2)<<endl;
}
else
{
if(real(delta)<0.)
{
cout<<"Nie ma rozwiązań rzeczywistych, ale są zespolone:"<<endl;
cout<<"x1="<<real(x1)<<"+("<<imag(x1)<<")i"<<endl;
cout<<"x1="<<real(x2)<<"+("<<imag(x2)<<")i"<<endl;
}
else
{
cout<<"x1=x2="<<real(x1)<<endl;
}
}
return 0;
Wyświetla pierwiastki zgodnie z poleceniem, ale to nie jest dobra droga. Może się zdarzyć, że pierwiastek jest mniejszy od 0.01 i wtedy mamy już poważny błąd zaokrąglenia. Lepiej jest trzymać np. dwie cyfry znaczące (a najlepiej 15 :))
pozdrawiam