Witam!
Próbuję rozwiązać zadanie 71.3, którego treść jest w podanym linku na stronie 133/134: LINK.
Mam znaleźć wszystkie miejsca zerowe z dokładnością do 5 miejsc po przecinku z tym, że nie bardzo wiem jaki warunek w ostatnim IFie zawrzeć aby w tablicy znalazły się wyłącznie poprawne według klucza (podane niżej) odpowiedzi. Dla kodu przedstawionego poniżej wypisanych jest 11 miejsc zerowych:
( 0.53657; 0.53658; 0.53659; 0.5366; 2.52071; 2.52072; 2.52073; 3.3177; 3.31771; 4.8497; 4.84971;),
które jak widać są bardzo podobne. Gdy zmienie warunek na " if(pom>=0 &&pom<0.00004) " wypisane są ( 0.53657; 0.53658; 2.52073; 3.3177; 4.84971;) natomiast dobrze wiem, że przecież nie będę tak sobie cudował o jedną dziesięciotysięczną aż osiągnę prawidłowy wynik tylko muszę to jakoś lepiej napisać.
Byłbym wdzięczny za podpowiedź jak i również sugestie jak mógłbym kod zmodyfikować aby było czytelniej, krócej i bardziej profesjonalnie. Bo te IFy dla każdej funkcji też mnie gryzą w oczy ale to zadanie maturalne i starałem się napisać to jak najszybciej
Prawidłowa odpowiedź to:
- Miejsce zerowe: 0.53656
- Miejsce zerowe: 2.52073
- Miejsce zerowe: 3.31769
- Miejsce zerowe: 4.84971
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
ofstream fout("wyniki.txt");
double f1(double x)
{
return(-1.00000+1.80861*x+0.00000*x*x+0.19139*x*x*x);
}
double f2(double x)
{
return(1.14833-4.63636*x+6.44498*x*x-1.95694*x*x*x);
}
double f3(double x)
{
return(-51.59809+74.48325*x-33.11483*x*x+4.63636*x*x*x);
}
double f4(double x)
{
return(224.47368-201.58852*x+58.90909*x*x-5.58852*x*x*x);
}
double f5(double x)
{
return(-307.12440+197.11005*x-40.76555*x*x+2.71770*x*x*x);
}
void zad3()
{
double x=0.00000, pom=0;
double tab[20]={0}; int k=0;
while(x<5)
{
if(x>=0 &&x<1)
pom=f1(x);
if(x>=1 &&x<2)
pom=f2(x);
if(x>=2 &&x<3)
pom=f3(x);
if(x>=3 &&x<4)
pom=f4(x);
if(x>=4 &&x<5)
pom=f5(x);
if(pom>=0 &&pom<0.00009)
{
tab[k]=x;
cout<<setprecision(9)<<tab[k]<<endl;
k++;
}
x=x+0.00001;
}
}
int main()
{
zad3();
return 0;
}
Gdyby ktoś miał chęć, byłbym bardzo wdzięczny o ocenę rozwiazania CKE do tego zadania znajdującego się na stronie 312/313 podanego pliku, ponieważ za bardzo go nie rozumiem. Czas na maturze najcenniejszy a mam wrażenie, że oni przekombinowali. Aczkolwiek jestem jeszcze zielony także prosiłbym o opinię bardziej doświadczonych koderów :)
Pozdro :)