Wpis z mikrobloga

Cześć,
próbuję zrobić zadanie 70.1 nie używając pochodnych (w c++) -> https://cke.gov.pl/images/_EGZAMIN_MATURALNY_OD_2015/Materialy/Zbiory_zadan/Matura_Zbi%C3%B3r_zada%C5%84_Informatyka.pdf

https://pastebin.com/MEEhKUYL to działający kod, tylko jedno co mnie nie zadowala to wynik. Wynik jest niedokładny, bo powinno wyjść 117.705 a wychodzi ponad 121. Chciałem by ten wynik był dokładniejszy, więc próbowałem zmniejszyć różnicę w wartości x co wykonanie pętli ( z 0.5 na mniejszą) - niestety program nie chciał się wtedy wykonać (puste okno ze znakiem _). Dawno nie robiłem nic w c++ więc próbowałem też w js i php i też strona nie odpalała. Code::Blocks 17.12.

Sorry za brak opisanego programu, działa on tak, że liczy odległość między punktem dla danego x, a prostą x = 10 i liczy pole dla tej linii, a potem dodaje do pola poprzedniej. Najpierw dolną funkcję, potem górną.

Powiedzcie mi, czy jest dla mnie jakaś nadzieja, czy będę musiał to robić z pochodnych/całek?

#informatyka #matura #programowanie
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Właśnie próbowałem już robić to na double i z .0 po liczbach i nic. Ten nawias też nie pomaga :/
  • Odpowiedz
@Eone: I jeszcze ilość przedziałów całkowania masz chyba trochę małą. Jak widzę z programu dla x od 10 do 2 skaczesz po 0.5. Zmniejsz deltę do powiedzmy 0.01.
Daj znać czy pomogło.
  • Odpowiedz
@Rosly:
No właśnie w tym cały mój kłopot, że poniżej 0.5 zejść nie mogę, bo program nie chce działać. Jak daje nawet x = x -0.2 to nie działa. :(
  • Odpowiedz
@Eone: Problem nr 2 to dość popularna wpadka z używaniem porównań ostrych przy zmiennym przecinku. Ze względu na zaokrąglenia nie możesz dodawać double do double i liczyć że po wielu iteracjach wynik wyjdzie "na ostro" np 10 bo suma zaokrągleń się dodaje. Musisz użyć nierówności w warunkach pętli.
Tu masz to bardziej precyzyjnie opisane: http://www.dummies.com/programming/cpp/risk-of-logical-operations-on-floating-point-variables-in-c/

Poprawiony program.
https://pastebin.com/cshwAdbC

U mnie 117.711
  • Odpowiedz
@Rosly:
Hmmm, no dobra. Szczerze mówiąc nawet o tym myślałem by to zmienić, ale jakoś nie wierzyłem w to, że to jest kwestia tego że to nigdy nie będzie się równało 2 czy 10, zaraz sprawdzę czy działa.
  • Odpowiedz
@Eone:
Działa! Dzięki wielkie dobry człowieku. (ʘʘ) Zadanka maturalne dopiero zaczynam, więc postaram sie zapamiętać Twoje nauki. :)

A przy delcie 0.0001 wynik 117.705, czyli dokładnie taki sam jak w odpowiedziach.
  • Odpowiedz
@Eone: Spoko. daj znać jak już zdasz tą maturę i czy moja porada z warunkami ostrymi się przydała na egzaminie.
Jeśli chcesz wiedzieć więcej z tego zakresu to literaturze ta działka nazywa się "Metody numeryczne"
Jednym z paradygmatów jest to że zawsze występuje błąd związany z zaokrągleniami, i metody numeryczne mówią m.in. o tym jak ten błąd zminimalizować.

http://mrostkow.oeiizk.waw.pl/mojapraca/metnumer.htm
http://www.if.pw.edu.pl/~agatka/numeryczne/wyklad_01.pdf
  • Odpowiedz